diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 64e6d1020..1768a8584 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,11 @@ on: jobs: ci-job: runs-on: ubuntu-latest + + env: + DJANGO_SETTINGS_MODULE: settings.ci + DJANGO_MEDIA_ROOT: /tmp/wger-test + strategy: matrix: # Note: removed 3.14 because lingua-language-detector has no wheels yet @@ -41,22 +46,19 @@ jobs: - name: Install dependencies run: | uv sync --group dev + mkdir /tmp/wger-test # Only run the tests with coverage for one version of python - name: Test the application with coverage if: matrix.python-version == 3.13 run: | - source .venv/bin/activate - wger create-settings - coverage run --source='.' ./manage.py test - coverage lcov + uv run coverage run --source='.' ./manage.py test + uv run coverage lcov - name: Test the application if: matrix.python-version != 3.13 run: | - source .venv/bin/activate - wger create-settings - python manage.py test + uv run ./manage.py test - name: Coveralls if: matrix.python-version == 3.13 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index b0f0be232..f3c6b0361 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -44,7 +44,7 @@ jobs: # https://github.com/docker/metadata-action tags: | type=raw,value=latest - type=raw,value=2.4-dev + type=raw,value=2.5-dev images: | ${{ env.REGISTRY_IMAGE }} @@ -133,7 +133,7 @@ jobs: with: tags: | type=raw,value=latest - type=raw,value=2.4-dev + type=raw,value=2.5-dev images: | ${{ env.REGISTRY_IMAGE }} diff --git a/.gitignore b/.gitignore index 20828510b..3ec7fe7ad 100644 --- a/.gitignore +++ b/.gitignore @@ -46,7 +46,7 @@ coverage.xml # Django stuff: *.log -settings*.py +settings/*_extra.py *.sqlite /CACHE diff --git a/AUTHORS.md b/AUTHORS.md index b0a2a8ef5..6815fe6d2 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -2,7 +2,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 -*Generated on 2025-11-10* +*Generated on 2026-01-18* --- @@ -10,20 +10,38 @@ Thank you all for contributing to the project, you are true heroes! 🫶 - Github-actions - [https://github.com/invalid-email-address](https://github.com/invalid-email-address) - Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) +- Justin - [https://github.com/justin-pinheiro](https://github.com/justin-pinheiro) +- Justin Pinheiro - [https://github.com/justin-pinheiro](https://github.com/justin-pinheiro) +- HairyCrabW - [https://github.com/HairyCrabW](https://github.com/HairyCrabW) +- Jeremy - [https://github.com/zru-1](https://github.com/zru-1) +- Yousef - [https://github.com/yza-cmu](https://github.com/yza-cmu) +- Chidinma Obiekwe - [https://github.com/DidiNDexter](https://github.com/DidiNDexter) +- Max Pylypenko - [https://github.com/3mpee3mpee](https://github.com/3mpee3mpee) +- AKSHIT - [https://github.com/Akshit-MMQH](https://github.com/Akshit-MMQH) +- Saad Muhammad - [https://github.com/saadpy0](https://github.com/saadpy0) +- JANVI - [https://github.com/JANVI-CHATURVEDI](https://github.com/JANVI-CHATURVEDI) +- Joseph - [https://github.com/seppzer0](https://github.com/seppzer0) +- Christián Feliks - [https://github.com/ChristianFeliks](https://github.com/ChristianFeliks) +- Shantanu - [https://github.com/shantanugupta2004](https://github.com/shantanugupta2004) +- Amandeep Mandal - [https://github.com/AmandeepMandal1077](https://github.com/AmandeepMandal1077) +- Ziqi Lin +- Dieter Plaetinck - [https://github.com/Dieterbe](https://github.com/Dieterbe) +- hangy - [https://github.com/hangy](https://github.com/hangy) +- Bonicki Wojciech +- Horacio Duran - [https://github.com/perrito666](https://github.com/perrito666) - Peter Dave Hello - [https://github.com/PeterDaveHello](https://github.com/PeterDaveHello) - Cam Cecil - [https://github.com/scrapcode](https://github.com/scrapcode) - Ali Rahbar - [https://github.com/crypto-a](https://github.com/crypto-a) - Joshua Shelley - [https://github.com/navyjosh](https://github.com/navyjosh) - Joshua - [https://github.com/navyjosh](https://github.com/navyjosh) - Ali Rahbar - [https://github.com/crypto-a](https://github.com/crypto-a) +- eyjhb - [https://github.com/eyJhb](https://github.com/eyJhb) - Matthew Harrison - [https://github.com/Maralai](https://github.com/Maralai) - Josh - [https://github.com/FlyingNimbusCloud](https://github.com/FlyingNimbusCloud) -- eyjhb - [https://github.com/eyJhb](https://github.com/eyJhb) - kmoy1 - [https://github.com/kmoy1](https://github.com/kmoy1) - Kevin Moy - [https://github.com/kmoy1](https://github.com/kmoy1) -- Victor B - [https://github.com/victorbmlabs](https://github.com/victorbmlabs) -- Dieter Plaetinck - [https://github.com/Dieterbe](https://github.com/Dieterbe) -- Taylor Fuller - [https://github.com/taylor-fuller](https://github.com/taylor-fuller) +- Victor B +- Taylor Fuller - [https://github.com/taylor-hileman](https://github.com/taylor-hileman) - JLaField - [https://github.com/JLaField](https://github.com/JLaField) - JLaField - [https://github.com/JLaField](https://github.com/JLaField) - bbk - [https://github.com/bbkz](https://github.com/bbkz) @@ -108,7 +126,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 - Withnale - Veltarn - [https://github.com/Veltarn](https://github.com/Veltarn) - Anjalie Kini -- gmmoraes - [https://github.com/gmmoraes](https://github.com/gmmoraes) +- gmmoraes - [https://github.com/Zutzsa](https://github.com/Zutzsa) - Peter van der Does - [https://github.com/petervanderdoes](https://github.com/petervanderdoes) - Daniel Topal - [https://github.com/dtopal](https://github.com/dtopal) - Mbarak Mbigo - [https://github.com/Mbarak-Mbigo](https://github.com/Mbarak-Mbigo) @@ -144,6 +162,8 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Arabic (Saudi Arabia) +- E. Ta. +- MR - [https://github.com/MyaserAL-Healy](https://github.com/MyaserAL-Healy) - SlyBat - [https://github.com/AW-G](https://github.com/AW-G) - Hissabat Manager - [https://github.com/Chinguetti-Quizz](https://github.com/Chinguetti-Quizz) - My Google - [https://github.com/ahmedtahraoui90](https://github.com/ahmedtahraoui90) @@ -159,6 +179,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Chinese (Simplified Han script) +- KW Lam - [https://github.com/loksonlkw](https://github.com/loksonlkw) - Herb Huang ### Chinese (Simplified) @@ -191,11 +212,13 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Danish +- Fedder Skovgaard - [https://github.com/fedders](https://github.com/fedders) - Tomasz Cielecki - [https://github.com/Cheesebaron](https://github.com/Cheesebaron) - Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) ### Dutch +- Floris C - Christijan Mulder - Christijan - [https://github.com/ChrispyM](https://github.com/ChrispyM) - SilverServerT - [https://github.com/SilverServerT](https://github.com/SilverServerT) @@ -210,6 +233,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Finnish +- Petri Hämäläinen - [https://github.com/pHamala](https://github.com/pHamala) - Ricky Tigg - [https://github.com/Ricky-Tigg](https://github.com/Ricky-Tigg) - Nikolay Korotkiy - [https://github.com/sikmir](https://github.com/sikmir) - Juuso Haapanen - [https://github.com/juusohaapanen](https://github.com/juusohaapanen) @@ -217,6 +241,9 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### French +- Justin Pinheiro - [https://github.com/justin-pinheiro](https://github.com/justin-pinheiro) +- Paul Bonneau - [https://github.com/paulbonneau](https://github.com/paulbonneau) +- Kilian - MrSniikyz - [https://github.com/BabyGeek](https://github.com/BabyGeek) - florent4014 - [https://github.com/florent4014](https://github.com/florent4014) - Lucas Batier - [https://github.com/lucas-batier](https://github.com/lucas-batier) @@ -229,10 +256,13 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### German +- Elias Lang - [https://github.com/elias170105](https://github.com/elias170105) +- Traladarer +- Richard Mrosk - [https://github.com/EtheriousNight](https://github.com/EtheriousNight) +- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) - kvnrmnn - [https://github.com/rmnn92](https://github.com/rmnn92) - Tobias Lechner - [https://github.com/Lxchnxr](https://github.com/Lxchnxr) - becothas - [https://github.com/becothas](https://github.com/becothas) -- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) - m4skedbyte - StefMe - [https://github.com/StefMe](https://github.com/StefMe) - Axel Steinbrecher @@ -244,7 +274,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Greek -- Antonis-geo - [https://github.com/Antonis-geo](https://github.com/Antonis-geo) +- Antonis-geo - George Koikas - Eugenia Russell - [https://github.com/eugenia-russell](https://github.com/eugenia-russell) - Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu) @@ -252,12 +282,15 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Hebrew +- Omer I.S - [https://github.com/omeritzics](https://github.com/omeritzics) +- DR - shlomi assaf - [https://github.com/shlomiassaf](https://github.com/shlomiassaf) - Tsz Hong CHAN - [https://github.com/tomyan112](https://github.com/tomyan112) - n,rdo ### Hindi +- Madhav Agarwal - [https://github.com/gmrmad1](https://github.com/gmrmad1) - Ritik Sharma - [https://github.com/RitikSharma02](https://github.com/RitikSharma02) - Ritish Bhardwaj - [https://github.com/levidroid](https://github.com/levidroid) @@ -269,12 +302,13 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Italian +- Luca Galli - [https://github.com/Lvcaa](https://github.com/Lvcaa) +- clafalco - [https://github.com/clafalco](https://github.com/clafalco) - Federico Pierantoni - [https://github.com/F3FFO](https://github.com/F3FFO) - oarion - [https://github.com/oarion](https://github.com/oarion) - Alessandro Faucci - [https://github.com/Dhy19971](https://github.com/Dhy19971) - Marco Accorinti - [https://github.com/accodev](https://github.com/accodev) - Armando La Placa - [https://github.com/a-lp](https://github.com/a-lp) -- clafalco - [https://github.com/clafalco](https://github.com/clafalco) - DT - MARCO ACORTE - [https://github.com/marco-acorte](https://github.com/marco-acorte) - Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) @@ -283,11 +317,13 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Japanese +- Ryohei Morimoto - [https://github.com/Ryohei-Caulked](https://github.com/Ryohei-Caulked) - sasukeiscool - [https://github.com/sasukeiscool](https://github.com/sasukeiscool) - yuki chi - [https://github.com/kumo2kumo](https://github.com/kumo2kumo) ### Korean +- kobo - 고수처럼 - [https://github.com/rrrmaster](https://github.com/rrrmaster) - Gyu-sun Youm - [https://github.com/Perlmint](https://github.com/Perlmint) - 성동하 - [https://github.com/tomjovi](https://github.com/tomjovi) @@ -296,12 +332,14 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Norwegian Bokmål -- GS Bacon +- GS Bacon - [https://github.com/Z0ink5](https://github.com/Z0ink5) - Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu) - Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) ### Persian +- Mahmuoud Salehi +- William Sky - [https://github.com/William-cloud-tech](https://github.com/William-cloud-tech) - m93n pk - [https://github.com/m93n](https://github.com/m93n) - anyBlackSoul - keyvanmj - [https://github.com/keyvanmj](https://github.com/keyvanmj) @@ -312,7 +350,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 - Karol Solecki - [https://github.com/karolsol](https://github.com/karolsol) - Dawid Panyło - Marcin Schoenknecht -- gnu-ewm +- gnu-ewm - [https://github.com/e-michalak](https://github.com/e-michalak) - A M - [https://github.com/AugiAugi44](https://github.com/AugiAugi44) - Jacob - [https://github.com/devzom](https://github.com/devzom) - Henio Szewczyk - [https://github.com/hszewczyk](https://github.com/hszewczyk) @@ -320,6 +358,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Portuguese +- Ninguém Mesmo - Luiz Felipe Guidorizzi de Oliveira - [https://github.com/EvilMonark](https://github.com/EvilMonark) - Wilton Rodrigues - Guilherme Salomão - [https://github.com/salomaoparkour](https://github.com/salomaoparkour) @@ -337,6 +376,7 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Romanian +- Vlad Bejenaru - [https://github.com/vladbejenaru](https://github.com/vladbejenaru) - B Sebastian - Daniel Vigaru - [https://github.com/danielvigaru](https://github.com/danielvigaru) - dimii27 - [https://github.com/dimii27](https://github.com/dimii27) @@ -344,6 +384,10 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Russian +- Gevorg Danielyan - [https://github.com/Cyworc](https://github.com/Cyworc) +- Иван Редун - [https://github.com/ireduntr](https://github.com/ireduntr) +- Iskander - [https://github.com/iskanderCabbie](https://github.com/iskanderCabbie) +- Maksim_220 Кабанов - Алексей Курышко - [https://github.com/alexkuryshko](https://github.com/alexkuryshko) - Kira - [https://github.com/Balalaika87](https://github.com/Balalaika87) - Nikolay Korotkiy - [https://github.com/sikmir](https://github.com/sikmir) @@ -356,6 +400,10 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Spanish +- v7mbz +- Jose David Villegas (JoseDv1) - [https://github.com/JoseDv1](https://github.com/JoseDv1) +- Oscar González - [https://github.com/ogrydc](https://github.com/ogrydc) +- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) - gallegonovato - [https://github.com/gallegonovato](https://github.com/gallegonovato) - hhugoac - [https://github.com/hhugoac](https://github.com/hhugoac) - Sergio Varela - [https://github.com/IngrownMink4](https://github.com/IngrownMink4) @@ -365,13 +413,13 @@ Thank you all for contributing to the project, you are true heroes! 🫶 - Sergio - [https://github.com/MrPointcut95](https://github.com/MrPointcut95) - abraham - Santiago Persico - [https://github.com/spersico](https://github.com/spersico) -- Roland Geider - [https://github.com/rolandgeider](https://github.com/rolandgeider) - Alex Hidalgo - [https://github.com/alexjhidalgo](https://github.com/alexjhidalgo) - J. Lavoie - Allan Nordhøy - [https://github.com/comradekingu](https://github.com/comradekingu) ### Swedish +- wonnock - [https://github.com/emgust](https://github.com/emgust) - PNS11 - [https://github.com/cess11](https://github.com/cess11) - Kevin Gregard - [https://github.com/Kladdiskakan](https://github.com/Kladdiskakan) - tygyh - [https://github.com/tygyh](https://github.com/tygyh) @@ -387,6 +435,9 @@ Thank you all for contributing to the project, you are true heroes! 🫶 ### Ukrainian +- Максим Горпиніч - [https://github.com/maksim2005UKR](https://github.com/maksim2005UKR) +- Максим Горпиніч - [https://github.com/Maksim2005UA](https://github.com/Maksim2005UA) +- Максим Горпиніч - Максим Горпиніч - kvinto - [https://github.com/badsystem](https://github.com/badsystem) - Dan - [https://github.com/Kefir2105](https://github.com/Kefir2105) diff --git a/extras/authors/generate_authors_api.py b/extras/authors/generate_authors_api.py index 8fa8c7221..71490fea6 100644 --- a/extras/authors/generate_authors_api.py +++ b/extras/authors/generate_authors_api.py @@ -93,8 +93,6 @@ def fetch_commits_from_github(repo_name, github_token): print(f'Error fetching commits: {e}') break - break - return commits diff --git a/extras/docker/demo/Dockerfile b/extras/docker/demo/Dockerfile index 5ee073fbb..5410006c5 100644 --- a/extras/docker/demo/Dockerfile +++ b/extras/docker/demo/Dockerfile @@ -41,15 +41,18 @@ RUN wget -O- https://deb.nodesource.com/setup_22.x | bash - \ WORKDIR /home/wger/src COPY README.md pyproject.toml package.json package-lock.json package-lock.json /home/wger/src/ COPY wger/version.py wger/__init__.py /home/wger/src/wger/ -COPY wger/core/static /root/src/wger/core/static +COPY wger/core/static /home/wger/src/wger/core/static RUN npm ci --production \ && npm run build:css:sass \ && PACKAGE_NAME="@wger-project/react-components" \ && PACKAGE_VERSION=$(node -p "require('./package.json').devDependencies['$PACKAGE_NAME']") \ && TARBALL=$(npm pack ${PACKAGE_NAME}@${PACKAGE_VERSION}) \ && mkdir -p node_modules/${PACKAGE_NAME} \ - && tar -xzf ${TARBALL} -C node_modules/${PACKAGE_NAME} --strip-components=1 - + && tar -xzf ${TARBALL} -C node_modules/${PACKAGE_NAME} --strip-components=1 \ + && pip3 wheel \ + --no-cache-dir \ + --wheel-dir /wheels \ + --group docker . ######## # Final @@ -101,19 +104,24 @@ USER wger WORKDIR /home/wger/src RUN python3 -m venv /home/wger/venv -# Change permissions of some files and folders so the apache process -# can access them. +# Configure the application +ENV PYTHONPATH=/home/wger/src +ENV DJANGO_SETTINGS_MODULE=settings.main +ENV MEDIA_ROOT=/home/wger/media +ENV STATIC_ROOT=/home/wger/static +ENV DJANGO_DB_DATABASE=/home/wger/db/database.sqlite +ENV DJANGO_CACHE_BACKEND=django.core.cache.backends.locmem.LocMemCache + +# Change permissions of some files and folders so the apache process can access them. RUN mkdir -p ~/static/CACHE ~/media \ && ln -s /home/wger/static/CACHE /home/wger/src/CACHE \ && chmod g+w /home/wger/static/CACHE RUN --mount=type=bind,from=builder,source=/wheels,target=/wheels . /home/wger/venv/bin/activate \ - && pip install --upgrade pip \ && pip install --no-cache /wheels/* \ && pip install -e . \ - && wger create-settings --database-path /home/wger/db/database.sqlite \ - && sed -i "/^MEDIA_ROOT/c\MEDIA_ROOT='\/home\/wger\/media'" settings.py \ - && echo STATIC_ROOT=\'/home/wger/static\' >> settings.py \ + && mkdir -p /home/wger/db \ + && . /home/wger/venv/bin/activate \ && wger bootstrap --no-process-static \ && python3 manage.py sync-exercises \ && wger load-online-fixtures \ diff --git a/extras/docker/production/Dockerfile b/extras/docker/production/Dockerfile index bca131a52..52a2b76b3 100644 --- a/extras/docker/production/Dockerfile +++ b/extras/docker/production/Dockerfile @@ -79,6 +79,8 @@ ARG BUILD_DATE ENV PATH="/home/wger/.local/bin:$PATH" ENV APP_BUILD_COMMIT=$BUILD_COMMIT ENV APP_BUILD_DATE=$BUILD_DATE +ENV PYTHONPATH=/home/wger/src +ENV DJANGO_SETTINGS_MODULE=settings.main WORKDIR /home/wger/src EXPOSE 8000 @@ -88,8 +90,6 @@ COPY --chown=wger:wger . /home/wger/src COPY --chown=wger:wger --from=builder /root/src/node_modules /home/wger/src/node_modules COPY --chown=wger:wger --from=builder /root/src/wger/core/static/bootstrap-compiled.css /home/wger/src/wger/core/static/bootstrap-compiled.css COPY --chown=wger:wger --from=builder /root/src/wger/core/static/bootstrap-compiled.css.map /home/wger/src/wger/core/static/bootstrap-compiled.css.map -COPY ${DOCKER_DIR}/settings.py /home/wger/src -COPY ${DOCKER_DIR}/settings.py /tmp/ COPY ${DOCKER_DIR}/entrypoint.sh /home/wger/entrypoint.sh COPY ${DOCKER_DIR}/celery/start-beat /start-beat COPY ${DOCKER_DIR}/celery/start-worker /start-worker diff --git a/extras/docker/production/entrypoint.sh b/extras/docker/production/entrypoint.sh index 8d9e3db92..e81d906a8 100644 --- a/extras/docker/production/entrypoint.sh +++ b/extras/docker/production/entrypoint.sh @@ -65,8 +65,9 @@ fi # Sync ingredients if [[ "$SYNC_INGREDIENTS_ON_STARTUP" == "True" ]]; then - echo "Syncing ingredients" - python3 manage.py sync-ingredients + echo "The option SYNC_INGREDIENTS_ON_STARTUP is not supported anymore as it needs several hours to complete." + echo "Please start the process manually with: docker compose exec web python3 manage.py sync-ingredients" + exit 1 fi # Set the site URL diff --git a/extras/docker/production/settings.py b/extras/docker/production/settings.py deleted file mode 100644 index 39b07c1cf..000000000 --- a/extras/docker/production/settings.py +++ /dev/null @@ -1,229 +0,0 @@ -#!/usr/bin/env python - -# Third Party -import environ - -# wger -from wger.settings_global import * - -env = environ.Env( - # set casting, default value - DJANGO_DEBUG=(bool, False) -) - -# Use 'DEBUG = True' to get more details for server errors -DEBUG = env("DJANGO_DEBUG") - -if os.environ.get('DJANGO_ADMINS'): - ADMINS = [env.tuple('DJANGO_ADMINS'), ] - MANAGERS = ADMINS - -if os.environ.get("DJANGO_DB_ENGINE"): - DATABASES = { - 'default': { - 'ENGINE': env.str("DJANGO_DB_ENGINE"), - 'NAME': env.str("DJANGO_DB_DATABASE"), - 'USER': env.str("DJANGO_DB_USER"), - 'PASSWORD': env.str("DJANGO_DB_PASSWORD"), - 'HOST': env.str("DJANGO_DB_HOST"), - 'PORT': env.int("DJANGO_DB_PORT"), - } - } -else: - DATABASES = { - 'default': { - 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': env.str('DJANGO_DB_DATABASE', '/home/wger/db/database.sqlite'), - } - } - -# Timezone for this installation. Consult settings_global.py for more information -TIME_ZONE = env.str("TIME_ZONE", 'Europe/Berlin') - -# Make this unique, and don't share it with anybody. -SECRET_KEY = env.str("SECRET_KEY", 'wger-docker-supersecret-key-1234567890!@#$%^&*(-_)') - -# Your reCaptcha keys -RECAPTCHA_PUBLIC_KEY = env.str('RECAPTCHA_PUBLIC_KEY', '') -RECAPTCHA_PRIVATE_KEY = env.str('RECAPTCHA_PRIVATE_KEY', '') - -# The site's URL (e.g. http://www.my-local-gym.com or http://localhost:8000) -# This is needed for uploaded files and images (exercise images, etc.) to be -# properly served. -SITE_URL = env.str('SITE_URL', 'http://localhost:8000') - -# Path to uploaded files -# Absolute filesystem path to the directory that will hold user-uploaded files. -MEDIA_ROOT = env.str("DJANGO_MEDIA_ROOT", '/home/wger/media') -STATIC_ROOT = env.str("DJANGO_STATIC_ROOT", '/home/wger/static') - -# If you change these, adjust nginx alias definitions as well -MEDIA_URL = env.str('MEDIA_URL', '/media/') -STATIC_URL = env.str('STATIC_URL', '/static/') - -LOGIN_REDIRECT_URL = env.str('LOGIN_REDIRECT_URL', '/') - -# Allow all hosts to access the application. Change if used in production. -ALLOWED_HOSTS = ['*', ] - -SESSION_ENGINE = "django.contrib.sessions.backends.cache" - -# Configure a real backend in production -if DEBUG: - EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' -if env.bool("ENABLE_EMAIL", False): - EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' - EMAIL_HOST = env.str("EMAIL_HOST") - EMAIL_PORT = env.int("EMAIL_PORT") - EMAIL_HOST_USER = env.str("EMAIL_HOST_USER") - EMAIL_HOST_PASSWORD = env.str("EMAIL_HOST_PASSWORD") - EMAIL_USE_TLS = env.bool("EMAIL_USE_TLS", True) - EMAIL_USE_SSL = env.bool("EMAIL_USE_SSL", False) - EMAIL_TIMEOUT = 60 - -# Sender address used for sent emails -DEFAULT_FROM_EMAIL = env.str("FROM_EMAIL", "wger Workout Manager ") -WGER_SETTINGS['EMAIL_FROM'] = DEFAULT_FROM_EMAIL -SERVER_EMAIL = DEFAULT_FROM_EMAIL -EMAIL_FROM_ADDRESS = DEFAULT_FROM_EMAIL - -# Management -WGER_SETTINGS["ALLOW_GUEST_USERS"] = env.bool("ALLOW_GUEST_USERS", True) -WGER_SETTINGS["ALLOW_REGISTRATION"] = env.bool("ALLOW_REGISTRATION", True) -WGER_SETTINGS["ALLOW_UPLOAD_VIDEOS"] = env.bool("ALLOW_UPLOAD_VIDEOS", True) -WGER_SETTINGS["DOWNLOAD_INGREDIENTS_FROM"] = env.str("DOWNLOAD_INGREDIENTS_FROM", "WGER") -WGER_SETTINGS["EXERCISE_CACHE_TTL"] = env.int("EXERCISE_CACHE_TTL", 3600) -WGER_SETTINGS["MIN_ACCOUNT_AGE_TO_TRUST"] = env.int("MIN_ACCOUNT_AGE_TO_TRUST", 21) # in days -WGER_SETTINGS["SYNC_EXERCISES_CELERY"] = env.bool("SYNC_EXERCISES_CELERY", False) -WGER_SETTINGS["SYNC_EXERCISE_IMAGES_CELERY"] = env.bool("SYNC_EXERCISE_IMAGES_CELERY", False) -WGER_SETTINGS["SYNC_EXERCISE_VIDEOS_CELERY"] = env.bool("SYNC_EXERCISE_VIDEOS_CELERY", False) -WGER_SETTINGS["SYNC_INGREDIENTS_CELERY"] = env.bool("SYNC_INGREDIENTS_CELERY", False) -WGER_SETTINGS["SYNC_OFF_DAILY_DELTA_CELERY"] = env.bool("SYNC_OFF_DAILY_DELTA_CELERY", False) -WGER_SETTINGS["USE_RECAPTCHA"] = env.bool("USE_RECAPTCHA", False) -WGER_SETTINGS["USE_CELERY"] = env.bool("USE_CELERY", False) -WGER_SETTINGS["CACHE_API_EXERCISES_CELERY"] = env.bool("CACHE_API_EXERCISES_CELERY", False) -WGER_SETTINGS["CACHE_API_EXERCISES_CELERY_FORCE_UPDATE"] = env.bool("CACHE_API_EXERCISES_CELERY_FORCE_UPDATE", False) - -# -# Auth Proxy Authentication -# https://wger.readthedocs.io/en/latest/administration/auth_proxy.html -AUTH_PROXY_HEADER = env.str("AUTH_PROXY_HEADER", '') -AUTH_PROXY_TRUSTED_IPS = env.list("AUTH_PROXY_TRUSTED_IPS", default=[]) -AUTH_PROXY_CREATE_UNKNOWN_USER = env.bool("AUTH_PROXY_CREATE_UNKNOWN_USER", False) -AUTH_PROXY_USER_EMAIL_HEADER = env.str("AUTH_PROXY_USER_EMAIL_HEADER", '') -AUTH_PROXY_USER_NAME_HEADER = env.str("AUTH_PROXY_USER_NAME_HEADER", '') - -# Cache -if os.environ.get("DJANGO_CACHE_BACKEND"): - CACHES = { - 'default': { - 'BACKEND': env.str("DJANGO_CACHE_BACKEND"), - 'LOCATION': env.str("DJANGO_CACHE_LOCATION"), - 'TIMEOUT': env.int("DJANGO_CACHE_TIMEOUT"), - 'OPTIONS': { - 'CLIENT_CLASS': env.str("DJANGO_CACHE_CLIENT_CLASS") - } - } - } - - if os.environ.get('DJANGO_CACHE_CLIENT_PASSWORD'): - CACHES['default']['OPTIONS']['PASSWORD'] = env.str('DJANGO_CACHE_CLIENT_PASSWORD') - - CONNECTION_POOL_KWARGS = dict() - if "DJANGO_CACHE_CLIENT_SSL_KEYFILE" in os.environ: - CONNECTION_POOL_KWARGS['ssl_keyfile'] = env.str("DJANGO_CACHE_CLIENT_SSL_KEYFILE") - - if "DJANGO_CACHE_CLIENT_SSL_CERTFILE" in os.environ: - CONNECTION_POOL_KWARGS['ssl_certfile'] = env.str("DJANGO_CACHE_CLIENT_SSL_CERTFILE") - - if "DJANGO_CACHE_CLIENT_SSL_CERT_REQS" in os.environ: - CONNECTION_POOL_KWARGS['ssl_cert_reqs'] = env.str("DJANGO_CACHE_CLIENT_SSL_CERT_REQS") - - if "DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME" in os.environ: - CONNECTION_POOL_KWARGS['ssl_check_hostname'] = env.bool( - "DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME") - - if CONNECTION_POOL_KWARGS: - CACHES["default"]["OPTIONS"]["CONNECTION_POOL_KWARGS"] = CONNECTION_POOL_KWARGS - -# Folder for compressed CSS and JS files -COMPRESS_ROOT = STATIC_ROOT -COMPRESS_ENABLED = env.bool('COMPRESS_ENABLED', not DEBUG) - -# The site's domain as used by the email verification workflow -EMAIL_PAGE_DOMAIN = SITE_URL - -# -# Django Axes -# -AXES_ENABLED = env.bool('AXES_ENABLED', True) -AXES_LOCKOUT_PARAMETERS = env.list('AXES_LOCKOUT_PARAMETERS', default=['ip_address']) -AXES_FAILURE_LIMIT = env.int('AXES_FAILURE_LIMIT', 10) -AXES_COOLOFF_TIME = timedelta(minutes=env.float('AXES_COOLOFF_TIME', 30)) -AXES_HANDLER = env.str('AXES_HANDLER', 'axes.handlers.cache.AxesCacheHandler') -AXES_IPWARE_PROXY_COUNT = env.int('AXES_IPWARE_PROXY_COUNT', 0) -AXES_IPWARE_META_PRECEDENCE_ORDER = env.list('AXES_IPWARE_META_PRECEDENCE_ORDER', - default=['REMOTE_ADDR']) - -# -# Django Rest Framework SimpleJWT -# -SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'] = timedelta(minutes=env.int("ACCESS_TOKEN_LIFETIME", 15)) -SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'] = timedelta(hours=env.int("REFRESH_TOKEN_LIFETIME", 24)) -SIMPLE_JWT['SIGNING_KEY'] = env.str("SIGNING_KEY", SECRET_KEY) - -# -# https://docs.djangoproject.com/en/4.1/ref/csrf/ -# -CSRF_TRUSTED_ORIGINS = env.list( - "CSRF_TRUSTED_ORIGINS", - default=['http://127.0.0.1', 'http://localhost', 'https://localhost'], -) - -if env.bool('X_FORWARDED_PROTO_HEADER_SET', False): - SECURE_PROXY_SSL_HEADER = ( - env.str('SECURE_PROXY_SSL_HEADER', 'HTTP_X_FORWARDED_PROTO'), - 'https' - ) - -REST_FRAMEWORK['NUM_PROXIES'] = env.int('NUMBER_OF_PROXIES', 1) - -# -# Celery message queue configuration -# -CELERY_BROKER_URL = env.str("CELERY_BROKER", "redis://cache:6379/2") -CELERY_RESULT_BACKEND = env.str("CELERY_BACKEND", "redis://cache:6379/2") - -# -# Prometheus metrics -# -EXPOSE_PROMETHEUS_METRICS = env.bool('EXPOSE_PROMETHEUS_METRICS', False) -PROMETHEUS_URL_PATH = env.str('PROMETHEUS_URL_PATH', 'super-secret-path') - -# -# Logging -# -LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'formatters': { - 'simple': { - 'format': 'level={levelname} ts={asctime} module={module} path={pathname} line={lineno} message={message}', - 'style': '{', - }, - }, - 'handlers': { - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, - }, - 'loggers': { - '': { - 'handlers': ['console'], - 'level': env.str('LOG_LEVEL_PYTHON', 'INFO').upper(), - 'propagate': True, - }, - } -} diff --git a/manage.py b/manage.py index 873291be6..b8b636672 100755 --- a/manage.py +++ b/manage.py @@ -1,24 +1,13 @@ #!/usr/bin/env python3 # Standard Library +import os import sys # Django from django.core.management import execute_from_command_line -# wger -from wger.tasks import ( - get_path, - setup_django_environment, -) - if __name__ == '__main__': - # If user passed the settings flag ignore the default wger settings - if not any('--settings' in s for s in sys.argv): - setup_django_environment(get_path('settings.py')) - - # Alternative to above - # os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") - + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.main') execute_from_command_line(sys.argv) diff --git a/package-lock.json b/package-lock.json index ca56ca130..7b5fbf621 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wger", - "version": "2.4.alpha1", + "version": "2.5-alpha1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wger", - "version": "2.4.alpha1", + "version": "2.5-alpha1", "license": "AGPL-3.0", "dependencies": { "@popperjs/core": "^2.11.8", @@ -18,7 +18,7 @@ "masonry-layout": "^4.2.2" }, "devDependencies": { - "@wger-project/react-components": "25.12.5" + "@wger-project/react-components": "26.1.18" } }, "node_modules/@babel/code-frame": { @@ -2082,9 +2082,9 @@ } }, "node_modules/@wger-project/react-components": { - "version": "25.12.5", - "resolved": "https://registry.npmjs.org/@wger-project/react-components/-/react-components-25.12.5.tgz", - "integrity": "sha512-Z2UKlale7up/t1eZ9YrIY9UfczfRh0I1na96/xinxdYGt6lzMIG/4Yvo22VbNUAm6hIya0tMzeRitQ0CkUz6IQ==", + "version": "26.1.18", + "resolved": "https://registry.npmjs.org/@wger-project/react-components/-/react-components-26.1.18.tgz", + "integrity": "sha512-mPeGaf6uvwnWBPSsLFcvM6N/z9f1rzGVyCrm9f/RiVS+SOP/ntCHbfxbEd/dl/CARfk0ceZL3QVREYu7Riq+IQ==", "dev": true, "dependencies": { "@emotion/babel-plugin": "^11.13.5", @@ -2114,7 +2114,9 @@ "react-responsive": "^10.0.1", "react-router-dom": "^7.9.4", "react-simple-wysiwyg": "^3.4.1", + "react-slick": "^0.31.0", "recharts": "^3.4.1", + "slick-carousel": "^1.8.1", "slug": "^9.1.0", "typescript": "^5.9.3", "vite-tsconfig-paths": "^5.1.4", @@ -2265,6 +2267,13 @@ ], "license": "CC-BY-4.0" }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "dev": true, + "license": "MIT" + }, "node_modules/clsx": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", @@ -3206,6 +3215,16 @@ "dev": true, "license": "MIT" }, + "node_modules/json2mq": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/json2mq/-/json2mq-0.2.0.tgz", + "integrity": "sha512-SzoRg7ux5DWTII9J2qkrZrqV1gt+rTaoufMxEzXbS26Uid0NwaJd123HcoB80TgubEppxxIGdNxCx50fEoEWQA==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-convert": "^0.2.0" + } + }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", @@ -3240,6 +3259,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true, + "license": "MIT" + }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -3758,6 +3784,23 @@ "react": ">=16.8" } }, + "node_modules/react-slick": { + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.31.0.tgz", + "integrity": "sha512-zo6VLT8wuSBJffg/TFPbzrw2dEnfZ/cUKmYsKByh3AgatRv29m2LoFbq5vRMa3R3A4wp4d8gwbJKO2fWZFaI3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "classnames": "^2.2.5", + "json2mq": "^0.2.0", + "lodash.debounce": "^4.0.8", + "resize-observer-polyfill": "^1.5.0" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" + } + }, "node_modules/react-transition-group": { "version": "4.4.5", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz", @@ -3942,6 +3985,16 @@ "dev": true, "license": "MIT" }, + "node_modules/slick-carousel": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/slick-carousel/-/slick-carousel-1.8.1.tgz", + "integrity": "sha512-XB9Ftrf2EEKfzoQXt3Nitrt/IPbT+f1fgqBdoxO3W/+JYvtEOW6EgxnWfr9GH6nmULv7Y2tPmEX3koxThVmebA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "jquery": ">=1.8.0" + } + }, "node_modules/slug": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/slug/-/slug-9.1.0.tgz", @@ -3973,6 +4026,13 @@ "node": ">=0.10.0" } }, + "node_modules/string-convert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-convert/-/string-convert-0.2.1.tgz", + "integrity": "sha512-u/1tdPl4yQnPBjnVrmdLo9gtuLvELKsAoRapekWggdiQNvvvum+jYF329d84NAa660KQw7pB2n36KrIKVoXa3A==", + "dev": true, + "license": "MIT" + }, "node_modules/stylis": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", diff --git a/package.json b/package.json index bacfb5eaf..913e92c2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wger", - "version": "2.4.alpha1", + "version": "2.5-alpha1", "description": "Self hosted FLOSS fitness/workout and weight tracker", "repository": "github:wger-project/wger", "author": "wger team ", @@ -19,7 +19,7 @@ "masonry-layout": "^4.2.2" }, "devDependencies": { - "@wger-project/react-components": "25.12.5" + "@wger-project/react-components": "26.1.18" }, "scripts": { "build:css:sass": "sass wger/core/static/scss/main.scss wger/core/static/bootstrap-compiled.css" diff --git a/pyproject.toml b/pyproject.toml index 95d58ee9e..1e3ba46fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -34,7 +34,6 @@ dependencies = [ "django-activity-stream~=2.0.0", "django-axes[ipware]~=8.0.0", "django-bootstrap-breadcrumbs2==1.0.0", - "django-compressor~=4.6.0", "django-cors-headers~=4.9.0", "django-crispy-forms~=2.5", "django-email-verification~=0.3.3", @@ -165,7 +164,7 @@ line-ending = "auto" src_paths = ["wger", "extras"] sections = ["FUTURE", "STDLIB", "DJANGO", "THIRDPARTY", "FIRSTPARTY", "LOCALFOLDER"] -skip = ["extras", "build", "dist", "node_modules", "migrations", "docs", "settings.py", "apps.py"] +skip = ["extras", "build", "dist", "node_modules", "migrations", "docs", "settings", "apps.py"] # If set to true - ensures that if a star import is present, nothing else is # imported from that namespace. combine_star = false diff --git a/settings/README.md b/settings/README.md new file mode 100644 index 000000000..5ed92f404 --- /dev/null +++ b/settings/README.md @@ -0,0 +1,15 @@ +# Settings + +This directory contains configuration files and settings for the project. + +You can add your own configuration files here, e.g. for development. Set +the `DJANGO_SETTINGS_MODULE` environment variable to point to the new settings +file. E.g.: + +```bash +export DJANGO_SETTINGS_MODULE=settings.local_dev +python manage.py runserver +``` + +If you want to add settings that are not tracked by git, you can create a +`local_dev_extra.py` file, this will be imported by `local_dev.py` if it exists. diff --git a/settings/__init__.py b/settings/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wger/settings.tpl b/settings/ci.py similarity index 52% rename from wger/settings.tpl rename to settings/ci.py index b57ffa858..af4dbb364 100644 --- a/wger/settings.tpl +++ b/settings/ci.py @@ -1,31 +1,48 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License + +# ruff: noqa: F405 + +# Third Party +import environ # wger -from wger.settings_global import * +from .settings_global import * # noqa: F403 +env = environ.Env() # Use 'DEBUG = True' to get more details for server errors DEBUG = True # Application settings WGER_SETTINGS['EMAIL_FROM'] = 'wger Workout Manager ' -WGER_SETTINGS["ALLOW_REGISTRATION"] = True -WGER_SETTINGS["ALLOW_GUEST_USERS"] = True -WGER_SETTINGS["ALLOW_UPLOAD_VIDEOS"] = False -WGER_SETTINGS["MIN_ACCOUNT_AGE_TO_TRUST"] = 21 # in days -WGER_SETTINGS["EXERCISE_CACHE_TTL"] = 3600 # in seconds +WGER_SETTINGS['ALLOW_REGISTRATION'] = True +WGER_SETTINGS['ALLOW_GUEST_USERS'] = True +WGER_SETTINGS['ALLOW_UPLOAD_VIDEOS'] = False +WGER_SETTINGS['MIN_ACCOUNT_AGE_TO_TRUST'] = 21 # in days +WGER_SETTINGS['EXERCISE_CACHE_TTL'] = 3600 # in seconds -DATABASES = {{ - 'default': {{ - 'ENGINE': 'django.db.backends.{dbengine}', - 'NAME': '{dbname}', - 'USER': '{dbuser}', - 'PASSWORD': '{dbpassword}', - 'HOST': '{dbhost}', - 'PORT': '{dbport}', - }} -}} # yapf: disable +DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': '/Users/roland/Entwicklung/wger/server/database.sqlite', + 'USER': '', + 'PASSWORD': '', + 'HOST': '', + 'PORT': '', + } +} # yapf: disable # List of administrations ADMINS = (('Your name', 'your_email@example.com'),) @@ -39,7 +56,7 @@ MANAGERS = ADMINS TIME_ZONE = 'Europe/Berlin' # Make this unique, and don't share it with anybody. -SECRET_KEY = '{default_key}' +SECRET_KEY = '61fxc$k%9nj!be-_up9%xzm(z)9l7$h33b1!@bf9581=c-03%p' # Your reCaptcha keys RECAPTCHA_PUBLIC_KEY = '' @@ -49,14 +66,14 @@ USE_RECAPTCHA = False # The site's URL (e.g. http://www.my-local-gym.com or http://localhost:8000) # This is needed for uploaded files and images (exercise images, etc.) to be # properly served. -SITE_URL = '{siteurl}' +SITE_URL = 'http://localhost:8000' # Path to uploaded files # Absolute filesystem path to the directory that will hold user-uploaded files. -MEDIA_ROOT = '{media_folder_path}' +MEDIA_ROOT = env.str('DJANGO_MEDIA_ROOT', '/tmp/') MEDIA_URL = '/media/' -# Allow all hosts to access the application. Change if used in production. +# Allow all hosts to access the application. ALLOWED_HOSTS = [ '*', ] @@ -78,23 +95,3 @@ EMAIL_PAGE_DOMAIN = SITE_URL # https://django-axes.readthedocs.io/en/latest/ # AXES_ENABLED = False -# AXES_FAILURE_LIMIT = 10 -# AXES_COOLOFF_TIME = timedelta(minutes=30) -# AXES_HANDLER = 'axes.handlers.cache.AxesCacheHandler' - -# -# Sometimes needed if deployed behind a proxy with HTTPS enabled: -# https://docs.djangoproject.com/en/4.1/ref/csrf/ -# -# CSRF_TRUSTED_ORIGINS = ['http://127.0.0.1', 'https://my.domain.example.com'] - -# Alternative to above, needs changes to the reverse proxy's config -# https://docs.djangoproject.com/en/4.1/ref/settings/#secure-proxy-ssl-header -# -# SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO, 'https') - -# -# Celery -# Needed if you plan to use celery for background tasks -# CELERY_BROKER_URL = "redis://localhost:6379/2" -# CELERY_RESULT_BACKEND = "redis://localhost:6379/2" diff --git a/settings/local_dev.py b/settings/local_dev.py new file mode 100644 index 000000000..5870382b6 --- /dev/null +++ b/settings/local_dev.py @@ -0,0 +1,125 @@ +"""Local development settings for wger""" + +# ruff: noqa: F405 +# ruff: noqa: F403 + +# wger +from .settings_global import * + +DEBUG = True + +# List of administrators +ADMINS = (('Your name', 'your_email@example.com'),) +MANAGERS = ADMINS + +# Don't use this key in production! +SECRET_KEY = 'wger-local-development-supersecret-key-1234567890!' + +# Allow all hosts to access the application. +ALLOWED_HOSTS = [ + '*', +] + +EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +# WGER application +WGER_SETTINGS['ALLOW_UPLOAD_VIDEOS'] = True +WGER_SETTINGS['ALLOW_GUEST_USERS'] = True +WGER_SETTINGS['ALLOW_REGISTRATION'] = True +WGER_SETTINGS['DOWNLOAD_INGREDIENTS_FROM'] = 'WGER' # or 'None' to disable +WGER_SETTINGS['EMAIL_FROM'] = 'wger Workout Manager ' +WGER_SETTINGS['EXERCISE_CACHE_TTL'] = 500 +WGER_SETTINGS['INGREDIENT_CACHE_TTL'] = 500 +WGER_SETTINGS['SYNC_EXERCISES_CELERY'] = False +WGER_SETTINGS['SYNC_EXERCISE_IMAGES_CELERY'] = True +WGER_SETTINGS['SYNC_EXERCISE_VIDEOS_CELERY'] = False +WGER_SETTINGS['SYNC_INGREDIENTS_CELERY'] = True +WGER_SETTINGS['USE_CELERY'] = False +WGER_SETTINGS['CACHE_API_EXERCISES_CELERY'] = True +WGER_SETTINGS['CACHE_API_EXERCISES_CELERY_FORCE_UPDATE'] = True +WGER_SETTINGS['ROUTINE_CACHE_TTL'] = 500 +DEFAULT_FROM_EMAIL = WGER_SETTINGS['EMAIL_FROM'] + + +# CELERY_BROKER_URL = "redis://localhost:6379/2" +# CELERY_RESULT_BACKEND = "redis://localhost:6379/2" + +CSRF_TRUSTED_ORIGINS = ['http://localhost:8000', 'http://127.0.0.1:8000'] + +EXPOSE_PROMETHEUS_METRICS = True + +COMPRESS_ENABLED = False +AXES_ENABLED = False + + +# Does not really cache anything +CACHES_DUMMY = { + 'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', + 'TIMEOUT': 100, + } +} + +# In-memory cache, resets when the server restarts +CACHE_LOCMEM = { + 'default': { + 'BACKEND': 'django.core.cache.backends.locmem.LocMemCache', + 'LOCATION': 'wger-cache', + 'TIMEOUT': 100, + } +} + +# Redis cache +CACHE_REDIS = { + 'default': { + 'BACKEND': 'django_redis.cache.RedisCache', + 'LOCATION': 'redis://localhost:6379/1', + 'TIMEOUT': 5000, + 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}, + } +} + + +# CACHES = CACHE_REDIS +CACHES = CACHE_LOCMEM +# CACHES = CACHES_DUMMY + + +# Django Debug Toolbar +# INSTALLED_APPS += ['django_extensions', 'debug_toolbar'] +# MIDDLEWARE += ["debug_toolbar.middleware.DebugToolbarMiddleware", ] +# INTERNAL_IPS = ["127.0.0.1", ] + +# AUTH_PROXY_HEADER = 'HTTP_X_REMOTE_USER' +# AUTH_PROXY_USER_EMAIL_HEADER = 'HTTP_X_REMOTE_USER_EMAIL' +# AUTH_PROXY_USER_NAME_HEADER = 'HTTP_X_REMOTE_USER_NAME' +# AUTH_PROXY_TRUSTED_IPS = ['127.0.0.1', ] +# AUTH_PROXY_CREATE_UNKNOWN_USER = True + + +DBCONFIG_PG = { + 'ENGINE': 'django_prometheus.db.backends.postgresql', + 'NAME': 'wger', + 'USER': 'wger', + 'PASSWORD': 'wger', + 'HOST': 'localhost', + 'PORT': '5432', +} + + +DBCONFIG_SQLITE = { + 'ENGINE': 'django_prometheus.db.backends.sqlite3', + 'NAME': BASE_DIR.parent / 'db' / 'database.sqlite', +} + +DATABASES = { + # 'default': DBCONFIG_PG, + 'default': DBCONFIG_SQLITE, +} + + +# Import other local settings that are not in version control +try: + from .local_dev_extra import * +except ImportError: + pass diff --git a/settings/main.py b/settings/main.py new file mode 100644 index 000000000..5147ec283 --- /dev/null +++ b/settings/main.py @@ -0,0 +1,277 @@ +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License + +# ruff: noqa: F405 + +# Third Party +import environ + +# wger +from .settings_global import * # noqa: F403 + +""" +Main settings file for a production deployment of wger. + +For a more commented version of the options used here, please refer to +https://github.com/wger-project/docker/blob/master/config/prod.env +""" + +env = environ.Env( + # set casting, default value + DJANGO_DEBUG=(bool, False) +) + +# Use 'DEBUG = True' to get more details for server errors +DEBUG = env('DJANGO_DEBUG') + +if os.environ.get('DJANGO_ADMINS'): + ADMINS = [ + env.tuple('DJANGO_ADMINS'), + ] + MANAGERS = ADMINS + +if os.environ.get('DJANGO_DB_ENGINE'): + DATABASES = { + 'default': { + 'ENGINE': env.str('DJANGO_DB_ENGINE'), + 'NAME': env.str('DJANGO_DB_DATABASE'), + 'USER': env.str('DJANGO_DB_USER'), + 'PASSWORD': env.str('DJANGO_DB_PASSWORD'), + 'HOST': env.str('DJANGO_DB_HOST'), + 'PORT': env.int('DJANGO_DB_PORT'), + } + } +else: + DATABASES = { + 'default': { + 'ENGINE': 'django.db.backends.sqlite3', + 'NAME': env.str('DJANGO_DB_DATABASE', '/home/wger/db/database.sqlite'), + } + } + +# Timezone for this installation. Consult settings_global.py for more information +TIME_ZONE = env.str('TIME_ZONE', 'Europe/Berlin') + +# Make this unique, and don't share it with anybody. +# Generate e.g. with: python -c "import secrets; print(secrets.token_urlsafe(50))" or https://djecrety.ir/ +SECRET_KEY = env.str('SECRET_KEY', 'wger-docker-supersecret-key-1234567890!@#$%^&*(-_)') + +# Your reCaptcha keys +RECAPTCHA_PUBLIC_KEY = env.str('RECAPTCHA_PUBLIC_KEY', '') +RECAPTCHA_PRIVATE_KEY = env.str('RECAPTCHA_PRIVATE_KEY', '') + +# The site's URL (e.g. http://www.my-local-gym.com or http://localhost:8000) +# This is needed for uploaded files and images (exercise images, etc.) to be +# properly served. +SITE_URL = env.str('SITE_URL', 'http://localhost:8000') + +# Path to uploaded files +# Absolute filesystem path to the directory that will hold user-uploaded files. +MEDIA_ROOT = env.str('DJANGO_MEDIA_ROOT', '/home/wger/media') +STATIC_ROOT = env.str('DJANGO_STATIC_ROOT', '/home/wger/static') + +# If you change these, adjust nginx alias definitions as well +MEDIA_URL = env.str('MEDIA_URL', '/media/') +STATIC_URL = env.str('STATIC_URL', '/static/') + +LOGIN_REDIRECT_URL = env.str('LOGIN_REDIRECT_URL', '/') + +# Allow all hosts to access the application. Change if used in production. +ALLOWED_HOSTS = [ + '*', +] + +SESSION_ENGINE = 'django.contrib.sessions.backends.cache' + +# Configure a real backend in production +if DEBUG: + EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' + +if env.bool('ENABLE_EMAIL', False): + EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' + EMAIL_HOST = env.str('EMAIL_HOST') + EMAIL_PORT = env.int('EMAIL_PORT') + EMAIL_HOST_USER = env.str('EMAIL_HOST_USER') + EMAIL_HOST_PASSWORD = env.str('EMAIL_HOST_PASSWORD') + EMAIL_USE_TLS = env.bool('EMAIL_USE_TLS', True) + EMAIL_USE_SSL = env.bool('EMAIL_USE_SSL', False) + EMAIL_TIMEOUT = 60 + +# Sender address used for sent emails +DEFAULT_FROM_EMAIL = env.str('FROM_EMAIL', 'wger Workout Manager ') +WGER_SETTINGS['EMAIL_FROM'] = DEFAULT_FROM_EMAIL +SERVER_EMAIL = DEFAULT_FROM_EMAIL +EMAIL_FROM_ADDRESS = DEFAULT_FROM_EMAIL + +# Management +WGER_SETTINGS['ALLOW_GUEST_USERS'] = env.bool('ALLOW_GUEST_USERS', True) +WGER_SETTINGS['ALLOW_REGISTRATION'] = env.bool('ALLOW_REGISTRATION', True) +WGER_SETTINGS['ALLOW_UPLOAD_VIDEOS'] = env.bool('ALLOW_UPLOAD_VIDEOS', True) +WGER_SETTINGS['DOWNLOAD_INGREDIENTS_FROM'] = env.str('DOWNLOAD_INGREDIENTS_FROM', 'WGER') +WGER_SETTINGS['EXERCISE_CACHE_TTL'] = env.int('EXERCISE_CACHE_TTL', 3600) +WGER_SETTINGS['MIN_ACCOUNT_AGE_TO_TRUST'] = env.int('MIN_ACCOUNT_AGE_TO_TRUST', 21) # in days +WGER_SETTINGS['SYNC_EXERCISES_CELERY'] = env.bool('SYNC_EXERCISES_CELERY', False) +WGER_SETTINGS['SYNC_EXERCISE_IMAGES_CELERY'] = env.bool('SYNC_EXERCISE_IMAGES_CELERY', False) +WGER_SETTINGS['SYNC_EXERCISE_VIDEOS_CELERY'] = env.bool('SYNC_EXERCISE_VIDEOS_CELERY', False) +WGER_SETTINGS['SYNC_INGREDIENTS_CELERY'] = env.bool('SYNC_INGREDIENTS_CELERY', False) +WGER_SETTINGS['SYNC_OFF_DAILY_DELTA_CELERY'] = env.bool('SYNC_OFF_DAILY_DELTA_CELERY', False) +WGER_SETTINGS['USE_RECAPTCHA'] = env.bool('USE_RECAPTCHA', False) +WGER_SETTINGS['USE_CELERY'] = env.bool('USE_CELERY', False) +WGER_SETTINGS['CACHE_API_EXERCISES_CELERY'] = env.bool('CACHE_API_EXERCISES_CELERY', False) +WGER_SETTINGS['CACHE_API_EXERCISES_CELERY_FORCE_UPDATE'] = env.bool( + 'CACHE_API_EXERCISES_CELERY_FORCE_UPDATE', False +) + +# +# Auth Proxy Authentication +# https://wger.readthedocs.io/en/latest/administration/auth_proxy.html +AUTH_PROXY_HEADER = env.str('AUTH_PROXY_HEADER', '') +AUTH_PROXY_TRUSTED_IPS = env.list('AUTH_PROXY_TRUSTED_IPS', default=[]) +AUTH_PROXY_CREATE_UNKNOWN_USER = env.bool('AUTH_PROXY_CREATE_UNKNOWN_USER', False) +AUTH_PROXY_USER_EMAIL_HEADER = env.str('AUTH_PROXY_USER_EMAIL_HEADER', '') +AUTH_PROXY_USER_NAME_HEADER = env.str('AUTH_PROXY_USER_NAME_HEADER', '') + +# Cache +if os.environ.get('DJANGO_CACHE_BACKEND'): + CACHES = { + 'default': { + 'BACKEND': env.str('DJANGO_CACHE_BACKEND'), + 'LOCATION': env.str('DJANGO_CACHE_LOCATION', ''), + 'TIMEOUT': env.int('DJANGO_CACHE_TIMEOUT', 300), + 'OPTIONS': {'CLIENT_CLASS': env.str('DJANGO_CACHE_CLIENT_CLASS', '')}, + } + } + + if os.environ.get('DJANGO_CACHE_CLIENT_PASSWORD'): + CACHES['default']['OPTIONS']['PASSWORD'] = env.str('DJANGO_CACHE_CLIENT_PASSWORD') + + CONNECTION_POOL_KWARGS = dict() + if 'DJANGO_CACHE_CLIENT_SSL_KEYFILE' in os.environ: + CONNECTION_POOL_KWARGS['ssl_keyfile'] = env.str('DJANGO_CACHE_CLIENT_SSL_KEYFILE') + + if 'DJANGO_CACHE_CLIENT_SSL_CERTFILE' in os.environ: + CONNECTION_POOL_KWARGS['ssl_certfile'] = env.str('DJANGO_CACHE_CLIENT_SSL_CERTFILE') + + if 'DJANGO_CACHE_CLIENT_SSL_CERT_REQS' in os.environ: + CONNECTION_POOL_KWARGS['ssl_cert_reqs'] = env.str('DJANGO_CACHE_CLIENT_SSL_CERT_REQS') + + if 'DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME' in os.environ: + CONNECTION_POOL_KWARGS['ssl_check_hostname'] = env.bool( + 'DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME' + ) + + if CONNECTION_POOL_KWARGS: + CACHES['default']['OPTIONS']['CONNECTION_POOL_KWARGS'] = CONNECTION_POOL_KWARGS + +# +# Django Compressor +# Consult https://django-compressor.readthedocs.io/en/stable/ for more information +# (specially the offline compression part) +# +COMPRESS_ROOT = STATIC_ROOT +COMPRESS_ENABLED = env.bool('COMPRESS_ENABLED', not DEBUG) +COMPRESS_OFFLINE = env.bool('COMPRESS_OFFLINE', False) + +# The site's domain as used by the email verification workflow +EMAIL_PAGE_DOMAIN = SITE_URL + +# +# Django Axes +# +AXES_ENABLED = env.bool('AXES_ENABLED', True) +AXES_LOCKOUT_PARAMETERS = env.list('AXES_LOCKOUT_PARAMETERS', default=['ip_address']) +AXES_FAILURE_LIMIT = env.int('AXES_FAILURE_LIMIT', 10) +AXES_COOLOFF_TIME = timedelta(minutes=env.float('AXES_COOLOFF_TIME', 30)) +AXES_HANDLER = env.str('AXES_HANDLER', 'axes.handlers.cache.AxesCacheHandler') +AXES_IPWARE_PROXY_COUNT = env.int('AXES_IPWARE_PROXY_COUNT', 0) +AXES_IPWARE_META_PRECEDENCE_ORDER = env.list( + 'AXES_IPWARE_META_PRECEDENCE_ORDER', default=['REMOTE_ADDR'] +) + +# +# Django Rest Framework SimpleJWT +# +SIMPLE_JWT['ACCESS_TOKEN_LIFETIME'] = timedelta(minutes=env.int('ACCESS_TOKEN_LIFETIME', 15)) +SIMPLE_JWT['REFRESH_TOKEN_LIFETIME'] = timedelta(hours=env.int('REFRESH_TOKEN_LIFETIME', 24)) +SIMPLE_JWT['SIGNING_KEY'] = env.str('SIGNING_KEY', SECRET_KEY) + +# +# https://docs.djangoproject.com/en/4.1/ref/csrf/ +# +CSRF_TRUSTED_ORIGINS = env.list( + 'CSRF_TRUSTED_ORIGINS', + default=['http://127.0.0.1', 'http://localhost', 'https://localhost'], +) + +if env.bool('X_FORWARDED_PROTO_HEADER_SET', False): + SECURE_PROXY_SSL_HEADER = ( + env.str('SECURE_PROXY_SSL_HEADER', 'HTTP_X_FORWARDED_PROTO'), + 'https', + ) + +REST_FRAMEWORK['NUM_PROXIES'] = env.int('NUMBER_OF_PROXIES', 1) + +# +# Celery message queue configuration +# +CELERY_BROKER_URL = env.str('CELERY_BROKER', 'redis://cache:6379/2') +CELERY_RESULT_BACKEND = env.str('CELERY_BACKEND', 'redis://cache:6379/2') + +# +# Prometheus metrics +# +EXPOSE_PROMETHEUS_METRICS = env.bool('EXPOSE_PROMETHEUS_METRICS', False) +PROMETHEUS_URL_PATH = env.str('PROMETHEUS_URL_PATH', 'super-secret-path') + +# +# Logging +# +LOGGING = { + 'version': 1, + 'disable_existing_loggers': False, + 'formatters': { + 'simple': { + 'format': 'level={levelname} ts={asctime} module={module} path={pathname} line={lineno} message={message}', + 'style': '{', + }, + }, + 'handlers': { + 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, + }, + 'loggers': { + '': { + 'handlers': ['console'], + 'level': env.str('LOG_LEVEL_PYTHON', 'INFO').upper(), + 'propagate': True, + }, + }, +} + +# +# Storage options +# +STORAGES = { + 'default': { + 'BACKEND': env.str( + 'DJANGO_STORAGES_DEFAULT_BACKEND', 'django.core.files.storage.FileSystemStorage' + ), + }, + # django.contrib.staticfiles.storage.StaticFilesStorage + 'staticfiles': { + 'BACKEND': env.str( + 'DJANGO_STORAGES_STATICFILES_BACKEND', + 'wger.core.storage.LenientManifestStaticFilesStorage', + ), + }, +} diff --git a/wger/settings_global.py b/settings/settings_global.py similarity index 83% rename from wger/settings_global.py rename to settings/settings_global.py index e42391fb1..fc83566dd 100644 --- a/wger/settings_global.py +++ b/settings/settings_global.py @@ -18,20 +18,27 @@ import os import re import sys from datetime import timedelta +from pathlib import Path # wger from wger.utils.constants import DOWNLOAD_INGREDIENT_WGER from wger.version import get_version - """ This file contains the global settings that don't usually need to be changed. For a full list of options, visit: https://docs.djangoproject.com/en/dev/ref/settings/ """ -BASE_DIR = os.path.abspath(os.path.dirname(__file__)) -SITE_ROOT = os.path.realpath(os.path.dirname(__file__)) +BASE_DIR = Path(__file__).resolve().parent.parent / 'wger' +SITE_ROOT = Path(__file__).resolve().parent.parent / 'wger' + + +# Static and media files (only during development) +MEDIA_ROOT = BASE_DIR.parent / 'media' +STATIC_ROOT = BASE_DIR.parent / 'static' +MEDIA_URL = '/media/' +STATIC_URL = '/static/' # # Application definition @@ -40,6 +47,7 @@ SITE_ID = 1 ROOT_URLCONF = 'wger.urls' WSGI_APPLICATION = 'wger.wsgi.application' + INSTALLED_APPS = [ 'django.contrib.auth', 'django.contrib.contenttypes', @@ -48,10 +56,8 @@ INSTALLED_APPS = [ 'django.contrib.sites', 'django.contrib.staticfiles', 'storages', - # Uncomment the next line to enable the admin: # 'django.contrib.admin', - # Apps from wger proper 'wger.config', 'wger.core', @@ -65,24 +71,16 @@ INSTALLED_APPS = [ 'wger.weight', 'wger.gallery', 'wger.measurements', - # 'wger.trophies', - + 'wger.trophies', # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', - # The sitemaps app 'django.contrib.sitemaps', - # thumbnails 'easy_thumbnails', - - # CSS/JS compressor - 'compressor', - # Form renderer helper 'crispy_forms', 'crispy_bootstrap5', - # REST-API 'rest_framework', 'rest_framework.authtoken', @@ -90,28 +88,20 @@ INSTALLED_APPS = [ 'rest_framework_simplejwt', 'drf_spectacular', 'drf_spectacular_sidecar', - # Breadcrumbs 'django_bootstrap_breadcrumbs', - # CORS 'corsheaders', - # Django Axes 'axes', - # History keeping 'simple_history', - # Django email verification 'django_email_verification', - # Activity stream 'actstream', - # Fontawesome 'fontawesomefree', - # Prometheus 'django_prometheus', ] @@ -119,43 +109,33 @@ INSTALLED_APPS = [ MIDDLEWARE = [ # Prometheus 'django_prometheus.middleware.PrometheusBeforeMiddleware', - 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', - # Django Admin 'django.contrib.auth.middleware.AuthenticationMiddleware', - # Auth proxy middleware 'wger.core.middleware.AuthProxyHeaderMiddleware', - # Javascript Header. Sends helper headers for AJAX 'wger.utils.middleware.JavascriptAJAXRedirectionMiddleware', - # Custom authentication middleware. Creates users on-the-fly for certain paths 'wger.utils.middleware.WgerAuthenticationMiddleware', - # Send an appropriate Header so search engines don't index pages 'wger.utils.middleware.RobotsExclusionMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'django.middleware.locale.LocaleMiddleware', - # History keeping 'simple_history.middleware.HistoryRequestMiddleware', - # Prometheus 'django_prometheus.middleware.PrometheusAfterMiddleware', - # Django Axes 'axes.middleware.AxesMiddleware', # should be the last one in the list ] AUTHENTICATION_BACKENDS = ( 'axes.backends.AxesStandaloneBackend', # should be the first one in the list - 'wger.core.backends.AuthProxyUserBackend', 'django.contrib.auth.backends.ModelBackend', 'wger.utils.helpers.EmailAuthBackend', @@ -167,7 +147,6 @@ TEMPLATES = [ 'OPTIONS': { 'context_processors': [ 'wger.utils.context_processor.processor', - # Django 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', @@ -176,15 +155,14 @@ TEMPLATES = [ 'django.template.context_processors.static', 'django.template.context_processors.tz', 'django.contrib.messages.context_processors.messages', - # Breadcrumbs - 'django.template.context_processors.request' + 'django.template.context_processors.request', ], 'loaders': [ 'django.template.loaders.filesystem.Loader', 'django.template.loaders.app_directories.Loader', ], - 'debug': False + 'debug': False, }, }, ] @@ -192,18 +170,15 @@ TEMPLATES = [ # Store the user messages in the session MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage' +# Static files +# https://docs.djangoproject.com/en/6.0/ref/contrib/staticfiles/ STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', - - # Django compressor - 'compressor.finders.CompressorFinder', ) - # Additional places to copy to static files -STATICFILES_DIRS = ( - ('node', os.path.join(BASE_DIR, '..', 'node_modules')), -) +STATICFILES_DIRS = (('node', os.path.join(BASE_DIR, '..', 'node_modules')),) + # # Email @@ -295,23 +270,17 @@ LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { - 'simple': { - 'format': '%(levelname)s %(asctime)s %(module)s %(message)s' - }, + 'simple': {'format': '%(levelname)s %(asctime)s %(module)s %(message)s'}, }, 'handlers': { - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, + 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, }, 'loggers': { 'wger': { 'handlers': ['console'], 'level': 'INFO', }, - } + }, } # @@ -350,7 +319,7 @@ AXES_CACHE = 'default' # # Django Crispy Templates # -CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" +CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap5' CRISPY_TEMPLATE_PACK = 'bootstrap5' # @@ -358,47 +327,19 @@ CRISPY_TEMPLATE_PACK = 'bootstrap5' # THUMBNAIL_ALIASES = { '': { - 'micro': { - 'size': (30, 30) - }, - 'micro_cropped': { - 'size': (30, 30), - 'crop': 'smart' - }, - 'thumbnail': { - 'size': (80, 80) - }, - 'thumbnail_cropped': { - 'size': (80, 80), - 'crop': 'smart' - }, - 'small': { - 'size': (200, 200) - }, - 'small_cropped': { - 'size': (200, 200), - 'crop': 'smart' - }, - 'medium': { - 'size': (400, 400) - }, - 'medium_cropped': { - 'size': (400, 400), - 'crop': 'smart' - }, - 'large': { - 'size': (800, 800), - 'quality': 90 - }, - 'large_cropped': { - 'size': (800, 800), - 'crop': 'smart', - 'quality': 90 - }, + 'micro': {'size': (30, 30)}, + 'micro_cropped': {'size': (30, 30), 'crop': 'smart'}, + 'thumbnail': {'size': (80, 80)}, + 'thumbnail_cropped': {'size': (80, 80), 'crop': 'smart'}, + 'small': {'size': (200, 200)}, + 'small_cropped': {'size': (200, 200), 'crop': 'smart'}, + 'medium': {'size': (400, 400)}, + 'medium_cropped': {'size': (400, 400), 'crop': 'smart'}, + 'large': {'size': (800, 800), 'quality': 90}, + 'large_cropped': {'size': (800, 800), 'crop': 'smart', 'quality': 90}, }, } -STATIC_ROOT = '' USE_S3 = os.getenv('USE_S3') == 'TRUE' if USE_S3: @@ -413,49 +354,14 @@ if USE_S3: AWS_LOCATION = 'static' STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION) STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' - COMPRESS_URL = STATIC_URL - COMPRESS_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' - COMPRESS_OFFLINE = True - COMPRESS_OFFLINE_CONTEXT = [ - { - 'request': { - 'user_agent': { - 'is_mobile': True - } - }, - 'STATIC_URL': STATIC_URL - }, { - 'request': { - 'user_agent': { - 'is_mobile': False - } - }, - 'STATIC_URL': STATIC_URL - } - ] else: STATIC_URL = '/static/' -# -# Django compressor -# - -# The default is not DEBUG, override if needed -# COMPRESS_ENABLED = True -COMPRESS_CSS_FILTERS = ( - 'compressor.filters.css_default.CssAbsoluteFilter', - 'compressor.filters.cssmin.rCSSMinFilter', -) -COMPRESS_JS_FILTERS = [ - 'compressor.filters.jsmin.JSMinFilter', - 'compressor.filters.template.TemplateFilter', -] -COMPRESS_ROOT = STATIC_ROOT # # Django Rest Framework +# https://www.django-rest-framework.org/ # -# yapf: disable REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ('wger.utils.permissions.WgerPermission',), 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination', @@ -472,16 +378,14 @@ REST_FRAMEWORK = { 'rest_framework.filters.OrderingFilter', ), 'DEFAULT_THROTTLE_CLASSES': ['rest_framework.throttling.ScopedRateThrottle'], - 'DEFAULT_THROTTLE_RATES': { - 'login': '10/min', - 'registration': '5/min' - }, + 'DEFAULT_THROTTLE_RATES': {'login': '10/min', 'registration': '5/min'}, 'DEFAULT_SCHEMA_CLASS': 'drf_spectacular.openapi.AutoSchema', } -# yapf: enable -# Api docs -# yapf: disable +# +# API docs +# https://drf-spectacular.readthedocs.io/en/latest/ +# SPECTACULAR_SETTINGS = { 'TITLE': 'wger', 'SERVERS': [ @@ -495,9 +399,8 @@ SPECTACULAR_SETTINGS = { 'SWAGGER_UI_DIST': 'SIDECAR', 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', 'REDOC_DIST': 'SIDECAR', - 'COMPONENT_SPLIT_REQUEST': True + 'COMPONENT_SPLIT_REQUEST': True, } -# yapf: enable # # Django Rest Framework SimpleJWT @@ -569,7 +472,6 @@ WGER_SETTINGS = { 'USE_CELERY': False, 'USE_RECAPTCHA': False, 'WGER_INSTANCE': 'https://wger.de', - # Trophy system settings 'TROPHIES_ENABLED': True, # Global toggle to enable/disable trophy system 'TROPHIES_INACTIVE_USER_DAYS': 30, # Days of inactivity before skipping trophy evaluation @@ -620,3 +522,8 @@ ACTSTREAM_SETTINGS = { # Whether the application is being run regularly or during tests TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test' + +# Your reCaptcha keys +RECAPTCHA_PUBLIC_KEY = '' +RECAPTCHA_PRIVATE_KEY = '' +NOCAPTCHA = True diff --git a/uv.lock b/uv.lock index df5614b0b..2ed0b7676 100644 --- a/uv.lock +++ b/uv.lock @@ -81,7 +81,7 @@ css = [ [[package]] name = "celery" -version = "5.6.0" +version = "5.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "billiard" }, @@ -89,15 +89,15 @@ dependencies = [ { name = "click-didyoumean" }, { name = "click-plugins" }, { name = "click-repl" }, - { name = "exceptiongroup" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "kombu" }, { name = "python-dateutil" }, { name = "tzlocal" }, { name = "vine" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ad/5f/b681ae3c89290d2ea6562ea96b40f5af6f6fc5f7743e2cd1a19e47721548/celery-5.6.0.tar.gz", hash = "sha256:641405206042d52ae460e4e9751a2e31b06cf80ab836fcf92e0b9311d7ea8113", size = 1712522, upload-time = "2025-11-30T17:39:46.282Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8f/9d/3d13596519cfa7207a6f9834f4b082554845eb3cd2684b5f8535d50c7c44/celery-5.6.2.tar.gz", hash = "sha256:4a8921c3fcf2ad76317d3b29020772103581ed2454c4c042cc55dcc43585009b", size = 1718802, upload-time = "2026-01-04T12:35:58.012Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/01/4e/53a125038d6a814491a0ae3457435c13cf8821eb602292cf9db37ce35f62/celery-5.6.0-py3-none-any.whl", hash = "sha256:33cf01477b175017fc8f22c5ee8a65157591043ba8ca78a443fe703aa910f581", size = 444561, upload-time = "2025-11-30T17:39:44.314Z" }, + { url = "https://files.pythonhosted.org/packages/dd/bd/9ecd619e456ae4ba73b6583cc313f26152afae13e9a82ac4fe7f8856bfd1/celery-5.6.2-py3-none-any.whl", hash = "sha256:3ffafacbe056951b629c7abcf9064c4a2366de0bdfc9fdba421b97ebb68619a5", size = 445502, upload-time = "2026-01-04T12:35:55.894Z" }, ] [package.optional-dependencies] @@ -107,11 +107,11 @@ redis = [ [[package]] name = "certifi" -version = "2025.11.12" +version = "2026.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a2/8c/58f469717fa48465e4a50c014a0400602d3c437d7c0c468e17ada824da3a/certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316", size = 160538, upload-time = "2025-11-12T02:54:51.517Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/70/7d/9bc192684cea499815ff478dfcdc13835ddf401365057044fb721ec6bddb/certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b", size = 159438, upload-time = "2025-11-12T02:54:49.735Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, ] [[package]] @@ -345,101 +345,101 @@ wheels = [ [[package]] name = "coverage" -version = "7.13.0" +version = "7.13.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/45/2c665ca77ec32ad67e25c77daf1cee28ee4558f3bc571cdbaf88a00b9f23/coverage-7.13.0.tar.gz", hash = "sha256:a394aa27f2d7ff9bc04cf703817773a59ad6dfbd577032e690f961d2460ee936", size = 820905, upload-time = "2025-12-08T13:14:38.055Z" } +sdist = { url = "https://files.pythonhosted.org/packages/23/f9/e92df5e07f3fc8d4c7f9a0f146ef75446bf870351cd37b788cf5897f8079/coverage-7.13.1.tar.gz", hash = "sha256:b7593fe7eb5feaa3fbb461ac79aac9f9fc0387a5ca8080b0c6fe2ca27b091afd", size = 825862, upload-time = "2025-12-28T15:42:56.969Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/08/bdd7ccca14096f7eb01412b87ac11e5d16e4cb54b6e328afc9dee8bdaec1/coverage-7.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:02d9fb9eccd48f6843c98a37bd6817462f130b86da8660461e8f5e54d4c06070", size = 217979, upload-time = "2025-12-08T13:12:14.505Z" }, - { url = "https://files.pythonhosted.org/packages/fa/f0/d1302e3416298a28b5663ae1117546a745d9d19fde7e28402b2c5c3e2109/coverage-7.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:367449cf07d33dc216c083f2036bb7d976c6e4903ab31be400ad74ad9f85ce98", size = 218496, upload-time = "2025-12-08T13:12:16.237Z" }, - { url = "https://files.pythonhosted.org/packages/07/26/d36c354c8b2a320819afcea6bffe72839efd004b98d1d166b90801d49d57/coverage-7.13.0-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:cdb3c9f8fef0a954c632f64328a3935988d33a6604ce4bf67ec3e39670f12ae5", size = 245237, upload-time = "2025-12-08T13:12:17.858Z" }, - { url = "https://files.pythonhosted.org/packages/91/52/be5e85631e0eec547873d8b08dd67a5f6b111ecfe89a86e40b89b0c1c61c/coverage-7.13.0-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d10fd186aac2316f9bbb46ef91977f9d394ded67050ad6d84d94ed6ea2e8e54e", size = 247061, upload-time = "2025-12-08T13:12:19.132Z" }, - { url = "https://files.pythonhosted.org/packages/0f/45/a5e8fa0caf05fbd8fa0402470377bff09cc1f026d21c05c71e01295e55ab/coverage-7.13.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f88ae3e69df2ab62fb0bc5219a597cb890ba5c438190ffa87490b315190bb33", size = 248928, upload-time = "2025-12-08T13:12:20.702Z" }, - { url = "https://files.pythonhosted.org/packages/f5/42/ffb5069b6fd1b95fae482e02f3fecf380d437dd5a39bae09f16d2e2e7e01/coverage-7.13.0-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c4be718e51e86f553bcf515305a158a1cd180d23b72f07ae76d6017c3cc5d791", size = 245931, upload-time = "2025-12-08T13:12:22.243Z" }, - { url = "https://files.pythonhosted.org/packages/95/6e/73e809b882c2858f13e55c0c36e94e09ce07e6165d5644588f9517efe333/coverage-7.13.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a00d3a393207ae12f7c49bb1c113190883b500f48979abb118d8b72b8c95c032", size = 246968, upload-time = "2025-12-08T13:12:23.52Z" }, - { url = "https://files.pythonhosted.org/packages/87/08/64ebd9e64b6adb8b4a4662133d706fbaccecab972e0b3ccc23f64e2678ad/coverage-7.13.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a7b1cd820e1b6116f92c6128f1188e7afe421c7e1b35fa9836b11444e53ebd9", size = 244972, upload-time = "2025-12-08T13:12:24.781Z" }, - { url = "https://files.pythonhosted.org/packages/12/97/f4d27c6fe0cb375a5eced4aabcaef22de74766fb80a3d5d2015139e54b22/coverage-7.13.0-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:37eee4e552a65866f15dedd917d5e5f3d59805994260720821e2c1b51ac3248f", size = 245241, upload-time = "2025-12-08T13:12:28.041Z" }, - { url = "https://files.pythonhosted.org/packages/0c/94/42f8ae7f633bf4c118bf1038d80472f9dade88961a466f290b81250f7ab7/coverage-7.13.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:62d7c4f13102148c78d7353c6052af6d899a7f6df66a32bddcc0c0eb7c5326f8", size = 245847, upload-time = "2025-12-08T13:12:29.337Z" }, - { url = "https://files.pythonhosted.org/packages/a8/2f/6369ca22b6b6d933f4f4d27765d313d8914cc4cce84f82a16436b1a233db/coverage-7.13.0-cp310-cp310-win32.whl", hash = "sha256:24e4e56304fdb56f96f80eabf840eab043b3afea9348b88be680ec5986780a0f", size = 220573, upload-time = "2025-12-08T13:12:30.905Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dc/a6a741e519acceaeccc70a7f4cfe5d030efc4b222595f0677e101af6f1f3/coverage-7.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:74c136e4093627cf04b26a35dab8cbfc9b37c647f0502fc313376e11726ba303", size = 221509, upload-time = "2025-12-08T13:12:32.09Z" }, - { url = "https://files.pythonhosted.org/packages/f1/dc/888bf90d8b1c3d0b4020a40e52b9f80957d75785931ec66c7dfaccc11c7d/coverage-7.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0dfa3855031070058add1a59fdfda0192fd3e8f97e7c81de0596c145dea51820", size = 218104, upload-time = "2025-12-08T13:12:33.333Z" }, - { url = "https://files.pythonhosted.org/packages/8d/ea/069d51372ad9c380214e86717e40d1a743713a2af191cfba30a0911b0a4a/coverage-7.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4fdb6f54f38e334db97f72fa0c701e66d8479af0bc3f9bfb5b90f1c30f54500f", size = 218606, upload-time = "2025-12-08T13:12:34.498Z" }, - { url = "https://files.pythonhosted.org/packages/68/09/77b1c3a66c2aa91141b6c4471af98e5b1ed9b9e6d17255da5eb7992299e3/coverage-7.13.0-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7e442c013447d1d8d195be62852270b78b6e255b79b8675bad8479641e21fd96", size = 248999, upload-time = "2025-12-08T13:12:36.02Z" }, - { url = "https://files.pythonhosted.org/packages/0a/32/2e2f96e9d5691eaf1181d9040f850b8b7ce165ea10810fd8e2afa534cef7/coverage-7.13.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:1ed5630d946859de835a85e9a43b721123a8a44ec26e2830b296d478c7fd4259", size = 250925, upload-time = "2025-12-08T13:12:37.221Z" }, - { url = "https://files.pythonhosted.org/packages/7b/45/b88ddac1d7978859b9a39a8a50ab323186148f1d64bc068f86fc77706321/coverage-7.13.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7f15a931a668e58087bc39d05d2b4bf4b14ff2875b49c994bbdb1c2217a8daeb", size = 253032, upload-time = "2025-12-08T13:12:38.763Z" }, - { url = "https://files.pythonhosted.org/packages/71/cb/e15513f94c69d4820a34b6bf3d2b1f9f8755fa6021be97c7065442d7d653/coverage-7.13.0-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30a3a201a127ea57f7e14ba43c93c9c4be8b7d17a26e03bb49e6966d019eede9", size = 249134, upload-time = "2025-12-08T13:12:40.382Z" }, - { url = "https://files.pythonhosted.org/packages/09/61/d960ff7dc9e902af3310ce632a875aaa7860f36d2bc8fc8b37ee7c1b82a5/coverage-7.13.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7a485ff48fbd231efa32d58f479befce52dcb6bfb2a88bb7bf9a0b89b1bc8030", size = 250731, upload-time = "2025-12-08T13:12:41.992Z" }, - { url = "https://files.pythonhosted.org/packages/98/34/c7c72821794afc7c7c2da1db8f00c2c98353078aa7fb6b5ff36aac834b52/coverage-7.13.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:22486cdafba4f9e471c816a2a5745337742a617fef68e890d8baf9f3036d7833", size = 248795, upload-time = "2025-12-08T13:12:43.331Z" }, - { url = "https://files.pythonhosted.org/packages/0a/5b/e0f07107987a43b2def9aa041c614ddb38064cbf294a71ef8c67d43a0cdd/coverage-7.13.0-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:263c3dbccc78e2e331e59e90115941b5f53e85cfcc6b3b2fbff1fd4e3d2c6ea8", size = 248514, upload-time = "2025-12-08T13:12:44.546Z" }, - { url = "https://files.pythonhosted.org/packages/71/c2/c949c5d3b5e9fc6dd79e1b73cdb86a59ef14f3709b1d72bf7668ae12e000/coverage-7.13.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e5330fa0cc1f5c3c4c3bb8e101b742025933e7848989370a1d4c8c5e401ea753", size = 249424, upload-time = "2025-12-08T13:12:45.759Z" }, - { url = "https://files.pythonhosted.org/packages/11/f1/bbc009abd6537cec0dffb2cc08c17a7f03de74c970e6302db4342a6e05af/coverage-7.13.0-cp311-cp311-win32.whl", hash = "sha256:0f4872f5d6c54419c94c25dd6ae1d015deeb337d06e448cd890a1e89a8ee7f3b", size = 220597, upload-time = "2025-12-08T13:12:47.378Z" }, - { url = "https://files.pythonhosted.org/packages/c4/f6/d9977f2fb51c10fbaed0718ce3d0a8541185290b981f73b1d27276c12d91/coverage-7.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51a202e0f80f241ccb68e3e26e19ab5b3bf0f813314f2c967642f13ebcf1ddfe", size = 221536, upload-time = "2025-12-08T13:12:48.7Z" }, - { url = "https://files.pythonhosted.org/packages/be/ad/3fcf43fd96fb43e337a3073dea63ff148dcc5c41ba7a14d4c7d34efb2216/coverage-7.13.0-cp311-cp311-win_arm64.whl", hash = "sha256:d2a9d7f1c11487b1c69367ab3ac2d81b9b3721f097aa409a3191c3e90f8f3dd7", size = 220206, upload-time = "2025-12-08T13:12:50.365Z" }, - { url = "https://files.pythonhosted.org/packages/9b/f1/2619559f17f31ba00fc40908efd1fbf1d0a5536eb75dc8341e7d660a08de/coverage-7.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:0b3d67d31383c4c68e19a88e28fc4c2e29517580f1b0ebec4a069d502ce1e0bf", size = 218274, upload-time = "2025-12-08T13:12:52.095Z" }, - { url = "https://files.pythonhosted.org/packages/2b/11/30d71ae5d6e949ff93b2a79a2c1b4822e00423116c5c6edfaeef37301396/coverage-7.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:581f086833d24a22c89ae0fe2142cfaa1c92c930adf637ddf122d55083fb5a0f", size = 218638, upload-time = "2025-12-08T13:12:53.418Z" }, - { url = "https://files.pythonhosted.org/packages/79/c2/fce80fc6ded8d77e53207489d6065d0fed75db8951457f9213776615e0f5/coverage-7.13.0-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:0a3a30f0e257df382f5f9534d4ce3d4cf06eafaf5192beb1a7bd066cb10e78fb", size = 250129, upload-time = "2025-12-08T13:12:54.744Z" }, - { url = "https://files.pythonhosted.org/packages/5b/b6/51b5d1eb6fcbb9a1d5d6984e26cbe09018475c2922d554fd724dd0f056ee/coverage-7.13.0-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:583221913fbc8f53b88c42e8dbb8fca1d0f2e597cb190ce45916662b8b9d9621", size = 252885, upload-time = "2025-12-08T13:12:56.401Z" }, - { url = "https://files.pythonhosted.org/packages/0d/f8/972a5affea41de798691ab15d023d3530f9f56a72e12e243f35031846ff7/coverage-7.13.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f5d9bd30756fff3e7216491a0d6d520c448d5124d3d8e8f56446d6412499e74", size = 253974, upload-time = "2025-12-08T13:12:57.718Z" }, - { url = "https://files.pythonhosted.org/packages/8a/56/116513aee860b2c7968aa3506b0f59b22a959261d1dbf3aea7b4450a7520/coverage-7.13.0-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a23e5a1f8b982d56fa64f8e442e037f6ce29322f1f9e6c2344cd9e9f4407ee57", size = 250538, upload-time = "2025-12-08T13:12:59.254Z" }, - { url = "https://files.pythonhosted.org/packages/d6/75/074476d64248fbadf16dfafbf93fdcede389ec821f74ca858d7c87d2a98c/coverage-7.13.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b01c22bc74a7fb44066aaf765224c0d933ddf1f5047d6cdfe4795504a4493f8", size = 251912, upload-time = "2025-12-08T13:13:00.604Z" }, - { url = "https://files.pythonhosted.org/packages/f2/d2/aa4f8acd1f7c06024705c12609d8698c51b27e4d635d717cd1934c9668e2/coverage-7.13.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:898cce66d0836973f48dda4e3514d863d70142bdf6dfab932b9b6a90ea5b222d", size = 250054, upload-time = "2025-12-08T13:13:01.892Z" }, - { url = "https://files.pythonhosted.org/packages/19/98/8df9e1af6a493b03694a1e8070e024e7d2cdc77adedc225a35e616d505de/coverage-7.13.0-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:3ab483ea0e251b5790c2aac03acde31bff0c736bf8a86829b89382b407cd1c3b", size = 249619, upload-time = "2025-12-08T13:13:03.236Z" }, - { url = "https://files.pythonhosted.org/packages/d8/71/f8679231f3353018ca66ef647fa6fe7b77e6bff7845be54ab84f86233363/coverage-7.13.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:1d84e91521c5e4cb6602fe11ece3e1de03b2760e14ae4fcf1a4b56fa3c801fcd", size = 251496, upload-time = "2025-12-08T13:13:04.511Z" }, - { url = "https://files.pythonhosted.org/packages/04/86/9cb406388034eaf3c606c22094edbbb82eea1fa9d20c0e9efadff20d0733/coverage-7.13.0-cp312-cp312-win32.whl", hash = "sha256:193c3887285eec1dbdb3f2bd7fbc351d570ca9c02ca756c3afbc71b3c98af6ef", size = 220808, upload-time = "2025-12-08T13:13:06.422Z" }, - { url = "https://files.pythonhosted.org/packages/1c/59/af483673df6455795daf5f447c2f81a3d2fcfc893a22b8ace983791f6f34/coverage-7.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:4f3e223b2b2db5e0db0c2b97286aba0036ca000f06aca9b12112eaa9af3d92ae", size = 221616, upload-time = "2025-12-08T13:13:07.95Z" }, - { url = "https://files.pythonhosted.org/packages/64/b0/959d582572b30a6830398c60dd419c1965ca4b5fb38ac6b7093a0d50ca8d/coverage-7.13.0-cp312-cp312-win_arm64.whl", hash = "sha256:086cede306d96202e15a4b77ace8472e39d9f4e5f9fd92dd4fecdfb2313b2080", size = 220261, upload-time = "2025-12-08T13:13:09.581Z" }, - { url = "https://files.pythonhosted.org/packages/7c/cc/bce226595eb3bf7d13ccffe154c3c487a22222d87ff018525ab4dd2e9542/coverage-7.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:28ee1c96109974af104028a8ef57cec21447d42d0e937c0275329272e370ebcf", size = 218297, upload-time = "2025-12-08T13:13:10.977Z" }, - { url = "https://files.pythonhosted.org/packages/3b/9f/73c4d34600aae03447dff3d7ad1d0ac649856bfb87d1ca7d681cfc913f9e/coverage-7.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d1e97353dcc5587b85986cda4ff3ec98081d7e84dd95e8b2a6d59820f0545f8a", size = 218673, upload-time = "2025-12-08T13:13:12.562Z" }, - { url = "https://files.pythonhosted.org/packages/63/ab/8fa097db361a1e8586535ae5073559e6229596b3489ec3ef2f5b38df8cb2/coverage-7.13.0-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:99acd4dfdfeb58e1937629eb1ab6ab0899b131f183ee5f23e0b5da5cba2fec74", size = 249652, upload-time = "2025-12-08T13:13:13.909Z" }, - { url = "https://files.pythonhosted.org/packages/90/3a/9bfd4de2ff191feb37ef9465855ca56a6f2f30a3bca172e474130731ac3d/coverage-7.13.0-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ff45e0cd8451e293b63ced93161e189780baf444119391b3e7d25315060368a6", size = 252251, upload-time = "2025-12-08T13:13:15.553Z" }, - { url = "https://files.pythonhosted.org/packages/df/61/b5d8105f016e1b5874af0d7c67542da780ccd4a5f2244a433d3e20ceb1ad/coverage-7.13.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f4f72a85316d8e13234cafe0a9f81b40418ad7a082792fa4165bd7d45d96066b", size = 253492, upload-time = "2025-12-08T13:13:16.849Z" }, - { url = "https://files.pythonhosted.org/packages/f3/b8/0fad449981803cc47a4694768b99823fb23632150743f9c83af329bb6090/coverage-7.13.0-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:11c21557d0e0a5a38632cbbaca5f008723b26a89d70db6315523df6df77d6232", size = 249850, upload-time = "2025-12-08T13:13:18.142Z" }, - { url = "https://files.pythonhosted.org/packages/9a/e9/8d68337c3125014d918cf4327d5257553a710a2995a6a6de2ac77e5aa429/coverage-7.13.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:76541dc8d53715fb4f7a3a06b34b0dc6846e3c69bc6204c55653a85dd6220971", size = 251633, upload-time = "2025-12-08T13:13:19.56Z" }, - { url = "https://files.pythonhosted.org/packages/55/14/d4112ab26b3a1bc4b3c1295d8452dcf399ed25be4cf649002fb3e64b2d93/coverage-7.13.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6e9e451dee940a86789134b6b0ffbe31c454ade3b849bb8a9d2cca2541a8e91d", size = 249586, upload-time = "2025-12-08T13:13:20.883Z" }, - { url = "https://files.pythonhosted.org/packages/2c/a9/22b0000186db663b0d82f86c2f1028099ae9ac202491685051e2a11a5218/coverage-7.13.0-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:5c67dace46f361125e6b9cace8fe0b729ed8479f47e70c89b838d319375c8137", size = 249412, upload-time = "2025-12-08T13:13:22.22Z" }, - { url = "https://files.pythonhosted.org/packages/a1/2e/42d8e0d9e7527fba439acdc6ed24a2b97613b1dc85849b1dd935c2cffef0/coverage-7.13.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f59883c643cb19630500f57016f76cfdcd6845ca8c5b5ea1f6e17f74c8e5f511", size = 251191, upload-time = "2025-12-08T13:13:23.899Z" }, - { url = "https://files.pythonhosted.org/packages/a4/af/8c7af92b1377fd8860536aadd58745119252aaaa71a5213e5a8e8007a9f5/coverage-7.13.0-cp313-cp313-win32.whl", hash = "sha256:58632b187be6f0be500f553be41e277712baa278147ecb7559983c6d9faf7ae1", size = 220829, upload-time = "2025-12-08T13:13:25.182Z" }, - { url = "https://files.pythonhosted.org/packages/58/f9/725e8bf16f343d33cbe076c75dc8370262e194ff10072c0608b8e5cf33a3/coverage-7.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:73419b89f812f498aca53f757dd834919b48ce4799f9d5cad33ca0ae442bdb1a", size = 221640, upload-time = "2025-12-08T13:13:26.836Z" }, - { url = "https://files.pythonhosted.org/packages/8a/ff/e98311000aa6933cc79274e2b6b94a2fe0fe3434fca778eba82003675496/coverage-7.13.0-cp313-cp313-win_arm64.whl", hash = "sha256:eb76670874fdd6091eedcc856128ee48c41a9bbbb9c3f1c7c3cf169290e3ffd6", size = 220269, upload-time = "2025-12-08T13:13:28.116Z" }, - { url = "https://files.pythonhosted.org/packages/cf/cf/bbaa2e1275b300343ea865f7d424cc0a2e2a1df6925a070b2b2d5d765330/coverage-7.13.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:6e63ccc6e0ad8986386461c3c4b737540f20426e7ec932f42e030320896c311a", size = 218990, upload-time = "2025-12-08T13:13:29.463Z" }, - { url = "https://files.pythonhosted.org/packages/21/1d/82f0b3323b3d149d7672e7744c116e9c170f4957e0c42572f0366dbb4477/coverage-7.13.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:494f5459ffa1bd45e18558cd98710c36c0b8fbfa82a5eabcbe671d80ecffbfe8", size = 219340, upload-time = "2025-12-08T13:13:31.524Z" }, - { url = "https://files.pythonhosted.org/packages/fb/e3/fe3fd4702a3832a255f4d43013eacb0ef5fc155a5960ea9269d8696db28b/coverage-7.13.0-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:06cac81bf10f74034e055e903f5f946e3e26fc51c09fc9f584e4a1605d977053", size = 260638, upload-time = "2025-12-08T13:13:32.965Z" }, - { url = "https://files.pythonhosted.org/packages/ad/01/63186cb000307f2b4da463f72af9b85d380236965574c78e7e27680a2593/coverage-7.13.0-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f2ffc92b46ed6e6760f1d47a71e56b5664781bc68986dbd1836b2b70c0ce2071", size = 262705, upload-time = "2025-12-08T13:13:34.378Z" }, - { url = "https://files.pythonhosted.org/packages/7c/a1/c0dacef0cc865f2455d59eed3548573ce47ed603205ffd0735d1d78b5906/coverage-7.13.0-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0602f701057c6823e5db1b74530ce85f17c3c5be5c85fc042ac939cbd909426e", size = 265125, upload-time = "2025-12-08T13:13:35.73Z" }, - { url = "https://files.pythonhosted.org/packages/ef/92/82b99223628b61300bd382c205795533bed021505eab6dd86e11fb5d7925/coverage-7.13.0-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:25dc33618d45456ccb1d37bce44bc78cf269909aa14c4db2e03d63146a8a1493", size = 259844, upload-time = "2025-12-08T13:13:37.69Z" }, - { url = "https://files.pythonhosted.org/packages/cf/2c/89b0291ae4e6cd59ef042708e1c438e2290f8c31959a20055d8768349ee2/coverage-7.13.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:71936a8b3b977ddd0b694c28c6a34f4fff2e9dd201969a4ff5d5fc7742d614b0", size = 262700, upload-time = "2025-12-08T13:13:39.525Z" }, - { url = "https://files.pythonhosted.org/packages/bf/f9/a5f992efae1996245e796bae34ceb942b05db275e4b34222a9a40b9fbd3b/coverage-7.13.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:936bc20503ce24770c71938d1369461f0c5320830800933bc3956e2a4ded930e", size = 260321, upload-time = "2025-12-08T13:13:41.172Z" }, - { url = "https://files.pythonhosted.org/packages/4c/89/a29f5d98c64fedbe32e2ac3c227fbf78edc01cc7572eee17d61024d89889/coverage-7.13.0-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:af0a583efaacc52ae2521f8d7910aff65cdb093091d76291ac5820d5e947fc1c", size = 259222, upload-time = "2025-12-08T13:13:43.282Z" }, - { url = "https://files.pythonhosted.org/packages/b3/c3/940fe447aae302a6701ee51e53af7e08b86ff6eed7631e5740c157ee22b9/coverage-7.13.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:f1c23e24a7000da892a312fb17e33c5f94f8b001de44b7cf8ba2e36fbd15859e", size = 261411, upload-time = "2025-12-08T13:13:44.72Z" }, - { url = "https://files.pythonhosted.org/packages/eb/31/12a4aec689cb942a89129587860ed4d0fd522d5fda81237147fde554b8ae/coverage-7.13.0-cp313-cp313t-win32.whl", hash = "sha256:5f8a0297355e652001015e93be345ee54393e45dc3050af4a0475c5a2b767d46", size = 221505, upload-time = "2025-12-08T13:13:46.332Z" }, - { url = "https://files.pythonhosted.org/packages/65/8c/3b5fe3259d863572d2b0827642c50c3855d26b3aefe80bdc9eba1f0af3b0/coverage-7.13.0-cp313-cp313t-win_amd64.whl", hash = "sha256:6abb3a4c52f05e08460bd9acf04fec027f8718ecaa0d09c40ffbc3fbd70ecc39", size = 222569, upload-time = "2025-12-08T13:13:47.79Z" }, - { url = "https://files.pythonhosted.org/packages/b0/39/f71fa8316a96ac72fc3908839df651e8eccee650001a17f2c78cdb355624/coverage-7.13.0-cp313-cp313t-win_arm64.whl", hash = "sha256:3ad968d1e3aa6ce5be295ab5fe3ae1bf5bb4769d0f98a80a0252d543a2ef2e9e", size = 220841, upload-time = "2025-12-08T13:13:49.243Z" }, - { url = "https://files.pythonhosted.org/packages/f8/4b/9b54bedda55421449811dcd5263a2798a63f48896c24dfb92b0f1b0845bd/coverage-7.13.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:453b7ec753cf5e4356e14fe858064e5520c460d3bbbcb9c35e55c0d21155c256", size = 218343, upload-time = "2025-12-08T13:13:50.811Z" }, - { url = "https://files.pythonhosted.org/packages/59/df/c3a1f34d4bba2e592c8979f924da4d3d4598b0df2392fbddb7761258e3dc/coverage-7.13.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:af827b7cbb303e1befa6c4f94fd2bf72f108089cfa0f8abab8f4ca553cf5ca5a", size = 218672, upload-time = "2025-12-08T13:13:52.284Z" }, - { url = "https://files.pythonhosted.org/packages/07/62/eec0659e47857698645ff4e6ad02e30186eb8afd65214fd43f02a76537cb/coverage-7.13.0-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9987a9e4f8197a1000280f7cc089e3ea2c8b3c0a64d750537809879a7b4ceaf9", size = 249715, upload-time = "2025-12-08T13:13:53.791Z" }, - { url = "https://files.pythonhosted.org/packages/23/2d/3c7ff8b2e0e634c1f58d095f071f52ed3c23ff25be524b0ccae8b71f99f8/coverage-7.13.0-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3188936845cd0cb114fa6a51842a304cdbac2958145d03be2377ec41eb285d19", size = 252225, upload-time = "2025-12-08T13:13:55.274Z" }, - { url = "https://files.pythonhosted.org/packages/aa/ac/fb03b469d20e9c9a81093575003f959cf91a4a517b783aab090e4538764b/coverage-7.13.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a2bdb3babb74079f021696cb46b8bb5f5661165c385d3a238712b031a12355be", size = 253559, upload-time = "2025-12-08T13:13:57.161Z" }, - { url = "https://files.pythonhosted.org/packages/29/62/14afa9e792383c66cc0a3b872a06ded6e4ed1079c7d35de274f11d27064e/coverage-7.13.0-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:7464663eaca6adba4175f6c19354feea61ebbdd735563a03d1e472c7072d27bb", size = 249724, upload-time = "2025-12-08T13:13:58.692Z" }, - { url = "https://files.pythonhosted.org/packages/31/b7/333f3dab2939070613696ab3ee91738950f0467778c6e5a5052e840646b7/coverage-7.13.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:8069e831f205d2ff1f3d355e82f511eb7c5522d7d413f5db5756b772ec8697f8", size = 251582, upload-time = "2025-12-08T13:14:00.642Z" }, - { url = "https://files.pythonhosted.org/packages/81/cb/69162bda9381f39b2287265d7e29ee770f7c27c19f470164350a38318764/coverage-7.13.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:6fb2d5d272341565f08e962cce14cdf843a08ac43bd621783527adb06b089c4b", size = 249538, upload-time = "2025-12-08T13:14:02.556Z" }, - { url = "https://files.pythonhosted.org/packages/e0/76/350387b56a30f4970abe32b90b2a434f87d29f8b7d4ae40d2e8a85aacfb3/coverage-7.13.0-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:5e70f92ef89bac1ac8a99b3324923b4749f008fdbd7aa9cb35e01d7a284a04f9", size = 249349, upload-time = "2025-12-08T13:14:04.015Z" }, - { url = "https://files.pythonhosted.org/packages/86/0d/7f6c42b8d59f4c7e43ea3059f573c0dcfed98ba46eb43c68c69e52ae095c/coverage-7.13.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:4b5de7d4583e60d5fd246dd57fcd3a8aa23c6e118a8c72b38adf666ba8e7e927", size = 251011, upload-time = "2025-12-08T13:14:05.505Z" }, - { url = "https://files.pythonhosted.org/packages/d7/f1/4bb2dff379721bb0b5c649d5c5eaf438462cad824acf32eb1b7ca0c7078e/coverage-7.13.0-cp314-cp314-win32.whl", hash = "sha256:a6c6e16b663be828a8f0b6c5027d36471d4a9f90d28444aa4ced4d48d7d6ae8f", size = 221091, upload-time = "2025-12-08T13:14:07.127Z" }, - { url = "https://files.pythonhosted.org/packages/ba/44/c239da52f373ce379c194b0ee3bcc121020e397242b85f99e0afc8615066/coverage-7.13.0-cp314-cp314-win_amd64.whl", hash = "sha256:0900872f2fdb3ee5646b557918d02279dc3af3dfb39029ac4e945458b13f73bc", size = 221904, upload-time = "2025-12-08T13:14:08.542Z" }, - { url = "https://files.pythonhosted.org/packages/89/1f/b9f04016d2a29c2e4a0307baefefad1a4ec5724946a2b3e482690486cade/coverage-7.13.0-cp314-cp314-win_arm64.whl", hash = "sha256:3a10260e6a152e5f03f26db4a407c4c62d3830b9af9b7c0450b183615f05d43b", size = 220480, upload-time = "2025-12-08T13:14:10.958Z" }, - { url = "https://files.pythonhosted.org/packages/16/d4/364a1439766c8e8647860584171c36010ca3226e6e45b1753b1b249c5161/coverage-7.13.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9097818b6cc1cfb5f174e3263eba4a62a17683bcfe5c4b5d07f4c97fa51fbf28", size = 219074, upload-time = "2025-12-08T13:14:13.345Z" }, - { url = "https://files.pythonhosted.org/packages/ce/f4/71ba8be63351e099911051b2089662c03d5671437a0ec2171823c8e03bec/coverage-7.13.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0018f73dfb4301a89292c73be6ba5f58722ff79f51593352759c1790ded1cabe", size = 219342, upload-time = "2025-12-08T13:14:15.02Z" }, - { url = "https://files.pythonhosted.org/packages/5e/25/127d8ed03d7711a387d96f132589057213e3aef7475afdaa303412463f22/coverage-7.13.0-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:166ad2a22ee770f5656e1257703139d3533b4a0b6909af67c6b4a3adc1c98657", size = 260713, upload-time = "2025-12-08T13:14:16.907Z" }, - { url = "https://files.pythonhosted.org/packages/fd/db/559fbb6def07d25b2243663b46ba9eb5a3c6586c0c6f4e62980a68f0ee1c/coverage-7.13.0-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f6aaef16d65d1787280943f1c8718dc32e9cf141014e4634d64446702d26e0ff", size = 262825, upload-time = "2025-12-08T13:14:18.68Z" }, - { url = "https://files.pythonhosted.org/packages/37/99/6ee5bf7eff884766edb43bd8736b5e1c5144d0fe47498c3779326fe75a35/coverage-7.13.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e999e2dcc094002d6e2c7bbc1fb85b58ba4f465a760a8014d97619330cdbbbf3", size = 265233, upload-time = "2025-12-08T13:14:20.55Z" }, - { url = "https://files.pythonhosted.org/packages/d8/90/92f18fe0356ea69e1f98f688ed80cec39f44e9f09a1f26a1bbf017cc67f2/coverage-7.13.0-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:00c3d22cf6fb1cf3bf662aaaa4e563be8243a5ed2630339069799835a9cc7f9b", size = 259779, upload-time = "2025-12-08T13:14:22.367Z" }, - { url = "https://files.pythonhosted.org/packages/90/5d/b312a8b45b37a42ea7d27d7d3ff98ade3a6c892dd48d1d503e773503373f/coverage-7.13.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22ccfe8d9bb0d6134892cbe1262493a8c70d736b9df930f3f3afae0fe3ac924d", size = 262700, upload-time = "2025-12-08T13:14:24.309Z" }, - { url = "https://files.pythonhosted.org/packages/63/f8/b1d0de5c39351eb71c366f872376d09386640840a2e09b0d03973d791e20/coverage-7.13.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:9372dff5ea15930fea0445eaf37bbbafbc771a49e70c0aeed8b4e2c2614cc00e", size = 260302, upload-time = "2025-12-08T13:14:26.068Z" }, - { url = "https://files.pythonhosted.org/packages/aa/7c/d42f4435bc40c55558b3109a39e2d456cddcec37434f62a1f1230991667a/coverage-7.13.0-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:69ac2c492918c2461bc6ace42d0479638e60719f2a4ef3f0815fa2df88e9f940", size = 259136, upload-time = "2025-12-08T13:14:27.604Z" }, - { url = "https://files.pythonhosted.org/packages/b8/d3/23413241dc04d47cfe19b9a65b32a2edd67ecd0b817400c2843ebc58c847/coverage-7.13.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:739c6c051a7540608d097b8e13c76cfa85263ced467168dc6b477bae3df7d0e2", size = 261467, upload-time = "2025-12-08T13:14:29.09Z" }, - { url = "https://files.pythonhosted.org/packages/13/e6/6e063174500eee216b96272c0d1847bf215926786f85c2bd024cf4d02d2f/coverage-7.13.0-cp314-cp314t-win32.whl", hash = "sha256:fe81055d8c6c9de76d60c94ddea73c290b416e061d40d542b24a5871bad498b7", size = 221875, upload-time = "2025-12-08T13:14:31.106Z" }, - { url = "https://files.pythonhosted.org/packages/3b/46/f4fb293e4cbe3620e3ac2a3e8fd566ed33affb5861a9b20e3dd6c1896cbc/coverage-7.13.0-cp314-cp314t-win_amd64.whl", hash = "sha256:445badb539005283825959ac9fa4a28f712c214b65af3a2c464f1adc90f5fcbc", size = 222982, upload-time = "2025-12-08T13:14:33.1Z" }, - { url = "https://files.pythonhosted.org/packages/68/62/5b3b9018215ed9733fbd1ae3b2ed75c5de62c3b55377a52cae732e1b7805/coverage-7.13.0-cp314-cp314t-win_arm64.whl", hash = "sha256:de7f6748b890708578fc4b7bb967d810aeb6fcc9bff4bb77dbca77dab2f9df6a", size = 221016, upload-time = "2025-12-08T13:14:34.601Z" }, - { url = "https://files.pythonhosted.org/packages/8d/4c/1968f32fb9a2604645827e11ff84a31e59d532e01995f904723b4f5328b3/coverage-7.13.0-py3-none-any.whl", hash = "sha256:850d2998f380b1e266459ca5b47bc9e7daf9af1d070f66317972f382d46f1904", size = 210068, upload-time = "2025-12-08T13:14:36.236Z" }, + { url = "https://files.pythonhosted.org/packages/2d/9a/3742e58fd04b233df95c012ee9f3dfe04708a5e1d32613bd2d47d4e1be0d/coverage-7.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e1fa280b3ad78eea5be86f94f461c04943d942697e0dac889fa18fff8f5f9147", size = 218633, upload-time = "2025-12-28T15:40:10.165Z" }, + { url = "https://files.pythonhosted.org/packages/7e/45/7e6bdc94d89cd7c8017ce735cf50478ddfe765d4fbf0c24d71d30ea33d7a/coverage-7.13.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c3d8c679607220979434f494b139dfb00131ebf70bb406553d69c1ff01a5c33d", size = 219147, upload-time = "2025-12-28T15:40:12.069Z" }, + { url = "https://files.pythonhosted.org/packages/f7/38/0d6a258625fd7f10773fe94097dc16937a5f0e3e0cdf3adef67d3ac6baef/coverage-7.13.1-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:339dc63b3eba969067b00f41f15ad161bf2946613156fb131266d8debc8e44d0", size = 245894, upload-time = "2025-12-28T15:40:13.556Z" }, + { url = "https://files.pythonhosted.org/packages/27/58/409d15ea487986994cbd4d06376e9860e9b157cfbfd402b1236770ab8dd2/coverage-7.13.1-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:db622b999ffe49cb891f2fff3b340cdc2f9797d01a0a202a0973ba2562501d90", size = 247721, upload-time = "2025-12-28T15:40:15.37Z" }, + { url = "https://files.pythonhosted.org/packages/da/bf/6e8056a83fd7a96c93341f1ffe10df636dd89f26d5e7b9ca511ce3bcf0df/coverage-7.13.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1443ba9acbb593fa7c1c29e011d7c9761545fe35e7652e85ce7f51a16f7e08d", size = 249585, upload-time = "2025-12-28T15:40:17.226Z" }, + { url = "https://files.pythonhosted.org/packages/f4/15/e1daff723f9f5959acb63cbe35b11203a9df77ee4b95b45fffd38b318390/coverage-7.13.1-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c832ec92c4499ac463186af72f9ed4d8daec15499b16f0a879b0d1c8e5cf4a3b", size = 246597, upload-time = "2025-12-28T15:40:19.028Z" }, + { url = "https://files.pythonhosted.org/packages/74/a6/1efd31c5433743a6ddbc9d37ac30c196bb07c7eab3d74fbb99b924c93174/coverage-7.13.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:562ec27dfa3f311e0db1ba243ec6e5f6ab96b1edfcfc6cf86f28038bc4961ce6", size = 247626, upload-time = "2025-12-28T15:40:20.846Z" }, + { url = "https://files.pythonhosted.org/packages/6d/9f/1609267dd3e749f57fdd66ca6752567d1c13b58a20a809dc409b263d0b5f/coverage-7.13.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:4de84e71173d4dada2897e5a0e1b7877e5eefbfe0d6a44edee6ce31d9b8ec09e", size = 245629, upload-time = "2025-12-28T15:40:22.397Z" }, + { url = "https://files.pythonhosted.org/packages/e2/f6/6815a220d5ec2466383d7cc36131b9fa6ecbe95c50ec52a631ba733f306a/coverage-7.13.1-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:a5a68357f686f8c4d527a2dc04f52e669c2fc1cbde38f6f7eb6a0e58cbd17cae", size = 245901, upload-time = "2025-12-28T15:40:23.836Z" }, + { url = "https://files.pythonhosted.org/packages/ac/58/40576554cd12e0872faf6d2c0eb3bc85f71d78427946ddd19ad65201e2c0/coverage-7.13.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:77cc258aeb29a3417062758975521eae60af6f79e930d6993555eeac6a8eac29", size = 246505, upload-time = "2025-12-28T15:40:25.421Z" }, + { url = "https://files.pythonhosted.org/packages/3b/77/9233a90253fba576b0eee81707b5781d0e21d97478e5377b226c5b096c0f/coverage-7.13.1-cp310-cp310-win32.whl", hash = "sha256:bb4f8c3c9a9f34423dba193f241f617b08ffc63e27f67159f60ae6baf2dcfe0f", size = 221257, upload-time = "2025-12-28T15:40:27.217Z" }, + { url = "https://files.pythonhosted.org/packages/e0/43/e842ff30c1a0a623ec80db89befb84a3a7aad7bfe44a6ea77d5a3e61fedd/coverage-7.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:c8e2706ceb622bc63bac98ebb10ef5da80ed70fbd8a7999a5076de3afaef0fb1", size = 222191, upload-time = "2025-12-28T15:40:28.916Z" }, + { url = "https://files.pythonhosted.org/packages/b4/9b/77baf488516e9ced25fc215a6f75d803493fc3f6a1a1227ac35697910c2a/coverage-7.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a55d509a1dc5a5b708b5dad3b5334e07a16ad4c2185e27b40e4dba796ab7f88", size = 218755, upload-time = "2025-12-28T15:40:30.812Z" }, + { url = "https://files.pythonhosted.org/packages/d7/cd/7ab01154e6eb79ee2fab76bf4d89e94c6648116557307ee4ebbb85e5c1bf/coverage-7.13.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4d010d080c4888371033baab27e47c9df7d6fb28d0b7b7adf85a4a49be9298b3", size = 219257, upload-time = "2025-12-28T15:40:32.333Z" }, + { url = "https://files.pythonhosted.org/packages/01/d5/b11ef7863ffbbdb509da0023fad1e9eda1c0eaea61a6d2ea5b17d4ac706e/coverage-7.13.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d938b4a840fb1523b9dfbbb454f652967f18e197569c32266d4d13f37244c3d9", size = 249657, upload-time = "2025-12-28T15:40:34.1Z" }, + { url = "https://files.pythonhosted.org/packages/f7/7c/347280982982383621d29b8c544cf497ae07ac41e44b1ca4903024131f55/coverage-7.13.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bf100a3288f9bb7f919b87eb84f87101e197535b9bd0e2c2b5b3179633324fee", size = 251581, upload-time = "2025-12-28T15:40:36.131Z" }, + { url = "https://files.pythonhosted.org/packages/82/f6/ebcfed11036ade4c0d75fa4453a6282bdd225bc073862766eec184a4c643/coverage-7.13.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef6688db9bf91ba111ae734ba6ef1a063304a881749726e0d3575f5c10a9facf", size = 253691, upload-time = "2025-12-28T15:40:37.626Z" }, + { url = "https://files.pythonhosted.org/packages/02/92/af8f5582787f5d1a8b130b2dcba785fa5e9a7a8e121a0bb2220a6fdbdb8a/coverage-7.13.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0b609fc9cdbd1f02e51f67f51e5aee60a841ef58a68d00d5ee2c0faf357481a3", size = 249799, upload-time = "2025-12-28T15:40:39.47Z" }, + { url = "https://files.pythonhosted.org/packages/24/aa/0e39a2a3b16eebf7f193863323edbff38b6daba711abaaf807d4290cf61a/coverage-7.13.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c43257717611ff5e9a1d79dce8e47566235ebda63328718d9b65dd640bc832ef", size = 251389, upload-time = "2025-12-28T15:40:40.954Z" }, + { url = "https://files.pythonhosted.org/packages/73/46/7f0c13111154dc5b978900c0ccee2e2ca239b910890e674a77f1363d483e/coverage-7.13.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e09fbecc007f7b6afdfb3b07ce5bd9f8494b6856dd4f577d26c66c391b829851", size = 249450, upload-time = "2025-12-28T15:40:42.489Z" }, + { url = "https://files.pythonhosted.org/packages/ac/ca/e80da6769e8b669ec3695598c58eef7ad98b0e26e66333996aee6316db23/coverage-7.13.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:a03a4f3a19a189919c7055098790285cc5c5b0b3976f8d227aea39dbf9f8bfdb", size = 249170, upload-time = "2025-12-28T15:40:44.279Z" }, + { url = "https://files.pythonhosted.org/packages/af/18/9e29baabdec1a8644157f572541079b4658199cfd372a578f84228e860de/coverage-7.13.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3820778ea1387c2b6a818caec01c63adc5b3750211af6447e8dcfb9b6f08dbba", size = 250081, upload-time = "2025-12-28T15:40:45.748Z" }, + { url = "https://files.pythonhosted.org/packages/00/f8/c3021625a71c3b2f516464d322e41636aea381018319050a8114105872ee/coverage-7.13.1-cp311-cp311-win32.whl", hash = "sha256:ff10896fa55167371960c5908150b434b71c876dfab97b69478f22c8b445ea19", size = 221281, upload-time = "2025-12-28T15:40:47.232Z" }, + { url = "https://files.pythonhosted.org/packages/27/56/c216625f453df6e0559ed666d246fcbaaa93f3aa99eaa5080cea1229aa3d/coverage-7.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:a998cc0aeeea4c6d5622a3754da5a493055d2d95186bad877b0a34ea6e6dbe0a", size = 222215, upload-time = "2025-12-28T15:40:49.19Z" }, + { url = "https://files.pythonhosted.org/packages/5c/9a/be342e76f6e531cae6406dc46af0d350586f24d9b67fdfa6daee02df71af/coverage-7.13.1-cp311-cp311-win_arm64.whl", hash = "sha256:fea07c1a39a22614acb762e3fbbb4011f65eedafcb2948feeef641ac78b4ee5c", size = 220886, upload-time = "2025-12-28T15:40:51.067Z" }, + { url = "https://files.pythonhosted.org/packages/ce/8a/87af46cccdfa78f53db747b09f5f9a21d5fc38d796834adac09b30a8ce74/coverage-7.13.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6f34591000f06e62085b1865c9bc5f7858df748834662a51edadfd2c3bfe0dd3", size = 218927, upload-time = "2025-12-28T15:40:52.814Z" }, + { url = "https://files.pythonhosted.org/packages/82/a8/6e22fdc67242a4a5a153f9438d05944553121c8f4ba70cb072af4c41362e/coverage-7.13.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b67e47c5595b9224599016e333f5ec25392597a89d5744658f837d204e16c63e", size = 219288, upload-time = "2025-12-28T15:40:54.262Z" }, + { url = "https://files.pythonhosted.org/packages/d0/0a/853a76e03b0f7c4375e2ca025df45c918beb367f3e20a0a8e91967f6e96c/coverage-7.13.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3e7b8bd70c48ffb28461ebe092c2345536fb18bbbf19d287c8913699735f505c", size = 250786, upload-time = "2025-12-28T15:40:56.059Z" }, + { url = "https://files.pythonhosted.org/packages/ea/b4/694159c15c52b9f7ec7adf49d50e5f8ee71d3e9ef38adb4445d13dd56c20/coverage-7.13.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c223d078112e90dc0e5c4e35b98b9584164bea9fbbd221c0b21c5241f6d51b62", size = 253543, upload-time = "2025-12-28T15:40:57.585Z" }, + { url = "https://files.pythonhosted.org/packages/96/b2/7f1f0437a5c855f87e17cf5d0dc35920b6440ff2b58b1ba9788c059c26c8/coverage-7.13.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:794f7c05af0763b1bbd1b9e6eff0e52ad068be3b12cd96c87de037b01390c968", size = 254635, upload-time = "2025-12-28T15:40:59.443Z" }, + { url = "https://files.pythonhosted.org/packages/e9/d1/73c3fdb8d7d3bddd9473c9c6a2e0682f09fc3dfbcb9c3f36412a7368bcab/coverage-7.13.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0642eae483cc8c2902e4af7298bf886d605e80f26382124cddc3967c2a3df09e", size = 251202, upload-time = "2025-12-28T15:41:01.328Z" }, + { url = "https://files.pythonhosted.org/packages/66/3c/f0edf75dcc152f145d5598329e864bbbe04ab78660fe3e8e395f9fff010f/coverage-7.13.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9f5e772ed5fef25b3de9f2008fe67b92d46831bd2bc5bdc5dd6bfd06b83b316f", size = 252566, upload-time = "2025-12-28T15:41:03.319Z" }, + { url = "https://files.pythonhosted.org/packages/17/b3/e64206d3c5f7dcbceafd14941345a754d3dbc78a823a6ed526e23b9cdaab/coverage-7.13.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:45980ea19277dc0a579e432aef6a504fe098ef3a9032ead15e446eb0f1191aee", size = 250711, upload-time = "2025-12-28T15:41:06.411Z" }, + { url = "https://files.pythonhosted.org/packages/dc/ad/28a3eb970a8ef5b479ee7f0c484a19c34e277479a5b70269dc652b730733/coverage-7.13.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:e4f18eca6028ffa62adbd185a8f1e1dd242f2e68164dba5c2b74a5204850b4cf", size = 250278, upload-time = "2025-12-28T15:41:08.285Z" }, + { url = "https://files.pythonhosted.org/packages/54/e3/c8f0f1a93133e3e1291ca76cbb63565bd4b5c5df63b141f539d747fff348/coverage-7.13.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:f8dca5590fec7a89ed6826fce625595279e586ead52e9e958d3237821fbc750c", size = 252154, upload-time = "2025-12-28T15:41:09.969Z" }, + { url = "https://files.pythonhosted.org/packages/d0/bf/9939c5d6859c380e405b19e736321f1c7d402728792f4c752ad1adcce005/coverage-7.13.1-cp312-cp312-win32.whl", hash = "sha256:ff86d4e85188bba72cfb876df3e11fa243439882c55957184af44a35bd5880b7", size = 221487, upload-time = "2025-12-28T15:41:11.468Z" }, + { url = "https://files.pythonhosted.org/packages/fa/dc/7282856a407c621c2aad74021680a01b23010bb8ebf427cf5eacda2e876f/coverage-7.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:16cc1da46c04fb0fb128b4dc430b78fa2aba8a6c0c9f8eb391fd5103409a6ac6", size = 222299, upload-time = "2025-12-28T15:41:13.386Z" }, + { url = "https://files.pythonhosted.org/packages/10/79/176a11203412c350b3e9578620013af35bcdb79b651eb976f4a4b32044fa/coverage-7.13.1-cp312-cp312-win_arm64.whl", hash = "sha256:8d9bc218650022a768f3775dd7fdac1886437325d8d295d923ebcfef4892ad5c", size = 220941, upload-time = "2025-12-28T15:41:14.975Z" }, + { url = "https://files.pythonhosted.org/packages/a3/a4/e98e689347a1ff1a7f67932ab535cef82eb5e78f32a9e4132e114bbb3a0a/coverage-7.13.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cb237bfd0ef4d5eb6a19e29f9e528ac67ac3be932ea6b44fb6cc09b9f3ecff78", size = 218951, upload-time = "2025-12-28T15:41:16.653Z" }, + { url = "https://files.pythonhosted.org/packages/32/33/7cbfe2bdc6e2f03d6b240d23dc45fdaf3fd270aaf2d640be77b7f16989ab/coverage-7.13.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1dcb645d7e34dcbcc96cd7c132b1fc55c39263ca62eb961c064eb3928997363b", size = 219325, upload-time = "2025-12-28T15:41:18.609Z" }, + { url = "https://files.pythonhosted.org/packages/59/f6/efdabdb4929487baeb7cb2a9f7dac457d9356f6ad1b255be283d58b16316/coverage-7.13.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3d42df8201e00384736f0df9be2ced39324c3907607d17d50d50116c989d84cd", size = 250309, upload-time = "2025-12-28T15:41:20.629Z" }, + { url = "https://files.pythonhosted.org/packages/12/da/91a52516e9d5aea87d32d1523f9cdcf7a35a3b298e6be05d6509ba3cfab2/coverage-7.13.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fa3edde1aa8807de1d05934982416cb3ec46d1d4d91e280bcce7cca01c507992", size = 252907, upload-time = "2025-12-28T15:41:22.257Z" }, + { url = "https://files.pythonhosted.org/packages/75/38/f1ea837e3dc1231e086db1638947e00d264e7e8c41aa8ecacf6e1e0c05f4/coverage-7.13.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9edd0e01a343766add6817bc448408858ba6b489039eaaa2018474e4001651a4", size = 254148, upload-time = "2025-12-28T15:41:23.87Z" }, + { url = "https://files.pythonhosted.org/packages/7f/43/f4f16b881aaa34954ba446318dea6b9ed5405dd725dd8daac2358eda869a/coverage-7.13.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:985b7836931d033570b94c94713c6dba5f9d3ff26045f72c3e5dbc5fe3361e5a", size = 250515, upload-time = "2025-12-28T15:41:25.437Z" }, + { url = "https://files.pythonhosted.org/packages/84/34/8cba7f00078bd468ea914134e0144263194ce849ec3baad187ffb6203d1c/coverage-7.13.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ffed1e4980889765c84a5d1a566159e363b71d6b6fbaf0bebc9d3c30bc016766", size = 252292, upload-time = "2025-12-28T15:41:28.459Z" }, + { url = "https://files.pythonhosted.org/packages/8c/a4/cffac66c7652d84ee4ac52d3ccb94c015687d3b513f9db04bfcac2ac800d/coverage-7.13.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8842af7f175078456b8b17f1b73a0d16a65dcbdc653ecefeb00a56b3c8c298c4", size = 250242, upload-time = "2025-12-28T15:41:30.02Z" }, + { url = "https://files.pythonhosted.org/packages/f4/78/9a64d462263dde416f3c0067efade7b52b52796f489b1037a95b0dc389c9/coverage-7.13.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:ccd7a6fca48ca9c131d9b0a2972a581e28b13416fc313fb98b6d24a03ce9a398", size = 250068, upload-time = "2025-12-28T15:41:32.007Z" }, + { url = "https://files.pythonhosted.org/packages/69/c8/a8994f5fece06db7c4a97c8fc1973684e178599b42e66280dded0524ef00/coverage-7.13.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0403f647055de2609be776965108447deb8e384fe4a553c119e3ff6bfbab4784", size = 251846, upload-time = "2025-12-28T15:41:33.946Z" }, + { url = "https://files.pythonhosted.org/packages/cc/f7/91fa73c4b80305c86598a2d4e54ba22df6bf7d0d97500944af7ef155d9f7/coverage-7.13.1-cp313-cp313-win32.whl", hash = "sha256:549d195116a1ba1e1ae2f5ca143f9777800f6636eab917d4f02b5310d6d73461", size = 221512, upload-time = "2025-12-28T15:41:35.519Z" }, + { url = "https://files.pythonhosted.org/packages/45/0b/0768b4231d5a044da8f75e097a8714ae1041246bb765d6b5563bab456735/coverage-7.13.1-cp313-cp313-win_amd64.whl", hash = "sha256:5899d28b5276f536fcf840b18b61a9fce23cc3aec1d114c44c07fe94ebeaa500", size = 222321, upload-time = "2025-12-28T15:41:37.371Z" }, + { url = "https://files.pythonhosted.org/packages/9b/b8/bdcb7253b7e85157282450262008f1366aa04663f3e3e4c30436f596c3e2/coverage-7.13.1-cp313-cp313-win_arm64.whl", hash = "sha256:868a2fae76dfb06e87291bcbd4dcbcc778a8500510b618d50496e520bd94d9b9", size = 220949, upload-time = "2025-12-28T15:41:39.553Z" }, + { url = "https://files.pythonhosted.org/packages/70/52/f2be52cc445ff75ea8397948c96c1b4ee14f7f9086ea62fc929c5ae7b717/coverage-7.13.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:67170979de0dacac3f3097d02b0ad188d8edcea44ccc44aaa0550af49150c7dc", size = 219643, upload-time = "2025-12-28T15:41:41.567Z" }, + { url = "https://files.pythonhosted.org/packages/47/79/c85e378eaa239e2edec0c5523f71542c7793fe3340954eafb0bc3904d32d/coverage-7.13.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f80e2bb21bfab56ed7405c2d79d34b5dc0bc96c2c1d2a067b643a09fb756c43a", size = 219997, upload-time = "2025-12-28T15:41:43.418Z" }, + { url = "https://files.pythonhosted.org/packages/fe/9b/b1ade8bfb653c0bbce2d6d6e90cc6c254cbb99b7248531cc76253cb4da6d/coverage-7.13.1-cp313-cp313t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f83351e0f7dcdb14d7326c3d8d8c4e915fa685cbfdc6281f9470d97a04e9dfe4", size = 261296, upload-time = "2025-12-28T15:41:45.207Z" }, + { url = "https://files.pythonhosted.org/packages/1f/af/ebf91e3e1a2473d523e87e87fd8581e0aa08741b96265730e2d79ce78d8d/coverage-7.13.1-cp313-cp313t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:bb3f6562e89bad0110afbe64e485aac2462efdce6232cdec7862a095dc3412f6", size = 263363, upload-time = "2025-12-28T15:41:47.163Z" }, + { url = "https://files.pythonhosted.org/packages/c4/8b/fb2423526d446596624ac7fde12ea4262e66f86f5120114c3cfd0bb2befa/coverage-7.13.1-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:77545b5dcda13b70f872c3b5974ac64c21d05e65b1590b441c8560115dc3a0d1", size = 265783, upload-time = "2025-12-28T15:41:49.03Z" }, + { url = "https://files.pythonhosted.org/packages/9b/26/ef2adb1e22674913b89f0fe7490ecadcef4a71fa96f5ced90c60ec358789/coverage-7.13.1-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a4d240d260a1aed814790bbe1f10a5ff31ce6c21bc78f0da4a1e8268d6c80dbd", size = 260508, upload-time = "2025-12-28T15:41:51.035Z" }, + { url = "https://files.pythonhosted.org/packages/ce/7d/f0f59b3404caf662e7b5346247883887687c074ce67ba453ea08c612b1d5/coverage-7.13.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d2287ac9360dec3837bfdad969963a5d073a09a85d898bd86bea82aa8876ef3c", size = 263357, upload-time = "2025-12-28T15:41:52.631Z" }, + { url = "https://files.pythonhosted.org/packages/1a/b1/29896492b0b1a047604d35d6fa804f12818fa30cdad660763a5f3159e158/coverage-7.13.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:0d2c11f3ea4db66b5cbded23b20185c35066892c67d80ec4be4bab257b9ad1e0", size = 260978, upload-time = "2025-12-28T15:41:54.589Z" }, + { url = "https://files.pythonhosted.org/packages/48/f2/971de1238a62e6f0a4128d37adadc8bb882ee96afbe03ff1570291754629/coverage-7.13.1-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:3fc6a169517ca0d7ca6846c3c5392ef2b9e38896f61d615cb75b9e7134d4ee1e", size = 259877, upload-time = "2025-12-28T15:41:56.263Z" }, + { url = "https://files.pythonhosted.org/packages/6a/fc/0474efcbb590ff8628830e9aaec5f1831594874360e3251f1fdec31d07a3/coverage-7.13.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:d10a2ed46386e850bb3de503a54f9fe8192e5917fcbb143bfef653a9355e9a53", size = 262069, upload-time = "2025-12-28T15:41:58.093Z" }, + { url = "https://files.pythonhosted.org/packages/88/4f/3c159b7953db37a7b44c0eab8a95c37d1aa4257c47b4602c04022d5cb975/coverage-7.13.1-cp313-cp313t-win32.whl", hash = "sha256:75a6f4aa904301dab8022397a22c0039edc1f51e90b83dbd4464b8a38dc87842", size = 222184, upload-time = "2025-12-28T15:41:59.763Z" }, + { url = "https://files.pythonhosted.org/packages/58/a5/6b57d28f81417f9335774f20679d9d13b9a8fb90cd6160957aa3b54a2379/coverage-7.13.1-cp313-cp313t-win_amd64.whl", hash = "sha256:309ef5706e95e62578cda256b97f5e097916a2c26247c287bbe74794e7150df2", size = 223250, upload-time = "2025-12-28T15:42:01.52Z" }, + { url = "https://files.pythonhosted.org/packages/81/7c/160796f3b035acfbb58be80e02e484548595aa67e16a6345e7910ace0a38/coverage-7.13.1-cp313-cp313t-win_arm64.whl", hash = "sha256:92f980729e79b5d16d221038dbf2e8f9a9136afa072f9d5d6ed4cb984b126a09", size = 221521, upload-time = "2025-12-28T15:42:03.275Z" }, + { url = "https://files.pythonhosted.org/packages/aa/8e/ba0e597560c6563fc0adb902fda6526df5d4aa73bb10adf0574d03bd2206/coverage-7.13.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:97ab3647280d458a1f9adb85244e81587505a43c0c7cff851f5116cd2814b894", size = 218996, upload-time = "2025-12-28T15:42:04.978Z" }, + { url = "https://files.pythonhosted.org/packages/6b/8e/764c6e116f4221dc7aa26c4061181ff92edb9c799adae6433d18eeba7a14/coverage-7.13.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8f572d989142e0908e6acf57ad1b9b86989ff057c006d13b76c146ec6a20216a", size = 219326, upload-time = "2025-12-28T15:42:06.691Z" }, + { url = "https://files.pythonhosted.org/packages/4f/a6/6130dc6d8da28cdcbb0f2bf8865aeca9b157622f7c0031e48c6cf9a0e591/coverage-7.13.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:d72140ccf8a147e94274024ff6fd8fb7811354cf7ef88b1f0a988ebaa5bc774f", size = 250374, upload-time = "2025-12-28T15:42:08.786Z" }, + { url = "https://files.pythonhosted.org/packages/82/2b/783ded568f7cd6b677762f780ad338bf4b4750205860c17c25f7c708995e/coverage-7.13.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d3c9f051b028810f5a87c88e5d6e9af3c0ff32ef62763bf15d29f740453ca909", size = 252882, upload-time = "2025-12-28T15:42:10.515Z" }, + { url = "https://files.pythonhosted.org/packages/cd/b2/9808766d082e6a4d59eb0cc881a57fc1600eb2c5882813eefff8254f71b5/coverage-7.13.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f398ba4df52d30b1763f62eed9de5620dcde96e6f491f4c62686736b155aa6e4", size = 254218, upload-time = "2025-12-28T15:42:12.208Z" }, + { url = "https://files.pythonhosted.org/packages/44/ea/52a985bb447c871cb4d2e376e401116520991b597c85afdde1ea9ef54f2c/coverage-7.13.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:132718176cc723026d201e347f800cd1a9e4b62ccd3f82476950834dad501c75", size = 250391, upload-time = "2025-12-28T15:42:14.21Z" }, + { url = "https://files.pythonhosted.org/packages/7f/1d/125b36cc12310718873cfc8209ecfbc1008f14f4f5fa0662aa608e579353/coverage-7.13.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9e549d642426e3579b3f4b92d0431543b012dcb6e825c91619d4e93b7363c3f9", size = 252239, upload-time = "2025-12-28T15:42:16.292Z" }, + { url = "https://files.pythonhosted.org/packages/6a/16/10c1c164950cade470107f9f14bbac8485f8fb8515f515fca53d337e4a7f/coverage-7.13.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:90480b2134999301eea795b3a9dbf606c6fbab1b489150c501da84a959442465", size = 250196, upload-time = "2025-12-28T15:42:18.54Z" }, + { url = "https://files.pythonhosted.org/packages/2a/c6/cd860fac08780c6fd659732f6ced1b40b79c35977c1356344e44d72ba6c4/coverage-7.13.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e825dbb7f84dfa24663dd75835e7257f8882629fc11f03ecf77d84a75134b864", size = 250008, upload-time = "2025-12-28T15:42:20.365Z" }, + { url = "https://files.pythonhosted.org/packages/f0/3a/a8c58d3d38f82a5711e1e0a67268362af48e1a03df27c03072ac30feefcf/coverage-7.13.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:623dcc6d7a7ba450bbdbeedbaa0c42b329bdae16491af2282f12a7e809be7eb9", size = 251671, upload-time = "2025-12-28T15:42:22.114Z" }, + { url = "https://files.pythonhosted.org/packages/f0/bc/fd4c1da651d037a1e3d53e8cb3f8182f4b53271ffa9a95a2e211bacc0349/coverage-7.13.1-cp314-cp314-win32.whl", hash = "sha256:6e73ebb44dca5f708dc871fe0b90cf4cff1a13f9956f747cc87b535a840386f5", size = 221777, upload-time = "2025-12-28T15:42:23.919Z" }, + { url = "https://files.pythonhosted.org/packages/4b/50/71acabdc8948464c17e90b5ffd92358579bd0910732c2a1c9537d7536aa6/coverage-7.13.1-cp314-cp314-win_amd64.whl", hash = "sha256:be753b225d159feb397bd0bf91ae86f689bad0da09d3b301478cd39b878ab31a", size = 222592, upload-time = "2025-12-28T15:42:25.619Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c8/a6fb943081bb0cc926499c7907731a6dc9efc2cbdc76d738c0ab752f1a32/coverage-7.13.1-cp314-cp314-win_arm64.whl", hash = "sha256:228b90f613b25ba0019361e4ab81520b343b622fc657daf7e501c4ed6a2366c0", size = 221169, upload-time = "2025-12-28T15:42:27.629Z" }, + { url = "https://files.pythonhosted.org/packages/16/61/d5b7a0a0e0e40d62e59bc8c7aa1afbd86280d82728ba97f0673b746b78e2/coverage-7.13.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:60cfb538fe9ef86e5b2ab0ca8fc8d62524777f6c611dcaf76dc16fbe9b8e698a", size = 219730, upload-time = "2025-12-28T15:42:29.306Z" }, + { url = "https://files.pythonhosted.org/packages/a3/2c/8881326445fd071bb49514d1ce97d18a46a980712b51fee84f9ab42845b4/coverage-7.13.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:57dfc8048c72ba48a8c45e188d811e5efd7e49b387effc8fb17e97936dde5bf6", size = 220001, upload-time = "2025-12-28T15:42:31.319Z" }, + { url = "https://files.pythonhosted.org/packages/b5/d7/50de63af51dfa3a7f91cc37ad8fcc1e244b734232fbc8b9ab0f3c834a5cd/coverage-7.13.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:3f2f725aa3e909b3c5fdb8192490bdd8e1495e85906af74fe6e34a2a77ba0673", size = 261370, upload-time = "2025-12-28T15:42:32.992Z" }, + { url = "https://files.pythonhosted.org/packages/e1/2c/d31722f0ec918fd7453b2758312729f645978d212b410cd0f7c2aed88a94/coverage-7.13.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9ee68b21909686eeb21dfcba2c3b81fee70dcf38b140dcd5aa70680995fa3aa5", size = 263485, upload-time = "2025-12-28T15:42:34.759Z" }, + { url = "https://files.pythonhosted.org/packages/fa/7a/2c114fa5c5fc08ba0777e4aec4c97e0b4a1afcb69c75f1f54cff78b073ab/coverage-7.13.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:724b1b270cb13ea2e6503476e34541a0b1f62280bc997eab443f87790202033d", size = 265890, upload-time = "2025-12-28T15:42:36.517Z" }, + { url = "https://files.pythonhosted.org/packages/65/d9/f0794aa1c74ceabc780fe17f6c338456bbc4e96bd950f2e969f48ac6fb20/coverage-7.13.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:916abf1ac5cf7eb16bc540a5bf75c71c43a676f5c52fcb9fe75a2bd75fb944e8", size = 260445, upload-time = "2025-12-28T15:42:38.646Z" }, + { url = "https://files.pythonhosted.org/packages/49/23/184b22a00d9bb97488863ced9454068c79e413cb23f472da6cbddc6cfc52/coverage-7.13.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:776483fd35b58d8afe3acbd9988d5de592ab6da2d2a865edfdbc9fdb43e7c486", size = 263357, upload-time = "2025-12-28T15:42:40.788Z" }, + { url = "https://files.pythonhosted.org/packages/7d/bd/58af54c0c9199ea4190284f389005779d7daf7bf3ce40dcd2d2b2f96da69/coverage-7.13.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:b6f3b96617e9852703f5b633ea01315ca45c77e879584f283c44127f0f1ec564", size = 260959, upload-time = "2025-12-28T15:42:42.808Z" }, + { url = "https://files.pythonhosted.org/packages/4b/2a/6839294e8f78a4891bf1df79d69c536880ba2f970d0ff09e7513d6e352e9/coverage-7.13.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:bd63e7b74661fed317212fab774e2a648bc4bb09b35f25474f8e3325d2945cd7", size = 259792, upload-time = "2025-12-28T15:42:44.818Z" }, + { url = "https://files.pythonhosted.org/packages/ba/c3/528674d4623283310ad676c5af7414b9850ab6d55c2300e8aa4b945ec554/coverage-7.13.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:933082f161bbb3e9f90d00990dc956120f608cdbcaeea15c4d897f56ef4fe416", size = 262123, upload-time = "2025-12-28T15:42:47.108Z" }, + { url = "https://files.pythonhosted.org/packages/06/c5/8c0515692fb4c73ac379d8dc09b18eaf0214ecb76ea6e62467ba7a1556ff/coverage-7.13.1-cp314-cp314t-win32.whl", hash = "sha256:18be793c4c87de2965e1c0f060f03d9e5aff66cfeae8e1dbe6e5b88056ec153f", size = 222562, upload-time = "2025-12-28T15:42:49.144Z" }, + { url = "https://files.pythonhosted.org/packages/05/0e/c0a0c4678cb30dac735811db529b321d7e1c9120b79bd728d4f4d6b010e9/coverage-7.13.1-cp314-cp314t-win_amd64.whl", hash = "sha256:0e42e0ec0cd3e0d851cb3c91f770c9301f48647cb2877cb78f74bdaa07639a79", size = 223670, upload-time = "2025-12-28T15:42:51.218Z" }, + { url = "https://files.pythonhosted.org/packages/f5/5f/b177aa0011f354abf03a8f30a85032686d290fdeed4222b27d36b4372a50/coverage-7.13.1-cp314-cp314t-win_arm64.whl", hash = "sha256:eaecf47ef10c72ece9a2a92118257da87e460e113b83cc0d2905cbbe931792b4", size = 221707, upload-time = "2025-12-28T15:42:53.034Z" }, + { url = "https://files.pythonhosted.org/packages/cc/48/d9f421cb8da5afaa1a64570d9989e00fb7955e6acddc5a12979f7666ef60/coverage-7.13.1-py3-none-any.whl", hash = "sha256:2016745cb3ba554469d02819d78958b571792bb68e31302610e898f80dd3a573", size = 210722, upload-time = "2025-12-28T15:42:54.901Z" }, ] [[package]] @@ -534,16 +534,16 @@ wheels = [ [[package]] name = "django" -version = "5.2.9" +version = "5.2.10" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/1c/188ce85ee380f714b704283013434976df8d3a2df8e735221a02605b6794/django-5.2.9.tar.gz", hash = "sha256:16b5ccfc5e8c27e6c0561af551d2ea32852d7352c67d452ae3e76b4f6b2ca495", size = 10848762, upload-time = "2025-12-02T14:01:08.418Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e6/e5/2671df24bf0ded831768ef79532e5a7922485411a5696f6d979568591a37/django-5.2.10.tar.gz", hash = "sha256:74df100784c288c50a2b5cad59631d71214f40f72051d5af3fdf220c20bdbbbe", size = 10880754, upload-time = "2026-01-06T18:55:26.817Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/17/b0/7f42bfc38b8f19b78546d47147e083ed06e12fc29c42da95655e0962c6c2/django-5.2.9-py3-none-any.whl", hash = "sha256:3a4ea88a70370557ab1930b332fd2887a9f48654261cdffda663fef5976bb00a", size = 8290652, upload-time = "2025-12-02T14:01:03.485Z" }, + { url = "https://files.pythonhosted.org/packages/fa/de/f1a7cd896daec85832136ab509d9b2a6daed4939dbe26313af3e95fc5f5e/django-5.2.10-py3-none-any.whl", hash = "sha256:cf85067a64250c95d5f9067b056c5eaa80591929f7e16fbcd997746e40d6c45c", size = 8290820, upload-time = "2026-01-06T18:55:20.009Z" }, ] [[package]] @@ -558,18 +558,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a4/a5/24dee73df5206e71020ab5e530b8687fb2073a7c95542d145f6bbaabd86d/django_activity_stream-2.0.0-py3-none-any.whl", hash = "sha256:e7b86e637e419d068d9a5b4f3bacfec5ae231f412c2bda0ad686a1e47d4424ef", size = 50731, upload-time = "2023-10-04T07:51:20.479Z" }, ] -[[package]] -name = "django-appconf" -version = "1.2.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/d1/a2/e58bec8d7941b914af52a67c35b5709eceed2caa2848f28437f1666ed668/django_appconf-1.2.0.tar.gz", hash = "sha256:15a88d60dd942d6059f467412fe4581db632ef03018a3c183fb415d6fc9e5cec", size = 16127, upload-time = "2025-11-08T15:46:27.304Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e8/e6/4c34d94dfb74bbcbc489606e61f1924933de30d22c593dd1f429f35fbd7f/django_appconf-1.2.0-py3-none-any.whl", hash = "sha256:b81bce5ef0ceb9d84df48dfb623a32235d941c78cc5e45dbb6947f154ea277f4", size = 6500, upload-time = "2025-11-08T15:46:25.957Z" }, -] - [[package]] name = "django-axes" version = "8.0.0" @@ -600,21 +588,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/61/9c/77ca6760f722cb577ae263131274b8a3126c92293d13a144fb8385811f07/django_bootstrap_breadcrumbs2-1.0.0-py3-none-any.whl", hash = "sha256:a8b9b59d8d7487211c642baffef6a071039de55c6f82d050f9e3353c98da60fc", size = 7109, upload-time = "2022-01-29T15:27:12.046Z" }, ] -[[package]] -name = "django-compressor" -version = "4.6.0" -source = { registry = "https://pypi.org/simple" } -dependencies = [ - { name = "django" }, - { name = "django-appconf" }, - { name = "rcssmin" }, - { name = "rjsmin" }, -] -sdist = { url = "https://files.pythonhosted.org/packages/a2/e4/c6d87b1341d744ceafa85eeceb2adabb1c62b795b8207cbc580fb70df8f4/django_compressor-4.6.0.tar.gz", hash = "sha256:c7478feab98f3368780591f9ee28a433350f5277dd28811f7f710f5bc6dff3c0", size = 99735, upload-time = "2025-11-10T13:12:11.439Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/9d/9a0ba39f33574994e5b33aea55a68e8fad72b8dd923a82300e4e91774f59/django_compressor-4.6.0-py3-none-any.whl", hash = "sha256:6e7b21020a0d86272c5e37000c33accc4ebeb77394a3dd86d775a09aae7aade4", size = 96828, upload-time = "2025-11-10T13:12:10.001Z" }, -] - [[package]] name = "django-cors-headers" version = "4.9.0" @@ -849,14 +822,14 @@ sidecar = [ [[package]] name = "drf-spectacular-sidecar" -version = "2025.12.1" +version = "2026.1.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "django" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/5d/9a/5f1a83bd7bb1937a6347e148fbd116195abb16f7179f7c1b34b3ad2befd8/drf_spectacular_sidecar-2025.12.1.tar.gz", hash = "sha256:d25d82ea2e6176ce4583812f73ac9f177dcd56141c11a9e9bf35f1b1878d5044", size = 2460914, upload-time = "2025-12-01T11:26:59.798Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/81/c7b0e3ccbd5a039c4f4fcfecf88391a666ca1406a953886e2f39295b1c90/drf_spectacular_sidecar-2026.1.1.tar.gz", hash = "sha256:6f7c173a8ddbbbdafc7a27e028614b65f07a89ca90f996a432d57460463b56be", size = 2468060, upload-time = "2026-01-01T11:27:12.682Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/2f/03/0c6d70dcf24c4af0648bd0e8543fb9ad6c1952d9dcf01df729e4f4458d4c/drf_spectacular_sidecar-2025.12.1-py3-none-any.whl", hash = "sha256:dd28870327b92a0e3c9b6809147fd3e74ec449176daeae291af34eda176236c1", size = 2482183, upload-time = "2025-12-01T11:26:58.176Z" }, + { url = "https://files.pythonhosted.org/packages/db/96/38725edda526f3e9e597f531beeec94b0ef433d9494f06a13b7636eecb6e/drf_spectacular_sidecar-2026.1.1-py3-none-any.whl", hash = "sha256:af8df62f1b594ec280351336d837eaf2402ab25a6bc2a1fad7aee9935821070f", size = 2489520, upload-time = "2026-01-01T11:27:11.056Z" }, ] [[package]] @@ -1057,11 +1030,11 @@ wheels = [ [[package]] name = "humanize" -version = "4.14.0" +version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/b6/43/50033d25ad96a7f3845f40999b4778f753c3901a11808a584fed7c00d9f5/humanize-4.14.0.tar.gz", hash = "sha256:2fa092705ea640d605c435b1ca82b2866a1b601cdf96f076d70b79a855eba90d", size = 82939, upload-time = "2025-10-15T13:04:51.214Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ba/66/a3921783d54be8a6870ac4ccffcd15c4dc0dd7fcce51c6d63b8c63935276/humanize-4.15.0.tar.gz", hash = "sha256:1dd098483eb1c7ee8e32eb2e99ad1910baefa4b75c3aff3a82f4d78688993b10", size = 83599, upload-time = "2025-12-20T20:16:13.19Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/5b/9512c5fb6c8218332b530f13500c6ff5f3ce3342f35e0dd7be9ac3856fd3/humanize-4.14.0-py3-none-any.whl", hash = "sha256:d57701248d040ad456092820e6fde56c930f17749956ac47f4f655c0c547bfff", size = 132092, upload-time = "2025-10-15T13:04:49.404Z" }, + { url = "https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl", hash = "sha256:b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769", size = 132203, upload-time = "2025-12-20T20:16:11.67Z" }, ] [[package]] @@ -1115,7 +1088,7 @@ wheels = [ [[package]] name = "jsonschema" -version = "4.25.1" +version = "4.26.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, @@ -1123,9 +1096,9 @@ dependencies = [ { name = "referencing" }, { name = "rpds-py" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/74/69/f7185de793a29082a9f3c7728268ffb31cb5095131a9c139a74078e27336/jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85", size = 357342, upload-time = "2025-08-18T17:03:50.038Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63", size = 90040, upload-time = "2025-08-18T17:03:48.373Z" }, + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, ] [[package]] @@ -1142,7 +1115,7 @@ wheels = [ [[package]] name = "kombu" -version = "5.6.1" +version = "5.6.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "amqp" }, @@ -1150,9 +1123,9 @@ dependencies = [ { name = "tzdata" }, { name = "vine" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ac/05/749ada8e51718445d915af13f1d18bc4333848e8faa0cb234028a3328ec8/kombu-5.6.1.tar.gz", hash = "sha256:90f1febb57ad4f53ca327a87598191b2520e0c793c75ea3b88d98e3b111282e4", size = 471548, upload-time = "2025-11-25T11:07:33.504Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/a5/607e533ed6c83ae1a696969b8e1c137dfebd5759a2e9682e26ff1b97740b/kombu-5.6.2.tar.gz", hash = "sha256:8060497058066c6f5aed7c26d7cd0d3b574990b09de842a8c5aaed0b92cc5a55", size = 472594, upload-time = "2025-12-29T20:30:07.779Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/d6/943cf84117cd9ddecf6e1707a3f712a49fc64abdb8ac31b19132871af1dd/kombu-5.6.1-py3-none-any.whl", hash = "sha256:b69e3f5527ec32fc5196028a36376501682973e9620d6175d1c3d4eaf7e95409", size = 214141, upload-time = "2025-11-25T11:07:31.54Z" }, + { url = "https://files.pythonhosted.org/packages/fb/0f/834427d8c03ff1d7e867d3db3d176470c64871753252b21b4f4897d1fa45/kombu-5.6.2-py3-none-any.whl", hash = "sha256:efcfc559da324d41d61ca311b0c64965ea35b4c55cc04ee36e55386145dace93", size = 214219, upload-time = "2025-12-29T20:30:05.74Z" }, ] [package.optional-dependencies] @@ -1232,11 +1205,11 @@ wheels = [ [[package]] name = "pathspec" -version = "0.12.1" +version = "1.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ca/bc/f35b8446f4531a7cb215605d100cd88b7ac6f44ab3fc94870c120ab3adbf/pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712", size = 51043, upload-time = "2023-12-10T22:30:45Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/b2/bb8e495d5262bfec41ab5cb18f522f1012933347fb5d9e62452d446baca2/pathspec-1.0.3.tar.gz", hash = "sha256:bac5cf97ae2c2876e2d25ebb15078eb04d76e4b98921ee31c6f85ade8b59444d", size = 130841, upload-time = "2026-01-09T15:46:46.009Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191, upload-time = "2023-12-10T22:30:43.14Z" }, + { url = "https://files.pythonhosted.org/packages/32/2b/121e912bd60eebd623f873fd090de0e84f322972ab25a7f9044c056804ed/pathspec-1.0.3-py3-none-any.whl", hash = "sha256:e80767021c1cc524aa3fb14bedda9c34406591343cc42797b386ce7b9354fb6c", size = 55021, upload-time = "2026-01-09T15:46:44.652Z" }, ] [[package]] @@ -1625,56 +1598,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" }, ] -[[package]] -name = "rcssmin" -version = "1.2.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/81/af/c9654b4f9b054ec163ed7cb20d8db0e5ae05e2e9ce99a4c11d91a2180b3f/rcssmin-1.2.2.tar.gz", hash = "sha256:806986eaf7414545edc28a1d29523e9560e49e151ff4a337d9d1f0271d6e1cc4", size = 587012, upload-time = "2025-10-12T10:48:08.932Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/6d/962701850f54cd0a5555259c4fe6606e152e5172c988d71a63455c6d6a48/rcssmin-1.2.2-cp310-cp310-manylinux1_i686.whl", hash = "sha256:4f2229ffb96abafd3120006bce9d448eb8dd0331fc30ab203066d8e63d3c7f34", size = 51397, upload-time = "2025-10-12T10:48:17.875Z" }, - { url = "https://files.pythonhosted.org/packages/2d/ce/2fbe738f6956a96c4e54af411a01da3b991885417feffcf11c2b5ffd1a12/rcssmin-1.2.2-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:dce0f0230c6ac8579cf3b1e557ec1699fe0d931e5e64789c48ff76df2957a937", size = 51303, upload-time = "2025-10-12T10:48:18.934Z" }, - { url = "https://files.pythonhosted.org/packages/af/5a/9daa32f73c1fefc28ebaa1092d2c28d56b0fe31152d0b661033540232deb/rcssmin-1.2.2-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:292dc265fb95bcd3765040627713db574a96f8d55035b95c7ccdd4c587844d69", size = 49051, upload-time = "2025-10-12T10:48:19.885Z" }, - { url = "https://files.pythonhosted.org/packages/3f/10/a407b884699cd5e0fc0bbe3e7a9d57e9425dc804067b0b246175509007e4/rcssmin-1.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cf625985ee18bcc554afaae5b42501c71a167cc79ffe8fd782b32bacab2aee68", size = 51744, upload-time = "2025-10-12T10:48:20.966Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ee/4da5450ea5e3e91976e5d669e7e36300bcaba16daa232b88b4f07d1af9b2/rcssmin-1.2.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1dab9b6b0e667570d4362ced81015e68bf462537dde151f9f908e1d5382fefb7", size = 51525, upload-time = "2025-10-12T10:48:22.06Z" }, - { url = "https://files.pythonhosted.org/packages/bd/89/6dabbc7e96aaf7a9b3e7c63311c93568d694348be4312ea93b3d4f48c858/rcssmin-1.2.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ace9b2c30eb02bff32ce5d6657f5ee04ae866e1bc55d3e28009325fc8b62de4e", size = 51336, upload-time = "2025-10-12T10:48:23.274Z" }, - { url = "https://files.pythonhosted.org/packages/9c/3b/d4db4a2fb0d0033d222b56526bb1935e892e2560516b0378b4ccffec8d9c/rcssmin-1.2.2-cp311-cp311-manylinux1_i686.whl", hash = "sha256:da4801f4f429d66f9922871a7c71dee54c87f0ea5666cae6f1eb84c3fbc4e1f4", size = 49090, upload-time = "2025-10-12T10:48:24.827Z" }, - { url = "https://files.pythonhosted.org/packages/bd/f3/aeed5758339ccba61a82de12897762bad8f4317883a20de2dcc78842afda/rcssmin-1.2.2-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:e6b5913f3e8cb249044e916bc6ddcb5158815121548686a0fc8e2b8a5961a62e", size = 49368, upload-time = "2025-10-12T10:48:26.237Z" }, - { url = "https://files.pythonhosted.org/packages/2a/7b/e4206002c8c1bdcac6905ad7b200d62662d20d2b23f3d3e7df4e89447fdd/rcssmin-1.2.2-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:1472a98142d10d6c6772d96424ddcaf99d7e1d3217475f7f28f7d40dd84f24a2", size = 50714, upload-time = "2025-10-12T10:48:27.305Z" }, - { url = "https://files.pythonhosted.org/packages/d7/7c/e1cd335ce659af50a2c16dad37eee4b166536d73a463cdfeab5bb8e0833b/rcssmin-1.2.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b6c91878a7e6f708f90c1bbc1a02729f45b2e5dee89045b395e997aa71744ee4", size = 53376, upload-time = "2025-10-12T10:48:28.374Z" }, - { url = "https://files.pythonhosted.org/packages/98/0b/9071882a74df398bf40e668a89cf2dd7eb95ff2e02c111c4c156aaad745a/rcssmin-1.2.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:844227668a235451eb544455b911067ba5495d680857d4bad2b0b78878f30a5c", size = 53194, upload-time = "2025-10-12T10:48:29.331Z" }, - { url = "https://files.pythonhosted.org/packages/03/48/295e57fbb4767226b5231ee99c056eab5447845259e4172e2db76f07c26d/rcssmin-1.2.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc866e23121bc4e29014b588fb67c8242a80ce053196f511c4c806b30ca6a393", size = 52998, upload-time = "2025-10-12T10:48:30.266Z" }, - { url = "https://files.pythonhosted.org/packages/86/5c/29af37ffb21a3069d108902868262b25fbbf731821cf5c7de76bba986dd1/rcssmin-1.2.2-cp312-cp312-manylinux1_i686.whl", hash = "sha256:78249189d39344a1e9d813c51362831537500e104c5bdce4ff24fe59010e9ee1", size = 48819, upload-time = "2025-10-12T10:48:31.3Z" }, - { url = "https://files.pythonhosted.org/packages/89/dc/b522a5e1a0a8ef8af50adbb3bdd9f5a059a9890b9fc5ce3f44a37a996a74/rcssmin-1.2.2-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:217efed0dff304d503bf481068ddb13ae72176ed5970f1011fb1a1e379308d9c", size = 49248, upload-time = "2025-10-12T10:48:32.254Z" }, - { url = "https://files.pythonhosted.org/packages/66/0b/7c0018793080ed26939d9beaf09591cf58fb9cda3253a891137b841a902a/rcssmin-1.2.2-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:c51aa47b1752ae55ad4cf4332e7316c5206a6a686d65bc15431a6bfea393e665", size = 50723, upload-time = "2025-10-12T10:48:33.398Z" }, - { url = "https://files.pythonhosted.org/packages/52/b4/c8b0d2588719af2b9c454e6e95f18bd60b0c474da4b65af61bb6457a7555/rcssmin-1.2.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:354215283f32413ced87b358934ebbb7c5529f51f5d316e80bc2889486d388b3", size = 53302, upload-time = "2025-10-12T10:48:34.452Z" }, - { url = "https://files.pythonhosted.org/packages/8d/cb/1a8d6ace1ff845d57fa31087510a88dc10ac01cea41317e976bbf2413f91/rcssmin-1.2.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:265b57de87949b505bcd658f4f5bbfc1f077390108cd12e288ba2f7824bee52c", size = 53001, upload-time = "2025-10-12T10:48:35.389Z" }, - { url = "https://files.pythonhosted.org/packages/5e/25/2d97155edb351a28e5a46a35f7b4e54bfe3933847bd2ba6674216a817d9e/rcssmin-1.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:83ecd3093640d69f7582839788e012ecf9a85faeb95760032626977a7d3904b2", size = 53285, upload-time = "2025-10-12T10:48:36.513Z" }, - { url = "https://files.pythonhosted.org/packages/8b/ae/3a7911e1c773f3deb039a42588ae6cee59d6bcec07b5081db376677b293a/rcssmin-1.2.2-cp313-cp313-manylinux1_i686.whl", hash = "sha256:e91449b612a08e5e80df3487e941c86e2c73c5088169588c31c382eb94da0521", size = 48764, upload-time = "2025-10-12T10:48:37.45Z" }, - { url = "https://files.pythonhosted.org/packages/30/a7/6d311986d76da0a538bae3f584d2b7579dd11648e74f539b177d8af51f6b/rcssmin-1.2.2-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:20a32c49d65b65c3ac80305d8a31b98f3d92b1b052dd63b57fbebc7003f9ae38", size = 49175, upload-time = "2025-10-12T10:48:39.601Z" }, - { url = "https://files.pythonhosted.org/packages/f2/9b/ceb12f3397695d075a1f3e12e295d84f021562540a6579144cb985d80ccb/rcssmin-1.2.2-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:cd0a5ca4a0fc3b193ab0dcd251bd2463900558108cc4306a5cc4ab77c6bfffde", size = 50675, upload-time = "2025-10-12T10:48:40.664Z" }, - { url = "https://files.pythonhosted.org/packages/3b/8c/efb41baaea20567fa0c335705bff1f187e35301b684891d26282a16aff1b/rcssmin-1.2.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:2b008aa77a92f9db2d88f7e7ab45b81f37253cb0baafda59dd5b857c2de9b09f", size = 52999, upload-time = "2025-10-12T10:48:41.749Z" }, - { url = "https://files.pythonhosted.org/packages/4d/f6/cf692cca8837375fd21bf31cd134e10684fc11283a68c04160619aa826dc/rcssmin-1.2.2-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:b3843e0501fa45d7c911dd7b3b78fd5f51c8159dd36d780ee12060da2d526aa0", size = 52752, upload-time = "2025-10-12T10:48:42.823Z" }, - { url = "https://files.pythonhosted.org/packages/8d/fa/5b0f1df380f598a397414dfaba74b05901379918f4d6b1746462190ae011/rcssmin-1.2.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:bb75b0e412a5419d62f39d89d0b3920a6697d2b12c8dad57f8bde1c76332c640", size = 52994, upload-time = "2025-10-12T10:48:44.023Z" }, - { url = "https://files.pythonhosted.org/packages/16/df/7157985ff9e2f3fecb15b03370ee0c8de42fd5a07c4b54e0be2c0f3f8133/rcssmin-1.2.2-cp313-cp313t-manylinux1_i686.whl", hash = "sha256:dd192a876a7af9a14628ff20818df80187294db96d86ddccf72371a6ae3e7ce7", size = 51314, upload-time = "2025-10-12T10:48:45.569Z" }, - { url = "https://files.pythonhosted.org/packages/56/d5/e6c176b8d39faf0fac3a6896022febb00d0ac5c4b99d4924572c579af210/rcssmin-1.2.2-cp313-cp313t-manylinux1_x86_64.whl", hash = "sha256:5724ed426c1444c35584f0bcda43c81ac47da769228722207aea7b8eedf31224", size = 51509, upload-time = "2025-10-12T10:48:47.03Z" }, - { url = "https://files.pythonhosted.org/packages/b7/3e/493ef8b7ce621b45f1be4505295fe604280918f67a01a28c82f9d0621a3f/rcssmin-1.2.2-cp313-cp313t-manylinux2014_aarch64.whl", hash = "sha256:228cc8d192ba4bd82305c085cbb5594d45d8dc6605d4eddc319543fb9f47b319", size = 52730, upload-time = "2025-10-12T10:48:48.13Z" }, - { url = "https://files.pythonhosted.org/packages/b2/90/77cf149fac7f247dac530a96beac7c52cea9fab928b5c3e2a45c6da86147/rcssmin-1.2.2-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:714390aac7c4cb611eecc845a5d9bb01495a3c9fccf9d8a2d6aa75a109276f7b", size = 54939, upload-time = "2025-10-12T10:48:49.423Z" }, - { url = "https://files.pythonhosted.org/packages/35/37/b8347b3a817b99eab9cc987f1090c7192d9d5f077fdc84c04d12f5186b87/rcssmin-1.2.2-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:64ec506fce7a3f1e993f4c4b55c7b3d9ad8259191cf20d986aa1d1a13e920fe8", size = 55108, upload-time = "2025-10-12T10:48:50.463Z" }, - { url = "https://files.pythonhosted.org/packages/5e/e1/fb555f831d5e5674a91444007434ba85b4ae98cfd97dd7bc9c2962c0f56b/rcssmin-1.2.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:742bb522d1efe0f1d362d81e00b5dc93ca2ddd1e435ed2d921cfa84fbb9f6887", size = 54858, upload-time = "2025-10-12T10:48:51.941Z" }, - { url = "https://files.pythonhosted.org/packages/a0/40/9c4cb3133f6d4ddfbeada76988a10ff2a974706fd6fcbb97edd8c0f4cc76/rcssmin-1.2.2-cp314-cp314-manylinux1_i686.whl", hash = "sha256:540dd3aa586b5f8f4c4b90db37e6a31c04718cdf90dbe9bec43c3b4dd50519e7", size = 49032, upload-time = "2025-10-12T10:48:53.014Z" }, - { url = "https://files.pythonhosted.org/packages/07/84/a411a48fd4179a88c68a2ad3649b408fa7887a421d3435c10ae6f5724e3a/rcssmin-1.2.2-cp314-cp314-manylinux1_x86_64.whl", hash = "sha256:6ea38a38eec263858b70bed6715478dcfed7fbc5d63333a8c512631ee22baad9", size = 49497, upload-time = "2025-10-12T10:48:54.009Z" }, - { url = "https://files.pythonhosted.org/packages/a1/32/5663a71a9304e0c9f33b765264508229d026359cfff746e1d0a593d809ea/rcssmin-1.2.2-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:07dc7d352e8eb08de82fc4c545dd04f9f487466c8370051e0bee4eb1e4dc85d0", size = 50382, upload-time = "2025-10-12T10:48:55.079Z" }, - { url = "https://files.pythonhosted.org/packages/d7/28/e411eb191ffff7bd712f2eb0f691cb7ca514b1876d6bff2f5ae61359b8db/rcssmin-1.2.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:cdccb0e08281f0dd5d463c16ec61a06bd1534de50206dc72918be3c10dcb82e5", size = 50962, upload-time = "2025-10-12T10:48:56.494Z" }, - { url = "https://files.pythonhosted.org/packages/fb/3f/cdb99526d294c5dd4b919dc4ef492b7bd11e08b585d15ec641dfb9423493/rcssmin-1.2.2-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:2b6d5e2e2fd65738d57ef65aaaed2cff2288eccff7f704bf3d579e6f451cb60a", size = 52504, upload-time = "2025-10-12T10:48:57.886Z" }, - { url = "https://files.pythonhosted.org/packages/e8/60/a8183401fa64e93e1d52b2cdf275a2c11e0993f5f3162c573a67872b535d/rcssmin-1.2.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7018d4197713c7797d1a67ed47ab53d4706c2e9ed134123c30a47d389dda5386", size = 50561, upload-time = "2025-10-12T10:48:58.935Z" }, - { url = "https://files.pythonhosted.org/packages/47/5e/496d6c9c309e2fe79e6a69f25f7a6d18f545edb4ea3584f461b9f84b0d60/rcssmin-1.2.2-cp314-cp314t-manylinux1_i686.whl", hash = "sha256:0162c32ce946978edc834d4fba705ac5f9422d7f556f3264cc4fc67c7ee39171", size = 51214, upload-time = "2025-10-12T10:49:00.021Z" }, - { url = "https://files.pythonhosted.org/packages/5e/78/87da6706d5856ceee71421ba831d2f5d93c3e6865acfbb56ace8d54587cc/rcssmin-1.2.2-cp314-cp314t-manylinux1_x86_64.whl", hash = "sha256:f17dc92553a46412c49f972f0ab31088032b9482a9c421bc2d39691a5d8842aa", size = 51608, upload-time = "2025-10-12T10:49:01.422Z" }, - { url = "https://files.pythonhosted.org/packages/cd/6c/204b0262c11ac2da2b8df2d8fed76f1959273fbc8376450d0ac022d754b7/rcssmin-1.2.2-cp314-cp314t-manylinux2014_aarch64.whl", hash = "sha256:40c7dfba098bbd129d8c35dd8b604275585f9dc0496e5d17dbe7fd6b873b0233", size = 53349, upload-time = "2025-10-12T10:49:02.512Z" }, - { url = "https://files.pythonhosted.org/packages/c3/7b/9aae16756d3f33cbc512760ba3e69c3856a51aa293e463f2ca97760d1b1b/rcssmin-1.2.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d0197fab78ebbe33f5df9caf2572ef2d44bbe243a9130881a0c5c53ba03641fa", size = 53066, upload-time = "2025-10-12T10:49:03.589Z" }, - { url = "https://files.pythonhosted.org/packages/4e/18/b06fadfa9b85e486bb1571050217cb539c062d1ae4cd32b1a31c36f67fd4/rcssmin-1.2.2-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:19e53c58768369366fdaef00da59f275f724f229994ea885309df6ca368ff3c8", size = 54271, upload-time = "2025-10-12T10:49:04.735Z" }, - { url = "https://files.pythonhosted.org/packages/79/55/f29ce21f8e5a1f3c19d43b67b907268d227b7edcda2ca200ca0028734a5e/rcssmin-1.2.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8d3de1a870e00d157f3a7b1797498fdc09a3774629079572350f75783bb94b9a", size = 52423, upload-time = "2025-10-12T10:49:06.04Z" }, -] - [[package]] name = "redis" version = "6.4.0" @@ -1703,15 +1626,15 @@ wheels = [ [[package]] name = "reportlab" -version = "4.4.6" +version = "4.4.7" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "charset-normalizer" }, { name = "pillow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/35/ec/f7a50b3cbee58407090bd1f2a9db2f1a23052c5de3bc7408024ca776ee02/reportlab-4.4.6.tar.gz", hash = "sha256:8792c87c23dd034d17530e6ebe4164d61bcc8f7b0eac203fe13cc03cc2c1c607", size = 3910805, upload-time = "2025-12-10T12:37:21.17Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/a7/4600cb1cfc975a06552e8927844ddcb8fd90217e9a6068f5c7aa76c3f221/reportlab-4.4.7.tar.gz", hash = "sha256:41e8287af965e5996764933f3e75e7f363c3b6f252ba172f9429e81658d7b170", size = 3714000, upload-time = "2025-12-21T11:50:11.336Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/ee/5f7a31ab05cf817e0cc70ae6df51a1a4fda188c899790a3131a24dd78d18/reportlab-4.4.6-py3-none-any.whl", hash = "sha256:c7c31d5c815bae7c76fc17f64ffc417e68992901acddb24504296cc39b065424", size = 1954259, upload-time = "2025-12-10T12:37:18.428Z" }, + { url = "https://files.pythonhosted.org/packages/e7/bf/a29507386366ab17306b187ad247dd78e4599be9032cb5f44c940f547fc0/reportlab-4.4.7-py3-none-any.whl", hash = "sha256:8fa05cbf468e0e76745caf2029a4770276edb3c8e86a0b71e0398926baf50673", size = 1954263, upload-time = "2025-12-21T11:50:08.93Z" }, ] [[package]] @@ -1729,56 +1652,6 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, ] -[[package]] -name = "rjsmin" -version = "1.2.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/59/16/14288d309d0f42c6586440c47bf6ec1a880218f698f30293fa3782db4008/rjsmin-1.2.5.tar.gz", hash = "sha256:a3f8040b0273dec773e0e807e86a4d0a9535516c0a0a35aa1bb6de6e15bb1f09", size = 427399, upload-time = "2025-10-12T10:50:27.422Z" } -wheels = [ - { url = "https://files.pythonhosted.org/packages/3d/dc/1dc7a3ce4d8a5ca864ee6622f90ae8aa205f7398f73a5ce8da6b6fb052af/rjsmin-1.2.5-cp310-cp310-manylinux1_i686.whl", hash = "sha256:4dda87501a36b24c0db3bcfd274f31e04bbe96c9514bb5e168d83923dac56c08", size = 35143, upload-time = "2025-10-12T10:50:35.849Z" }, - { url = "https://files.pythonhosted.org/packages/6b/0a/0bfb6cfcaeec254901e559c0d5e82854905356b79e845225662980c209dc/rjsmin-1.2.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:5b1d470fb25b9485a63dd292f7eefbff1daca3cbc7fec1132d13bc5c3e6a6b35", size = 35156, upload-time = "2025-10-12T10:50:36.84Z" }, - { url = "https://files.pythonhosted.org/packages/a6/81/a54e7cd4bf6b3089a7dc6f54c827ba06584cfde8b2750fc1046336d3b7c8/rjsmin-1.2.5-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:2af254854f5e06f42c05d2baa0e78742204bbe8891d69dcaba287449a7cd11de", size = 30788, upload-time = "2025-10-12T10:50:37.749Z" }, - { url = "https://files.pythonhosted.org/packages/9f/8a/8dd2bdb164da59bf2a552a9a46771421e7313dc0da4330350ef161613f34/rjsmin-1.2.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:5975cdb5cb38bd8ddd124e9f6b4e9cd25a0e2a4fa0a3cd5604ad349f0317df7f", size = 34437, upload-time = "2025-10-12T10:50:39.03Z" }, - { url = "https://files.pythonhosted.org/packages/c4/a5/e7ac68344e2ee0b3fc89b4863718771da123797b5fbd954e7abea43d282b/rjsmin-1.2.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4e2ed013704e01b8bbe82eb58f83241c33b198d96fef792f389de415b32af260", size = 34553, upload-time = "2025-10-12T10:50:40.07Z" }, - { url = "https://files.pythonhosted.org/packages/1e/91/d609e0c91b1a77aab559869cd53d8dc08128e36b2cce55a361d7b53774a8/rjsmin-1.2.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3b64aba17f9caa7d66f6fd9e08d7c2010ece06df2b518e0a48fbdc0482c5f9f9", size = 34451, upload-time = "2025-10-12T10:50:41.07Z" }, - { url = "https://files.pythonhosted.org/packages/69/83/30c8a74c3f837d22ac14a20da562f2922cda87228cb88553dbe967f10d89/rjsmin-1.2.5-cp311-cp311-manylinux1_i686.whl", hash = "sha256:82bac9710030b61dd1cf442724431d29b1fec7cd708c541cb2042e38763fd610", size = 31978, upload-time = "2025-10-12T10:50:42.312Z" }, - { url = "https://files.pythonhosted.org/packages/84/7c/e215e4e52f4b0f354731bd808292c5cb01c2eeba8cb310e3f099ab97d479/rjsmin-1.2.5-cp311-cp311-manylinux1_x86_64.whl", hash = "sha256:5626644872f3ad10b8334ec3383aad0906d36a085c04c608a400ed30be4d03a4", size = 31782, upload-time = "2025-10-12T10:50:43.471Z" }, - { url = "https://files.pythonhosted.org/packages/2a/e7/d5590391d2c98389ab119e4500a6d96cf6174159295d9a2cc34dec2eb73d/rjsmin-1.2.5-cp311-cp311-manylinux2014_aarch64.whl", hash = "sha256:2d0b8aaa98e51c8ae176b9a94e91f19d3043d7d328431d3d2c459b57a90c0c87", size = 32369, upload-time = "2025-10-12T10:50:45.222Z" }, - { url = "https://files.pythonhosted.org/packages/7d/ad/81bcfe46cf42ea3c8a0b9505654f413c06932c8ea43556b83404a016ddb6/rjsmin-1.2.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0df172044912ca2f5f04c711ded75c784fba8dc6c7a1f7f831ac831562102aa2", size = 36091, upload-time = "2025-10-12T10:50:46.243Z" }, - { url = "https://files.pythonhosted.org/packages/e3/9e/833455223063a52ee0b0aa2cef44080677db840d9fbae5c78f027547af5a/rjsmin-1.2.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a9208911d2f04dc3bec33df7486dbd7ecfc900b0d1ead9841bbd94a382f33f00", size = 36232, upload-time = "2025-10-12T10:50:47.277Z" }, - { url = "https://files.pythonhosted.org/packages/3c/21/e4ffb7b5c3313f9d5137867f113ec9241b84e50e1d69ce979efdbffe07ed/rjsmin-1.2.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8b7cf8ce9022d381bfa700ae116e5f78698f486558a0fe23c57f158ba3229629", size = 36168, upload-time = "2025-10-12T10:50:48.611Z" }, - { url = "https://files.pythonhosted.org/packages/d6/f3/143727b02b5c5fdc08335be8b2184f19b762ee7d184bb4459e94ed668ae0/rjsmin-1.2.5-cp312-cp312-manylinux1_i686.whl", hash = "sha256:d8b6ddaaa78fd2d3243da11c13033946d211d37729c64814cefe32dba02d9921", size = 31838, upload-time = "2025-10-12T10:50:49.553Z" }, - { url = "https://files.pythonhosted.org/packages/13/dc/72ca27c526925e88e273c3af6848777b289e4eb0854afcd7c6dbbfd4d196/rjsmin-1.2.5-cp312-cp312-manylinux1_x86_64.whl", hash = "sha256:2f46270969613de2292a7f747c31cabd9354cc49f6cd23f9cc8688d3af9f889e", size = 31795, upload-time = "2025-10-12T10:50:50.459Z" }, - { url = "https://files.pythonhosted.org/packages/49/1e/f8bfe2f6949b31adb66563ceca84d9d38f32867aad303cf4311b12534487/rjsmin-1.2.5-cp312-cp312-manylinux2014_aarch64.whl", hash = "sha256:6e7b1bb52665894d8cba84144ee91723475948d5d1a54d7f0b25a1cdce8c5921", size = 32085, upload-time = "2025-10-12T10:50:51.704Z" }, - { url = "https://files.pythonhosted.org/packages/df/d0/239d16374e9e3e0aba2e4924175f2401f21126a1c2df83f5fb18af3ec808/rjsmin-1.2.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f68dd62707d62fc1771be4407892cb932d48fa19a51e7a0e35a11b00e427e3f7", size = 35995, upload-time = "2025-10-12T10:50:52.714Z" }, - { url = "https://files.pythonhosted.org/packages/43/61/179f5ef72a688cf290acdbcdfcbacc4af297751af1b10d4097af03cb31eb/rjsmin-1.2.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:73b6b099f8afb8aa7ff9ddfbfd4d6ae6540dfe7630833a04a26f1d9f67528eaf", size = 36200, upload-time = "2025-10-12T10:50:54.065Z" }, - { url = "https://files.pythonhosted.org/packages/c9/3b/42bb50ee0bb3a4baa8f435ad6bfca48ed5a5b46e4b614e1f4d320ce729d2/rjsmin-1.2.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:372d57835014a332dbf227b6de284ea3ee052600ab0f176df959c75a33f0690e", size = 36110, upload-time = "2025-10-12T10:50:55.393Z" }, - { url = "https://files.pythonhosted.org/packages/14/c3/0e1c211625d44f6ccad2286547ec420d07c5ca8a82098795deb2a96467e4/rjsmin-1.2.5-cp313-cp313-manylinux1_i686.whl", hash = "sha256:2967e468df0bedaff71693b96ff42b46805cc7027146323a8e47c85c5ea53ac5", size = 31883, upload-time = "2025-10-12T10:50:56.329Z" }, - { url = "https://files.pythonhosted.org/packages/f3/49/58c90614c9df3e074be3e5f960cfadc9f9ab501659b7fca3bb8326d27b07/rjsmin-1.2.5-cp313-cp313-manylinux1_x86_64.whl", hash = "sha256:3d68251d1f68c07500f1c062d9dfa16e799f8971aed1312b9584739c03d9f44b", size = 31785, upload-time = "2025-10-12T10:50:57.689Z" }, - { url = "https://files.pythonhosted.org/packages/88/aa/bfc350c353d2eada2eb125ad13d1d1f5a0f6543a96d0fe8759cd440c1921/rjsmin-1.2.5-cp313-cp313-manylinux2014_aarch64.whl", hash = "sha256:3bce037bc2ed784143f90637230c0dad6b59d18e01d66ec41ab0fc988cb98266", size = 32104, upload-time = "2025-10-12T10:50:58.78Z" }, - { url = "https://files.pythonhosted.org/packages/94/fc/eead6c42da1c51d6d3200411debbc5f03bf3e2d5e5061b39e8953484d1b6/rjsmin-1.2.5-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:d206f730a003cbfc8ba5d70e06e9d20318d5dfc2d9220f6dab4fc708b621de15", size = 35718, upload-time = "2025-10-12T10:51:00.146Z" }, - { url = "https://files.pythonhosted.org/packages/71/ec/10537f3280cdb3eb712746677a9601d40760509f876ab107f2cbdcce56c0/rjsmin-1.2.5-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9ec9e902dfe04e791d056eb649805e4dc8a480c170e296b2dfbffb646425acdd", size = 35980, upload-time = "2025-10-12T10:51:02.53Z" }, - { url = "https://files.pythonhosted.org/packages/8c/0e/11406ff7c711e3c7d4ec30a2f7998293bf157b9e0451a5f6ce6b8505e1b6/rjsmin-1.2.5-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7926b946de481766d4da5f669da2e3ce8491e750f32f48745d7413a92c810ead", size = 35869, upload-time = "2025-10-12T10:51:03.616Z" }, - { url = "https://files.pythonhosted.org/packages/71/8e/8102b9324a3b1a7ad5262824537ee7dad18325d457ff0b3806c9f88d7bfa/rjsmin-1.2.5-cp313-cp313t-manylinux1_i686.whl", hash = "sha256:57d0935b2675644d80ea33b611d6752a33af8e1a62baa5adff0a0b8d43981732", size = 33656, upload-time = "2025-10-12T10:51:04.656Z" }, - { url = "https://files.pythonhosted.org/packages/3d/4a/94dbe6a90b9c5ab9dfdcfe2e8ae2c106c990c96f759c6396621eabcfe503/rjsmin-1.2.5-cp313-cp313t-manylinux1_x86_64.whl", hash = "sha256:d283452b6684bd6f422eea783e5f5f16b564727652398bb71ad5adc001613765", size = 33500, upload-time = "2025-10-12T10:51:05.808Z" }, - { url = "https://files.pythonhosted.org/packages/9a/f7/8f8a6cf1b1394ce61ac0a491dbf22237734d472e80feea715ec1ca580de8/rjsmin-1.2.5-cp313-cp313t-manylinux2014_aarch64.whl", hash = "sha256:8a3c43e43c06afa7e8a36b22a1247ae58d2eebfe0aea7af5cd83f68fd7360ddc", size = 34125, upload-time = "2025-10-12T10:51:06.829Z" }, - { url = "https://files.pythonhosted.org/packages/e2/b0/7562103d5241a7b57cf93e7047ee00889b67eabb99df0af03105f2224142/rjsmin-1.2.5-cp313-cp313t-musllinux_1_1_aarch64.whl", hash = "sha256:85aa826fca5aaf6f0f0f287f986e0f79c0f8953bab5090fed17a4f35f7ada65a", size = 37468, upload-time = "2025-10-12T10:51:07.936Z" }, - { url = "https://files.pythonhosted.org/packages/44/80/0a56f415aa2d92898388df8447270c3813c13eefdace54d44d12b21aba39/rjsmin-1.2.5-cp313-cp313t-musllinux_1_1_i686.whl", hash = "sha256:d68cb778e25393adb84e1844aac6f132f72055a6cf4463bae560858300ca500c", size = 37850, upload-time = "2025-10-12T10:51:09.28Z" }, - { url = "https://files.pythonhosted.org/packages/bb/eb/9c3dc7763519ed69a50641be920f3f40c286022d7ebd5a62fa4434996806/rjsmin-1.2.5-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:a86825ff7846a5c2f21a71d669b96d1b52237fb668f0243fa4f4f40a2ad93ff7", size = 37645, upload-time = "2025-10-12T10:51:10.304Z" }, - { url = "https://files.pythonhosted.org/packages/b8/ed/b472d5a3fd7d63c016893f7d438e677901fea28089b5d30cd1a115bcc887/rjsmin-1.2.5-cp314-cp314-manylinux1_i686.whl", hash = "sha256:7096357ed596fdfe0acb750f8cbfca338f3c845cc12def3861e23ed811589d15", size = 31983, upload-time = "2025-10-12T10:51:11.361Z" }, - { url = "https://files.pythonhosted.org/packages/9c/e8/e76fa527fde17fd08288e4efef25c0aba7979ed5740eeab7bdff507bdeba/rjsmin-1.2.5-cp314-cp314-manylinux1_x86_64.whl", hash = "sha256:4e80b05803749502995fe33b6f5fd589b51dc46e50d873baf0b515c8f6e7b668", size = 32002, upload-time = "2025-10-12T10:51:12.257Z" }, - { url = "https://files.pythonhosted.org/packages/87/6c/ee395ef8ee117ba2d158a23a9502bc4a706e02f63bfdf6d01b802ae6ee9a/rjsmin-1.2.5-cp314-cp314-manylinux2014_aarch64.whl", hash = "sha256:b6d0bc092acc3f54ea63ec1dcb808edaac5e956141d89fd0d038e80de5322052", size = 32435, upload-time = "2025-10-12T10:51:13.147Z" }, - { url = "https://files.pythonhosted.org/packages/1a/78/c157d33aa6148f0e8c57bb91a41969e1a4aab929f3bb0a8d9ff3b5e21556/rjsmin-1.2.5-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1e2943259be7beafdcb0847c2a901f223bf9044bdfa8105e1be1ad67d6c47795", size = 32877, upload-time = "2025-10-12T10:51:14.545Z" }, - { url = "https://files.pythonhosted.org/packages/e9/49/6252145bf85d87c815aaf441c5efdf1ce918db5ab6e915cf6d0d99ca3969/rjsmin-1.2.5-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:e0387568c27fb49e55c1d0dfc27b54fc63d04b7756b1fed9743078130262907f", size = 32957, upload-time = "2025-10-12T10:51:15.964Z" }, - { url = "https://files.pythonhosted.org/packages/15/7e/c321c047b1a2fb7fa5ac818c37c1a15d348e1c12a1148de8ca5192a83b8f/rjsmin-1.2.5-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8196f1ecb0dff6c8647d4622e496869e94f1be92567ea2e941aa18d49a1a4347", size = 32456, upload-time = "2025-10-12T10:51:16.885Z" }, - { url = "https://files.pythonhosted.org/packages/5b/d7/2d190ce5ad10832df62edd4d9b1ae7092fd259ca58b39a1e202337f511a9/rjsmin-1.2.5-cp314-cp314t-manylinux1_i686.whl", hash = "sha256:9dd9f66568be9c8676278f140aa54102fab9af7feb59adf0c7a85bef49fe70df", size = 34115, upload-time = "2025-10-12T10:51:17.911Z" }, - { url = "https://files.pythonhosted.org/packages/76/ab/e7bcf261ede4cef7a0693927d7dcd1612bb59ba6c05191f58a92deec9f01/rjsmin-1.2.5-cp314-cp314t-manylinux1_x86_64.whl", hash = "sha256:5b8f72f7d96e5e1d30a33182cb39d4eb4516ddcd9b2f984813a9eefe66f8e180", size = 33977, upload-time = "2025-10-12T10:51:18.996Z" }, - { url = "https://files.pythonhosted.org/packages/a7/75/f1ff5f2199437b534204b40aa46c55c703489063cf7806c948a1a665575e/rjsmin-1.2.5-cp314-cp314t-manylinux2014_aarch64.whl", hash = "sha256:8c5906bd8830f616e992ad5e7277d0ea12c530110da188b2b9da23e9524a7cbc", size = 34604, upload-time = "2025-10-12T10:51:20.031Z" }, - { url = "https://files.pythonhosted.org/packages/d2/dc/acd463d88c56476cc683f1c6cce893c590007dccd390747e824b8e923d63/rjsmin-1.2.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8207bac0d3bab7791fd667f0863b5f32e51047845179b94b28c716e6514a9234", size = 34775, upload-time = "2025-10-12T10:51:21.364Z" }, - { url = "https://files.pythonhosted.org/packages/ce/56/e6f61718d1c36e646aabe552ad1f8f77744a4c57524eaa782b5b44eba220/rjsmin-1.2.5-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:1e3ab93a51d7581ba0a3b6a383df2929b86d9d55f9516764678f9b4e409826e8", size = 34682, upload-time = "2025-10-12T10:51:22.755Z" }, - { url = "https://files.pythonhosted.org/packages/00/f3/37a4672ddb1307eb57d9b54ba89a48f483a04a63cac4e1471fdb4cba76e6/rjsmin-1.2.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:47dad1732a2c4779bdc76d5b3183fdf2ec27838f31071fa9dfcc79483d3480e2", size = 34161, upload-time = "2025-10-12T10:51:23.761Z" }, -] - [[package]] name = "rpds-py" version = "0.30.0" @@ -1903,28 +1776,28 @@ wheels = [ [[package]] name = "ruff" -version = "0.14.9" +version = "0.14.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f6/1b/ab712a9d5044435be8e9a2beb17cbfa4c241aa9b5e4413febac2a8b79ef2/ruff-0.14.9.tar.gz", hash = "sha256:35f85b25dd586381c0cc053f48826109384c81c00ad7ef1bd977bfcc28119d5b", size = 5809165, upload-time = "2025-12-11T21:39:47.381Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/77/9a7fe084d268f8855d493e5031ea03fa0af8cc05887f638bf1c4e3363eb8/ruff-0.14.11.tar.gz", hash = "sha256:f6dc463bfa5c07a59b1ff2c3b9767373e541346ea105503b4c0369c520a66958", size = 5993417, upload-time = "2026-01-08T19:11:58.322Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b8/1c/d1b1bba22cffec02351c78ab9ed4f7d7391876e12720298448b29b7229c1/ruff-0.14.9-py3-none-linux_armv6l.whl", hash = "sha256:f1ec5de1ce150ca6e43691f4a9ef5c04574ad9ca35c8b3b0e18877314aba7e75", size = 13576541, upload-time = "2025-12-11T21:39:14.806Z" }, - { url = "https://files.pythonhosted.org/packages/94/ab/ffe580e6ea1fca67f6337b0af59fc7e683344a43642d2d55d251ff83ceae/ruff-0.14.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:ed9d7417a299fc6030b4f26333bf1117ed82a61ea91238558c0268c14e00d0c2", size = 13779363, upload-time = "2025-12-11T21:39:20.29Z" }, - { url = "https://files.pythonhosted.org/packages/7d/f8/2be49047f929d6965401855461e697ab185e1a6a683d914c5c19c7962d9e/ruff-0.14.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d5dc3473c3f0e4a1008d0ef1d75cee24a48e254c8bed3a7afdd2b4392657ed2c", size = 12925292, upload-time = "2025-12-11T21:39:38.757Z" }, - { url = "https://files.pythonhosted.org/packages/9e/e9/08840ff5127916bb989c86f18924fd568938b06f58b60e206176f327c0fe/ruff-0.14.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84bf7c698fc8f3cb8278830fb6b5a47f9bcc1ed8cb4f689b9dd02698fa840697", size = 13362894, upload-time = "2025-12-11T21:39:02.524Z" }, - { url = "https://files.pythonhosted.org/packages/31/1c/5b4e8e7750613ef43390bb58658eaf1d862c0cc3352d139cd718a2cea164/ruff-0.14.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa733093d1f9d88a5d98988d8834ef5d6f9828d03743bf5e338bf980a19fce27", size = 13311482, upload-time = "2025-12-11T21:39:17.51Z" }, - { url = "https://files.pythonhosted.org/packages/5b/3a/459dce7a8cb35ba1ea3e9c88f19077667a7977234f3b5ab197fad240b404/ruff-0.14.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a1cfb04eda979b20c8c19550c8b5f498df64ff8da151283311ce3199e8b3648", size = 14016100, upload-time = "2025-12-11T21:39:41.948Z" }, - { url = "https://files.pythonhosted.org/packages/a6/31/f064f4ec32524f9956a0890fc6a944e5cf06c63c554e39957d208c0ffc45/ruff-0.14.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:1e5cb521e5ccf0008bd74d5595a4580313844a42b9103b7388eca5a12c970743", size = 15477729, upload-time = "2025-12-11T21:39:23.279Z" }, - { url = "https://files.pythonhosted.org/packages/7a/6d/f364252aad36ccd443494bc5f02e41bf677f964b58902a17c0b16c53d890/ruff-0.14.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd429a8926be6bba4befa8cdcf3f4dd2591c413ea5066b1e99155ed245ae42bb", size = 15122386, upload-time = "2025-12-11T21:39:33.125Z" }, - { url = "https://files.pythonhosted.org/packages/20/02/e848787912d16209aba2799a4d5a1775660b6a3d0ab3944a4ccc13e64a02/ruff-0.14.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ab208c1b7a492e37caeaf290b1378148f75e13c2225af5d44628b95fd7834273", size = 14497124, upload-time = "2025-12-11T21:38:59.33Z" }, - { url = "https://files.pythonhosted.org/packages/f3/51/0489a6a5595b7760b5dbac0dd82852b510326e7d88d51dbffcd2e07e3ff3/ruff-0.14.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72034534e5b11e8a593f517b2f2f2b273eb68a30978c6a2d40473ad0aaa4cb4a", size = 14195343, upload-time = "2025-12-11T21:39:44.866Z" }, - { url = "https://files.pythonhosted.org/packages/f6/53/3bb8d2fa73e4c2f80acc65213ee0830fa0c49c6479313f7a68a00f39e208/ruff-0.14.9-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:712ff04f44663f1b90a1195f51525836e3413c8a773574a7b7775554269c30ed", size = 14346425, upload-time = "2025-12-11T21:39:05.927Z" }, - { url = "https://files.pythonhosted.org/packages/ad/04/bdb1d0ab876372da3e983896481760867fc84f969c5c09d428e8f01b557f/ruff-0.14.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:a111fee1db6f1d5d5810245295527cda1d367c5aa8f42e0fca9a78ede9b4498b", size = 13258768, upload-time = "2025-12-11T21:39:08.691Z" }, - { url = "https://files.pythonhosted.org/packages/40/d9/8bf8e1e41a311afd2abc8ad12be1b6c6c8b925506d9069b67bb5e9a04af3/ruff-0.14.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8769efc71558fecc25eb295ddec7d1030d41a51e9dcf127cbd63ec517f22d567", size = 13326939, upload-time = "2025-12-11T21:39:53.842Z" }, - { url = "https://files.pythonhosted.org/packages/f4/56/a213fa9edb6dd849f1cfbc236206ead10913693c72a67fb7ddc1833bf95d/ruff-0.14.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:347e3bf16197e8a2de17940cd75fd6491e25c0aa7edf7d61aa03f146a1aa885a", size = 13578888, upload-time = "2025-12-11T21:39:35.988Z" }, - { url = "https://files.pythonhosted.org/packages/33/09/6a4a67ffa4abae6bf44c972a4521337ffce9cbc7808faadede754ef7a79c/ruff-0.14.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7715d14e5bccf5b660f54516558aa94781d3eb0838f8e706fb60e3ff6eff03a8", size = 14314473, upload-time = "2025-12-11T21:39:50.78Z" }, - { url = "https://files.pythonhosted.org/packages/12/0d/15cc82da5d83f27a3c6b04f3a232d61bc8c50d38a6cd8da79228e5f8b8d6/ruff-0.14.9-py3-none-win32.whl", hash = "sha256:df0937f30aaabe83da172adaf8937003ff28172f59ca9f17883b4213783df197", size = 13202651, upload-time = "2025-12-11T21:39:26.628Z" }, - { url = "https://files.pythonhosted.org/packages/32/f7/c78b060388eefe0304d9d42e68fab8cffd049128ec466456cef9b8d4f06f/ruff-0.14.9-py3-none-win_amd64.whl", hash = "sha256:c0b53a10e61df15a42ed711ec0bda0c582039cf6c754c49c020084c55b5b0bc2", size = 14702079, upload-time = "2025-12-11T21:39:11.954Z" }, - { url = "https://files.pythonhosted.org/packages/26/09/7a9520315decd2334afa65ed258fed438f070e31f05a2e43dd480a5e5911/ruff-0.14.9-py3-none-win_arm64.whl", hash = "sha256:8e821c366517a074046d92f0e9213ed1c13dbc5b37a7fc20b07f79b64d62cc84", size = 13744730, upload-time = "2025-12-11T21:39:29.659Z" }, + { url = "https://files.pythonhosted.org/packages/f0/a6/a4c40a5aaa7e331f245d2dc1ac8ece306681f52b636b40ef87c88b9f7afd/ruff-0.14.11-py3-none-linux_armv6l.whl", hash = "sha256:f6ff2d95cbd335841a7217bdfd9c1d2e44eac2c584197ab1385579d55ff8830e", size = 12951208, upload-time = "2026-01-08T19:12:09.218Z" }, + { url = "https://files.pythonhosted.org/packages/5c/5c/360a35cb7204b328b685d3129c08aca24765ff92b5a7efedbdd6c150d555/ruff-0.14.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6f6eb5c1c8033680f4172ea9c8d3706c156223010b8b97b05e82c59bdc774ee6", size = 13330075, upload-time = "2026-01-08T19:12:02.549Z" }, + { url = "https://files.pythonhosted.org/packages/1b/9e/0cc2f1be7a7d33cae541824cf3f95b4ff40d03557b575912b5b70273c9ec/ruff-0.14.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:f2fc34cc896f90080fca01259f96c566f74069a04b25b6205d55379d12a6855e", size = 12257809, upload-time = "2026-01-08T19:12:00.366Z" }, + { url = "https://files.pythonhosted.org/packages/a7/e5/5faab97c15bb75228d9f74637e775d26ac703cc2b4898564c01ab3637c02/ruff-0.14.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:53386375001773ae812b43205d6064dae49ff0968774e6befe16a994fc233caa", size = 12678447, upload-time = "2026-01-08T19:12:13.899Z" }, + { url = "https://files.pythonhosted.org/packages/1b/33/e9767f60a2bef779fb5855cab0af76c488e0ce90f7bb7b8a45c8a2ba4178/ruff-0.14.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a697737dce1ca97a0a55b5ff0434ee7205943d4874d638fe3ae66166ff46edbe", size = 12758560, upload-time = "2026-01-08T19:11:42.55Z" }, + { url = "https://files.pythonhosted.org/packages/eb/84/4c6cf627a21462bb5102f7be2a320b084228ff26e105510cd2255ea868e5/ruff-0.14.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6845ca1da8ab81ab1dce755a32ad13f1db72e7fba27c486d5d90d65e04d17b8f", size = 13599296, upload-time = "2026-01-08T19:11:30.371Z" }, + { url = "https://files.pythonhosted.org/packages/88/e1/92b5ed7ea66d849f6157e695dc23d5d6d982bd6aa8d077895652c38a7cae/ruff-0.14.11-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:e36ce2fd31b54065ec6f76cb08d60159e1b32bdf08507862e32f47e6dde8bcbf", size = 15048981, upload-time = "2026-01-08T19:12:04.742Z" }, + { url = "https://files.pythonhosted.org/packages/61/df/c1bd30992615ac17c2fb64b8a7376ca22c04a70555b5d05b8f717163cf9f/ruff-0.14.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590bcc0e2097ecf74e62a5c10a6b71f008ad82eb97b0a0079e85defe19fe74d9", size = 14633183, upload-time = "2026-01-08T19:11:40.069Z" }, + { url = "https://files.pythonhosted.org/packages/04/e9/fe552902f25013dd28a5428a42347d9ad20c4b534834a325a28305747d64/ruff-0.14.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:53fe71125fc158210d57fe4da26e622c9c294022988d08d9347ec1cf782adafe", size = 14050453, upload-time = "2026-01-08T19:11:37.555Z" }, + { url = "https://files.pythonhosted.org/packages/ae/93/f36d89fa021543187f98991609ce6e47e24f35f008dfe1af01379d248a41/ruff-0.14.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a35c9da08562f1598ded8470fcfef2afb5cf881996e6c0a502ceb61f4bc9c8a3", size = 13757889, upload-time = "2026-01-08T19:12:07.094Z" }, + { url = "https://files.pythonhosted.org/packages/b7/9f/c7fb6ecf554f28709a6a1f2a7f74750d400979e8cd47ed29feeaa1bd4db8/ruff-0.14.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:0f3727189a52179393ecf92ec7057c2210203e6af2676f08d92140d3e1ee72c1", size = 13955832, upload-time = "2026-01-08T19:11:55.064Z" }, + { url = "https://files.pythonhosted.org/packages/db/a0/153315310f250f76900a98278cf878c64dfb6d044e184491dd3289796734/ruff-0.14.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:eb09f849bd37147a789b85995ff734a6c4a095bed5fd1608c4f56afc3634cde2", size = 12586522, upload-time = "2026-01-08T19:11:35.356Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2b/a73a2b6e6d2df1d74bf2b78098be1572191e54bec0e59e29382d13c3adc5/ruff-0.14.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:c61782543c1231bf71041461c1f28c64b961d457d0f238ac388e2ab173d7ecb7", size = 12724637, upload-time = "2026-01-08T19:11:47.796Z" }, + { url = "https://files.pythonhosted.org/packages/f0/41/09100590320394401cd3c48fc718a8ba71c7ddb1ffd07e0ad6576b3a3df2/ruff-0.14.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:82ff352ea68fb6766140381748e1f67f83c39860b6446966cff48a315c3e2491", size = 13145837, upload-time = "2026-01-08T19:11:32.87Z" }, + { url = "https://files.pythonhosted.org/packages/3b/d8/e035db859d1d3edf909381eb8ff3e89a672d6572e9454093538fe6f164b0/ruff-0.14.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:728e56879df4ca5b62a9dde2dd0eb0edda2a55160c0ea28c4025f18c03f86984", size = 13850469, upload-time = "2026-01-08T19:12:11.694Z" }, + { url = "https://files.pythonhosted.org/packages/4e/02/bb3ff8b6e6d02ce9e3740f4c17dfbbfb55f34c789c139e9cd91985f356c7/ruff-0.14.11-py3-none-win32.whl", hash = "sha256:337c5dd11f16ee52ae217757d9b82a26400be7efac883e9e852646f1557ed841", size = 12851094, upload-time = "2026-01-08T19:11:45.163Z" }, + { url = "https://files.pythonhosted.org/packages/58/f1/90ddc533918d3a2ad628bc3044cdfc094949e6d4b929220c3f0eb8a1c998/ruff-0.14.11-py3-none-win_amd64.whl", hash = "sha256:f981cea63d08456b2c070e64b79cb62f951aa1305282974d4d5216e6e0178ae6", size = 14001379, upload-time = "2026-01-08T19:11:52.591Z" }, + { url = "https://files.pythonhosted.org/packages/c4/1c/1dbe51782c0e1e9cfce1d1004752672d2d4629ea46945d19d731ad772b3b/ruff-0.14.11-py3-none-win_arm64.whl", hash = "sha256:649fb6c9edd7f751db276ef42df1f3df41c38d67d199570ae2a7bd6cbc3590f0", size = 12938644, upload-time = "2026-01-08T19:11:50.027Z" }, ] [[package]] @@ -1938,11 +1811,11 @@ wheels = [ [[package]] name = "sqlparse" -version = "0.5.4" +version = "0.5.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/18/67/701f86b28d63b2086de47c942eccf8ca2208b3be69715a1119a4e384415a/sqlparse-0.5.4.tar.gz", hash = "sha256:4396a7d3cf1cd679c1be976cf3dc6e0a51d0111e87787e7a8d780e7d5a998f9e", size = 120112, upload-time = "2025-11-28T07:10:18.377Z" } +sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/25/70/001ee337f7aa888fb2e3f5fd7592a6afc5283adb1ed44ce8df5764070f22/sqlparse-0.5.4-py3-none-any.whl", hash = "sha256:99a9f0314977b76d776a0fcb8554de91b9bb8a18560631d6bc48721d07023dcb", size = 45933, upload-time = "2025-11-28T07:10:19.73Z" }, + { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, ] [[package]] @@ -1968,51 +1841,56 @@ wheels = [ [[package]] name = "tomli" -version = "2.3.0" +version = "2.4.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/52/ed/3f73f72945444548f33eba9a87fc7a6e969915e7b1acc8260b30e1f76a2f/tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549", size = 17392, upload-time = "2025-10-08T22:01:47.119Z" } +sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/b3/2e/299f62b401438d5fe1624119c723f5d877acc86a4c2492da405626665f12/tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45", size = 153236, upload-time = "2025-10-08T22:01:00.137Z" }, - { url = "https://files.pythonhosted.org/packages/86/7f/d8fffe6a7aefdb61bced88fcb5e280cfd71e08939da5894161bd71bea022/tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba", size = 148084, upload-time = "2025-10-08T22:01:01.63Z" }, - { url = "https://files.pythonhosted.org/packages/47/5c/24935fb6a2ee63e86d80e4d3b58b222dafaf438c416752c8b58537c8b89a/tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf", size = 234832, upload-time = "2025-10-08T22:01:02.543Z" }, - { url = "https://files.pythonhosted.org/packages/89/da/75dfd804fc11e6612846758a23f13271b76d577e299592b4371a4ca4cd09/tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441", size = 242052, upload-time = "2025-10-08T22:01:03.836Z" }, - { url = "https://files.pythonhosted.org/packages/70/8c/f48ac899f7b3ca7eb13af73bacbc93aec37f9c954df3c08ad96991c8c373/tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845", size = 239555, upload-time = "2025-10-08T22:01:04.834Z" }, - { url = "https://files.pythonhosted.org/packages/ba/28/72f8afd73f1d0e7829bfc093f4cb98ce0a40ffc0cc997009ee1ed94ba705/tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c", size = 245128, upload-time = "2025-10-08T22:01:05.84Z" }, - { url = "https://files.pythonhosted.org/packages/b6/eb/a7679c8ac85208706d27436e8d421dfa39d4c914dcf5fa8083a9305f58d9/tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456", size = 96445, upload-time = "2025-10-08T22:01:06.896Z" }, - { url = "https://files.pythonhosted.org/packages/0a/fe/3d3420c4cb1ad9cb462fb52967080575f15898da97e21cb6f1361d505383/tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be", size = 107165, upload-time = "2025-10-08T22:01:08.107Z" }, - { url = "https://files.pythonhosted.org/packages/ff/b7/40f36368fcabc518bb11c8f06379a0fd631985046c038aca08c6d6a43c6e/tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac", size = 154891, upload-time = "2025-10-08T22:01:09.082Z" }, - { url = "https://files.pythonhosted.org/packages/f9/3f/d9dd692199e3b3aab2e4e4dd948abd0f790d9ded8cd10cbaae276a898434/tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22", size = 148796, upload-time = "2025-10-08T22:01:10.266Z" }, - { url = "https://files.pythonhosted.org/packages/60/83/59bff4996c2cf9f9387a0f5a3394629c7efa5ef16142076a23a90f1955fa/tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f", size = 242121, upload-time = "2025-10-08T22:01:11.332Z" }, - { url = "https://files.pythonhosted.org/packages/45/e5/7c5119ff39de8693d6baab6c0b6dcb556d192c165596e9fc231ea1052041/tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52", size = 250070, upload-time = "2025-10-08T22:01:12.498Z" }, - { url = "https://files.pythonhosted.org/packages/45/12/ad5126d3a278f27e6701abde51d342aa78d06e27ce2bb596a01f7709a5a2/tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8", size = 245859, upload-time = "2025-10-08T22:01:13.551Z" }, - { url = "https://files.pythonhosted.org/packages/fb/a1/4d6865da6a71c603cfe6ad0e6556c73c76548557a8d658f9e3b142df245f/tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6", size = 250296, upload-time = "2025-10-08T22:01:14.614Z" }, - { url = "https://files.pythonhosted.org/packages/a0/b7/a7a7042715d55c9ba6e8b196d65d2cb662578b4d8cd17d882d45322b0d78/tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876", size = 97124, upload-time = "2025-10-08T22:01:15.629Z" }, - { url = "https://files.pythonhosted.org/packages/06/1e/f22f100db15a68b520664eb3328fb0ae4e90530887928558112c8d1f4515/tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878", size = 107698, upload-time = "2025-10-08T22:01:16.51Z" }, - { url = "https://files.pythonhosted.org/packages/89/48/06ee6eabe4fdd9ecd48bf488f4ac783844fd777f547b8d1b61c11939974e/tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b", size = 154819, upload-time = "2025-10-08T22:01:17.964Z" }, - { url = "https://files.pythonhosted.org/packages/f1/01/88793757d54d8937015c75dcdfb673c65471945f6be98e6a0410fba167ed/tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae", size = 148766, upload-time = "2025-10-08T22:01:18.959Z" }, - { url = "https://files.pythonhosted.org/packages/42/17/5e2c956f0144b812e7e107f94f1cc54af734eb17b5191c0bbfb72de5e93e/tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b", size = 240771, upload-time = "2025-10-08T22:01:20.106Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f4/0fbd014909748706c01d16824eadb0307115f9562a15cbb012cd9b3512c5/tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf", size = 248586, upload-time = "2025-10-08T22:01:21.164Z" }, - { url = "https://files.pythonhosted.org/packages/30/77/fed85e114bde5e81ecf9bc5da0cc69f2914b38f4708c80ae67d0c10180c5/tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f", size = 244792, upload-time = "2025-10-08T22:01:22.417Z" }, - { url = "https://files.pythonhosted.org/packages/55/92/afed3d497f7c186dc71e6ee6d4fcb0acfa5f7d0a1a2878f8beae379ae0cc/tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05", size = 248909, upload-time = "2025-10-08T22:01:23.859Z" }, - { url = "https://files.pythonhosted.org/packages/f8/84/ef50c51b5a9472e7265ce1ffc7f24cd4023d289e109f669bdb1553f6a7c2/tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606", size = 96946, upload-time = "2025-10-08T22:01:24.893Z" }, - { url = "https://files.pythonhosted.org/packages/b2/b7/718cd1da0884f281f95ccfa3a6cc572d30053cba64603f79d431d3c9b61b/tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999", size = 107705, upload-time = "2025-10-08T22:01:26.153Z" }, - { url = "https://files.pythonhosted.org/packages/19/94/aeafa14a52e16163008060506fcb6aa1949d13548d13752171a755c65611/tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e", size = 154244, upload-time = "2025-10-08T22:01:27.06Z" }, - { url = "https://files.pythonhosted.org/packages/db/e4/1e58409aa78eefa47ccd19779fc6f36787edbe7d4cd330eeeedb33a4515b/tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3", size = 148637, upload-time = "2025-10-08T22:01:28.059Z" }, - { url = "https://files.pythonhosted.org/packages/26/b6/d1eccb62f665e44359226811064596dd6a366ea1f985839c566cd61525ae/tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc", size = 241925, upload-time = "2025-10-08T22:01:29.066Z" }, - { url = "https://files.pythonhosted.org/packages/70/91/7cdab9a03e6d3d2bb11beae108da5bdc1c34bdeb06e21163482544ddcc90/tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0", size = 249045, upload-time = "2025-10-08T22:01:31.98Z" }, - { url = "https://files.pythonhosted.org/packages/15/1b/8c26874ed1f6e4f1fcfeb868db8a794cbe9f227299402db58cfcc858766c/tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879", size = 245835, upload-time = "2025-10-08T22:01:32.989Z" }, - { url = "https://files.pythonhosted.org/packages/fd/42/8e3c6a9a4b1a1360c1a2a39f0b972cef2cc9ebd56025168c4137192a9321/tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005", size = 253109, upload-time = "2025-10-08T22:01:34.052Z" }, - { url = "https://files.pythonhosted.org/packages/22/0c/b4da635000a71b5f80130937eeac12e686eefb376b8dee113b4a582bba42/tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463", size = 97930, upload-time = "2025-10-08T22:01:35.082Z" }, - { url = "https://files.pythonhosted.org/packages/b9/74/cb1abc870a418ae99cd5c9547d6bce30701a954e0e721821df483ef7223c/tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8", size = 107964, upload-time = "2025-10-08T22:01:36.057Z" }, - { url = "https://files.pythonhosted.org/packages/54/78/5c46fff6432a712af9f792944f4fcd7067d8823157949f4e40c56b8b3c83/tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77", size = 163065, upload-time = "2025-10-08T22:01:37.27Z" }, - { url = "https://files.pythonhosted.org/packages/39/67/f85d9bd23182f45eca8939cd2bc7050e1f90c41f4a2ecbbd5963a1d1c486/tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf", size = 159088, upload-time = "2025-10-08T22:01:38.235Z" }, - { url = "https://files.pythonhosted.org/packages/26/5a/4b546a0405b9cc0659b399f12b6adb750757baf04250b148d3c5059fc4eb/tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530", size = 268193, upload-time = "2025-10-08T22:01:39.712Z" }, - { url = "https://files.pythonhosted.org/packages/42/4f/2c12a72ae22cf7b59a7fe75b3465b7aba40ea9145d026ba41cb382075b0e/tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b", size = 275488, upload-time = "2025-10-08T22:01:40.773Z" }, - { url = "https://files.pythonhosted.org/packages/92/04/a038d65dbe160c3aa5a624e93ad98111090f6804027d474ba9c37c8ae186/tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67", size = 272669, upload-time = "2025-10-08T22:01:41.824Z" }, - { url = "https://files.pythonhosted.org/packages/be/2f/8b7c60a9d1612a7cbc39ffcca4f21a73bf368a80fc25bccf8253e2563267/tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f", size = 279709, upload-time = "2025-10-08T22:01:43.177Z" }, - { url = "https://files.pythonhosted.org/packages/7e/46/cc36c679f09f27ded940281c38607716c86cf8ba4a518d524e349c8b4874/tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0", size = 107563, upload-time = "2025-10-08T22:01:44.233Z" }, - { url = "https://files.pythonhosted.org/packages/84/ff/426ca8683cf7b753614480484f6437f568fd2fda2edbdf57a2d3d8b27a0b/tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba", size = 119756, upload-time = "2025-10-08T22:01:45.234Z" }, - { url = "https://files.pythonhosted.org/packages/77/b8/0135fadc89e73be292b473cb820b4f5a08197779206b33191e801feeae40/tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b", size = 14408, upload-time = "2025-10-08T22:01:46.04Z" }, + { url = "https://files.pythonhosted.org/packages/3c/d9/3dc2289e1f3b32eb19b9785b6a006b28ee99acb37d1d47f78d4c10e28bf8/tomli-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b5ef256a3fd497d4973c11bf142e9ed78b150d36f5773f1ca6088c230ffc5867", size = 153663, upload-time = "2026-01-11T11:21:45.27Z" }, + { url = "https://files.pythonhosted.org/packages/51/32/ef9f6845e6b9ca392cd3f64f9ec185cc6f09f0a2df3db08cbe8809d1d435/tomli-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5572e41282d5268eb09a697c89a7bee84fae66511f87533a6f88bd2f7b652da9", size = 148469, upload-time = "2026-01-11T11:21:46.873Z" }, + { url = "https://files.pythonhosted.org/packages/d6/c2/506e44cce89a8b1b1e047d64bd495c22c9f71f21e05f380f1a950dd9c217/tomli-2.4.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:551e321c6ba03b55676970b47cb1b73f14a0a4dce6a3e1a9458fd6d921d72e95", size = 236039, upload-time = "2026-01-11T11:21:48.503Z" }, + { url = "https://files.pythonhosted.org/packages/b3/40/e1b65986dbc861b7e986e8ec394598187fa8aee85b1650b01dd925ca0be8/tomli-2.4.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e3f639a7a8f10069d0e15408c0b96a2a828cfdec6fca05296ebcdcc28ca7c76", size = 243007, upload-time = "2026-01-11T11:21:49.456Z" }, + { url = "https://files.pythonhosted.org/packages/9c/6f/6e39ce66b58a5b7ae572a0f4352ff40c71e8573633deda43f6a379d56b3e/tomli-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1b168f2731796b045128c45982d3a4874057626da0e2ef1fdd722848b741361d", size = 240875, upload-time = "2026-01-11T11:21:50.755Z" }, + { url = "https://files.pythonhosted.org/packages/aa/ad/cb089cb190487caa80204d503c7fd0f4d443f90b95cf4ef5cf5aa0f439b0/tomli-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:133e93646ec4300d651839d382d63edff11d8978be23da4cc106f5a18b7d0576", size = 246271, upload-time = "2026-01-11T11:21:51.81Z" }, + { url = "https://files.pythonhosted.org/packages/0b/63/69125220e47fd7a3a27fd0de0c6398c89432fec41bc739823bcc66506af6/tomli-2.4.0-cp311-cp311-win32.whl", hash = "sha256:b6c78bdf37764092d369722d9946cb65b8767bfa4110f902a1b2542d8d173c8a", size = 96770, upload-time = "2026-01-11T11:21:52.647Z" }, + { url = "https://files.pythonhosted.org/packages/1e/0d/a22bb6c83f83386b0008425a6cd1fa1c14b5f3dd4bad05e98cf3dbbf4a64/tomli-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:d3d1654e11d724760cdb37a3d7691f0be9db5fbdaef59c9f532aabf87006dbaa", size = 107626, upload-time = "2026-01-11T11:21:53.459Z" }, + { url = "https://files.pythonhosted.org/packages/2f/6d/77be674a3485e75cacbf2ddba2b146911477bd887dda9d8c9dfb2f15e871/tomli-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:cae9c19ed12d4e8f3ebf46d1a75090e4c0dc16271c5bce1c833ac168f08fb614", size = 94842, upload-time = "2026-01-11T11:21:54.831Z" }, + { url = "https://files.pythonhosted.org/packages/3c/43/7389a1869f2f26dba52404e1ef13b4784b6b37dac93bac53457e3ff24ca3/tomli-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:920b1de295e72887bafa3ad9f7a792f811847d57ea6b1215154030cf131f16b1", size = 154894, upload-time = "2026-01-11T11:21:56.07Z" }, + { url = "https://files.pythonhosted.org/packages/e9/05/2f9bf110b5294132b2edf13fe6ca6ae456204f3d749f623307cbb7a946f2/tomli-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7d6d9a4aee98fac3eab4952ad1d73aee87359452d1c086b5ceb43ed02ddb16b8", size = 149053, upload-time = "2026-01-11T11:21:57.467Z" }, + { url = "https://files.pythonhosted.org/packages/e8/41/1eda3ca1abc6f6154a8db4d714a4d35c4ad90adc0bcf700657291593fbf3/tomli-2.4.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36b9d05b51e65b254ea6c2585b59d2c4cb91c8a3d91d0ed0f17591a29aaea54a", size = 243481, upload-time = "2026-01-11T11:21:58.661Z" }, + { url = "https://files.pythonhosted.org/packages/d2/6d/02ff5ab6c8868b41e7d4b987ce2b5f6a51d3335a70aa144edd999e055a01/tomli-2.4.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1c8a885b370751837c029ef9bc014f27d80840e48bac415f3412e6593bbc18c1", size = 251720, upload-time = "2026-01-11T11:22:00.178Z" }, + { url = "https://files.pythonhosted.org/packages/7b/57/0405c59a909c45d5b6f146107c6d997825aa87568b042042f7a9c0afed34/tomli-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8768715ffc41f0008abe25d808c20c3d990f42b6e2e58305d5da280ae7d1fa3b", size = 247014, upload-time = "2026-01-11T11:22:01.238Z" }, + { url = "https://files.pythonhosted.org/packages/2c/0e/2e37568edd944b4165735687cbaf2fe3648129e440c26d02223672ee0630/tomli-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b438885858efd5be02a9a133caf5812b8776ee0c969fea02c45e8e3f296ba51", size = 251820, upload-time = "2026-01-11T11:22:02.727Z" }, + { url = "https://files.pythonhosted.org/packages/5a/1c/ee3b707fdac82aeeb92d1a113f803cf6d0f37bdca0849cb489553e1f417a/tomli-2.4.0-cp312-cp312-win32.whl", hash = "sha256:0408e3de5ec77cc7f81960c362543cbbd91ef883e3138e81b729fc3eea5b9729", size = 97712, upload-time = "2026-01-11T11:22:03.777Z" }, + { url = "https://files.pythonhosted.org/packages/69/13/c07a9177d0b3bab7913299b9278845fc6eaaca14a02667c6be0b0a2270c8/tomli-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:685306e2cc7da35be4ee914fd34ab801a6acacb061b6a7abca922aaf9ad368da", size = 108296, upload-time = "2026-01-11T11:22:04.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/27/e267a60bbeeee343bcc279bb9e8fbed0cbe224bc7b2a3dc2975f22809a09/tomli-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:5aa48d7c2356055feef06a43611fc401a07337d5b006be13a30f6c58f869e3c3", size = 94553, upload-time = "2026-01-11T11:22:05.854Z" }, + { url = "https://files.pythonhosted.org/packages/34/91/7f65f9809f2936e1f4ce6268ae1903074563603b2a2bd969ebbda802744f/tomli-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:84d081fbc252d1b6a982e1870660e7330fb8f90f676f6e78b052ad4e64714bf0", size = 154915, upload-time = "2026-01-11T11:22:06.703Z" }, + { url = "https://files.pythonhosted.org/packages/20/aa/64dd73a5a849c2e8f216b755599c511badde80e91e9bc2271baa7b2cdbb1/tomli-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9a08144fa4cba33db5255f9b74f0b89888622109bd2776148f2597447f92a94e", size = 149038, upload-time = "2026-01-11T11:22:07.56Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8a/6d38870bd3d52c8d1505ce054469a73f73a0fe62c0eaf5dddf61447e32fa/tomli-2.4.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c73add4bb52a206fd0c0723432db123c0c75c280cbd67174dd9d2db228ebb1b4", size = 242245, upload-time = "2026-01-11T11:22:08.344Z" }, + { url = "https://files.pythonhosted.org/packages/59/bb/8002fadefb64ab2669e5b977df3f5e444febea60e717e755b38bb7c41029/tomli-2.4.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1fb2945cbe303b1419e2706e711b7113da57b7db31ee378d08712d678a34e51e", size = 250335, upload-time = "2026-01-11T11:22:09.951Z" }, + { url = "https://files.pythonhosted.org/packages/a5/3d/4cdb6f791682b2ea916af2de96121b3cb1284d7c203d97d92d6003e91c8d/tomli-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:bbb1b10aa643d973366dc2cb1ad94f99c1726a02343d43cbc011edbfac579e7c", size = 245962, upload-time = "2026-01-11T11:22:11.27Z" }, + { url = "https://files.pythonhosted.org/packages/f2/4a/5f25789f9a460bd858ba9756ff52d0830d825b458e13f754952dd15fb7bb/tomli-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4cbcb367d44a1f0c2be408758b43e1ffb5308abe0ea222897d6bfc8e8281ef2f", size = 250396, upload-time = "2026-01-11T11:22:12.325Z" }, + { url = "https://files.pythonhosted.org/packages/aa/2f/b73a36fea58dfa08e8b3a268750e6853a6aac2a349241a905ebd86f3047a/tomli-2.4.0-cp313-cp313-win32.whl", hash = "sha256:7d49c66a7d5e56ac959cb6fc583aff0651094ec071ba9ad43df785abc2320d86", size = 97530, upload-time = "2026-01-11T11:22:13.865Z" }, + { url = "https://files.pythonhosted.org/packages/3b/af/ca18c134b5d75de7e8dc551c5234eaba2e8e951f6b30139599b53de9c187/tomli-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:3cf226acb51d8f1c394c1b310e0e0e61fecdd7adcb78d01e294ac297dd2e7f87", size = 108227, upload-time = "2026-01-11T11:22:15.224Z" }, + { url = "https://files.pythonhosted.org/packages/22/c3/b386b832f209fee8073c8138ec50f27b4460db2fdae9ffe022df89a57f9b/tomli-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:d20b797a5c1ad80c516e41bc1fb0443ddb5006e9aaa7bda2d71978346aeb9132", size = 94748, upload-time = "2026-01-11T11:22:16.009Z" }, + { url = "https://files.pythonhosted.org/packages/f3/c4/84047a97eb1004418bc10bdbcfebda209fca6338002eba2dc27cc6d13563/tomli-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:26ab906a1eb794cd4e103691daa23d95c6919cc2fa9160000ac02370cc9dd3f6", size = 154725, upload-time = "2026-01-11T11:22:17.269Z" }, + { url = "https://files.pythonhosted.org/packages/a8/5d/d39038e646060b9d76274078cddf146ced86dc2b9e8bbf737ad5983609a0/tomli-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:20cedb4ee43278bc4f2fee6cb50daec836959aadaf948db5172e776dd3d993fc", size = 148901, upload-time = "2026-01-11T11:22:18.287Z" }, + { url = "https://files.pythonhosted.org/packages/73/e5/383be1724cb30f4ce44983d249645684a48c435e1cd4f8b5cded8a816d3c/tomli-2.4.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:39b0b5d1b6dd03684b3fb276407ebed7090bbec989fa55838c98560c01113b66", size = 243375, upload-time = "2026-01-11T11:22:19.154Z" }, + { url = "https://files.pythonhosted.org/packages/31/f0/bea80c17971c8d16d3cc109dc3585b0f2ce1036b5f4a8a183789023574f2/tomli-2.4.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a26d7ff68dfdb9f87a016ecfd1e1c2bacbe3108f4e0f8bcd2228ef9a766c787d", size = 250639, upload-time = "2026-01-11T11:22:20.168Z" }, + { url = "https://files.pythonhosted.org/packages/2c/8f/2853c36abbb7608e3f945d8a74e32ed3a74ee3a1f468f1ffc7d1cb3abba6/tomli-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:20ffd184fb1df76a66e34bd1b36b4a4641bd2b82954befa32fe8163e79f1a702", size = 246897, upload-time = "2026-01-11T11:22:21.544Z" }, + { url = "https://files.pythonhosted.org/packages/49/f0/6c05e3196ed5337b9fe7ea003e95fd3819a840b7a0f2bf5a408ef1dad8ed/tomli-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:75c2f8bbddf170e8effc98f5e9084a8751f8174ea6ccf4fca5398436e0320bc8", size = 254697, upload-time = "2026-01-11T11:22:23.058Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f5/2922ef29c9f2951883525def7429967fc4d8208494e5ab524234f06b688b/tomli-2.4.0-cp314-cp314-win32.whl", hash = "sha256:31d556d079d72db7c584c0627ff3a24c5d3fb4f730221d3444f3efb1b2514776", size = 98567, upload-time = "2026-01-11T11:22:24.033Z" }, + { url = "https://files.pythonhosted.org/packages/7b/31/22b52e2e06dd2a5fdbc3ee73226d763b184ff21fc24e20316a44ccc4d96b/tomli-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:43e685b9b2341681907759cf3a04e14d7104b3580f808cfde1dfdb60ada85475", size = 108556, upload-time = "2026-01-11T11:22:25.378Z" }, + { url = "https://files.pythonhosted.org/packages/48/3d/5058dff3255a3d01b705413f64f4306a141a8fd7a251e5a495e3f192a998/tomli-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:3d895d56bd3f82ddd6faaff993c275efc2ff38e52322ea264122d72729dca2b2", size = 96014, upload-time = "2026-01-11T11:22:26.138Z" }, + { url = "https://files.pythonhosted.org/packages/b8/4e/75dab8586e268424202d3a1997ef6014919c941b50642a1682df43204c22/tomli-2.4.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:5b5807f3999fb66776dbce568cc9a828544244a8eb84b84b9bafc080c99597b9", size = 163339, upload-time = "2026-01-11T11:22:27.143Z" }, + { url = "https://files.pythonhosted.org/packages/06/e3/b904d9ab1016829a776d97f163f183a48be6a4deb87304d1e0116a349519/tomli-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c084ad935abe686bd9c898e62a02a19abfc9760b5a79bc29644463eaf2840cb0", size = 159490, upload-time = "2026-01-11T11:22:28.399Z" }, + { url = "https://files.pythonhosted.org/packages/e3/5a/fc3622c8b1ad823e8ea98a35e3c632ee316d48f66f80f9708ceb4f2a0322/tomli-2.4.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f2e3955efea4d1cfbcb87bc321e00dc08d2bcb737fd1d5e398af111d86db5df", size = 269398, upload-time = "2026-01-11T11:22:29.345Z" }, + { url = "https://files.pythonhosted.org/packages/fd/33/62bd6152c8bdd4c305ad9faca48f51d3acb2df1f8791b1477d46ff86e7f8/tomli-2.4.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e0fe8a0b8312acf3a88077a0802565cb09ee34107813bba1c7cd591fa6cfc8d", size = 276515, upload-time = "2026-01-11T11:22:30.327Z" }, + { url = "https://files.pythonhosted.org/packages/4b/ff/ae53619499f5235ee4211e62a8d7982ba9e439a0fb4f2f351a93d67c1dd2/tomli-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:413540dce94673591859c4c6f794dfeaa845e98bf35d72ed59636f869ef9f86f", size = 273806, upload-time = "2026-01-11T11:22:32.56Z" }, + { url = "https://files.pythonhosted.org/packages/47/71/cbca7787fa68d4d0a9f7072821980b39fbb1b6faeb5f5cf02f4a5559fa28/tomli-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0dc56fef0e2c1c470aeac5b6ca8cc7b640bb93e92d9803ddaf9ea03e198f5b0b", size = 281340, upload-time = "2026-01-11T11:22:33.505Z" }, + { url = "https://files.pythonhosted.org/packages/f5/00/d595c120963ad42474cf6ee7771ad0d0e8a49d0f01e29576ee9195d9ecdf/tomli-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:d878f2a6707cc9d53a1be1414bbb419e629c3d6e67f69230217bb663e76b5087", size = 108106, upload-time = "2026-01-11T11:22:34.451Z" }, + { url = "https://files.pythonhosted.org/packages/de/69/9aa0c6a505c2f80e519b43764f8b4ba93b5a0bbd2d9a9de6e2b24271b9a5/tomli-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:2add28aacc7425117ff6364fe9e06a183bb0251b03f986df0e78e974047571fd", size = 120504, upload-time = "2026-01-11T11:22:35.764Z" }, + { url = "https://files.pythonhosted.org/packages/b3/9f/f1668c281c58cfae01482f7114a4b88d345e4c140386241a1a24dcc9e7bc/tomli-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:2b1e3b80e1d5e52e40e9b924ec43d81570f0e7d09d11081b797bc4692765a3d4", size = 99561, upload-time = "2026-01-11T11:22:36.624Z" }, + { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, ] [[package]] @@ -2108,11 +1986,11 @@ wheels = [ [[package]] name = "urllib3" -version = "2.6.2" +version = "2.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/1e/24/a2a2ed9addd907787d7aa0355ba36a6cadf1768b934c652ea78acbd59dcd/urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797", size = 432930, upload-time = "2025-12-11T15:56:40.252Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/6d/b9/4095b668ea3678bf6a0af005527f39de12fb026516fb3df17495a733b7f8/urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd", size = 131182, upload-time = "2025-12-11T15:56:38.584Z" }, + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, ] [[package]] @@ -2162,7 +2040,6 @@ dependencies = [ { name = "django-activity-stream" }, { name = "django-axes", extra = ["ipware"] }, { name = "django-bootstrap-breadcrumbs2" }, - { name = "django-compressor" }, { name = "django-cors-headers" }, { name = "django-crispy-forms" }, { name = "django-email-verification" }, @@ -2220,7 +2097,6 @@ requires-dist = [ { name = "django-activity-stream", specifier = "~=2.0.0" }, { name = "django-axes", extras = ["ipware"], specifier = "~=8.0.0" }, { name = "django-bootstrap-breadcrumbs2", specifier = "==1.0.0" }, - { name = "django-compressor", specifier = "~=4.6.0" }, { name = "django-cors-headers", specifier = "~=4.9.0" }, { name = "django-crispy-forms", specifier = "~=2.5" }, { name = "django-email-verification", specifier = "~=0.3.3" }, @@ -2287,38 +2163,38 @@ wheels = [ [[package]] name = "zope-interface" -version = "8.1.1" +version = "8.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/71/c9/5ec8679a04d37c797d343f650c51ad67d178f0001c363e44b6ac5f97a9da/zope_interface-8.1.1.tar.gz", hash = "sha256:51b10e6e8e238d719636a401f44f1e366146912407b58453936b781a19be19ec", size = 254748, upload-time = "2025-11-15T08:32:52.404Z" } +sdist = { url = "https://files.pythonhosted.org/packages/86/a4/77daa5ba398996d16bb43fc721599d27d03eae68fe3c799de1963c72e228/zope_interface-8.2.tar.gz", hash = "sha256:afb20c371a601d261b4f6edb53c3c418c249db1a9717b0baafc9a9bb39ba1224", size = 254019, upload-time = "2026-01-09T07:51:07.253Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/d8/ca/77df8f9bcbd8a5e29913c7fef14ff0aadac9448e78dc2606a85d7a23ec6c/zope_interface-8.1.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c6b12b656c7d7e3d79cad8e2afc4a37eae6b6076e2c209a33345143148e435e", size = 207415, upload-time = "2025-11-15T08:36:36.508Z" }, - { url = "https://files.pythonhosted.org/packages/e1/1f/f1c7828ba3d9b34e65c7e498216fc37ca6e69f1ff1918cca37cd1d895682/zope_interface-8.1.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:557c0f1363c300db406e9eeaae8ab6d1ba429d4fed60d8ab7dadab5ca66ccd35", size = 207951, upload-time = "2025-11-15T08:36:38.468Z" }, - { url = "https://files.pythonhosted.org/packages/bd/9e/e079035812f06fe1feede1bef753f537fb33d5480d05107f65a51d94e7b3/zope_interface-8.1.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:127b0e4c873752b777721543cf8525b3db5e76b88bd33bab807f03c568e9003f", size = 249409, upload-time = "2025-11-15T08:36:40.148Z" }, - { url = "https://files.pythonhosted.org/packages/c2/09/b7f5a33bd3a17efb31e9e14496e600ab550ab0e38829dcda8a73f017fbfe/zope_interface-8.1.1-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e0892c9d2dd47b45f62d1861bcae8b427fcc49b4a04fff67f12c5c55e56654d7", size = 254527, upload-time = "2025-11-15T08:36:41.552Z" }, - { url = "https://files.pythonhosted.org/packages/2a/90/0eecd1eab6b62d296dff8445f051e4aa6bd91b67d71cfe9ff9d270b64dbe/zope_interface-8.1.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff8a92dc8c8a2c605074e464984e25b9b5a8ac9b2a0238dd73a0f374df59a77e", size = 254963, upload-time = "2025-11-15T08:36:42.708Z" }, - { url = "https://files.pythonhosted.org/packages/fd/ff/2fe84fadd13e8adb7b2fb542311c27bad15881be26e37f403df3d0279c74/zope_interface-8.1.1-cp310-cp310-win_amd64.whl", hash = "sha256:54627ddf6034aab1f506ba750dd093f67d353be6249467d720e9f278a578efe5", size = 211809, upload-time = "2025-11-15T08:36:44.43Z" }, - { url = "https://files.pythonhosted.org/packages/77/fc/d84bac27332bdefe8c03f7289d932aeb13a5fd6aeedba72b0aa5b18276ff/zope_interface-8.1.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e8a0fdd5048c1bb733e4693eae9bc4145a19419ea6a1c95299318a93fe9f3d72", size = 207955, upload-time = "2025-11-15T08:36:45.902Z" }, - { url = "https://files.pythonhosted.org/packages/52/02/e1234eb08b10b5cf39e68372586acc7f7bbcd18176f6046433a8f6b8b263/zope_interface-8.1.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a4cb0ea75a26b606f5bc8524fbce7b7d8628161b6da002c80e6417ce5ec757c0", size = 208398, upload-time = "2025-11-15T08:36:47.016Z" }, - { url = "https://files.pythonhosted.org/packages/3c/be/aabda44d4bc490f9966c2b77fa7822b0407d852cb909b723f2d9e05d2427/zope_interface-8.1.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:c267b00b5a49a12743f5e1d3b4beef45479d696dab090f11fe3faded078a5133", size = 255079, upload-time = "2025-11-15T08:36:48.157Z" }, - { url = "https://files.pythonhosted.org/packages/d8/7f/4fbc7c2d7cb310e5a91b55db3d98e98d12b262014c1fcad9714fe33c2adc/zope_interface-8.1.1-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e25d3e2b9299e7ec54b626573673bdf0d740cf628c22aef0a3afef85b438aa54", size = 259850, upload-time = "2025-11-15T08:36:49.544Z" }, - { url = "https://files.pythonhosted.org/packages/fe/2c/dc573fffe59cdbe8bbbdd2814709bdc71c4870893e7226700bc6a08c5e0c/zope_interface-8.1.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:63db1241804417aff95ac229c13376c8c12752b83cc06964d62581b493e6551b", size = 261033, upload-time = "2025-11-15T08:36:51.061Z" }, - { url = "https://files.pythonhosted.org/packages/0e/51/1ac50e5ee933d9e3902f3400bda399c128a5c46f9f209d16affe3d4facc5/zope_interface-8.1.1-cp311-cp311-win_amd64.whl", hash = "sha256:9639bf4ed07b5277fb231e54109117c30d608254685e48a7104a34618bcbfc83", size = 212215, upload-time = "2025-11-15T08:36:52.553Z" }, - { url = "https://files.pythonhosted.org/packages/08/3d/f5b8dd2512f33bfab4faba71f66f6873603d625212206dd36f12403ae4ca/zope_interface-8.1.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a16715808408db7252b8c1597ed9008bdad7bf378ed48eb9b0595fad4170e49d", size = 208660, upload-time = "2025-11-15T08:36:53.579Z" }, - { url = "https://files.pythonhosted.org/packages/e5/41/c331adea9b11e05ff9ac4eb7d3032b24c36a3654ae9f2bf4ef2997048211/zope_interface-8.1.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce6b58752acc3352c4aa0b55bbeae2a941d61537e6afdad2467a624219025aae", size = 208851, upload-time = "2025-11-15T08:36:54.854Z" }, - { url = "https://files.pythonhosted.org/packages/25/00/7a8019c3bb8b119c5f50f0a4869183a4b699ca004a7f87ce98382e6b364c/zope_interface-8.1.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:807778883d07177713136479de7fd566f9056a13aef63b686f0ab4807c6be259", size = 259292, upload-time = "2025-11-15T08:36:56.409Z" }, - { url = "https://files.pythonhosted.org/packages/1a/fc/b70e963bf89345edffdd5d16b61e789fdc09365972b603e13785360fea6f/zope_interface-8.1.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:50e5eb3b504a7d63dc25211b9298071d5b10a3eb754d6bf2f8ef06cb49f807ab", size = 264741, upload-time = "2025-11-15T08:36:57.675Z" }, - { url = "https://files.pythonhosted.org/packages/96/fe/7d0b5c0692b283901b34847f2b2f50d805bfff4b31de4021ac9dfb516d2a/zope_interface-8.1.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:eee6f93b2512ec9466cf30c37548fd3ed7bc4436ab29cd5943d7a0b561f14f0f", size = 264281, upload-time = "2025-11-15T08:36:58.968Z" }, - { url = "https://files.pythonhosted.org/packages/2b/2c/a7cebede1cf2757be158bcb151fe533fa951038cfc5007c7597f9f86804b/zope_interface-8.1.1-cp312-cp312-win_amd64.whl", hash = "sha256:80edee6116d569883c58ff8efcecac3b737733d646802036dc337aa839a5f06b", size = 212327, upload-time = "2025-11-15T08:37:00.4Z" }, - { url = "https://files.pythonhosted.org/packages/85/81/3c3b5386ce4fba4612fd82ffb8a90d76bcfea33ca2b6399f21e94d38484f/zope_interface-8.1.1-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:84f9be6d959640de9da5d14ac1f6a89148b16da766e88db37ed17e936160b0b1", size = 209046, upload-time = "2025-11-15T08:37:01.473Z" }, - { url = "https://files.pythonhosted.org/packages/4a/e3/32b7cb950c4c4326b3760a8e28e5d6f70ad15f852bfd8f9364b58634f74b/zope_interface-8.1.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:531fba91dcb97538f70cf4642a19d6574269460274e3f6004bba6fe684449c51", size = 209104, upload-time = "2025-11-15T08:37:02.887Z" }, - { url = "https://files.pythonhosted.org/packages/a3/3d/c4c68e1752a5f5effa2c1f5eaa4fea4399433c9b058fb7000a34bfb1c447/zope_interface-8.1.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:fc65f5633d5a9583ee8d88d1f5de6b46cd42c62e47757cfe86be36fb7c8c4c9b", size = 259277, upload-time = "2025-11-15T08:37:04.389Z" }, - { url = "https://files.pythonhosted.org/packages/fd/5b/cf4437b174af7591ee29bbad728f620cab5f47bd6e9c02f87d59f31a0dda/zope_interface-8.1.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:efef80ddec4d7d99618ef71bc93b88859248075ca2e1ae1c78636654d3d55533", size = 264742, upload-time = "2025-11-15T08:37:05.613Z" }, - { url = "https://files.pythonhosted.org/packages/0b/0e/0cf77356862852d3d3e62db9aadae5419a1a7d89bf963b219745283ab5ca/zope_interface-8.1.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:49aad83525eca3b4747ef51117d302e891f0042b06f32aa1c7023c62642f962b", size = 264252, upload-time = "2025-11-15T08:37:07.035Z" }, - { url = "https://files.pythonhosted.org/packages/8a/10/2af54aa88b2fa172d12364116cc40d325fedbb1877c3bb031b0da6052855/zope_interface-8.1.1-cp313-cp313-win_amd64.whl", hash = "sha256:71cf329a21f98cb2bd9077340a589e316ac8a415cac900575a32544b3dffcb98", size = 212330, upload-time = "2025-11-15T08:37:08.14Z" }, - { url = "https://files.pythonhosted.org/packages/b9/f5/44efbd98ba06cb937fce7a69fcd7a78c4ac7aa4e1ad2125536801376d2d0/zope_interface-8.1.1-cp314-cp314-macosx_10_9_x86_64.whl", hash = "sha256:da311e9d253991ca327601f47c4644d72359bac6950fbb22f971b24cd7850f8c", size = 209099, upload-time = "2025-11-15T08:37:09.395Z" }, - { url = "https://files.pythonhosted.org/packages/fd/36/a19866c09c8485c36a4c6908e1dd3f8820b41c1ee333c291157cf4cf09e7/zope_interface-8.1.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3fb25fca0442c7fb93c4ee40b42e3e033fef2f648730c4b7ae6d43222a3e8946", size = 209240, upload-time = "2025-11-15T08:37:10.687Z" }, - { url = "https://files.pythonhosted.org/packages/c1/28/0dbf40db772d779a4ac8d006a57ad60936d42ad4769a3d5410dcfb98f6f9/zope_interface-8.1.1-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:bac588d0742b4e35efb7c7df1dacc0397b51ed37a17d4169a38019a1cebacf0a", size = 260919, upload-time = "2025-11-15T08:37:11.838Z" }, - { url = "https://files.pythonhosted.org/packages/72/ae/650cd4c01dd1b32c26c800b2c4d852f044552c34a56fbb74d41f569cee31/zope_interface-8.1.1-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:3d1f053d2d5e2b393e619bce1e55954885c2e63969159aa521839e719442db49", size = 264102, upload-time = "2025-11-15T08:37:13.241Z" }, - { url = "https://files.pythonhosted.org/packages/46/f0/f534a2c34c006aa090c593cd70eaf94e259fd0786f934698d81f0534d907/zope_interface-8.1.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:64a1ad7f4cb17d948c6bdc525a1d60c0e567b2526feb4fa38b38f249961306b8", size = 264276, upload-time = "2025-11-15T08:37:14.369Z" }, - { url = "https://files.pythonhosted.org/packages/5b/a8/d7e9cf03067b767e23908dbab5f6be7735d70cb4818311a248a8c4bb23cc/zope_interface-8.1.1-cp314-cp314-win_amd64.whl", hash = "sha256:169214da1b82b7695d1a36f92d70b11166d66b6b09d03df35d150cc62ac52276", size = 212492, upload-time = "2025-11-15T08:37:15.538Z" }, + { url = "https://files.pythonhosted.org/packages/b1/fa/6d9eb3a33998a3019d7eb4fa1802d01d6602fad90e0aea443e6e0fe8e49a/zope_interface-8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:788c293f3165964ec6527b2d861072c68eef53425213f36d3893ebee89a89623", size = 207541, upload-time = "2026-01-09T08:04:55.378Z" }, + { url = "https://files.pythonhosted.org/packages/19/8c/ad23c96fdee84cb1f768f6695dac187cc26e9038e01c69713ba0f7dc46ab/zope_interface-8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9a4e785097e741a1c953b3970ce28f2823bd63c00adc5d276f2981dd66c96c15", size = 208075, upload-time = "2026-01-09T08:04:57.118Z" }, + { url = "https://files.pythonhosted.org/packages/dd/35/1bfd5fec31a307f0cf4065ee74ade63858ded3e2a71e248f1508118fcc95/zope_interface-8.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:16c69da19a06566664ddd4785f37cad5693a51d48df1515d264c20d005d322e2", size = 249528, upload-time = "2026-01-09T08:04:59.074Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3a/5d50b5fdb0f8226a2edff6adb7efdd3762ec95dff827dbab1761cb9a9e85/zope_interface-8.2-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c31acfa3d7cde48bec45701b0e1f4698daffc378f559bfb296837d8c834732f6", size = 254646, upload-time = "2026-01-09T08:05:00.964Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2a/ee7d675e151578eaf77828b8faac2b7ed9a69fead350bf5cf0e4afe7c73d/zope_interface-8.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0723507127f8269b8f3f22663168f717e9c9742107d1b6c9f419df561b71aa6d", size = 255083, upload-time = "2026-01-09T08:05:02.857Z" }, + { url = "https://files.pythonhosted.org/packages/5d/07/99e2342f976c3700e142eddc01524e375a9e9078869a6885d9c72f3a3659/zope_interface-8.2-cp310-cp310-win_amd64.whl", hash = "sha256:3bf73a910bb27344def2d301a03329c559a79b308e1e584686b74171d736be4e", size = 211924, upload-time = "2026-01-09T08:05:04.702Z" }, + { url = "https://files.pythonhosted.org/packages/98/97/9c2aa8caae79915ed64eb114e18816f178984c917aa9adf2a18345e4f2e5/zope_interface-8.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c65ade7ea85516e428651048489f5e689e695c79188761de8c622594d1e13322", size = 208081, upload-time = "2026-01-09T08:05:06.623Z" }, + { url = "https://files.pythonhosted.org/packages/34/86/4e2fcb01a8f6780ac84923748e450af0805531f47c0956b83065c99ab543/zope_interface-8.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a1ef4b43659e1348f35f38e7d1a6bbc1682efde239761f335ffc7e31e798b65b", size = 208522, upload-time = "2026-01-09T08:05:07.986Z" }, + { url = "https://files.pythonhosted.org/packages/f6/eb/08e277da32ddcd4014922854096cf6dcb7081fad415892c2da1bedefbf02/zope_interface-8.2-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:dfc4f44e8de2ff4eba20af4f0a3ca42d3c43ab24a08e49ccd8558b7a4185b466", size = 255198, upload-time = "2026-01-09T08:05:09.532Z" }, + { url = "https://files.pythonhosted.org/packages/ea/a1/b32484f3281a5dc83bc713ad61eca52c543735cdf204543172087a074a74/zope_interface-8.2-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8f094bfb49179ec5dc9981cb769af1275702bd64720ef94874d9e34da1390d4c", size = 259970, upload-time = "2026-01-09T08:05:11.477Z" }, + { url = "https://files.pythonhosted.org/packages/f6/81/bca0e8ae1e487d4093a8a7cfed2118aa2d4758c8cfd66e59d2af09d71f1c/zope_interface-8.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d2bb8e7364e18f083bf6744ccf30433b2a5f236c39c95df8514e3c13007098ce", size = 261153, upload-time = "2026-01-09T08:05:13.402Z" }, + { url = "https://files.pythonhosted.org/packages/40/1e/e3ff2a708011e56b10b271b038d4cb650a8ad5b7d24352fe2edf6d6b187a/zope_interface-8.2-cp311-cp311-win_amd64.whl", hash = "sha256:6f4b4dfcfdfaa9177a600bb31cebf711fdb8c8e9ed84f14c61c420c6aa398489", size = 212330, upload-time = "2026-01-09T08:05:15.267Z" }, + { url = "https://files.pythonhosted.org/packages/e0/a0/1e1fabbd2e9c53ef92b69df6d14f4adc94ec25583b1380336905dc37e9a0/zope_interface-8.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:624b6787fc7c3e45fa401984f6add2c736b70a7506518c3b537ffaacc4b29d4c", size = 208785, upload-time = "2026-01-09T08:05:17.348Z" }, + { url = "https://files.pythonhosted.org/packages/c3/2a/88d098a06975c722a192ef1fb7d623d1b57c6a6997cf01a7aabb45ab1970/zope_interface-8.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bc9ded9e97a0ed17731d479596ed1071e53b18e6fdb2fc33af1e43f5fd2d3aaa", size = 208976, upload-time = "2026-01-09T08:05:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/e9/e8/757398549fdfd2f8c89f32c82ae4d2f0537ae2a5d2f21f4a2f711f5a059f/zope_interface-8.2-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:532367553e4420c80c0fc0cabcc2c74080d495573706f66723edee6eae53361d", size = 259411, upload-time = "2026-01-09T08:05:20.567Z" }, + { url = "https://files.pythonhosted.org/packages/91/af/502601f0395ce84dff622f63cab47488657a04d0065547df42bee3a680ff/zope_interface-8.2-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:2bf9cf275468bafa3c72688aad8cfcbe3d28ee792baf0b228a1b2d93bd1d541a", size = 264859, upload-time = "2026-01-09T08:05:22.234Z" }, + { url = "https://files.pythonhosted.org/packages/89/0c/d2f765b9b4814a368a7c1b0ac23b68823c6789a732112668072fe596945d/zope_interface-8.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0009d2d3c02ea783045d7804da4fd016245e5c5de31a86cebba66dd6914d59a2", size = 264398, upload-time = "2026-01-09T08:05:23.853Z" }, + { url = "https://files.pythonhosted.org/packages/4a/81/2f171fbc4222066957e6b9220c4fb9146792540102c37e6d94e5d14aad97/zope_interface-8.2-cp312-cp312-win_amd64.whl", hash = "sha256:845d14e580220ae4544bd4d7eb800f0b6034fe5585fc2536806e0a26c2ee6640", size = 212444, upload-time = "2026-01-09T08:05:25.148Z" }, + { url = "https://files.pythonhosted.org/packages/66/47/45188fb101fa060b20e6090e500682398ab415e516a0c228fbb22bc7def2/zope_interface-8.2-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:6068322004a0158c80dfd4708dfb103a899635408c67c3b10e9acec4dbacefec", size = 209170, upload-time = "2026-01-09T08:05:26.616Z" }, + { url = "https://files.pythonhosted.org/packages/09/03/f6b9336c03c2b48403c4eb73a1ec961d94dc2fb5354c583dfb5fa05fd41f/zope_interface-8.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2499de92e8275d0dd68f84425b3e19e9268cd1fa8507997900fa4175f157733c", size = 209229, upload-time = "2026-01-09T08:05:28.521Z" }, + { url = "https://files.pythonhosted.org/packages/07/b1/65fe1dca708569f302ade02e6cdca309eab6752bc9f80105514f5b708651/zope_interface-8.2-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:f777e68c76208503609c83ca021a6864902b646530a1a39abb9ed310d1100664", size = 259393, upload-time = "2026-01-09T08:05:29.897Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a5/97b49cfceb6ed53d3dcfb3f3ebf24d83b5553194f0337fbbb3a9fec6cf78/zope_interface-8.2-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9b05a919fdb0ed6ea942e5a7800e09a8b6cdae6f98fee1bef1c9d1a3fc43aaa0", size = 264863, upload-time = "2026-01-09T08:05:31.501Z" }, + { url = "https://files.pythonhosted.org/packages/cb/02/0b7a77292810efe3a0586a505b077ebafd5114e10c6e6e659f0c8e387e1f/zope_interface-8.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ccc62b5712dd7bd64cfba3ee63089fb11e840f5914b990033beeae3b2180b6cb", size = 264369, upload-time = "2026-01-09T08:05:32.941Z" }, + { url = "https://files.pythonhosted.org/packages/fb/1d/0d1ff3846302ed1b5bbf659316d8084b30106770a5f346b7ff4e9f540f80/zope_interface-8.2-cp313-cp313-win_amd64.whl", hash = "sha256:34f877d1d3bb7565c494ed93828fa6417641ca26faf6e8f044e0d0d500807028", size = 212447, upload-time = "2026-01-09T08:05:35.064Z" }, + { url = "https://files.pythonhosted.org/packages/1a/da/3c89de3917751446728b8898b4d53318bc2f8f6bf8196e150a063c59905e/zope_interface-8.2-cp314-cp314-macosx_10_9_x86_64.whl", hash = "sha256:46c7e4e8cbc698398a67e56ca985d19cb92365b4aafbeb6a712e8c101090f4cb", size = 209223, upload-time = "2026-01-09T08:05:36.449Z" }, + { url = "https://files.pythonhosted.org/packages/00/7f/62d00ec53f0a6e5df0c984781e6f3999ed265129c4c3413df8128d1e0207/zope_interface-8.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:a87fc7517f825a97ff4a4ca4c8a950593c59e0f8e7bfe1b6f898a38d5ba9f9cf", size = 209366, upload-time = "2026-01-09T08:05:38.197Z" }, + { url = "https://files.pythonhosted.org/packages/ef/a2/f241986315174be8e00aabecfc2153cf8029c1327cab8ed53a9d979d7e08/zope_interface-8.2-cp314-cp314-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:ccf52f7d44d669203c2096c1a0c2c15d52e36b2e7a9413df50f48392c7d4d080", size = 261037, upload-time = "2026-01-09T08:05:39.568Z" }, + { url = "https://files.pythonhosted.org/packages/02/cc/b321c51d6936ede296a1b8860cf173bee2928357fe1fff7f97234899173f/zope_interface-8.2-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:aae807efc7bd26302eb2fea05cd6de7d59269ed6ae23a6de1ee47add6de99b8c", size = 264219, upload-time = "2026-01-09T08:05:41.624Z" }, + { url = "https://files.pythonhosted.org/packages/ab/fb/5f5e7b40a2f4efd873fe173624795ca47eaa22e29051270c981361b45209/zope_interface-8.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:05a0e42d6d830f547e114de2e7cd15750dc6c0c78f8138e6c5035e51ddfff37c", size = 264390, upload-time = "2026-01-09T08:05:42.936Z" }, + { url = "https://files.pythonhosted.org/packages/f9/82/3f2bc594370bc3abd58e5f9085d263bf682a222f059ed46275cde0570810/zope_interface-8.2-cp314-cp314-win_amd64.whl", hash = "sha256:561ce42390bee90bae51cf1c012902a8033b2aaefbd0deed81e877562a116d48", size = 212585, upload-time = "2026-01-09T08:05:44.419Z" }, ] diff --git a/wger/celery_configuration.py b/wger/celery_configuration.py index 31abeb634..a17d833c1 100644 --- a/wger/celery_configuration.py +++ b/wger/celery_configuration.py @@ -21,7 +21,7 @@ import os from celery import Celery -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.main') app = Celery('wger') # read config from Django settings, the CELERY namespace would make celery diff --git a/wger/core/fixtures/groups.json b/wger/core/fixtures/groups.json index 63cf32936..53a22fffc 100644 --- a/wger/core/fixtures/groups.json +++ b/wger/core/fixtures/groups.json @@ -287,6 +287,21 @@ "delete_weightunit", "nutrition", "weightunit" + ], + [ + "add_trophy", + "trophies", + "trophy" + ], + [ + "change_trophy", + "trophies", + "trophy" + ], + [ + "delete_trophy", + "trophies", + "trophy" ] ] }, diff --git a/wger/core/forms.py b/wger/core/forms.py index ccf1d8e73..7d23f5f39 100644 --- a/wger/core/forms.py +++ b/wger/core/forms.py @@ -340,38 +340,3 @@ class RegistrationFormNoCaptcha(UserCreationForm, UserEmailForm): css_class='text-center', ), ) - - -class FeedbackRegisteredForm(forms.Form): - """ - Feedback form used for logged-in users - """ - - contact = forms.CharField( - max_length=50, - min_length=10, - label=gettext_lazy('Contact'), - help_text=gettext_lazy('Some way of answering you (e-mail, etc.)'), - required=False, - ) - - comment = forms.CharField( - max_length=500, - min_length=10, - widget=widgets.Textarea, - label=gettext_lazy('Comment'), - help_text=gettext_lazy('What do you want to say?'), - required=True, - ) - - -class FeedbackAnonymousForm(FeedbackRegisteredForm): - """ - Feedback form used for anonymous users (has additionally a reCAPTCHA field) - """ - - captcha = ReCaptchaField( - widget=ReCaptchaV3, - label='reCaptcha', - help_text=gettext_lazy('The form is secured with reCAPTCHA'), - ) diff --git a/wger/core/management/commands/extract-i18n.py b/wger/core/management/commands/extract-i18n.py index 968c83eda..c73abb3f7 100644 --- a/wger/core/management/commands/extract-i18n.py +++ b/wger/core/management/commands/extract-i18n.py @@ -25,6 +25,7 @@ from wger.exercises.models import ( ExerciseCategory, Muscle, ) +from wger.trophies.models import Trophy class Command(BaseCommand): @@ -58,6 +59,11 @@ class Command(BaseCommand): + [i for i in WeightUnit.objects.all()] ) + # Trophy data is only translated in the django repo + trophy_data = [i.name for i in Trophy.objects.all()] + [ + i.description for i in Trophy.objects.all() + ] + # Make entries unique and sort alphabetically data = sorted(set([i.__str__() for i in data])) @@ -67,6 +73,8 @@ class Command(BaseCommand): out = '{% load i18n %}\n' for i in data: out += f'{{% translate "{i}" %}}\n' + for i in trophy_data: + out += f'{{% translate "{i}" %}}\n' f.write(out) self.stdout.write(self.style.SUCCESS('Wrote content to wger/i18n.tpl')) diff --git a/wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py.txt b/wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py similarity index 61% rename from wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py.txt rename to wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py index a70f23647..4d76371bd 100644 --- a/wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py.txt +++ b/wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('core', '0019_delete_daysofweek'), ] @@ -13,6 +12,10 @@ class Migration(migrations.Migration): migrations.AddField( model_name='userprofile', name='trophies_enabled', - field=models.BooleanField(default=True, help_text='Enable or disable the trophy system for this user', verbose_name='Enable trophies'), + field=models.BooleanField( + default=True, + help_text='Enable or disable the trophy system for this user', + verbose_name='Enable trophies', + ), ), ] diff --git a/wger/core/models/profile.py b/wger/core/models/profile.py index 39451653a..0428def89 100644 --- a/wger/core/models/profile.py +++ b/wger/core/models/profile.py @@ -374,12 +374,12 @@ by the US Department of Agriculture. It is extremely complete, with around behalf over the REST API """ - # trophies_enabled = models.BooleanField( - # default=True, - # verbose_name=_('Enable trophies'), - # help_text=_('Enable or disable the trophy system for this user'), - # ) - # """Flag to enable or disable trophies for this user""" + trophies_enabled = models.BooleanField( + default=True, + verbose_name=_('Enable trophies'), + help_text=_('Enable or disable the trophy system for this user'), + ) + """Flag to enable or disable trophies for this user""" @property def is_trustworthy(self) -> bool: diff --git a/wger/core/storage.py b/wger/core/storage.py new file mode 100644 index 000000000..c61efb852 --- /dev/null +++ b/wger/core/storage.py @@ -0,0 +1,55 @@ +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License + +# Django +from django.contrib.staticfiles.storage import ManifestStaticFilesStorage + + +class LenientManifestStaticFilesStorage(ManifestStaticFilesStorage): + """ + Like ManifestStaticFilesStorage but does not raise when an entry or target file + referenced from CSS/JS is missing and simply returns the original name in that case. + + This is needed for some node packages that reference files not present (e.g. source maps). + """ + + def stored_name(self, name): + try: + return super().stored_name(name) + except Exception: + # If the manifest lookup or hashing fails (missing .map etc.), fall back + # to the original reference so post-processing doesn't raise. + print( + f"Can't find name for static file reference: {name}. " + f'This is expected in some node packages.' + ) + + return name + + def url_converter(self, name, hashed_files, template=None): + # Wrap the base converter to ignore any errors during conversion and + # return the original matched text unchanged. + base_converter = super().url_converter(name, hashed_files, template) + + def converter(matchobj): + try: + return base_converter(matchobj) + except Exception: + print( + f"Can't find name for static file reference: {matchobj.group(0)}. " + f'This is expected in some node packages.' + ) + return matchobj.groupdict().get('matched', matchobj.group(0)) + + return converter diff --git a/wger/core/templates/navigation.html b/wger/core/templates/navigation.html index bfcd8c6c4..bd65504f7 100644 --- a/wger/core/templates/navigation.html +++ b/wger/core/templates/navigation.html @@ -395,6 +395,16 @@ {% endif %} {% endif %} + + {% if perms.trophies.change_trophy %} +
  • + + {% translate "Trophies" %} + +
  • + {% endif %} + {% endif %} diff --git a/wger/core/templates/template.html b/wger/core/templates/template.html index 33eaf0a85..a27b8b1e0 100644 --- a/wger/core/templates/template.html +++ b/wger/core/templates/template.html @@ -16,7 +16,7 @@ along with Workout Manager. If not, see . --> -{% load i18n static wger_extras compress django_bootstrap_breadcrumbs %} +{% load i18n static wger_extras django_bootstrap_breadcrumbs %} {% block breadcrumbs %} {% clear_breadcrumbs %} {% endblock %} @@ -27,6 +27,8 @@ + + {% block opengraph %} @@ -63,19 +65,10 @@ {% block header %}{% endblock %} - - - {% block title %}{% endblock %} + {# #} {# Navigation #} {# #} diff --git a/wger/core/templates/template_features.html b/wger/core/templates/template_features.html index 28630e89e..ded735b31 100644 --- a/wger/core/templates/template_features.html +++ b/wger/core/templates/template_features.html @@ -17,14 +17,14 @@ --> -{% load i18n static compress %} +{% load i18n static %} - + {% block opengraph %} @@ -43,19 +43,12 @@ {% endif %} {% endblock %} + + + - {% compress css %} - - - - {% endcompress %} - - - - {% compress js %} - - - {% endcompress %} + + wger Workout Manager - {% translate "Features" %} diff --git a/wger/core/templates/template_no_context.html b/wger/core/templates/template_no_context.html index 2bd6acb2c..9060b2f62 100644 --- a/wger/core/templates/template_no_context.html +++ b/wger/core/templates/template_no_context.html @@ -16,7 +16,7 @@ along with Workout Manager. If not, see . --> -{% load i18n static wger_extras compress django_bootstrap_breadcrumbs %} +{% load i18n static wger_extras django_bootstrap_breadcrumbs %} diff --git a/wger/core/tests/test_feedback.py b/wger/core/tests/test_feedback.py deleted file mode 100644 index c203124d3..000000000 --- a/wger/core/tests/test_feedback.py +++ /dev/null @@ -1,92 +0,0 @@ -# This file is part of wger Workout Manager. -# -# wger Workout Manager is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# wger Workout Manager is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License - -# Standard Library -from unittest import skip - -# Django -from django.core import mail -from django.urls import reverse - -# wger -from wger.core.tests.base_testcase import WgerTestCase - - -class FeedbackTestCase(WgerTestCase): - """ - Tests the feedback form - """ - - def send_feedback(self, logged_in=True): - """ - Helper function - """ - response = self.client.get(reverse('core:feedback')) - self.assertEqual(response.status_code, 200) - response = self.client.post( - reverse('core:feedback'), - {'comment': 'A very long and interesting comment'}, - ) - if logged_in: - self.assertEqual(response.status_code, 302) - self.assertEqual(len(mail.outbox), 1) - response = self.client.get(response['Location']) - self.assertEqual(response.status_code, 200) - - # Short comment - response = self.client.post(reverse('core:feedback'), {'comment': '12345'}) - self.assertEqual(response.status_code, 200) - self.assertEqual(len(response.context['form'].errors), 1) - else: - # No recaptcha field - self.assertEqual(response.status_code, 200) - self.assertEqual(len(mail.outbox), 0) - - # Correctly filled in reCaptcha - response = self.client.post( - reverse('core:feedback'), - { - 'comment': 'A very long and interesting comment', - 'g-recaptcha-response': 'PASSED', - }, - ) - - self.assertEqual(response.status_code, 302) - self.assertEqual(len(mail.outbox), 1) - response = self.client.get(response['Location']) - self.assertEqual(response.status_code, 200) - - def test_send_feedback_admin(self): - """ - Tests the feedback form as an admin user - """ - - self.user_login('admin') - self.send_feedback() - - def test_send_feedback_user(self): - """ - Tests the feedback form as a regular user - """ - - self.user_login('test') - self.send_feedback() - - @skip('Failing due to recaptcha issues') - def test_send_feedback_logged_out(self): - """ - Tests the feedback form as a logged out user - """ - - self.send_feedback(logged_in=False) diff --git a/wger/core/urls.py b/wger/core/urls.py index 74d2ab712..b17402d4c 100644 --- a/wger/core/urls.py +++ b/wger/core/urls.py @@ -197,19 +197,12 @@ patterns_weight_units = [ urlpatterns = [ # The landing page path('', misc.index, name='index'), - # The dashboard path('dashboard', ReactView.as_view(login_required=True), name='dashboard'), - # Others path( 'imprint', TemplateView.as_view(template_name='misc/about.html'), name='imprint', ), - path( - 'feedback', - misc.FeedbackClass.as_view(), - name='feedback', - ), path('language/', include((patterns_language, 'language'), namespace='language')), path('user/', include((patterns_user, 'user'), namespace='user')), path('license/', include((patterns_license, 'license'), namespace='license')), diff --git a/wger/core/views/misc.py b/wger/core/views/misc.py index 3af8e716c..8ceb7fc7a 100644 --- a/wger/core/views/misc.py +++ b/wger/core/views/misc.py @@ -21,32 +21,15 @@ import logging from django.conf import settings from django.contrib import messages from django.contrib.auth import login as django_login -from django.contrib.auth.decorators import login_required -from django.core import mail from django.http import HttpResponseRedirect -from django.shortcuts import render -from django.template.loader import render_to_string -from django.urls import ( - reverse, - reverse_lazy, -) -from django.utils.text import slugify +from django.urls import reverse from django.utils.translation import gettext as _ -from django.views.generic.edit import FormView - -# Third Party -from crispy_forms.helper import FormHelper -from crispy_forms.layout import Submit # wger from wger.core.demo import ( create_demo_entries, create_temporary_user, ) -from wger.core.forms import ( - FeedbackAnonymousForm, - FeedbackRegisteredForm, -) logger = logging.getLogger(__name__) @@ -94,57 +77,3 @@ def demo_entries(request): ), ) return HttpResponseRedirect(reverse('core:dashboard')) - - -class FeedbackClass(FormView): - template_name = 'form.html' - success_url = reverse_lazy('software:about-us') - - def get_initial(self): - """ - Fill in the contact, if available - """ - if self.request.user.is_authenticated: - return {'contact': self.request.user.email} - return {} - - def get_context_data(self, **kwargs): - """ - Set necessary template data to correctly render the form - """ - context = super(FeedbackClass, self).get_context_data(**kwargs) - context['title'] = _('Feedback') - return context - - def get_form_class(self): - """ - Load the correct feedback form depending on the user - (either with reCaptcha field or not) - """ - if self.request.user.is_anonymous or self.request.user.userprofile.is_temporary: - return FeedbackAnonymousForm - else: - return FeedbackRegisteredForm - - def get_form(self, form_class=None): - """Return an instance of the form to be used in this view.""" - - form = super(FeedbackClass, self).get_form(form_class) - form.helper = FormHelper() - form.helper.form_id = slugify(self.request.path) - form.helper.add_input(Submit('submit', _('Submit'), css_class='btn-success btn-block')) - form.helper.form_class = 'wger-form' - return form - - def form_valid(self, form): - """ - Send the feedback to the administrators - """ - messages.success(self.request, _('Your feedback was successfully sent. Thank you!')) - - context = {'user': self.request.user, 'form_data': form.cleaned_data} - subject = 'New feedback' - message = render_to_string('user/email_feedback.html', context) - mail.mail_admins(subject, message) - - return super(FeedbackClass, self).form_valid(form) diff --git a/wger/exercises/models/base.py b/wger/exercises/models/base.py index 6996a0de0..6f5f8dc66 100644 --- a/wger/exercises/models/base.py +++ b/wger/exercises/models/base.py @@ -31,10 +31,7 @@ from django.db import ( ) from django.db.models import Q from django.urls import reverse -from django.utils.translation import ( - get_language, - gettext_lazy as _, -) +from django.utils.translation import get_language # Third Party from simple_history.models import HistoricalRecords @@ -83,20 +80,20 @@ class Exercise(AbstractLicenseModel, AbstractHistoryMixin, models.Model): category = models.ForeignKey( ExerciseCategory, - verbose_name=_('Category'), + verbose_name='Category', on_delete=models.CASCADE, ) muscles = models.ManyToManyField( Muscle, blank=True, - verbose_name=_('Primary muscles'), + verbose_name='Primary muscles', ) """Main muscles trained by the exercise""" muscles_secondary = models.ManyToManyField( Muscle, - verbose_name=_('Secondary muscles'), + verbose_name='Secondary muscles', related_name='secondary_muscles_base', blank=True, ) @@ -104,14 +101,14 @@ class Exercise(AbstractLicenseModel, AbstractHistoryMixin, models.Model): equipment = models.ManyToManyField( Equipment, - verbose_name=_('Equipment'), + verbose_name='Equipment', blank=True, ) """Equipment needed by this exercise""" variations = models.ForeignKey( Variation, - verbose_name=_('Variations'), + verbose_name='Variations', on_delete=models.SET_NULL, null=True, blank=True, @@ -119,13 +116,13 @@ class Exercise(AbstractLicenseModel, AbstractHistoryMixin, models.Model): """Variations of this exercise""" created = models.DateTimeField( - _('Date'), + 'Creation date', auto_now_add=True, ) """The submission datetime""" last_update = models.DateTimeField( - _('Date'), + 'last update', auto_now=True, ) """Datetime of last modification""" diff --git a/wger/exercises/models/category.py b/wger/exercises/models/category.py index cf1e7f356..1c5f0b140 100644 --- a/wger/exercises/models/category.py +++ b/wger/exercises/models/category.py @@ -16,7 +16,6 @@ # Django from django.db import models -from django.utils.translation import gettext_lazy as _ class ExerciseCategory(models.Model): @@ -26,12 +25,12 @@ class ExerciseCategory(models.Model): name = models.CharField( max_length=100, - verbose_name=_('Name'), + verbose_name='Name', ) # Metaclass to set some other properties class Meta: - verbose_name_plural = _('Exercise Categories') + verbose_name_plural = 'Exercise Categories' ordering = [ 'name', ] diff --git a/wger/exercises/models/comment.py b/wger/exercises/models/comment.py index d9de2c117..3e3120ab5 100644 --- a/wger/exercises/models/comment.py +++ b/wger/exercises/models/comment.py @@ -19,7 +19,6 @@ import uuid # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # Third Party from simple_history.models import HistoricalRecords @@ -46,14 +45,14 @@ class ExerciseComment(models.Model): translation = models.ForeignKey( Translation, - verbose_name=_('Exercise'), + verbose_name='Exercise', on_delete=models.CASCADE, ) comment = models.CharField( max_length=200, - verbose_name=_('Comment'), - help_text=_('A comment about how to correctly do this exercise.'), + verbose_name='Comment', + help_text='A comment about how to correctly do this exercise.', ) history = HistoricalRecords() diff --git a/wger/exercises/models/equipment.py b/wger/exercises/models/equipment.py index 938097ebd..3c5c9da4c 100644 --- a/wger/exercises/models/equipment.py +++ b/wger/exercises/models/equipment.py @@ -16,7 +16,6 @@ # Django from django.db import models -from django.utils.translation import gettext_lazy as _ class Equipment(models.Model): @@ -26,7 +25,7 @@ class Equipment(models.Model): name = models.CharField( max_length=50, - verbose_name=_('Name'), + verbose_name='Name', ) class Meta: diff --git a/wger/exercises/models/exercise_alias.py b/wger/exercises/models/exercise_alias.py index acc30f851..93f2827a2 100644 --- a/wger/exercises/models/exercise_alias.py +++ b/wger/exercises/models/exercise_alias.py @@ -20,7 +20,6 @@ import uuid # Django from django.contrib.postgres.indexes import GinIndex from django.db import models -from django.utils.translation import gettext_lazy as _ # Third Party from simple_history.models import HistoricalRecords @@ -47,13 +46,13 @@ class Alias(models.Model): translation = models.ForeignKey( Translation, - verbose_name=_('Exercise'), + verbose_name='Exercise', on_delete=models.CASCADE, ) alias = models.CharField( max_length=200, - verbose_name=_('Alias for an exercise'), + verbose_name='Alias for an exercise', ) history = HistoricalRecords() diff --git a/wger/exercises/models/image.py b/wger/exercises/models/image.py index 7e9fc0363..aaf9d4feb 100644 --- a/wger/exercises/models/image.py +++ b/wger/exercises/models/image.py @@ -20,7 +20,6 @@ import uuid # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # Third Party from simple_history.models import HistoricalRecords @@ -55,11 +54,11 @@ class ExerciseImage(AbstractLicenseModel, AbstractHistoryMixin, models.Model, Ba PHOTO = '4' OTHER = '5' STYLE = ( - (LINE_ART, _('Line')), - (THREE_D, _('3D')), - (LOW_POLY, _('Low-poly')), - (PHOTO, _('Photo')), - (OTHER, _('Other')), + (LINE_ART, 'Line'), + (THREE_D, '3D'), + (LOW_POLY, 'Low-poly'), + (PHOTO, 'Photo'), + (OTHER, 'Other'), ) uuid = models.UUIDField( @@ -72,13 +71,13 @@ class ExerciseImage(AbstractLicenseModel, AbstractHistoryMixin, models.Model, Ba exercise = models.ForeignKey( Exercise, - verbose_name=_('Exercise'), + verbose_name='Exercise', on_delete=models.CASCADE, ) """The exercise the image belongs to""" image = models.ImageField( - verbose_name=_('Image'), + verbose_name='Image', help_text='Only JPEG, PNG and WebP formats are supported', upload_to=exercise_image_upload_dir, validators=[validate_image_static_no_animation], @@ -88,7 +87,7 @@ class ExerciseImage(AbstractLicenseModel, AbstractHistoryMixin, models.Model, Ba """Uploaded image""" height = models.PositiveIntegerField( - verbose_name=_('Height'), + verbose_name='Height', null=True, blank=True, editable=False, @@ -96,7 +95,7 @@ class ExerciseImage(AbstractLicenseModel, AbstractHistoryMixin, models.Model, Ba """Image height""" width = models.PositiveIntegerField( - verbose_name=_('Width'), + verbose_name='Width', null=True, blank=True, editable=False, @@ -104,7 +103,7 @@ class ExerciseImage(AbstractLicenseModel, AbstractHistoryMixin, models.Model, Ba """Image width""" is_main = models.BooleanField( - verbose_name=_('Main picture'), + verbose_name='Is main picture', default=False, ) """A flag indicating whether the image is the exercise's main image""" diff --git a/wger/exercises/models/translation.py b/wger/exercises/models/translation.py index 97efbd1da..1e171186b 100644 --- a/wger/exercises/models/translation.py +++ b/wger/exercises/models/translation.py @@ -23,7 +23,6 @@ from django.core.validators import MinLengthValidator from django.db import models from django.urls import reverse from django.utils.text import slugify -from django.utils.translation import gettext_lazy as _ # Third Party import bleach @@ -46,32 +45,32 @@ class Translation(AbstractLicenseModel, AbstractHistoryMixin, models.Model): description = models.TextField( max_length=2000, - verbose_name=_('Description'), + verbose_name='Description', validators=[MinLengthValidator(40)], ) """Description on how to perform the exercise""" name = models.CharField( + verbose_name='Name', max_length=200, - verbose_name=_('Name'), ) """The exercise's name""" created = models.DateTimeField( - _('Date'), + verbose_name='Date', auto_now_add=True, ) """The submission date""" last_update = models.DateTimeField( - _('Date'), + verbose_name='Date', auto_now=True, ) """Datetime of the last modification""" language = models.ForeignKey( Language, - verbose_name=_('Language'), + verbose_name='Language', on_delete=models.CASCADE, ) """The exercise's language""" diff --git a/wger/exercises/models/video.py b/wger/exercises/models/video.py index 53cfe525d..0795a125d 100644 --- a/wger/exercises/models/video.py +++ b/wger/exercises/models/video.py @@ -95,33 +95,33 @@ class ExerciseVideo(AbstractLicenseModel, AbstractHistoryMixin, models.Model): exercise = models.ForeignKey( Exercise, - verbose_name=_('Exercise'), + verbose_name='Exercise', on_delete=models.CASCADE, ) """The exercise the video belongs to""" is_main = models.BooleanField( - verbose_name=_('Main video'), + verbose_name='Is main video', default=False, ) """A flag indicating whether the video is the exercise's main one""" video = models.FileField( - verbose_name=_('Video'), + verbose_name='Video', upload_to=exercise_video_upload_dir, validators=[validate_video], ) """Uploaded video""" size = models.IntegerField( - verbose_name=_('Size'), + verbose_name='Size', default=0, editable=False, ) """The video filesize, in bytes""" duration = models.DecimalField( - verbose_name=_('Duration'), + verbose_name='Duration', default=0, editable=False, max_digits=12, @@ -130,21 +130,21 @@ class ExerciseVideo(AbstractLicenseModel, AbstractHistoryMixin, models.Model): """The video duration, in seconds""" width = models.IntegerField( - verbose_name=_('Width'), + verbose_name='Width', default=0, editable=False, ) """The video width, in pixels""" height = models.IntegerField( - verbose_name=_('Height'), + verbose_name='Height', default=0, editable=False, ) """The video height, in pixels""" codec = models.CharField( - verbose_name=_('Codec'), + verbose_name='Codec', max_length=30, default='', editable=False, @@ -152,7 +152,7 @@ class ExerciseVideo(AbstractLicenseModel, AbstractHistoryMixin, models.Model): """The video codec""" codec_long = models.CharField( - verbose_name=_('Codec, long name'), + verbose_name='Codec, long name', max_length=100, default='', editable=False, @@ -160,13 +160,13 @@ class ExerciseVideo(AbstractLicenseModel, AbstractHistoryMixin, models.Model): """The video codec, in full""" created = models.DateTimeField( - _('Date'), + verbose_name='Date', auto_now_add=True, ) """The creation time""" last_update = models.DateTimeField( - _('Date'), + verbose_name='Date', auto_now=True, ) """Datetime of last modification""" diff --git a/wger/gallery/models/image.py b/wger/gallery/models/image.py index 82c4a5d42..3b23a329d 100644 --- a/wger/gallery/models/image.py +++ b/wger/gallery/models/image.py @@ -23,7 +23,6 @@ import uuid from django.contrib.auth.models import User from django.db import models from django.dispatch import receiver -from django.utils.translation import gettext_lazy as _ # wger from wger.utils.images import validate_image_static_no_animation @@ -42,17 +41,20 @@ class Image(models.Model): '-date', ] - date = models.DateField(_('Date'), default=datetime.datetime.now) + date = models.DateField( + verbose_name='Date', + default=datetime.datetime.now, + ) user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) image = models.ImageField( - verbose_name=_('Image'), - help_text=_('Only PNG and JPEG formats are supported'), + verbose_name='Image', + help_text='Only PNG and JPEG formats are supported', upload_to=gallery_upload_dir, height_field='height', width_field='width', @@ -66,7 +68,7 @@ class Image(models.Model): """Width of the image""" description = models.TextField( - verbose_name=_('Description'), + verbose_name='Description', max_length=1000, blank=True, ) diff --git a/wger/i18n.tpl b/wger/i18n.tpl index fa430982c..b2674c353 100644 --- a/wger/i18n.tpl +++ b/wger/i18n.tpl @@ -38,3 +38,45 @@ {% translate "kg" %} {% translate "lb" %} {% translate "none (bodyweight exercise)" %} +{% translate "Beginner" %} +{% translate "Consistent" %} +{% translate "Dedicated" %} +{% translate "Obsessed" %} +{% translate "Legend" %} +{% translate "Veteran" %} +{% translate "Titan" %} +{% translate "Unstoppable" %} +{% translate "Weekend Warrior" %} +{% translate "Elephant lifter" %} +{% translate "Bus lifter" %} +{% translate "Plane lifter" %} +{% translate "Blue whale lifter" %} +{% translate "Space Station lifter" %} +{% translate "Millionaire" %} +{% translate "Atlas" %} +{% translate "Early Bird" %} +{% translate "Night Owl" %} +{% translate "New Year, New Me" %} +{% translate "Phoenix" %} +{% translate "Personal Record" %} +{% translate "Complete your first workout" %} +{% translate "Complete 10 workouts" %} +{% translate "Complete 50 workouts" %} +{% translate "Complete 100 workouts" %} +{% translate "Complete 200 workouts" %} +{% translate "Complete 500 workouts" %} +{% translate "Complete 1000 workouts" %} +{% translate "Maintain a 30-day workout streak" %} +{% translate "Work out on Saturday and Sunday for 4 consecutive weekends" %} +{% translate "Lift a cumulative total of 5.000 kg" %} +{% translate "Lift a cumulative total of 20.000 kg" %} +{% translate "Lift a cumulative total of 50.000 kg" %} +{% translate "Lift a cumulative total of 150.000 kg" %} +{% translate "Lift a cumulative total of 450.000 kg" %} +{% translate "Lift a cumulative total of 1.000.000 kg" %} +{% translate "Lift a cumulative total of 10.000.000 kg" %} +{% translate "Complete a workout before 6:00 AM" %} +{% translate "Complete a workout after 9:00 PM" %} +{% translate "Work out on January 1st" %} +{% translate "Return to training after being inactive for 30 days" %} +{% translate "Achieve a new Personal Record on any exercise" %} diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index bc8f1cb27..7188de0b5 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/LC_MESSAGES/django.po @@ -8,9 +8,9 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" -"PO-Revision-Date: 2023-06-24 20:53+0000\n" -"Last-Translator: SlyBat \n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" +"PO-Revision-Date: 2026-01-20 20:01+0000\n" +"Last-Translator: \"E. Ta.\" \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_SA\n" @@ -19,20 +19,20 @@ msgstr "" "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 4.18.1\n" +"X-Generator: Weblate 5.16-dev\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" -msgstr "الجيم الافتراضي" +msgstr "الصالة الافتراضية" #: config/models/gym_config.py:48 msgid "" "Select the default gym for this installation. This will assign all new " "registered users to this gym and update all existing users without a gym." msgstr "" -"حدد الصالة الرياضية الافتراضية لهذا التثبيت. سيؤدي هذا إلى تعيين جميع " -"المستخدمين المسجلين الجدد في هذه الصالة الرياضية وتحديث جميع المستخدمين " -"الحاليين بدون صالة رياضية." +"حدّد الصالة الافتراضية لهذا التثبيت. سيؤدي هذا إلى تعيين جميع المستخدمين " +"المسجّلين الجدد إلى الصالة وتحديث جميع المستخدمين الحاليين الذين ليس لديهم " +"صالة." #: config/views/gym_config.py:42 core/templates/language/view.html:64 #: core/templates/license/list.html:17 @@ -55,23 +55,24 @@ msgstr "" msgid "Edit" msgstr "تعديل" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "تسجيل الدخول" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" -msgstr "الاسم الاول" +msgstr "الاسم الأول" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" -msgstr "الاسم الاخير" +msgstr "الاسم الأخير" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -79,52 +80,53 @@ msgstr "الاسم الاخير" #: mailer/templates/mailer/gym/overview.html:4 #: mailer/templates/mailer/gym/preview.html:4 msgid "Email" -msgstr "البريد الألكتروني" +msgstr "البريد الإلكتروني" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." -msgstr "يستخدم لأعادة تعيين كلمة السر, واختيارياً لتنبيهات البريد" +msgstr "" +"يُستخدم لإعادة تعيين كلمة السر، واختياريًا، رسائل التذكير عبر البريد الإلكتروني." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "تاريخ الميلاد" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "المعلومات الشخصية" -#: core/forms.py:167 -msgid "Workout reminders" -msgstr "تنبيهات و اشعارات التدريب" - -#: core/forms.py:174 -msgid "Other settings" -msgstr "أعدادات اخرى" - -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 -msgid "Save" -msgstr "الحفظ" - #: core/forms.py:189 +msgid "Workout reminders" +msgstr "تذكيرات بالتمارين" + +#: core/forms.py:196 +msgid "Other settings" +msgstr "إعدادات أخرى" + +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 +msgid "Save" +msgstr "حفظ" + +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." -msgstr "يستخدم للأعادة تعيين كلمة المرور, وتنبيهات البريد." +msgstr "يُستخدم لإعادة تعيين كلمة المرور، ورسائل التذكير عبر البريد الإلكتروني." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." -msgstr "البريد الذي ادخلته مستخدم مسبقاً." +msgstr "هذا البريد مُستخدم بالفعل." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "كلمة السر" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." -msgstr "الرجاء ادخال كلمة المرور الحالية." +msgstr "الرجاء إدخال كلمة مرورك الحالية." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -141,78 +143,61 @@ msgstr "الرجاء ادخال كلمة المرور الحالية." msgid "Delete" msgstr "حذف" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" -msgstr "الرمز غير صحيح" +msgstr "كلمة مرور غير صالحة" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" -msgstr "" +msgstr "النموذج مؤمّن بـ reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" -msgstr "التسجيل" - -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "الوصول الى الدعم" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "طريقة للأجابة على مشكلتك (بريدك الألكتروني أو وسيلة اخرى)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "ملاحظة" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "ما الذي تريد قوله؟" +msgstr "تسجيل" #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" -msgstr "اسم قصير للغة" +msgstr "اسم اللغة المختصر" #: core/models/language.py:39 core/templates/language/view.html:22 msgid "Language full name" -msgstr "الاسم الكامل للغة" +msgstr "اسم اللغة الكامل" #: core/models/language.py:45 core/templates/language/view.html:23 -#, fuzzy -#| msgid "Language full name" msgid "Language full name in English" -msgstr "الاسم الكامل للغة" +msgstr "اسم اللغة الكامل باللغة الإنكليزية" #: core/models/license.py:29 msgid "Full name" -msgstr "الأسم الكامل" +msgstr "الاسم الكامل" #: core/models/license.py:31 msgid "" "If a license has been localized, e.g. the Creative Commons licenses for the " "different countries, add them as separate entries here." msgstr "" +"إذا تمّ توطين ترخيص ما، على سبيل المثال: تراخيص المشاع الإبداعي للدول المختلفة" +"، فأضفها كمدخلات منفصلة هنا." #: core/models/license.py:40 msgid "Short name, e.g. CC-BY-SA 3" -msgstr "كتابة أسم قصيرمثلاً : CC-BY-SA 3" +msgstr "اسم مختصر، على سبيل المثال: CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "الرابط" #: core/models/license.py:46 msgid "Link to license text or other information" -msgstr "" +msgstr "رابط لنص الترخيص أو معلومات أخرى" #: core/models/profile.py:57 #, python-format msgid "%(birthdate)s is not a valid birthdate" -msgstr "تاريخ الميلاد غير صالح %(birthdate)s" +msgstr "تاريخ الميلاد %(birthdate)s غير صحيح" #: core/models/profile.py:66 msgid "Male" @@ -220,11 +205,11 @@ msgstr "ذكر" #: core/models/profile.py:67 msgid "Female" -msgstr "انثى" +msgstr "أنثى" #: core/models/profile.py:74 msgid "Low" -msgstr "قليل" +msgstr "منخفض" #: core/models/profile.py:75 msgid "Medium" @@ -236,23 +221,23 @@ msgstr "عالي" #: core/models/profile.py:82 msgid "Metric (kilogram)" -msgstr "نظام متري (كيلوغرام)" +msgstr "النظام المتري (كيلوجرام)" #: core/models/profile.py:83 msgid "Imperial (pound)" -msgstr "النظام الامبراطوري (باوند)" +msgstr "النظام الإمبراطوري (رطل)" #: core/models/profile.py:119 msgid "Show exercise comments" -msgstr "اظهار ملاحظات التدريب" +msgstr "عرض تعليقات التمرين" #: core/models/profile.py:120 msgid "Check to show exercise comments on the workout view" -msgstr "" +msgstr "تحقّق لعرض تعليقات التمرين في عرض التمرين" #: core/models/profile.py:130 msgid "Also use ingredients in English" -msgstr "أيضاً استعمل المكونات في اللغة الأنجليزية" +msgstr "استخدم أيضًا المكوّنات باللغة الإنكليزية" #: core/models/profile.py:132 msgid "" @@ -261,160 +246,175 @@ msgid "" "by the US Department of Agriculture. It is extremely complete, with around\n" "7000 entries, but can be somewhat overwhelming and make the search difficult." msgstr "" +"تحقّق أيضًا من عرض المكوّنات باللغة الإنكليزية أثناء إنشاء\n" +"خطة غذائية. يتمّ استخراج هذه المكوّنات من قائمة مقدّمة\n" +"من وزارة الزراعة الأمريكية. وهي قائمة كاملة للغاية، وتحتوي على حوالي\n" +"٧٠٠٠ مدخل، ولكنها قد تكون مُربكة بعض الشيء وتجعل البحث صعبًا." #: core/models/profile.py:141 msgid "Activate workout reminders" -msgstr "" +msgstr "فعّل تذكيرات التمرين" #: core/models/profile.py:143 msgid "" "Check to activate automatic reminders for workouts. You need to provide a " "valid email for this to work." msgstr "" +"تحقّق لتفعيل التذكيرات التلقائية للتدريبات. تحتاج إلى تقديم بريد إلكتروني " +"صالح حتى يعمل هذا." #: core/models/profile.py:152 msgid "Remind before expiration" -msgstr "" +msgstr "تذكير قبل انتهاء الصلاحية" #: core/models/profile.py:153 msgid "The number of days you want to be reminded before a workout expires." -msgstr "" +msgstr "عدد الأيام التي ترغب في تلقّي تذكير قبل انتهاء صلاحية تمرين." #: core/models/profile.py:159 msgid "Default duration of workouts" -msgstr "" +msgstr "المدة الافتراضية للتمارين" #: core/models/profile.py:161 msgid "" "Default duration in weeks of workouts not in a schedule. Used for email " "workout reminders." msgstr "" +"المدة الافتراضية بالأسابيع للتدريبات غير المدرجة في جدولٍ زمني. تُستخدم لإرسال " +"تذكيرات بالتدريبات عبر البريد الإلكتروني." #: core/models/profile.py:179 msgid "Notification language" -msgstr "" +msgstr "لغة الإشعار" #: core/models/profile.py:181 msgid "" "Language to use when sending you email notifications, e.g. email reminders " "for workouts. This does not affect the language used on the website." msgstr "" +"اللغة المستخدمة في إرسال الإشعارات عبر البريد الإلكتروني، مثل رسائل التذكير " +"بالتدريبات. هذا لا يؤثّر على اللغة المستخدمة في الموقع الإلكتروني." #: core/models/profile.py:214 gym/views/export.py:64 msgid "Age" -msgstr "" +msgstr "العمر" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" -msgstr "" +msgstr "الطول (سنتيمتر)" #: core/models/profile.py:247 msgid "Hours of sleep" -msgstr "" +msgstr "ساعات النوم" #: core/models/profile.py:248 msgid "The average hours of sleep per day" -msgstr "" +msgstr "متوسط ساعات النوم في اليوم" #: core/models/profile.py:257 msgid "Work" -msgstr "" +msgstr "العمل" #: core/models/profile.py:258 core/models/profile.py:300 msgid "Average hours per day" -msgstr "" +msgstr "متوسط عدد الساعات في اليوم" #: core/models/profile.py:267 core/models/profile.py:288 #: core/models/profile.py:309 msgid "Physical intensity" -msgstr "" +msgstr "الشدّة البدنية" #: core/models/profile.py:268 core/models/profile.py:289 #: core/models/profile.py:310 msgid "Approximately" -msgstr "" +msgstr "تقريبًا" #: core/models/profile.py:278 msgid "Sport" -msgstr "" +msgstr "رياضة" #: core/models/profile.py:279 msgid "Average hours per week" -msgstr "" +msgstr "متوسط الساعات في الأسبوع" #: core/models/profile.py:299 msgid "Free time" -msgstr "" +msgstr "وقت حر" #: core/models/profile.py:320 nutrition/templates/rate/form.html:66 msgid "Total daily calories" -msgstr "" +msgstr "إجماليّ السعرات الحرارية اليومية" #: core/models/profile.py:321 msgid "Total caloric intake, including e.g. any surplus" -msgstr "" +msgstr "إجماليّ السعرات الحرارية المتناوَلة، بما في ذلك على سبيل المثال أي فائض" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" -msgstr "" +msgstr "وحدة الوزن" #: core/models/profile.py:341 msgid "Allow external access" -msgstr "" +msgstr "السماح بالوصول الخارجي" #: core/models/profile.py:343 msgid "" "Allow external users to access your workouts and logs in a read-only mode. " "You need to set this before you can share links e.g. to social media." msgstr "" +"اسمح للمستخدمين الخارجيين بالوصول إلى تمارينك وسجلّاتك في وضع القراءة فقط. يجب " +"عليك ضبط هذا الإعداد قبل مشاركة الروابط، على سبيل المثال: على وسائل التواصل " +"الاجتماعي." #: core/models/profile.py:352 msgid "Automatic reminders for weight entries" -msgstr "" +msgstr "تذكيرات تلقائية لإدخال الوزن" #: core/models/profile.py:353 msgid "Number of days after the last weight entry (enter 0 to deactivate)" -msgstr "" +msgstr "عدد الأيام بعد آخر إدخال للوزن (أدخل ٠ لإلغاء التنشيط)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "فعّل الجوائز" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "تفعيل أو تعطيل نظام الجوائز لهذا المستخدم" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" -msgstr "" +msgstr "يجب أن يكون مجموع جميع الساعات ٢٤" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" -msgstr "" +msgstr "الاسم" #: core/templates/403.html:4 msgid "Forbidden!" -msgstr "" +msgstr "ممنوع!" #: core/templates/403.html:7 msgid "You are not allowed to access this page" -msgstr "" +msgstr "لا يُسمح لك بالوصول إلى هذه الصفحة" #: core/templates/404.html:4 msgid "Page not found" -msgstr "" +msgstr "الصفحة غير موجودة" #: core/templates/404.html:7 msgid "The page you requested does not exist." -msgstr "" +msgstr "الصفحة التي طلبتها غير موجودة." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" -msgstr "" +msgstr "حدث خطأ" #: core/templates/500.html:8 msgid "" @@ -422,6 +422,9 @@ msgid "" "refreshing your browser and if that doesn't help, please try again at a " "later time. If the problem persists, you can seek help in ways listed below:" msgstr "" +"حدث خطأ على الخدمة أثناء معالجة طلبك. حاول تحديث متصفّحك، وإذا لم يحلّ ذلك " +"المشكلة، يُرجى المحاولة مرة أخرى لاحقًا. إذا استمرّت المشكلة، يمكنك طلب المساعدة " +"من الطرق المذكورة أدناه:" #: core/templates/base.html:10 #, python-format @@ -429,11 +432,13 @@ msgid "" "You are browsing the site as the user \"%(current_user)s\", all actions are " "performed on their data." msgstr "" +"أنت تتصفّح الموقع بصفتك المستخدم \"%(current_user)s\"، ويتمّ تنفيذ جميع " +"الإجراءات على بياناته." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" -msgstr "" +msgstr "الرجوع إلى \"%(target)s\"" #: core/templates/base_wide.html:7 #, python-format @@ -444,81 +449,70 @@ msgid "" " their data.\n" " " msgstr "" - -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" +"أنت تتصفّح الموقع بصفتك المستخدم \"%(current_user)s\"، ويتمّ تنفيذ جميع " +"الإجراءات على بياناته.\n" +" " #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." -msgstr "" +msgstr "هل أنت متأكّد من رغبتك في حذف هذا؟ لا يمكن التراجع عن هذا الإجراء." #: core/templates/email_verification/confirm_template.html:4 -#, fuzzy msgid "Email verification" -msgstr "إعدادات" +msgstr "التحقُّق من البريد الإلكتروني" #: core/templates/email_verification/confirm_template.html:18 #, python-format msgid "%(username)s, your email was verified" -msgstr "" +msgstr "%(username)s، تم التحقُّق من بريدك الإلكتروني" #: core/templates/email_verification/confirm_template.html:22 msgid "Error, invalid verification token" -msgstr "" +msgstr "خطأ، رمز تحقُّق غير صالح" #: core/templates/email_verification/email_body_html.tpl:6 -#, fuzzy msgid "Email Confirmation" -msgstr "إعدادات" +msgstr "تأكيد البريد الإلكتروني" #: core/templates/email_verification/email_body_html.tpl:9 #: core/templates/email_verification/email_body_txt.tpl:3 #, python-format msgid "You are almost there, %(username)s!" -msgstr "" +msgstr "أنت على وشك الوصول، %(username)s!" #: core/templates/email_verification/email_body_html.tpl:11 #, python-format msgid "Please click here to confirm your email" -msgstr "" +msgstr "يُرجى النقر هنا لتأكيد بريدك الإلكتروني" #: core/templates/email_verification/email_body_html.tpl:12 #: core/templates/email_verification/email_body_txt.tpl:5 #, python-format msgid "The token expires on %(time)s" -msgstr "" +msgstr "تنتهي صلاحية الرمز في %(time)s" #: core/templates/email_verification/email_body_html.tpl:14 #: core/templates/email_verification/email_body_txt.tpl:8 msgid "the wger Team" -msgstr "" +msgstr "فريق wger" #: core/templates/email_verification/email_body_txt.tpl:4 #, python-format msgid "Please click the following link to confirm your email: %(link)s" -msgstr "" +msgstr "يُرجى النقر على الرابط التالي لتأكيد بريدك الإلكتروني: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "اللغات" #: core/templates/language/overview.html:22 msgid "Nothing found." -msgstr "لم يتم العثور على شيء." +msgstr "لم يتمّ العثور على شيء." #: core/templates/language/overview.html:22 #: nutrition/templates/ingredient/overview.html:38 -#, fuzzy msgid "Add one now." -msgstr "أضف واحدة الآن." +msgstr "أضف واحدًا الآن." #: core/templates/language/overview.html:34 core/templates/license/list.html:43 #: core/templates/repetition_unit/list.html:46 @@ -540,7 +534,7 @@ msgstr "أضف واحدة الآن." #: mailer/templates/mailer/gym/overview.html:43 #: nutrition/templates/ingredient/overview.html:60 msgid "Add" -msgstr "اضف" +msgstr "إضافة" #: core/templates/language/view.html:61 core/templates/user/api_key.html:41 #: core/templates/user/preferences.html:50 gym/models/contract.py:203 @@ -551,7 +545,7 @@ msgstr "الخيارات" #: core/templates/license/list.html:4 msgid "License list" -msgstr "" +msgstr "قائمة التراخيص" #: core/templates/license/list.html:30 #: core/templates/repetition_unit/list.html:32 @@ -571,43 +565,43 @@ msgstr "" #: mailer/templates/mailer/gym/overview.html:30 #: nutrition/templates/units/list.html:34 msgid "Nothing found" -msgstr "" +msgstr "لم يتمّ العثور على شيء" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" -msgstr "" +msgstr "طبع" #: core/templates/navigation.html:28 software/templates/features.html:458 msgid "Training" -msgstr "" +msgstr "تمرين" #: core/templates/navigation.html:37 core/templates/user/overview.html:25 msgid "Routines" -msgstr "" +msgstr "الروتينات" #: core/templates/navigation.html:45 core/templates/user/overview.html:70 msgid "Calendar" -msgstr "" +msgstr "التقويم" #: core/templates/navigation.html:55 msgid "Measurements" -msgstr "" +msgstr "القياسات" #: core/templates/navigation.html:66 gallery/templates/images/overview.html:6 msgid "Gallery" -msgstr "" +msgstr "المعرض" #: core/templates/navigation.html:72 msgid "Workout templates" -msgstr "" +msgstr "قوالب تمارين" #: core/templates/navigation.html:79 msgid "Your templates" -msgstr "" +msgstr "قوالبك" #: core/templates/navigation.html:88 msgid "Public templates" -msgstr "" +msgstr "قوالب عامة" #: core/templates/navigation.html:96 software/templates/features.html:51 #: software/templates/features.html:480 @@ -615,146 +609,151 @@ msgid "Exercises" msgstr "تمارين" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" -msgstr "" +msgstr "إدارة" #: core/templates/navigation.html:106 -#, fuzzy -#| msgid "Exercises" msgid "Exercise edit history" -msgstr "تمارين" +msgstr "تاريخ تعديل التمارين" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" -msgstr "" +msgstr "مُعدّات" #: core/templates/navigation.html:118 msgid "Muscles" -msgstr "" +msgstr "عضلات" #: core/templates/navigation.html:124 #: exercises/templates/categories/admin-overview.html:4 msgid "Categories" -msgstr "" +msgstr "فئات" #: core/templates/navigation.html:139 software/templates/features.html:468 msgid "Nutrition" -msgstr "" +msgstr "تغذية" #: core/templates/navigation.html:147 core/templates/user/overview.html:144 msgid "Nutrition plans" -msgstr "" +msgstr "خطط التغذية" #: core/templates/navigation.html:156 msgid "BMI calculator" -msgstr "" +msgstr "حاسبة مؤشّر كتلة الجسم" #: core/templates/navigation.html:165 nutrition/templates/rate/form.html:17 msgid "Daily calories calculator" -msgstr "" +msgstr "حاسبة السعرات الحرارية اليومية" #: core/templates/navigation.html:171 #: nutrition/templates/ingredient/overview.html:10 msgid "Ingredient overview" -msgstr "" +msgstr "نظرة عامة على المكوّنات" #: core/templates/navigation.html:180 nutrition/templates/units/list.html:6 msgid "Ingredient weight units" -msgstr "" +msgstr "وحدات وزن المكوّنات" #: core/templates/navigation.html:196 software/templates/features.html:463 msgid "Body weight" -msgstr "" +msgstr "وزن الجسم" #: core/templates/navigation.html:203 core/templates/user/overview.html:114 msgid "Weight overview" -msgstr "" +msgstr "نظرة عامة على الوزن" #: core/templates/navigation.html:217 msgid "About this software" -msgstr "" +msgstr "حول هذا البرنامج" #: core/templates/navigation.html:223 software/templates/about_us.html:5 msgid "Support & Get Involved" -msgstr "" +msgstr "ادعم وشارك" #: core/templates/navigation.html:229 software/templates/features.html:528 msgid "REST API" -msgstr "" +msgstr "واجهة برمجة تطبيقات REST" #: core/templates/navigation.html:235 utils/models.py:45 msgid "License" -msgstr "" +msgstr "ترخيص" #: core/templates/navigation.html:241 msgid "Developer documentation" -msgstr "" +msgstr "وثائق المطوّر" #: core/templates/navigation.html:248 msgid "Get the code" -msgstr "" +msgstr "احصل على الكود" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" -msgstr "" +msgstr "ترجمة" #: core/templates/navigation.html:292 core/templates/user/login.html:30 msgid "Reset password" -msgstr "" +msgstr "إعادة تعيين كلمة المرور" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" -msgstr "" +msgstr "تسجيل الخروج" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "تفضيلاتي" + +#: core/templates/navigation.html:352 msgid "Licenses" -msgstr "" +msgstr "التراخيص" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" -msgstr "" +msgstr "وحدات التكرار" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" -msgstr "" +msgstr "وحدات الوزن" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" -msgstr "" +msgstr "قائمة المستخدمين" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" -msgstr "" +msgstr "الصالات" + +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "الجوائز" #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" -msgstr "" +msgstr "تمّت إعادة تعيين كلمة المرور" #: core/templates/registration/password_reset_complete.html:8 msgid "Your password has been set. You may go ahead and log in now." -msgstr "" +msgstr "تم تعيين كلمة مرورك. يمكنك الآن تسجيل الدخول." #: core/templates/registration/password_reset_complete.html:10 msgid "Log in" -msgstr "" +msgstr "سجّل الدخول" #: core/templates/registration/password_reset_done.html:4 msgid "Password reset successful" -msgstr "" +msgstr "تمّت إعادة تعيين كلمة المرور بنجاح" #: core/templates/registration/password_reset_done.html:8 msgid "" "We've e-mailed you instructions for setting your password to the e-mail " "address you submitted. You should be receiving it shortly." msgstr "" +"لقد أرسلنا إليك عبر البريد الإلكتروني تعليمات حول كيفية تعيين كلمة المرور " +"الخاصة بك إلى عنوان البريد الإلكتروني الذي قدّمته. ستستلمها قريبًا." #: core/templates/registration/password_reset_email.html:2 #, python-format @@ -762,88 +761,90 @@ msgid "" "You're receiving this e-mail because you requested a password reset for your " "user account at %(site_name)s." msgstr "" +"تتلقّى هذه الرسالة الإلكترونية لأنك طلبت إعادة تعيين كلمة المرور لحساب المستخدم " +"الخاص بك على %(site_name)s." #: core/templates/registration/password_reset_email.html:4 msgid "Please go to the following page and choose a new password:" -msgstr "" +msgstr "يُرجى الانتقال إلى الصفحة التالية واختيار كلمة مرور جديدة:" #: core/templates/registration/password_reset_email.html:9 msgid "Your username, in case you've forgotten:" -msgstr "" +msgstr "اسم المستخدم الخاص بك، في حال نسيته:" #: core/templates/registration/password_reset_email.html:11 msgid "Thanks for using our site!" -msgstr "" +msgstr "شكرًا لاستخدامك موقعنا!" #: core/templates/registration/password_reset_email.html:13 #, python-format msgid "The %(site_name)s team" -msgstr "" +msgstr "فريق %(site_name)s" #: core/templates/tags/pagination.html:7 core/templates/tags/pagination.html:12 msgid "previous" -msgstr "" +msgstr "السابق" #: core/templates/tags/pagination.html:33 #: core/templates/tags/pagination.html:38 msgid "next" -msgstr "" +msgstr "التالي" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" -msgstr "" +msgstr "إغلاق" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." -msgstr "" +msgstr "أنت تستخدم حساب ضيف، وسيتمّ حذف البيانات المدخلة بعد أسبوع." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" -msgstr "" +msgstr "أنشئ بعض الإدخالات التجريبية" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" -msgstr "" +msgstr "شروط الخدمة" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" -msgstr "" +msgstr "الميزات" #: core/templates/user/api_key.html:4 core/templates/user/preferences.html:59 msgid "API key" -msgstr "" +msgstr "مفتاح API" #: core/templates/user/api_key.html:15 msgid "Your API key" -msgstr "" +msgstr "مفتاح API الخاص بك" #: core/templates/user/api_key.html:21 msgid "You have no API key yet" -msgstr "" +msgstr "ليس لديك مفتاح API حتى الآن" #: core/templates/user/api_key.html:46 msgid "Delete current API key and generate new one" -msgstr "" +msgstr "حذف مفتاح API الحالي وإنشاء مفتاح جديد" #: core/templates/user/api_key.html:49 msgid "Generate new API key" -msgstr "" +msgstr "إنشاء مفتاح API جديد" #: core/templates/user/api_key.html:55 software/templates/features.html:533 msgid "Documentation" -msgstr "" +msgstr "وثائق" #: core/templates/user/delete_account.html:3 #: core/templates/user/preferences.html:62 msgid "Delete account" -msgstr "" +msgstr "حذف الحساب" #: core/templates/user/delete_account.html:9 #: exercises/templates/history/overview.html:93 msgid "Are you sure?" -msgstr "" +msgstr "هل أنت متأكّد؟" #: core/templates/user/delete_account.html:14 #, python-format @@ -853,14 +854,18 @@ msgid "" "logs, etc.)\n" "and can't be undone. " msgstr "" +"سيؤدي هذا الإجراء إلى حذف حساب المستخدم \"%(username)s\".\n" +"سيؤدي ذلك أيضًا إلى إزالة جميع البيانات المرتبطة به بشكل نهائي (التمارين، " +"والسجلّات، وما إلى ذلك)\n" +"ولا يمكن التراجع عنه. " #: core/templates/user/login.html:17 msgid "No account?" -msgstr "" +msgstr "ليس لديك حساب؟" #: core/templates/user/login.html:26 msgid "Forgot password?" -msgstr "" +msgstr "هل نسيت كلمة السر؟" #: core/templates/user/overview.html:25 core/templates/user/overview.html:68 #: core/templates/user/overview.html:112 core/templates/user/overview.html:144 @@ -868,7 +873,7 @@ msgstr "" #: core/templates/user/overview.html:426 #, python-format msgid "last %(number)s" -msgstr "" +msgstr "آخر %(number)s" #: core/templates/user/overview.html:27 core/templates/user/overview.html:146 #: core/templates/user/overview.html:343 core/templates/user/overview.html:382 @@ -876,27 +881,18 @@ msgstr "" #: gym/templates/gym/member_list.html:262 #: gym/templates/gym/member_list.html:302 msgid "Overview" -msgstr "" +msgstr "نظرة عامة" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -904,7 +900,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -917,12 +913,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -932,28 +927,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1013,7 +1007,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1100,10 +1095,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1131,7 +1130,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1140,43 +1139,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1186,106 +1173,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1298,56 +1222,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1362,13 +1249,10 @@ msgstr "" msgid "Action" msgstr "الخيارات" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1420,10 +1304,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1490,8 +1370,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1508,12 +1387,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1563,11 +1440,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1841,7 +1713,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1877,6 +1749,188 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "المعلومات الشخصية" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "عينة تمارين" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1927,60 +1981,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1996,32 +2025,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2065,153 +2072,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2265,6 +2164,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2272,10 +2175,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2349,7 +2264,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2366,6 +2281,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Personal data" +msgid "Nutritional data" +msgstr "المعلومات الشخصية" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2523,6 +2444,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "الوصول الى الدعم" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "تطبيق الهاتف" @@ -2703,6 +2628,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2774,14 +2703,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2877,13 +2806,14 @@ msgstr "" msgid "Re-Submit" msgstr "" -#, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "المعلومات الشخصية" +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "طريقة للأجابة على مشكلتك (بريدك الألكتروني أو وسيلة اخرى)" -#~ msgid "Sample workout" -#~ msgstr "عينة تمارين" +#~ msgid "Comment" +#~ msgstr "ملاحظة" + +#~ msgid "What do you want to say?" +#~ msgstr "ما الذي تريد قوله؟" #~ msgid "Sample day" #~ msgstr "عينة يوم" diff --git a/wger/locale/bg/LC_MESSAGES/django.po b/wger/locale/bg/LC_MESSAGES/django.po index d128ce340..38c7d00fd 100644 --- a/wger/locale/bg/LC_MESSAGES/django.po +++ b/wger/locale/bg/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2021-04-15 07:27+0000\n" "Last-Translator: Allan Nordhøy \n" "Language-Team: Bulgarian \n" @@ -53,23 +53,24 @@ msgstr "" msgid "Edit" msgstr "Поправи" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Вход" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -79,52 +80,52 @@ msgstr "" msgid "Email" msgstr "Е-мейл" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Запази" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 #, fuzzy #| msgid "This email is already used." msgid "This e-mail address is already in use." msgstr "Този email е вече използван." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -141,38 +142,21 @@ msgstr "" msgid "Delete" msgstr "Изтрии" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Регистрация" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Коментирай" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Какво искаш да кажеш?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Съкратено име на езика" @@ -201,7 +185,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -311,7 +295,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -361,8 +345,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Единица за тегло" @@ -384,22 +367,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Име" @@ -419,7 +405,7 @@ msgstr "Страницата не е намерена" msgid "The page you requested does not exist." msgstr "Страницата, която потърсихте не съществува" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -437,7 +423,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -452,13 +438,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Сигурен ли си, че искаш да изтриеш това? Това действие е невъзвратимо!" @@ -511,11 +490,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Табло" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -581,7 +556,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -629,7 +604,7 @@ msgid "Exercises" msgstr "Упражнения" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Администрация" @@ -639,7 +614,7 @@ msgstr "Администрация" msgid "Exercise edit history" msgstr "Ден за упражнение" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -709,7 +684,7 @@ msgstr "" msgid "Get the code" msgstr "Грабни кода" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Преведи" @@ -718,36 +693,41 @@ msgstr "Преведи" msgid "Reset password" msgstr "Промени парола" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Моите преференции" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Изход" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Моите преференции" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Единици за тегло" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Редактирането на паролата завърши" @@ -807,27 +787,27 @@ msgstr "предишно" msgid "next" msgstr "следващо" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Вие сте влезли като гост и всички данни, които добавяте ще бъдат изтрити " "след една седмица." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Направи демонстративни попълнения" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Особености" @@ -900,23 +880,14 @@ msgstr "Преглед" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Дата" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -924,7 +895,7 @@ msgstr "Описание" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -937,12 +908,11 @@ msgstr "Не са намерени тренировки." msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Бележки" @@ -952,28 +922,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Тегло" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Енергия" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Протеин" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Въглехидрати" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Мазнини" @@ -1033,7 +1002,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "№" @@ -1119,10 +1089,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Смени парола" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1150,7 +1124,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1159,25 +1133,25 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1188,18 +1162,6 @@ msgstr "" "този сайт да направи за теб. Чувствай се свободен да ги редактираш или " "изтриеш!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Обратна връзка" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Вашият съвет/коментар бе изпратен успешно. Благодарим ви!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1209,110 +1171,43 @@ msgstr "" msgid "You were successfully registered" msgstr "Вие се регистрирахте успешно" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Настройките бяха успешно обновени" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Категория" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Основни мускули" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Второстепенни мускули" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Категории на упражнения" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Упражнение" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Коментар как да се направи упражнението правилно." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Add new exercise" -msgid "Alias for an exercise" -msgstr "Добави ново упражнение" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -#, fuzzy -#| msgid "Others" -msgid "Other" -msgstr "Други" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1327,60 +1222,19 @@ msgstr "име на упражнение" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Език" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Времетраене" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Тегло" - -#: exercises/models/video.py:147 -#, fuzzy -#| msgid "Code" -msgid "Codec" -msgstr "Код" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1397,13 +1251,10 @@ msgstr "Ден за упражнение" msgid "Action" msgstr "Действия" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Потребител" @@ -1457,10 +1308,6 @@ msgstr "" msgid "Add muscle" msgstr "Добави мускул" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1529,8 +1376,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Количество" @@ -1547,12 +1393,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Начална дата" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1602,11 +1446,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1884,7 +1723,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повторения" @@ -1920,6 +1759,194 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgid "Contents" +msgid "Consistent" +msgstr "Съставки" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Запис на тегло" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Копирай тренировка" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Примерна тренировка" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Тренировка за %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1970,62 +1997,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Серии" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Повторения" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Ден за почивка" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Упражнение" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ред" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Упражнение" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата на създаване" - -#: manager/models/routine.py:106 -#, fuzzy -#| msgid "Workouts schedules" -msgid "Workout template" -msgstr "График на тренировки" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -2041,32 +2041,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Ден за упражнение" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2110,165 +2088,47 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Упражнение" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Тренировка за %s" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Weight" -msgid "Height (in)" -msgstr "Тегло" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (kg)" -msgstr "Запис на тегло" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (lbs)" -msgstr "Запис на тегло" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Съставка" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "Също използвай съставки на Английски" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "в кило калории за 100гр" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "В гр. за 100гр продукт" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Състав на захар в въглехидратите" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Наситени мазнини в мазнини" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Натрий" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Единица количество, напр. \"1 Чаша\" или \"1/2 лъжица\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "План за хранене" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Ядене" - -#: nutrition/models/log.py:71 -#, fuzzy -#| msgid "Time (approx)" -msgid "Date and Time (Approx.)" -msgstr "Време (приблизително)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Време (приблизително)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Пояснение за целта на плана, напр. \"Работа са Маса\" или \"Подготви се за " -"лятото\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2330,6 +2190,10 @@ msgstr "Макронутриенти" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Състав на захар в въглехидратите" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2337,10 +2201,22 @@ msgstr "" msgid "n.A." msgstr "Не е налично" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Наситени мазнини в мазнини" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Други" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Натрий" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2414,7 +2290,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Добави нова съставка" @@ -2431,6 +2307,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Хранителни данни" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2604,6 +2484,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2796,6 +2680,10 @@ msgstr "" msgid "Account" msgstr "Количество" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Табло" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workouts schedules" @@ -2871,14 +2759,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2974,14 +2862,117 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "Серии" +#~ msgid "Comment" +#~ msgstr "Коментирай" -#~ msgid "Rest day" -#~ msgstr "Ден за почивка" +#~ msgid "What do you want to say?" +#~ msgstr "Какво искаш да кажеш?" -#~ msgid "Nutritional data" -#~ msgstr "Хранителни данни" +#~ msgid "Feedback" +#~ msgstr "Обратна връзка" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Вашият съвет/коментар бе изпратен успешно. Благодарим ви!" + +#~ msgid "Category" +#~ msgstr "Категория" + +#~ msgid "Primary muscles" +#~ msgstr "Основни мускули" + +#~ msgid "Secondary muscles" +#~ msgstr "Второстепенни мускули" + +#~ msgid "Exercise Categories" +#~ msgstr "Категории на упражнения" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Коментар как да се направи упражнението правилно." + +#, fuzzy +#~| msgid "Add new exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Добави ново упражнение" + +#, fuzzy +#~| msgid "Others" +#~ msgid "Other" +#~ msgstr "Други" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "Тегло" + +#~ msgid "Language" +#~ msgstr "Език" + +#~ msgid "Duration" +#~ msgstr "Времетраене" + +#, fuzzy +#~| msgid "Code" +#~ msgid "Codec" +#~ msgstr "Код" + +#~ msgid "Order" +#~ msgstr "Ред" + +#~ msgid "Creation date" +#~ msgstr "Дата на създаване" + +#, fuzzy +#~| msgid "Workouts schedules" +#~ msgid "Workout template" +#~ msgstr "График на тренировки" + +#~ msgid "Exercise day" +#~ msgstr "Ден за упражнение" + +#~ msgid "In kcal per 100g" +#~ msgstr "в кило калории за 100гр" + +#~ msgid "In g per 100g of product" +#~ msgstr "В гр. за 100гр продукт" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Единица количество, напр. \"1 Чаша\" или \"1/2 лъжица\"" + +#~ msgid "Nutrition plan" +#~ msgstr "План за хранене" + +#~ msgid "Meal" +#~ msgstr "Ядене" + +#, fuzzy +#~| msgid "Time (approx)" +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Време (приблизително)" + +#~ msgid "Time (approx)" +#~ msgstr "Време (приблизително)" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Пояснение за целта на плана, напр. \"Работа са Маса\" или \"Подготви се " +#~ "за лятото\"" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height (in)" +#~ msgstr "Тегло" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Запис на тегло" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Запис на тегло" #~ msgid "Workouts" #~ msgstr "Тренировки" @@ -2989,9 +2980,6 @@ msgstr "" #~ msgid "About us" #~ msgstr "За нас" -#~ msgid "Sample workout" -#~ msgstr "Примерна тренировка" - #~ msgid "Sample day" #~ msgstr "Примерен ден" @@ -3210,9 +3198,6 @@ msgstr "" #~ msgid "Edit workout" #~ msgstr "Редактирай тренировката" -#~ msgid "Copy workout" -#~ msgstr "Копирай тренировка" - #~ msgid "Move me" #~ msgstr "Премести ме" @@ -3231,9 +3216,6 @@ msgstr "" #~ msgid "Delete schedule" #~ msgstr "Изтрий график" -#~ msgid "Weight log" -#~ msgstr "Запис на тегло" - #~ msgid "Weight log for workout" #~ msgstr "Запис за тежести на тренировка" @@ -3291,8 +3273,8 @@ msgstr "" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Потребителя {0} добави нова съставка \"{1}\"." #~ msgid "Submission date" @@ -3363,9 +3345,6 @@ msgstr "" #~ msgid "Your nutrition plans" #~ msgstr "Твоите планове за хранене" -#~ msgid "Contents" -#~ msgstr "Съставки" - #~ msgid "No items for this meal." #~ msgstr "Няма артикули за това ядене." @@ -3560,8 +3539,8 @@ msgstr "" #~ "(no registration needed)" #~ msgstr "" #~ "Използвай публичната група за да получиш подкрепа за твоята\n" -#~ "локална wger инсталация или да дискутираш проблеми или новата ти идея и т." -#~ "н.\n" +#~ "локална wger инсталация или да дискутираш проблеми или новата ти идея и " +#~ "т.н.\n" #~ "(не е нужна регистрация)" #~ msgid "Open feedback form" @@ -3575,8 +3554,8 @@ msgstr "" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -3585,8 +3564,8 @@ msgstr "" #~ "заинтересован. \n" #~ "Ако сте нов в света на свободния софтуер, ние препоръчваме да " #~ "погледнете \n" -#~ "\n" +#~ "\n" #~ "този артикул , който обобщава начина, по който проектите с отворен " #~ "код работят по-добре." diff --git a/wger/locale/ca/LC_MESSAGES/django.po b/wger/locale/ca/LC_MESSAGES/django.po index 88ea58acd..d2f8390d2 100644 --- a/wger/locale/ca/LC_MESSAGES/django.po +++ b/wger/locale/ca/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2024-08-04 23:09+0000\n" "Last-Translator: Zixu Sun \n" "Language-Team: Catalan \n" @@ -52,23 +52,24 @@ msgstr "" msgid "Edit" msgstr "Edita" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Accedeix" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Nom" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Cognom" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -78,54 +79,54 @@ msgstr "Cognom" msgid "Email" msgstr "Adreça electrònica" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Usada per a reinicialitzar contrasenyes i, opcionalment, recordatoris per " "correu." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Data de naixement" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Dades personals" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Recordatoris d'entrenament" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Altres configuracions" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Desa" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Usada per a reinicialitzar contrasenyes i, opcionalment, recordatoris per " "correu." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Aquesta adreça ja s'està usant." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Contrasenya" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Introduïu la contrasenya actual." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -142,38 +143,21 @@ msgstr "Introduïu la contrasenya actual." msgid "Delete" msgstr "Esborra" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Contrasenya invàlida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "El formulari està protegit amb reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Enregistreu-vos" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contacte" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Algun medi per respondre-us (adreça electrònica, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentari" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Què voleu dir?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Nom curt de la llengua" @@ -204,7 +188,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Nom curt, p. e. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Vincle" @@ -321,7 +305,7 @@ msgstr "" msgid "Age" msgstr "Edat" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Alçada (cm)" @@ -371,8 +355,7 @@ msgstr "Calories diàries totals" msgid "Total caloric intake, including e.g. any surplus" msgstr "Ingesta calòrica total, inclosos p. e. qualsevol extra" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Unitat de pes" @@ -399,22 +382,25 @@ msgstr "" "Nombre de dies des de la darrera entrada de pes (introduïu 0 per a " "desactivar)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "La suma de totes les hores ha de ser 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nom" @@ -434,7 +420,7 @@ msgstr "No s'ha trobat la pàgina" msgid "The page you requested does not exist." msgstr "La pàgina sol·licitada no existeix." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "S'ha produït un error" @@ -465,7 +451,7 @@ msgstr "" "s'executarà sobre les seves dates.\n" " " -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Enrere a \"%(target)s\"" @@ -489,14 +475,6 @@ msgstr "" "s'executarà sobre les seves dates.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Enrere a \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Esteu segur que voleu esborrar això? Aquesta acció no es pot desfer." @@ -547,11 +525,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Consola" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Llengües" @@ -617,7 +591,7 @@ msgstr "Llista de llicències" msgid "Nothing found" msgstr "No s'ha trobat res" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Colofó" @@ -659,7 +633,7 @@ msgid "Exercises" msgstr "Exercicis" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administració" @@ -669,7 +643,7 @@ msgstr "Administració" msgid "Exercise edit history" msgstr "Dia d'entrenament" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Equipament" @@ -739,7 +713,7 @@ msgstr "Documentació per a desenvolupadors" msgid "Get the code" msgstr "Obteniu el codi font" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Traduïu" @@ -748,36 +722,41 @@ msgstr "Traduïu" msgid "Reset password" msgstr "Reinicialitza la contrasenya" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Les meves preferències" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Surt" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Les meves preferències" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Llicències" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Unitats de repetició" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Unitats de pes" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Llista d'usuaris" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Gimnasos" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Reinicialització de la contrasenya completada" @@ -837,27 +816,27 @@ msgstr "enrere" msgid "next" msgstr "següent" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Tanca" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Esteu usant un compte de convidat, les dades introduïdes s'esborraran " "passada una setmana." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Crea algunes entrades de mostra" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Condicions del servei" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funcions" @@ -934,23 +913,14 @@ msgstr "Visió general" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Data" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripció" @@ -958,7 +928,7 @@ msgstr "Descripció" msgid "Number of logs (days)" msgstr "Nombre de registres (dies)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Darrera activitat" @@ -971,12 +941,11 @@ msgstr "No s'han trobat entrenaments." msgid "Log" msgstr "Registre" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Impressió general" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notes" @@ -986,28 +955,27 @@ msgid "Time" msgstr "Temps" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Pes" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energia" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteïna" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Carbohidrats" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Greix" @@ -1067,7 +1035,8 @@ msgid "Details" msgstr "Detalls" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Núm." @@ -1157,10 +1126,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Canvia la contrasenya" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1188,7 +1161,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Esborrat amb èxit" @@ -1197,25 +1170,25 @@ msgstr "Esborrat amb èxit" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Esborrar {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Edita {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1225,18 +1198,6 @@ msgstr "" "entrades de pla nutricional per a que podeu veure millor què pot fer aquest " "web. Podeu editar-les o esborrar-les!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Escriviu-nos" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Envia" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Els vostres comentaris s'han enviat amb èxit. Gràcies!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1246,108 +1207,43 @@ msgstr "El compte «{0}» s'ha esborrat amb èxit" msgid "You were successfully registered" msgstr "Us heu registrat amb èxit" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Opcions actualitzades amb èxit" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "S'ha desactivat l'usuari amb èxit" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "S'ha activat l'usuari amb èxit" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Edita l'usuari" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Nom d'usuari" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Gimnàs" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categoria" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Músculs primaris" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Músculs secundaris" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variacions" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Categories d'exercicis" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Exercici" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Un comentari sobre com fer aquest exercici correctament." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Correcting an exercise" -msgid "Alias for an exercise" -msgstr "Corregint un exercici" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Lineal" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "«Low-poly»" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Altres" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Imatge" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Imatge principal" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "En llatí, p. e. «Pectoralis major»" @@ -1362,62 +1258,21 @@ msgstr "nom de l'exercici" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Llengua" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 #, fuzzy #| msgid "%(birthdate)s is not a valid birthdate" msgid "File is not a valid video" msgstr "%(birthdate)s no és una data de naixement vàlida" -#: exercises/models/video.py:104 -#, fuzzy -#| msgid "Main picture" -msgid "Main video" -msgstr "Imatge principal" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Duració" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Pes" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Llista d'equipaments" @@ -1434,13 +1289,10 @@ msgstr "Dia d'entrenament" msgid "Action" msgstr "Accions" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Usuari" @@ -1499,10 +1351,6 @@ msgstr "Voleu esborrar l'equipament?" msgid "Add muscle" msgstr "Afegeix múscul" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Només se suporten els formats PNG i JPEG" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Afegeix imatge" @@ -1569,8 +1417,7 @@ msgid "Contract type" msgstr "Tipus de contracte" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Quantitat" @@ -1587,12 +1434,10 @@ msgid "Contract is active" msgstr "El contracte és actiu" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Data d'inici" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Data de finalització" @@ -1644,12 +1489,6 @@ msgstr "Mostra el nom a la capçalera" msgid "Show the name of the gym in the site header" msgstr "Mostra el nom del gimnàs a la capçalera del web" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "Configuració per a {}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Vista general de membres inactius" @@ -1937,7 +1776,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repeticions" @@ -1973,6 +1812,197 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Contingut" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Registre del pes" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Dades personals" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Copia pla d'entrenament" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Entrenament de mostra" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Pla d'entrenament per a %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -2025,65 +2055,37 @@ msgstr "Envia correus" msgid "Correction" msgstr "Correcció" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sèries" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Repeticions" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RER" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Dia de repòs" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Exercici" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "L'entrenament caducarà aviat" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ordre" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Ocupació" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Entrenament" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Unitat" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data de creació" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Plantilla d'entrenament" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Marcar un entrenament com a plantilla el fixarà i permetrà fer-ne còpies" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Plantilla pública" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Una plantilla pública està disponible per a altres usuaris" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "L'hora d'inici no pot ser posterior a la de finalització." @@ -2099,34 +2101,10 @@ msgstr "Neutra" msgid "Good" msgstr "Bona" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Qualsevol nota que vulgueu desar sobre aquesta sessió d'entrenament" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"La vostra sensació sobre aquesta sessió d'entrenament. Heu entrenat tan bé " -"com heu pogut?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Hora d'inici" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Hora de finalització" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Si introduïu una hora, heu d'introduir-ne ambdues d'inici i final." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Dia d'entrenament" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2182,50 +2160,32 @@ msgstr "" "Rebreu aquests recordatoris regularment fins que hagueu introduït el vostre " "pes actual." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Entrenament" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Pla d'entrenament per a %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Valor" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Unitat" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Height (cm)" -msgid "Height (in)" -msgstr "Alçada (cm)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (kg)" -msgstr "Registre del pes" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (lbs)" -msgstr "Registre del pes" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Calcula" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Ingesta energètica bàsica" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "La vostra ingesta energètica bàsica calculada segons les vostres dades" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Calories addicionals" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2233,112 +2193,16 @@ msgstr "" "Calories addicionals a afegir a la base (per a sostreure-les-en, introduïu " "un número negatiu)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingredient" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "Usa també ingredients en anglès" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "En kcal per 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "En g per 100g de producte" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Pla nutricional" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2392,6 +2256,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2399,10 +2267,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2476,7 +2356,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2493,6 +2373,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Nutrition plan" +msgid "Nutritional data" +msgstr "Pla nutricional" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2654,6 +2540,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contacte" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2852,6 +2742,10 @@ msgstr "" msgid "Account" msgstr "Quantitat" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Consola" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2925,14 +2819,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Envia" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3028,6 +2922,171 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Image" +#~ msgstr "Imatge" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Només se suporten els formats PNG i JPEG" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Algun medi per respondre-us (adreça electrònica, etc.)" + +#~ msgid "Comment" +#~ msgstr "Comentari" + +#~ msgid "What do you want to say?" +#~ msgstr "Què voleu dir?" + +#~ msgid "Feedback" +#~ msgstr "Escriviu-nos" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Els vostres comentaris s'han enviat amb èxit. Gràcies!" + +#~ msgid "Category" +#~ msgstr "Categoria" + +#~ msgid "Primary muscles" +#~ msgstr "Músculs primaris" + +#~ msgid "Secondary muscles" +#~ msgstr "Músculs secundaris" + +#~ msgid "Variations" +#~ msgstr "Variacions" + +#~ msgid "Exercise Categories" +#~ msgstr "Categories d'exercicis" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Un comentari sobre com fer aquest exercici correctament." + +#, fuzzy +#~| msgid "Correcting an exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Corregint un exercici" + +#~ msgid "Line" +#~ msgstr "Lineal" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "«Low-poly»" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Altres" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "Pes" + +#~ msgid "Main picture" +#~ msgstr "Imatge principal" + +#~ msgid "Language" +#~ msgstr "Llengua" + +#, fuzzy +#~| msgid "Main picture" +#~ msgid "Main video" +#~ msgstr "Imatge principal" + +#~ msgid "Duration" +#~ msgstr "Duració" + +#~ msgid "Order" +#~ msgstr "Ordre" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Ocupació" + +#~ msgid "Creation date" +#~ msgstr "Data de creació" + +#~ msgid "Workout template" +#~ msgstr "Plantilla d'entrenament" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Marcar un entrenament com a plantilla el fixarà i permetrà fer-ne còpies" + +#~ msgid "Public template" +#~ msgstr "Plantilla pública" + +#~ msgid "A public template is available to other users" +#~ msgstr "Una plantilla pública està disponible per a altres usuaris" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Qualsevol nota que vulgueu desar sobre aquesta sessió d'entrenament" + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "La vostra sensació sobre aquesta sessió d'entrenament. Heu entrenat tan " +#~ "bé com heu pogut?" + +#~ msgid "Start time" +#~ msgstr "Hora d'inici" + +#~ msgid "Finish time" +#~ msgstr "Hora de finalització" + +#~ msgid "Exercise day" +#~ msgstr "Dia d'entrenament" + +#~ msgid "Value" +#~ msgstr "Valor" + +#~ msgid "In kcal per 100g" +#~ msgstr "En kcal per 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "En g per 100g de producte" + +#~ msgid "Nutrition plan" +#~ msgstr "Pla nutricional" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Enrere a \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configuració per a {}" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "Alçada (cm)" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Registre del pes" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Registre del pes" + +#~ msgid "Calculate" +#~ msgstr "Calcula" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3040,29 +3099,12 @@ msgstr "" #~ msgid "The art style of your image" #~ msgstr "La tècnica estilística de la vostra imatge" -#~ msgid "Sets" -#~ msgstr "Sèries" - -#~ msgid "RiR" -#~ msgstr "RER" - -#~ msgid "Rest day" -#~ msgstr "Dia de repòs" - -#, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" -#~ msgstr "Pla nutricional" - #~ msgid "Workouts" #~ msgstr "Entrenaments" #~ msgid "About us" #~ msgstr "Quant a nosaltres" -#~ msgid "Sample workout" -#~ msgstr "Entrenament de mostra" - #~ msgid "Sample day" #~ msgstr "Dia de mostra" @@ -3480,9 +3522,6 @@ msgstr "" #~ msgid "Edit workout" #~ msgstr "Edita el pla d'entrenament" -#~ msgid "Copy workout" -#~ msgstr "Copia pla d'entrenament" - #~ msgid "Copy" #~ msgstr "Copia" @@ -3530,9 +3569,6 @@ msgstr "" #~ msgid "Delete schedule" #~ msgstr "Esborra programa" -#~ msgid "Weight log" -#~ msgstr "Registre del pes" - #~ msgid "Weight log for workout" #~ msgstr "Registre d'entrenament" @@ -3580,8 +3616,8 @@ msgstr "" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new exercise \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "L'usuari {0} ha proposat un nou exercici «{1}»." #~ msgid "Submission date" diff --git a/wger/locale/cs/LC_MESSAGES/django.po b/wger/locale/cs/LC_MESSAGES/django.po index 26308c7ec..0d9e7da95 100644 --- a/wger/locale/cs/LC_MESSAGES/django.po +++ b/wger/locale/cs/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2024-02-21 11:02+0000\n" "Last-Translator: Fjuro \n" "Language-Team: Czech \n" @@ -59,23 +59,24 @@ msgstr "" msgid "Edit" msgstr "Upravit" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Přihlášení" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Jméno" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Příjmení" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -85,50 +86,50 @@ msgstr "Příjmení" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "Je využíván k obnově hesla a případně k připomínkám pomocí e-mailu." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Datum narození" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Osobní data" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Připomenutí tréninku" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Další nastavení" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Uložit" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "Je využíván k obnově hesla a případně k připomínkám pomocí emailu." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Tato e-mailová adresa je již používána." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Heslo" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Zadejte prosím vaše současné heslo." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -145,38 +146,21 @@ msgstr "Zadejte prosím vaše současné heslo." msgid "Delete" msgstr "Smazat" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Chybné heslo" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Zabezpečeno službou reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrace" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Nějaký kontakt na vás (email, apod.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentář" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Co cheš říci?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Krátký název jazyka" @@ -207,7 +191,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Krátké jméno, například CC-BY-SA-3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Odkaz" @@ -321,7 +305,7 @@ msgstr "" msgid "Age" msgstr "Věk" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Výška (cm)" @@ -371,8 +355,7 @@ msgstr "Celkové denní kalorie" msgid "Total caloric intake, including e.g. any surplus" msgstr "Celkový příjem kalorií, včetně např. přebytků" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Jednotka váhy" @@ -399,22 +382,25 @@ msgstr "" "Počet dní, kdy má být připomenuto provedení vážení a zápisu hodnoty (pro " "vypnutí napište 0 )" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Součet všech hodin musí být 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Název" @@ -434,7 +420,7 @@ msgstr "Stránka nenalezena" msgid "The page you requested does not exist." msgstr "Požadovaná stránka neexistuje." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Nastala chyba" @@ -464,7 +450,7 @@ msgstr "" "datech.\n" " " -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Zpět na \"%(target)s\"" @@ -488,14 +474,6 @@ msgstr "" "datech.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Zpět na \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Jsi si jistý, že to chceš smazat? Tuhle akci už nejde pak odvolat." @@ -544,11 +522,7 @@ msgstr "Tým wger" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Pro potvrzení e-mailu klikněte na následující odkaz: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Nástěnka" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Jazyky" @@ -614,7 +588,7 @@ msgstr "Seznam licencí" msgid "Nothing found" msgstr "Nic nenalezeno" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Tiráž" @@ -656,7 +630,7 @@ msgid "Exercises" msgstr "Cviky" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administrace" @@ -664,7 +638,7 @@ msgstr "Administrace" msgid "Exercise edit history" msgstr "Historie úprav cvičení" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Nářadí" @@ -734,7 +708,7 @@ msgstr "Dokumentace vývojáře" msgid "Get the code" msgstr "Získejte kód" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Překlad" @@ -743,36 +717,41 @@ msgstr "Překlad" msgid "Reset password" msgstr "Reset hesla" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Má nastavení" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Odhlásit" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Má nastavení" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licence" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Opakující jednotky" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Jednotka hmostnosti" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Uživatelský seznam" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Posilovny" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Obnova hesla je kompletní" @@ -833,25 +812,25 @@ msgstr "předchozí" msgid "next" msgstr "další" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Zavřít" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "Využíváte testovací účet. Data zde vložená budou po týdnu smazána." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Vytvořit nějaké testovací potraviny" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Podmínky služby" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funkce" @@ -927,23 +906,14 @@ msgstr "Přehled" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Datum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Popis" @@ -951,7 +921,7 @@ msgstr "Popis" msgid "Number of logs (days)" msgstr "Počet záznamů (za den)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Poslední aktivita" @@ -964,12 +934,11 @@ msgstr "Nenalezeny žádné tréninky." msgid "Log" msgstr "Záznam" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Celkový dojem" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Poznámky" @@ -979,28 +948,27 @@ msgid "Time" msgstr "Čas" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Váha" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energie" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Bílkoviny" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Sacharidy" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Tuky" @@ -1060,7 +1028,8 @@ msgid "Details" msgstr "Podrobnosti" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Č." @@ -1146,10 +1115,14 @@ msgstr "Odeslat ověřovací email" msgid "You need to verify your email to contribute exercises" msgstr "Abyste mohli přidávat cvičení, musíte ověřit svůj email" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Změna hesla" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1177,7 +1150,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Úspěšně smazáno" @@ -1186,25 +1159,25 @@ msgstr "Úspěšně smazáno" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Smazat {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Upravit {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1214,18 +1187,6 @@ msgstr "" "hmotnosti a nutriční plán s potravinami, abyste mohli lépe poznat, jak tento " "web může fungovat. Neváhejte je upravit, nebo je smazat!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Zpětná vazba" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Zaslat" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Vaše zpětná vazba byla zaslána. Děkujeme!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1235,106 +1196,43 @@ msgstr "Účet \"{0}\" byl smazán" msgid "You were successfully registered" msgstr "Byl jste úspěšně zaregistrován" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Nastavení bylo aktualizováno" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Uživatel byl deaktivován" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Uživatel byl aktivován" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Upravit uživatele" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Uživatel" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Posilovna" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Ověřovací e-mail byl zaslán na %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategorie" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Hlavní svaly" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Vedlejší svaly" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variace" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Kategorie cviků" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Cvik" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Komentář o tom, jak správně provést tento cvik." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Přezdívka pro cvičení" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Řádek" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Ostatní" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Obrázek" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Hlavní obrázek" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "v latině, např. \"Pectoralis major\"" @@ -1347,56 +1245,19 @@ msgstr "Alternativní jméno" msgid "A more basic name for the muscle" msgstr "Obecnější název svalu" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Jazyk" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Maximální velikost souboru je %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Typ souboru není podporován" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Soubor není platným videem" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Hlavní video" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Velikost" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Trvání" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Šířka" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Výška" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Kodeks" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Kodek, dlouhý název" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Seznam nářadí" @@ -1409,13 +1270,10 @@ msgstr "Administrativní historie cvičení" msgid "Action" msgstr "Akce" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Uživatel" @@ -1467,10 +1325,6 @@ msgstr "Smazat nářadí?" msgid "Add muscle" msgstr "Přidat sval" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Podporovány jsou pouze formáty PNG a JPEG" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Přidat obrázek" @@ -1538,8 +1392,7 @@ msgid "Contract type" msgstr "Typ zakázky" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Množství" @@ -1556,12 +1409,10 @@ msgid "Contract is active" msgstr "Zakázka je aktivní" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Datum začátku" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Upravit datum" @@ -1613,11 +1464,6 @@ msgstr "Zobrazit jméno v hlavičce" msgid "Show the name of the gym in the site header" msgstr "Zobrazit název tělocvičny v hlavičce stránky" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Nastavení pro {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Přehled neaktivních uživatelů" @@ -1899,7 +1745,7 @@ msgstr "Hrazda" msgid "Quads" msgstr "Čtyřhlavý sval stehenní" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Opakování" @@ -1935,6 +1781,197 @@ msgstr "Do selhání" msgid "none (bodyweight exercise)" msgstr "žádný (cvičení s vlastní vahou)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Obsah" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Záznam váhy" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Osobní data" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Kopírovat trénink" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Ukázkový trénink" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Trénink pro %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1987,66 +2024,37 @@ msgstr "Odeslat emaily" msgid "Correction" msgstr "Oprava" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sady" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Opakování" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "OvR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Odpočinkový den" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Cvik" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Trénink bude brzy expirovat" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Řazení" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Profese" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Trénink" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Jednotka" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum vytvoření" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Tréninková šablona" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Označení tréninku jako šablony jej uzamkne pro úpravy a umožní vám vytvářet " -"jeho kopie" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Veřejná šablona" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Veřejná šablona je k dispozici ostatním uživatelům" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Čas začátku nemůže být po čase ukončení." @@ -2062,35 +2070,10 @@ msgstr "Neutrální" msgid "Good" msgstr "Dobré" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Jakékoliv poznámky, které chcete mít uloženy k tomuto průběhu tréninku." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Váš názor na průběh tohoto tréninku. Provedli jste cviky tak dobře, jak jste " -"měli?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Čas začátku" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Čas konce" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Pokud zadáváte čas, musíte zadat jak čas začátku, tak i čas konce." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Cvičební den" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2147,44 +2130,32 @@ msgid "" msgstr "" "Pravidelná upozornění vám budou zasílána, dokud nezadáte aktuální hmotnost." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Trénink" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Trénink pro %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Hodnota" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Jednotka" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Výška (palce)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Váha (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Váha (libry)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Výpočet" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Základní energetický příjem" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Váš základní energetický příjem byl vypočítan ze zadaných dat" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Přidat kalorie" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2192,115 +2163,14 @@ msgstr "" "Další kalorie můžete přidat k základní hodnotě (pokud chcete odečíst, " "zadejte záporné číslo)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Potravina" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Také hledat názvy v angličtině" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "V kcal na 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "V g na 100g produktu" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Cukr v sacharidech" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Nasycené mastné kyseliny" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sodík" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Odkaz na produkt" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Značka produktu" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "Celková energie ({self.energy}kcal) neodpovídá celkovému odhadu z " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Kategorie přísad" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Množství v gramech" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Jednotka množství, např. \"1 pohár\" nebo \"1/2 lžíce\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Nutriční plán" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Jídlo" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Datum a čas (přibližně)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Čas (cca)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Dejte jídlům textový popis / název, například „snídaně“ nebo „po cvičení“" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Popis cíle plánu, například \"Získat svalovou hmotu\", nebo \"Shodit do " -"plavek\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Použít denní kalorie" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Zaškrtněnte toto políčko, pokud chcete tento plán označit jako cílovou " -"hodnotu kalorii. Můžete použít kalkulacku, nebo zadat hodnotu ručně." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2366,6 +2236,10 @@ msgstr "Makroživiny" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Cukr v sacharidech" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2373,10 +2247,22 @@ msgstr "kJ" msgid "n.A." msgstr "neuvedeno" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Nasycené mastné kyseliny" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Další" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sodík" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2464,7 +2350,7 @@ msgstr "" "být pouze přibližné. Pokud založíte nutriční plán na těchto hontocáh, \n" "dodržujte jej několik týdnů a v případě potřeby změňte celkovou výši." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Přidat novou složku" @@ -2481,6 +2367,10 @@ msgstr "Nutriční plán pro %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Tento plán je prázdný. Co jste očekávali v PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Nutriční data" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Celkem" @@ -2664,6 +2554,10 @@ msgstr "" "wget Workout Manager je bezplatná, open-source webová aplikace, která " "spravuje vaše cvičení a tréninky." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Mobilní aplikace" @@ -2864,6 +2758,10 @@ msgstr "" msgid "Account" msgstr "Účet" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Nástěnka" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Tréninkové postupy" @@ -2938,14 +2836,14 @@ msgstr "Formát data" msgid "You have to enter your weight" msgstr "Zadejte nový údaj své hmotnosti" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Vložit hmotnost" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Iportovat záznamy váhy" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Zaslat" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3065,6 +2963,230 @@ msgstr "" msgid "Re-Submit" msgstr "Znovu poslat" +#~ msgid "Image" +#~ msgstr "Obrázek" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Podporovány jsou pouze formáty PNG a JPEG" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Nějaký kontakt na vás (email, apod.)" + +#~ msgid "Comment" +#~ msgstr "Komentář" + +#~ msgid "What do you want to say?" +#~ msgstr "Co cheš říci?" + +#~ msgid "Feedback" +#~ msgstr "Zpětná vazba" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Vaše zpětná vazba byla zaslána. Děkujeme!" + +#~ msgid "Category" +#~ msgstr "Kategorie" + +#~ msgid "Primary muscles" +#~ msgstr "Hlavní svaly" + +#~ msgid "Secondary muscles" +#~ msgstr "Vedlejší svaly" + +#~ msgid "Variations" +#~ msgstr "Variace" + +#~ msgid "Exercise Categories" +#~ msgstr "Kategorie cviků" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Komentář o tom, jak správně provést tento cvik." + +#~ msgid "Alias for an exercise" +#~ msgstr "Přezdívka pro cvičení" + +#~ msgid "Line" +#~ msgstr "Řádek" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Ostatní" + +#~ msgid "Height" +#~ msgstr "Výška" + +#~ msgid "Width" +#~ msgstr "Šířka" + +#~ msgid "Main picture" +#~ msgstr "Hlavní obrázek" + +#~ msgid "Language" +#~ msgstr "Jazyk" + +#~ msgid "Main video" +#~ msgstr "Hlavní video" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Velikost" + +#~ msgid "Duration" +#~ msgstr "Trvání" + +#~ msgid "Codec" +#~ msgstr "Kodeks" + +#~ msgid "Codec, long name" +#~ msgstr "Kodek, dlouhý název" + +#~ msgid "Order" +#~ msgstr "Řazení" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Profese" + +#~ msgid "Creation date" +#~ msgstr "Datum vytvoření" + +#~ msgid "Workout template" +#~ msgstr "Tréninková šablona" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Označení tréninku jako šablony jej uzamkne pro úpravy a umožní vám " +#~ "vytvářet jeho kopie" + +#~ msgid "Public template" +#~ msgstr "Veřejná šablona" + +#~ msgid "A public template is available to other users" +#~ msgstr "Veřejná šablona je k dispozici ostatním uživatelům" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Jakékoliv poznámky, které chcete mít uloženy k tomuto průběhu tréninku." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Váš názor na průběh tohoto tréninku. Provedli jste cviky tak dobře, jak " +#~ "jste měli?" + +#~ msgid "Start time" +#~ msgstr "Čas začátku" + +#~ msgid "Finish time" +#~ msgstr "Čas konce" + +#~ msgid "Exercise day" +#~ msgstr "Cvičební den" + +#~ msgid "Value" +#~ msgstr "Hodnota" + +#~ msgid "In kcal per 100g" +#~ msgstr "V kcal na 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "V g na 100g produktu" + +#~ msgid "Link to product" +#~ msgstr "Odkaz na produkt" + +#~ msgid "Brand name of product" +#~ msgstr "Značka produktu" + +#~ msgid "Ingredient Categories" +#~ msgstr "Kategorie přísad" + +#~ msgid "Amount in grams" +#~ msgstr "Množství v gramech" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Jednotka množství, např. \"1 pohár\" nebo \"1/2 lžíce\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Nutriční plán" + +#~ msgid "Meal" +#~ msgstr "Jídlo" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Datum a čas (přibližně)" + +#~ msgid "Time (approx)" +#~ msgstr "Čas (cca)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Dejte jídlům textový popis / název, například „snídaně“ nebo „po cvičení“" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Popis cíle plánu, například \"Získat svalovou hmotu\", nebo \"Shodit do " +#~ "plavek\"" + +#~ msgid "Use daily calories" +#~ msgstr "Použít denní kalorie" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Zaškrtněnte toto políčko, pokud chcete tento plán označit jako cílovou " +#~ "hodnotu kalorii. Můžete použít kalkulacku, nebo zadat hodnotu ručně." + +#~ msgid "Weight entry" +#~ msgstr "Vložit hmotnost" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Zpět na \"%(target)s\"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Nastavení pro {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Výška (palce)" + +#~ msgid "Weight (kg)" +#~ msgstr "Váha (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Váha (libry)" + +#~ msgid "Calculate" +#~ msgstr "Výpočet" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "Celková energie ({self.energy}kcal) neodpovídá celkovému odhadu z " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3077,18 +3199,6 @@ msgstr "Znovu poslat" #~ msgid "The art style of your image" #~ msgstr "Styl vašeho obrázku" -#~ msgid "Sets" -#~ msgstr "Sady" - -#~ msgid "RiR" -#~ msgstr "OvR" - -#~ msgid "Rest day" -#~ msgstr "Odpočinkový den" - -#~ msgid "Nutritional data" -#~ msgstr "Nutriční data" - #~ msgid "Workouts" #~ msgstr "Tréninky" @@ -3131,9 +3241,6 @@ msgstr "Znovu poslat" #~ msgid "Get the source code of this application and its server on github" #~ msgstr "Získejte zdrojový kód této aplikace a jejího serveru na GitHubu" -#~ msgid "Sample workout" -#~ msgstr "Ukázkový trénink" - #~ msgid "Sample day" #~ msgstr "Ukázkový den" @@ -3254,8 +3361,8 @@ msgstr "Znovu poslat" #~ "Tick the box if you want to repeat the schedules in a loop (i.e. A, B, C, " #~ "A, B, C, and so on)" #~ msgstr "" -#~ "Zaškrtněnte políčko, pokud chcete aby se rozvrh opakoval (např. A,B,C,A,B," -#~ "C atak dále)" +#~ "Zaškrtněnte políčko, pokud chcete aby se rozvrh opakoval (např. " +#~ "A,B,C,A,B,C atak dále)" #~ msgid "schedule" #~ msgstr "rozvrh" @@ -3538,9 +3645,6 @@ msgstr "Znovu poslat" #~ msgid "Edit workout" #~ msgstr "Upravit trénink" -#~ msgid "Copy workout" -#~ msgstr "Kopírovat trénink" - #~ msgid "Copy" #~ msgstr "Kopírovat" @@ -3575,9 +3679,6 @@ msgstr "Znovu poslat" #~ msgid "Your BMI is: " #~ msgstr "Vaše BMI je: " -#~ msgid "Legend" -#~ msgstr "Legenda" - #~ msgid "Adipositas III" #~ msgstr "Obézita III" @@ -3649,9 +3750,6 @@ msgstr "Znovu poslat" #~ msgid "Delete schedule" #~ msgstr "Smazat rozvrh" -#~ msgid "Weight log" -#~ msgstr "Záznam váhy" - #~ msgid "Weight log for workout" #~ msgstr "Záznam váhy pro trénink" @@ -3716,8 +3814,8 @@ msgstr "Znovu poslat" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" #~ "Uživatel {request.user.username} přidal novou ingredienci „{self.name}“." @@ -4425,16 +4523,16 @@ msgstr "Znovu poslat" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" #~ "wger Správce tréninku je postaven na dobrovolnících, kdy\n" #~ "vývojový proces je otevřený a volně přístupný komukoliv, kdo má zájem.\n" #~ "Pokud jste ve světě svobodného software nový, doporučujeme si nejprve " -#~ "přečíst tento\n" +#~ "přečíst tento\n" #~ "článek, který shrnuje, že principy open source projektů fungují velmi " #~ "dobře. " diff --git a/wger/locale/da/LC_MESSAGES/django.po b/wger/locale/da/LC_MESSAGES/django.po index aa93ae9f6..fa9a31b21 100644 --- a/wger/locale/da/LC_MESSAGES/django.po +++ b/wger/locale/da/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-30 04:25+0000\n" "Last-Translator: Fedder Skovgaard \n" "Language-Team: Danish \n" @@ -54,23 +54,24 @@ msgstr "" msgid "Edit" msgstr "Rediger" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Login" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Fornavn" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Efternavn" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -80,52 +81,52 @@ msgstr "Efternavn" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 #, fuzzy #| msgid "Used for password resets and, optionally, email reminders." msgid "Used for password resets and, optionally, e-mail reminders." msgstr "Bruges til kode-nulstilling og, hvis ønsket, påmindelser." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Fødselsdag" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Personlige oplysninger" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Træningspåmindelser" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Andre indstillinger" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Gem" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "Bruges til kode-nulstilling og, hvis ønsket, email-påmindelser." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Denne emailadresse er allerede i brug." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Kodeord" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Indtast venligst dit nuværende kodeord." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -142,40 +143,21 @@ msgstr "Indtast venligst dit nuværende kodeord." msgid "Delete" msgstr "Slet" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ukorrekt kodeord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Denne formular er sikret med reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrer" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -#, fuzzy -#| msgid "Some way of answering you (email, etc.)" -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Måder du kan kontaktes på (email, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Hvad vil du gerne sige?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Sprogets korte navn" @@ -206,7 +188,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Kort navn, f.eks. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -322,7 +304,7 @@ msgstr "" msgid "Age" msgstr "Alder" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Højde (cm)" @@ -372,8 +354,7 @@ msgstr "Total daglige kalorier" msgid "Total caloric intake, including e.g. any surplus" msgstr "Total kalorieindtag, inklusive eventuelle overskud" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Vægt enhed" @@ -398,22 +379,25 @@ msgstr "Automatisk påmindelse om vægtindskrivning" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Antal dage siden sidste vægtindskrivning (skriv 0 for at deaktivere)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Summen af alle timer skal være 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Navn" @@ -433,7 +417,7 @@ msgstr "Side ikke fundet" msgid "The page you requested does not exist." msgstr "Siden du prøvede at tilgå eksisterer ikke." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Der skete en fejl" @@ -458,7 +442,7 @@ msgstr "" " som brugeren \"%(current_user)s\", alle handlinger bliver " "udført med brugerens data." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "TIlbage til \"%(target)s\"" @@ -477,14 +461,6 @@ msgstr "" "udført med brugerens data.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "TIlbage til \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Er du sikker på at du vil slette dette? Handlingen kan ikke fortrydes." @@ -535,11 +511,7 @@ msgstr "wger Holdet" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Klik venligst følgende link for at bekræfte din email: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Instrumentbrættet" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Sprog" @@ -605,7 +577,7 @@ msgstr "Licens liste" msgid "Nothing found" msgstr "Ingenting fundet" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Aftryk" @@ -648,7 +620,7 @@ msgid "Exercises" msgstr "Øvelser" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administration" @@ -656,7 +628,7 @@ msgstr "Administration" msgid "Exercise edit history" msgstr "Øvelsesredigeringshistorik" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Udstyr" @@ -727,7 +699,7 @@ msgstr "Udviklerdokumentation" msgid "Get the code" msgstr "Hent koden" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Oversæt" @@ -736,36 +708,41 @@ msgstr "Oversæt" msgid "Reset password" msgstr "Nulstil kodeord" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mine indstillinger" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Log ud" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mine indstillinger" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licenser" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Gentagelsesenheder" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Vægtenheder" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Brugerliste" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Fitnescentre" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Kodeordsnulstilling udført" @@ -825,26 +802,26 @@ msgstr "forrige" msgid "next" msgstr "næste" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Luk" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Du bruger en gæstekonto, date indtastet vil blive slettet efter en uge." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Indtast nogle demo-poster" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Vilkår for brug" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funktioner" @@ -921,23 +898,14 @@ msgstr "Oversigt" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Dato" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivelse" @@ -945,7 +913,7 @@ msgstr "Beskrivelse" msgid "Number of logs (days)" msgstr "Antal logs (dage)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Sidste aktivitet" @@ -958,12 +926,11 @@ msgstr "Ingen træninger fundet." msgid "Log" msgstr "Log" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Generelt indtryk" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Noter" @@ -973,28 +940,27 @@ msgid "Time" msgstr "Tid" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Vægt" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energi" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Protein" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Kulhydrater" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Fedt" @@ -1054,7 +1020,8 @@ msgid "Details" msgstr "Detaljer" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1140,10 +1107,14 @@ msgstr "Send bekræftelsesemail" msgid "You need to verify your email to contribute exercises" msgstr "Du skal bekræfte din email for at tilføje øvelser" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Ændre kodeord" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1171,7 +1142,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Sletning udført" @@ -1180,25 +1151,25 @@ msgstr "Sletning udført" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Slet {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Rediger {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1208,18 +1179,6 @@ msgstr "" "og ernærningsplanposter så du bedre kan se hvad denne hjemmeside kan. Du kan " "redigere eller slette dem!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Indsend" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Din feedback blev sendt. Tak!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1229,106 +1188,43 @@ msgstr "Kontoen \"{0}\" blev slettet" msgid "You were successfully registered" msgstr "Du er nu registreret" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Indstillinger opdateret" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Brugeren blev deaktiveret" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Brugeren blev aktiveret" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Rediger bruger" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Brugernavn" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Fitnescenter" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "En bekræftelsesemail blev sendt til %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategori" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Primære muskler" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Sekundære muskler" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variationer" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Øvelseskategorier" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Øvelse" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "En kommentar om hvordan øvelsen udføres korrekt." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alias for en øvelse" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linie" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Øvrige" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Billede" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Primære billede" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "På latinsk, f.eks. \"Pectoralis major\"" @@ -1341,56 +1237,19 @@ msgstr "Alternativt navn" msgid "A more basic name for the muscle" msgstr "Et mere basisk navn for musklen" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Sprog" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Maksimum filstørrelse er %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Filtypen er ikke understøttet" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Filen er ikke en valid video" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Primær video" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Størrelse" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Varighed" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Bredde" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Højdde" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, langt navn" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Udstyrsliste" @@ -1403,13 +1262,10 @@ msgstr "Øvelses administrator historik" msgid "Action" msgstr "Handlinger" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Bruger" @@ -1461,10 +1317,6 @@ msgstr "Slet udstyr?" msgid "Add muscle" msgstr "Tilføj muskler" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Kun PNG og JPEG formatter er understøttet" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Tilføj billede" @@ -1531,8 +1383,7 @@ msgid "Contract type" msgstr "Kontrakttype" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Mængde" @@ -1549,12 +1400,10 @@ msgid "Contract is active" msgstr "Kontrakten er aktiv" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Startdato" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdato" @@ -1607,12 +1456,6 @@ msgstr "Vis navn i overskriften" msgid "Show the name of the gym in the site header" msgstr "Vis navnet på fitnescentret i sidens overskrift" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "Konfiguration for {}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Oversigt over inaktive medlemmer" @@ -1893,7 +1736,7 @@ msgstr "" msgid "Quads" msgstr "Quadmuskler" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repetitioner" @@ -1929,6 +1772,193 @@ msgstr "Indtil Fejl" msgid "none (bodyweight exercise)" msgstr "ingen (kropsvægt øvelse)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Indhold" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "New weight log" +msgid "Night Owl" +msgstr "Ny vægtlog" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Personlige oplysninger" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Eksempel-træning" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1980,65 +2010,37 @@ msgstr "Send emails" msgid "Correction" msgstr "Rettelse" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sæt" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Repetitioner" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Hviledag" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Øvelse" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Træning vil udløbe snart" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Øvelse" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Orden" - -#: manager/models/log.py:78 -#, fuzzy -msgid "Session" -msgstr "Profession" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Træning" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Enhed" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Oprettelsesdato" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Træningsskabelon" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Hvis du markerer en træning som skabelon, vil den blive frosset og vil " -"tillade at du laver kopier af den" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Offentlig skabelon" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "En offentlig skabelon vil være tilgængelig for andre brugere" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Startiden kan ikke være efter sluttiden." @@ -2054,32 +2056,10 @@ msgstr "Neutral" msgid "Good" msgstr "God" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Noter du vil gemme om træningen." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "Dine indtryk om denne træning. Gik øvelserne som de skulle?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Start tid" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Slut tid" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Hvis du indtaster en tid, skal du indtaste både start og slut tid." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Øvelsesdag" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2123,153 +2103,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Træning" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Enhed" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Søg også navne på Engelsk" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Ernæringsplan" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2323,6 +2195,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2330,10 +2206,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2407,7 +2295,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2424,6 +2312,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Nutrition plan" +msgid "Nutritional data" +msgstr "Ernæringsplan" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2583,6 +2477,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2765,6 +2663,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Instrumentbrættet" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2838,14 +2740,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Indsend" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2941,6 +2843,150 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Image" +#~ msgstr "Billede" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Kun PNG og JPEG formatter er understøttet" + +#, fuzzy +#~| msgid "Some way of answering you (email, etc.)" +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Måder du kan kontaktes på (email, etc.)" + +#~ msgid "Comment" +#~ msgstr "Kommentar" + +#~ msgid "What do you want to say?" +#~ msgstr "Hvad vil du gerne sige?" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Din feedback blev sendt. Tak!" + +#~ msgid "Category" +#~ msgstr "Kategori" + +#~ msgid "Primary muscles" +#~ msgstr "Primære muskler" + +#~ msgid "Secondary muscles" +#~ msgstr "Sekundære muskler" + +#~ msgid "Variations" +#~ msgstr "Variationer" + +#~ msgid "Exercise Categories" +#~ msgstr "Øvelseskategorier" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "En kommentar om hvordan øvelsen udføres korrekt." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alias for en øvelse" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Øvrige" + +#~ msgid "Height" +#~ msgstr "Højdde" + +#~ msgid "Width" +#~ msgstr "Bredde" + +#~ msgid "Main picture" +#~ msgstr "Primære billede" + +#~ msgid "Language" +#~ msgstr "Sprog" + +#~ msgid "Main video" +#~ msgstr "Primær video" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Størrelse" + +#~ msgid "Duration" +#~ msgstr "Varighed" + +#~ msgid "Codec" +#~ msgstr "codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, langt navn" + +#~ msgid "Routine" +#~ msgstr "Øvelse" + +#~ msgid "Order" +#~ msgstr "Orden" + +#, fuzzy +#~ msgid "Session" +#~ msgstr "Profession" + +#~ msgid "Creation date" +#~ msgstr "Oprettelsesdato" + +#~ msgid "Workout template" +#~ msgstr "Træningsskabelon" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Hvis du markerer en træning som skabelon, vil den blive frosset og vil " +#~ "tillade at du laver kopier af den" + +#~ msgid "Public template" +#~ msgstr "Offentlig skabelon" + +#~ msgid "A public template is available to other users" +#~ msgstr "En offentlig skabelon vil være tilgængelig for andre brugere" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Noter du vil gemme om træningen." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "Dine indtryk om denne træning. Gik øvelserne som de skulle?" + +#~ msgid "Start time" +#~ msgstr "Start tid" + +#~ msgid "Finish time" +#~ msgstr "Slut tid" + +#~ msgid "Exercise day" +#~ msgstr "Øvelsesdag" + +#~ msgid "Nutrition plan" +#~ msgstr "Ernæringsplan" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "TIlbage til \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfiguration for {}" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -2953,26 +2999,12 @@ msgstr "" #~ msgid "The art style of your image" #~ msgstr "Kunststilen på dit billede" -#~ msgid "Sets" -#~ msgstr "Sæt" - -#~ msgid "Rest day" -#~ msgstr "Hviledag" - -#, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" -#~ msgstr "Ernæringsplan" - #~ msgid "Workouts" #~ msgstr "Træninger" #~ msgid "About us" #~ msgstr "Om os" -#~ msgid "Sample workout" -#~ msgstr "Eksempel-træning" - #~ msgid "Sample day" #~ msgstr "Eksempel-dag" @@ -3156,9 +3188,6 @@ msgstr "" #~ msgid "Add workout impression" #~ msgstr "Tilføj træningsindtryk" -#~ msgid "New weight log" -#~ msgstr "Ny vægtlog" - #~ msgid "" #~ "A new workout session (impression, notes, time) will\n" #~ "be created if there isn't already one for the selected date. If there is, " diff --git a/wger/locale/de/LC_MESSAGES/django.po b/wger/locale/de/LC_MESSAGES/django.po index e2dd3c768..c70932bdf 100644 --- a/wger/locale/de/LC_MESSAGES/django.po +++ b/wger/locale/de/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-12-08 07:00+0000\n" "Last-Translator: Elias Lang \n" "Language-Team: German \n" @@ -56,23 +56,24 @@ msgstr "" msgid "Edit" msgstr "Bearbeiten" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Anmelden" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Vorname" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Nachname" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -82,54 +83,54 @@ msgstr "Nachname" msgid "Email" msgstr "E-Mail" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Wird für das Zurücksetzen von Passwörter und, optional, für E-Mail-" "Erinnerungen verwendet." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Geburtsdatum" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Persönliche Daten" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Trainingsplanerinnerungen" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Andere Einstellungen" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Speichern" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Wird für das Zurücksetzen von Passwörter und, optional, für E-Mail-" "Erinnerungen verwendet." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Diese E-Mail-Adresse wird bereits verwendet." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Passwort" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Bitte dein aktuelles Passwort eingeben." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -146,38 +147,21 @@ msgstr "Bitte dein aktuelles Passwort eingeben." msgid "Delete" msgstr "Löschen" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ungültiges Passwort" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Das Formular ist mit reCaptcha gesichert" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrieren" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Eine Möglichkeit, dich zu erreichen (E-Mail, usw.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Was willst du sagen?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Name der Sprache - kurz" @@ -206,7 +190,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Kürzel, z.B. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Verweis" @@ -323,7 +307,7 @@ msgstr "" msgid "Age" msgstr "Alter" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Größe (cm)" @@ -373,8 +357,7 @@ msgstr "Gesamte tägliche Kalorien" msgid "Total caloric intake, including e.g. any surplus" msgstr "Gesamt Kalorieneinnahme inkl. Überschuss" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Gewichtseinheit" @@ -401,22 +384,25 @@ msgstr "" "Anzahl der Tage nach dem letzten Gewichtseintrag (0 eingeben zum " "deaktivieren)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Die Summe aller Stunden muss 24 sein" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Name" @@ -436,7 +422,7 @@ msgstr "Seite nicht gefunden" msgid "The page you requested does not exist." msgstr "Diese Seite existiert nicht." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Ein Fehler ist passiert" @@ -461,7 +447,7 @@ msgstr "" "Du bist als Benutzer „%(current_user)s“ auf der Website unterwegs, alle " "Aktionen werden mit ihren Daten durchgeführt." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Zurück zu „%(target)s“" @@ -479,13 +465,6 @@ msgstr "" "Aktionen werden mit ihren Daten durchgeführt.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Zurück zu „%(target)s“" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -540,11 +519,7 @@ msgstr "" "Bitte klicke den folgenden Link, um deine E-Mail-Adresse zu bestätigen: " "%(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Übersicht" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Sprachen" @@ -610,7 +585,7 @@ msgstr "Lizenzliste" msgid "Nothing found" msgstr "Nichts gefunden" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Impressum" @@ -652,7 +627,7 @@ msgid "Exercises" msgstr "Übungen" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administration" @@ -660,7 +635,7 @@ msgstr "Administration" msgid "Exercise edit history" msgstr "Übungen - Bearbeitungshistorie" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Gerät" @@ -730,7 +705,7 @@ msgstr "Entwickler-Dokumentation" msgid "Get the code" msgstr "Quellcode" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Übersetze" @@ -739,36 +714,41 @@ msgstr "Übersetze" msgid "Reset password" msgstr "Passwort zurücketzen" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Meine Einstellungen" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Abmelden" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Meine Einstellungen" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Lizenzen" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Wiederholungs-Einheiten" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Gewichtseinheiten" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Benutzerliste" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Studios" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Passwort zurücksetzen beendet" @@ -828,27 +808,27 @@ msgstr "zurück" msgid "next" msgstr "nächste" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Schließen" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Du benutzt einen Gastzugang, eingegebene Daten werden nach einer Woche " "gelöscht." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Beispieldaten erstellen" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Allgemeine Nutzungsbedingungen" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funktionen" @@ -925,23 +905,14 @@ msgstr "Übersicht" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Datum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschreibung" @@ -949,7 +920,7 @@ msgstr "Beschreibung" msgid "Number of logs (days)" msgstr "Anzahl der Protokolle (Tage)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Letzte Aktivität" @@ -962,12 +933,11 @@ msgstr "Keine Trainingspläne gefunden." msgid "Log" msgstr "Tagebucheintrag" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Allgemeiner Eindruck" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notizen" @@ -977,28 +947,27 @@ msgid "Time" msgstr "Zeit" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Gewicht" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energie" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Eiweiß" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Kohlenhydrate" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Fett" @@ -1058,7 +1027,8 @@ msgid "Details" msgstr "Details" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1144,10 +1114,14 @@ msgstr "Sende Bestätigungs-E-Mail" msgid "You need to verify your email to contribute exercises" msgstr "Du musst deine E-Mail-Adresse bestätigen, um Übungen beizutragen" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Passwort ändern" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1175,7 +1149,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Erfolgreich gelöscht" @@ -1184,25 +1158,25 @@ msgstr "Erfolgreich gelöscht" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "{0} löschen?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "{0} bearbeiten" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1213,18 +1187,6 @@ msgstr "" "du besser sehen was diese Seite machen kann. Du kannst diese Einträge " "natürlich bearbeiten oder löschen!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Rückmeldung" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Abschicken" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Dein Feedback wurde erfolgeich versendet. Danke!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1234,106 +1196,43 @@ msgstr "Konto „{0}“ wurde erfolgreich gelöscht" msgid "You were successfully registered" msgstr "Du hast dich erfolgreich registriert" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Einstellungen erfolgreich aktualisiert" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Der Benutzer wurde erfolgreich deaktiviert" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Der Benutzer wurde erfolgreich aktiviert" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Benutzer bearbeiten" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Benutzername" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Studio" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Eine Bestätigungs-E-Mail wurde an %(email)s gesendet" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategorie" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Primärmuskeln" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Sekundäre Muskeln" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variationen" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Kategorie Übung" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Übung" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Ein Kommentar über die korrekte Durchführung der Übung." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alternativer Name für eine Übung" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linie" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Andere" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Bild" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Hauptbild" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Auf latein, z.B. „Pectoralis major“" @@ -1346,56 +1245,19 @@ msgstr "Alternative Bezeichnung" msgid "A more basic name for the muscle" msgstr "Einfacherer Name für den Muskel" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Sprache" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Die maximale Dateigröße beträgt %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Dateityp wird nicht unterstützt" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Die Datei ist kein gültiges Video" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Hauptfilm" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Größe" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Dauer" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Breite" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Höhe" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, langer Name" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Geräteliste" @@ -1408,13 +1270,10 @@ msgstr "Verwaltungsverlauf ausüben" msgid "Action" msgstr "Aktionen" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Benutzer" @@ -1466,10 +1325,6 @@ msgstr "Gerät löschen?" msgid "Add muscle" msgstr "Muskel hinzufügen" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Nur die PNG und JPEG-Formate werden unterstützt" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Bild hinzufügen" @@ -1538,8 +1393,7 @@ msgid "Contract type" msgstr "Vertragstyp" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Menge" @@ -1556,12 +1410,10 @@ msgid "Contract is active" msgstr "Vertrag ist aktiv" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Startdatum" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Enddatum" @@ -1613,11 +1465,6 @@ msgstr "Name in der Kopfzeile anzeigen" msgid "Show the name of the gym in the site header" msgstr "Den Namen des Fitnessstudios in der Kopfzeile der Website anzeigen" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Konfiguration für {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Übersicht der inaktiven Mitglieder" @@ -1898,7 +1745,7 @@ msgstr "Klimmzugstange" msgid "Quads" msgstr "Quadrizeps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Wiederholungen" @@ -1934,6 +1781,197 @@ msgstr "Bis zum Muskelversagen" msgid "none (bodyweight exercise)" msgstr "keine (Körpergewichtübung)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Inhalt" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legende" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Gewichtslog" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Persönliche Daten" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Trainingsplan kopieren" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Beispiel Trainingsplan" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Trainingsplan für %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1986,62 +2024,35 @@ msgstr "E-Mails senden" msgid "Correction" msgstr "Korrektur" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sätze" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Wdh." +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RiR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "Pause" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Ruhetag" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Übung" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Routine wird bald auslaufen" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Reihenfolge" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sitzung" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Trainingsplan" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Einheit" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Erstellungsdatum" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Trainingsvorlage" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Wenn du ein Training als Vorlage markierst, wird es eingefroren und du " -"kannst Kopien davon erstellen" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Öffentliche Vorlage" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Eine öffentliche Vorlage ist für andere Benutzer verfügbar" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Die Startzeit kann nicht vor der Endzeit liegen." @@ -2057,35 +2068,10 @@ msgstr "Neutral" msgid "Good" msgstr "Gut" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Notizen oder Bemerkungen die du über diesen Trainingstag speichern willst." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Dein Eindruck über diesen Trainingstag. Hast du so gut trainiert wie du " -"konntest?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Startzeit" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Endzeit" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Wenn du eine Zeit eingibst, musst du End- und Endzeit angeben." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Übungstag" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2142,160 +2128,45 @@ msgstr "" "Du erhält regelmäßig solche Erinnerungen, bis du dein aktuelles Gewicht " "eingibst." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Trainingsplan" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Trainingsplan für %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Wert" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Einheit" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Größe (zoll)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Gewicht (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Gewicht (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Berechnen" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Basis-Kalorienzufuhr" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Deine Basis-Kalorienzufuhr wird aus deinen Angaben berechnet" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Zusätzliche Kalorien" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "Zusat" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Zutat" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Auch Zutaten auf Englisch suchen" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "In kcal/100 g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "In g pro 100 g Produkt" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Davon Zucker" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Davon gesättigte Fettsäuren" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Faser" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Natrium" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Link zum Produkt" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Markenname des Produkts" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" -"Die gesamte Energie ({self.energy} kcal) ist nicht die ungefähre Summe " -"der " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Zutatenkategorien" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Menge in Gramm" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Menge der Einheit, z.B. „1 Tasse“ or „1/2 Löffel“" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Ernährungsplan" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Mahlzeit" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Uhrzeit und Datum (ca.)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Uhrzeit (ca.)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Mahlzeiten eine Textbeschreibung / Name wie \"Frühstück oder\" \"nach dem " -"Training\" geben" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Eine Beschreibung des Ernährungplanes, z.B. „Vorbereitung für den Sommer“" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Tägliche Kalorien benutzen" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Kreuze die Checkbox an wenn du diesem Plan eine Zielmenge an Kalorien geben " -"willst. Du kannst den Rechner benutzen oder diese Menge direkt eingeben." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2361,6 +2232,10 @@ msgstr "Makronährstoffe" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Davon Zucker" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2368,10 +2243,22 @@ msgstr "kJ" msgid "n.A." msgstr "k.A." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Davon gesättigte Fettsäuren" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Andere" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Faser" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Natrium" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2464,7 +2351,7 @@ msgstr "" "Wenn du deine Ernährung auf diese Werte basierst, beobachte dich selbst\n" "einige Wochen und ändere deine Diät falls nötig." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Zutat hinzufügen" @@ -2481,6 +2368,10 @@ msgstr "Ernährungsplan für %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Das ist ein leerer Plan, was hast du im PDF erwartet?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Ernährungswerte" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Gesamt" @@ -2671,6 +2562,10 @@ msgstr "" "Wger Workout Manager ist eine kostenlose open Source-Web-Anwendung, die " "deine Übungen und Trainingspläne verwaltet." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Mobile app" @@ -2870,6 +2765,10 @@ msgstr "" msgid "Account" msgstr "Account" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Übersicht" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Trainingspläne" @@ -2944,14 +2843,14 @@ msgstr "Datumsformat" msgid "You have to enter your weight" msgstr "Du musst dein Gewicht eingeben" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Gewichtseintrag" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Gewichtseinträge importieren" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Abschicken" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3077,6 +2976,233 @@ msgstr "" msgid "Re-Submit" msgstr "Wieder abschicken" +#~ msgid "Image" +#~ msgstr "Bild" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Nur die PNG und JPEG-Formate werden unterstützt" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Eine Möglichkeit, dich zu erreichen (E-Mail, usw.)" + +#~ msgid "Comment" +#~ msgstr "Kommentar" + +#~ msgid "What do you want to say?" +#~ msgstr "Was willst du sagen?" + +#~ msgid "Feedback" +#~ msgstr "Rückmeldung" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Dein Feedback wurde erfolgeich versendet. Danke!" + +#~ msgid "Category" +#~ msgstr "Kategorie" + +#~ msgid "Primary muscles" +#~ msgstr "Primärmuskeln" + +#~ msgid "Secondary muscles" +#~ msgstr "Sekundäre Muskeln" + +#~ msgid "Variations" +#~ msgstr "Variationen" + +#~ msgid "Exercise Categories" +#~ msgstr "Kategorie Übung" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Ein Kommentar über die korrekte Durchführung der Übung." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alternativer Name für eine Übung" + +#~ msgid "Line" +#~ msgstr "Linie" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Andere" + +#~ msgid "Height" +#~ msgstr "Höhe" + +#~ msgid "Width" +#~ msgstr "Breite" + +#~ msgid "Main picture" +#~ msgstr "Hauptbild" + +#~ msgid "Language" +#~ msgstr "Sprache" + +#~ msgid "Main video" +#~ msgstr "Hauptfilm" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Größe" + +#~ msgid "Duration" +#~ msgstr "Dauer" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, langer Name" + +#~ msgid "Routine" +#~ msgstr "Routine" + +#~ msgid "Order" +#~ msgstr "Reihenfolge" + +#~ msgid "Session" +#~ msgstr "Sitzung" + +#~ msgid "Creation date" +#~ msgstr "Erstellungsdatum" + +#~ msgid "Workout template" +#~ msgstr "Trainingsvorlage" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Wenn du ein Training als Vorlage markierst, wird es eingefroren und du " +#~ "kannst Kopien davon erstellen" + +#~ msgid "Public template" +#~ msgstr "Öffentliche Vorlage" + +#~ msgid "A public template is available to other users" +#~ msgstr "Eine öffentliche Vorlage ist für andere Benutzer verfügbar" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Notizen oder Bemerkungen die du über diesen Trainingstag speichern willst." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Dein Eindruck über diesen Trainingstag. Hast du so gut trainiert wie du " +#~ "konntest?" + +#~ msgid "Start time" +#~ msgstr "Startzeit" + +#~ msgid "Finish time" +#~ msgstr "Endzeit" + +#~ msgid "Exercise day" +#~ msgstr "Übungstag" + +#~ msgid "Value" +#~ msgstr "Wert" + +#~ msgid "In kcal per 100g" +#~ msgstr "In kcal/100 g" + +#~ msgid "In g per 100g of product" +#~ msgstr "In g pro 100 g Produkt" + +#~ msgid "Link to product" +#~ msgstr "Link zum Produkt" + +#~ msgid "Brand name of product" +#~ msgstr "Markenname des Produkts" + +#~ msgid "Ingredient Categories" +#~ msgstr "Zutatenkategorien" + +#~ msgid "Amount in grams" +#~ msgstr "Menge in Gramm" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Menge der Einheit, z.B. „1 Tasse“ or „1/2 Löffel“" + +#~ msgid "Nutrition plan" +#~ msgstr "Ernährungsplan" + +#~ msgid "Meal" +#~ msgstr "Mahlzeit" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Uhrzeit und Datum (ca.)" + +#~ msgid "Time (approx)" +#~ msgstr "Uhrzeit (ca.)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Mahlzeiten eine Textbeschreibung / Name wie \"Frühstück oder\" \"nach dem " +#~ "Training\" geben" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Eine Beschreibung des Ernährungplanes, z.B. „Vorbereitung für den Sommer“" + +#~ msgid "Use daily calories" +#~ msgstr "Tägliche Kalorien benutzen" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Kreuze die Checkbox an wenn du diesem Plan eine Zielmenge an Kalorien " +#~ "geben willst. Du kannst den Rechner benutzen oder diese Menge direkt " +#~ "eingeben." + +#~ msgid "Weight entry" +#~ msgstr "Gewichtseintrag" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Zurück zu „%(target)s“" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfiguration für {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Größe (zoll)" + +#~ msgid "Weight (kg)" +#~ msgstr "Gewicht (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Gewicht (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Berechnen" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "Die gesamte Energie ({self.energy} kcal) ist nicht die ungefähre Summe " +#~ "der " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3089,21 +3215,6 @@ msgstr "Wieder abschicken" #~ msgid "The art style of your image" #~ msgstr "Der Stil deines Bildes" -#~ msgid "Sets" -#~ msgstr "Sätze" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "rest" -#~ msgstr "Pause" - -#~ msgid "Rest day" -#~ msgstr "Ruhetag" - -#~ msgid "Nutritional data" -#~ msgstr "Ernährungswerte" - #~ msgid "Workouts" #~ msgstr "Trainingspläne" @@ -3162,9 +3273,6 @@ msgstr "Wieder abschicken" #~ "Kaufe uns einen Kaffee, um das Projekt zu unterstützen, die Serverkosten " #~ "zu bezahlen und uns mit Energie zu versorgen" -#~ msgid "Sample workout" -#~ msgstr "Beispiel Trainingsplan" - #~ msgid "Sample day" #~ msgstr "Beispieltag" @@ -3571,9 +3679,6 @@ msgstr "Wieder abschicken" #~ msgid "Edit workout" #~ msgstr "Trainingsplan bearbeiten" -#~ msgid "Copy workout" -#~ msgstr "Trainingsplan kopieren" - #~ msgid "Copy" #~ msgstr "Kopieren" @@ -3608,9 +3713,6 @@ msgstr "Wieder abschicken" #~ msgid "Your BMI is: " #~ msgstr "Dein BMI ist: " -#~ msgid "Legend" -#~ msgstr "Legende" - #~ msgid "Adipositas III" #~ msgstr "Adipositas Grad III" @@ -3684,9 +3786,6 @@ msgstr "Wieder abschicken" #~ msgid "Delete schedule" #~ msgstr "Zeitplan löschen" -#~ msgid "Weight log" -#~ msgstr "Gewichtslog" - #~ msgid "Weight log for workout" #~ msgstr "Gewichtslog für Trainigsplan" @@ -3755,8 +3854,8 @@ msgstr "Wieder abschicken" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Der Nutzer {0} hat erfolgreich die neue Zutat „{1}“ eingereicht." #~ msgid "Submission date" @@ -4469,8 +4568,8 @@ msgstr "Wieder abschicken" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4479,8 +4578,8 @@ msgstr "Wieder abschicken" #~ "ist offen und für jeden Interessierten zugänglich.\n" #~ "Wenn du neu zur Welt der Freien Software bist, empfehlen wir dir einen " #~ "Blick\n" -#~ "auf diesen\n" +#~ "auf diesen\n" #~ "Artikel zu werfen, der gut zusammenfasst wie quelloffene Projekte\n" #~ "funktionieren. " diff --git a/wger/locale/el/LC_MESSAGES/django.po b/wger/locale/el/LC_MESSAGES/django.po index befc17dfe..1f6b21664 100644 --- a/wger/locale/el/LC_MESSAGES/django.po +++ b/wger/locale/el/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2023-10-01 07:01+0000\n" "Last-Translator: Antonis-geo \n" "Language-Team: Greek \n" @@ -55,23 +55,24 @@ msgstr "" msgid "Edit" msgstr "Επεξεργασία" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Σύνδεση" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Όνομα" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Επίθετο" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -81,54 +82,54 @@ msgstr "Επίθετο" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Ημερομηνία Γέννησης" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Προσωπικά δεδομένα" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Υπενθύμιση προπόνησης" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Άλλες ρυθμίσεις" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Αποθήκευση" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Αυτή η διεύθυνση email χρησιμοποιείται ήδη." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Κωδικός" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδικό σας." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -145,38 +146,21 @@ msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδ msgid "Delete" msgstr "Διαγραφή" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Λάθος κωδικός" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Η φόρμα είναι ασφαλισμένη με reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Εγγραφή" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Επικοινωνία" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Κάποιος τρόπος απάντησής σας (ηλεκτρονικό ταχυδρομείο κ.λπ.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Σχόλια" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Τί θέλετε να πείτε;" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Γλώσσα μικρή ονομασία" @@ -207,7 +191,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Μικρό όνομα, π.χ. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Σύνδεσμος" @@ -324,7 +308,7 @@ msgstr "" msgid "Age" msgstr "Ηλικία" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Ύψος (cm)" @@ -375,8 +359,7 @@ msgid "Total caloric intake, including e.g. any surplus" msgstr "" "Συνολική εισαγωγή θερμίδων, συμπεριλαμβάνοντας π.χ. οποιαδήποτε υπερβολή" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Μονάδα βάρους" @@ -403,22 +386,25 @@ msgstr "" "Αριθμός ημερών μετά την τελευταία καταχώριση βάρους (πληκτρολογήστε 0 για " "απενεργοποίηση)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Το σύνολο όλων των ωρών θα πρέπει να είναι 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Όνομα" @@ -438,7 +424,7 @@ msgstr "Η σελίδα δεν βρέθηκε" msgid "The page you requested does not exist." msgstr "Η σελίδα που ζητήσατε δεν υπάρχει." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Προέκυψε κάποιο πρόβλημα" @@ -465,7 +451,7 @@ msgstr "" "στα δεδομένα τους.\n" " " -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Πίσω στο \"%(target)s\"" @@ -489,14 +475,6 @@ msgstr "" "στα δεδομένα τους.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Πίσω στο \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -551,11 +529,7 @@ msgid "Please click the following link to confirm your email: %(link)s" msgstr "" "Κάντε κλικ στον παρακάτω σύνδεσμο για να επιβεβαιώσετε το email σας: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Πίνακας Ελέγχου" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Γλώσσες" @@ -621,7 +595,7 @@ msgstr "Λίστα αδειών" msgid "Nothing found" msgstr "Δεν βρέθηκε τίποτα" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Εκτύπωση" @@ -665,7 +639,7 @@ msgid "Exercises" msgstr "Ασκήσεις" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Διαχείριση" @@ -673,7 +647,7 @@ msgstr "Διαχείριση" msgid "Exercise edit history" msgstr "Ιστορικό επεξεργασίας της άσκησης" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Όργανα" @@ -743,7 +717,7 @@ msgstr "Τεκμηρίωση προγραμματιστή" msgid "Get the code" msgstr "Κατεβάστε τον κώδικα" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Μετάφραση" @@ -752,36 +726,41 @@ msgstr "Μετάφραση" msgid "Reset password" msgstr "Επαναφορά κωδικού" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Οι προτιμήσεις μου" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Έξοδος" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Οι προτιμήσεις μου" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Άδειες" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Μονάδες επανάληψης" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Μονάδες βάρους" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Λίστα χρήστη" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Γυμναστήρια" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Ολοκληρώθηκε η αλλαγή κωδικού" @@ -844,27 +823,27 @@ msgstr "προηγούμενο" msgid "next" msgstr "επόμενο" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Κλείσιμο" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Χρησιμοποιείτε έναν λογαριασμό επισκέπτη. Τα δεδομένα που εισάγετε θα " "διαγραφούν σε μία εβδομάδα." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Δημιουργήστε μερικές δοκιμαστικές εγγραφές" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Όροι χρήσης" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Δυνατότητες" @@ -941,23 +920,14 @@ msgstr "Έπισκόπηση" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Ημερομηνία" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Περιγραφή" @@ -965,7 +935,7 @@ msgstr "Περιγραφή" msgid "Number of logs (days)" msgstr "Αριθμός ιστορικών (ημέρες)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Τελευταία δραστηριότητα" @@ -978,12 +948,11 @@ msgstr "Δεν βρέθηκαν προπονήσεις." msgid "Log" msgstr "Ιστορικό" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Γενική εικόνα" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Σημειώσεις" @@ -993,28 +962,27 @@ msgid "Time" msgstr "Ώρα" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Βάρος" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Ενέργεια" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Προτεϊνες" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Υδατάνθρακες" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Λιπαρή ύλη" @@ -1074,7 +1042,8 @@ msgid "Details" msgstr "Λεπτομέρειες" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Νο." @@ -1160,10 +1129,14 @@ msgstr "Στείλτε μήνυμα ηλεκτρονικού ταχυδρομε msgid "You need to verify your email to contribute exercises" msgstr "Πρέπει να επαληθεύσετε το email σας για να συνεισφέρετε σε ασκήσεις" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Αλλάξτε κωδικό" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1191,7 +1164,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Επιτυχής διαγραφή" @@ -1200,25 +1173,25 @@ msgstr "Επιτυχής διαγραφή" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Διαγραφή {0};" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Επεξεργασία {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1229,18 +1202,6 @@ msgstr "" "δείτε τι\tμπορεί να κάνει αυτός ο ιστότοπος. Νιώστε ελεύθερος να τις " "επεξεργαστείτε ή να τις διαγράψετε!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Αναπληροφόρηση" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Υποβολή" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Η αναπληροφόρηση σας αποστάλθηκε με επιτυχία. Ευχαριστούμε!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1250,106 +1211,43 @@ msgstr "Ο λογαριασμός \"{0}\" διαγράφηκε με επιτυχ msgid "You were successfully registered" msgstr "Εγγραφήκατε με επιτυχία" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Οι ρυθμίσεις ανανεώθηκαν με επιτυχία" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Ο χρήστης απενεργοποιήθηκε με επιτυχία" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Ο χρήστης ενεργοποιήθηκε με επιτυχία" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Επεξεργασία χρήστη" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Όνομα χρήστη" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Γυμναστήριο" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Ένα μήνυμα ηλεκτρονικού ταχυδρομείου επαλήθευσης εστάλη στον%(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Κατηγορία" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Κύριοι μύς" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Δευτερεύοντες μύς" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Διαφοροποιήσεις" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Κατηγορίες ασκήσεων" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Άσκηση" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Ένα σχόλιο για τον σωστό τρόπο εφαρμογής της άσκησης." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Ψευδώνυμο για μια άσκηση" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Γραμμή" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Χαμηλού-πολυγώνου" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Φωτογραφία" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Άλλα" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Εικόνα" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Κύρια εικόνα" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Στα λατινικά, π.χ. \"Pectoralis major\"" @@ -1362,56 +1260,19 @@ msgstr "Εναλλακτικό όνομα" msgid "A more basic name for the muscle" msgstr "Μια πιο βασική ονομασία για τον μυ" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Γλώσσα" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Το μέγιστο μέγεθος αρχείου είναι%(size)sΜΒ." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Ο τύπος αρχείου δεν υποστηρίζεται" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Το αρχείο δεν είναι έγκυρο βίντεο" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Κύριο βίντεο" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Βίντεο" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Μέγεθος" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Διάρκεια" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Πλάτος" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Ύψος" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, μακρύ όνομα" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Λίστα οργάνων" @@ -1424,13 +1285,10 @@ msgstr "Άσκηση ιστορικό διαχειριστή" msgid "Action" msgstr "Δράση" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Χρήστης" @@ -1483,10 +1341,6 @@ msgstr "Διαγραφή εξοπλισμού;" msgid "Add muscle" msgstr "Νέος μύς" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Μόνο PNG και JPEG εικόνες υποστηρίζονται" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Προσθέστε εικόνα" @@ -1556,8 +1410,7 @@ msgid "Contract type" msgstr "Τύπος συμβολαίου" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Ποσότητα" @@ -1574,12 +1427,10 @@ msgid "Contract is active" msgstr "Το συμβόλαιο είναι ενεργό" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Ημερομηνία έναρξης" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Ημερομηνία λήξης" @@ -1630,12 +1481,6 @@ msgstr "Εμφάνιση ονόματος στην επικεφαλίδα" msgid "Show the name of the gym in the site header" msgstr "Εμφάνιση του ονόματος του γυμναστηρίου στην επικεφαλίδα του ιστότοπου" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "Παραμετροποίηση για {}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Επισκόπηση των ανενεργών μελών" @@ -1917,7 +1762,7 @@ msgstr "Μπάρα έλξης" msgid "Quads" msgstr "Τετρακέφαλοι" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Επαναλήψεις" @@ -1953,6 +1798,197 @@ msgstr "Μέχρι την αποτυχία" msgid "none (bodyweight exercise)" msgstr "κανένα (άσκηση με το βάρος σώματος)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Περιεχόμενο" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Υπόμνημα" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Εγγραφή βάρους" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Προσωπικά δεδομένα" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Αντιγραφή προπόνησης" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Δείγμα προπόνησης" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Προπόνηση για %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -2007,66 +2043,37 @@ msgstr "Στείλτε μηνύματα ηλεκτρονικού ταχυδρο msgid "Correction" msgstr "Διόρθωση" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Σετ" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Επαναλήψεις" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "Απόθεμα Επαναλήψεων" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Μέρα ανάπαυσης" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Άσκηση" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Η προπόνηση θα λήξει σε λίγο" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Διάταξη" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Επάγγελμα" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Προπόνηση" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Μονάδα" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Ημερομηνία δημιουργίας" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Υπόδειγμα προπόνησης" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Η επισήμανση μιας προπόνησης ως υπόδειγμα θα την δεσμεύσει και θα σας " -"επιτρέψει να δημιουργήσετε αντίγραφά της" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Δημόσιο υπόδειγμα" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Ένα δημόσιο υπόδειγμα είναι διαθέσιμο σε άλλους χρήστες" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Η ώρα έναρξης δεν μπορεί να είναι μετά την ώρα λήξης." @@ -2082,37 +2089,12 @@ msgstr "Ουδέτερο" msgid "Good" msgstr "Καλό" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Οτιδήποτε πληροφορίες που θέλετε να αποθηκεύσετε σε αυτήν την συνεδρία." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Οι εντυπώσεις σου για αυτήν την συνεδρία. Μπορέσατε να προπονηθείτε όσο " -"θέλατε;" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Ώρα έναρξης" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Ώρα λήξης" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Αν πληκτρολογήσετε την ώρα, θα πρέπει να πληκτρολογήσετε ώρα έναρξης και " "λήξης." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Μέρα προπόνησης" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2173,44 +2155,32 @@ msgstr "" "Θα λαμβάνετε τακτικά τέτοιες υπενθυμίσεις μέχρι να εισαγάγετε το τρέχον " "βάρος σας." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Προπόνηση" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Προπόνηση για %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Αξία" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Μονάδα" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Ύψος (σε)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Βάρος (κιλά)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Βάρος (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Υπολογισμός" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Βασική εισαγωγή θερμίδων" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Η βασική σας εισαγωγή θερμίδων όπως υπολογίστηκε απο τα δεδομένα σας" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Επιπλέον θερμίδες" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2218,117 +2188,14 @@ msgstr "" "Επιπλέον θερμίδες θα προστεθούν στην βασική τάση (για αφαίρεση, εισάγετε " "αρνητικό αριθμό)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Συστατικά" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Αναζητήστε επίσης ονόματα στα αγγλικά" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "Σε kcal ανα 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "Σε g ανα 100g προϊόντος" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Περιεχόμενο σάκχαρων σε υδατάνθρακες" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Εκ των οποίων κορεσμένα λίπη" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Νάτριο" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Σύνδεσμος προς το προϊόν" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Επωνυμία του προϊόντος" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Κατηγορίες συστατικών" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Ποσότητα σε γραμμάρια" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Μονάδα ποσότητας, π.χ. \"1 Φλιτζάνι\" ή \"1/2 κουτάλι\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Πρόγραμμα διατροφής" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Γεύμα" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Ημερομηνία και ώρα (περίπου)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Ώρα (περίπου)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Δώστε στα γεύματα μια περιγραφή / όνομα κειμένου, όπως \"Πρωινό\" ή \"μετά " -"την προπόνηση\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Μια περιγραφή του στόχου ενός προγράμματος, π.χ. \"Προετοιμασία για το " -"καλοκαίρι\" ή \"Πρόσθεση μάζας\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Χρήση ημερήσιων θερμίδων" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Επιλέξτε το κουτί αν θέλετε να σημειώσετε το πρόγραμμα σαν στόχος ποσότητας " -"θερμίδων. Μπορείτε να χρησιμοποιήσετε τον υπολογιστή για να πληκτρολογήσετε " -"την τιμή εσείς." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2396,6 +2263,10 @@ msgstr "Θρεπτικά στοιχεία" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Περιεχόμενο σάκχαρων σε υδατάνθρακες" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2403,10 +2274,22 @@ msgstr "kJ" msgid "n.A." msgstr "Μη διαθέσιμο" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Εκ των οποίων κορεσμένα λίπη" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Άλλα" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Νάτριο" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2503,7 +2386,7 @@ msgstr "" "τον εαυτό σας τις προσεχείς εβδομάδες και αλλάξτε την συνολική ποσότητα αν " "απαιτείται." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Προσθήκη νέου συστατικού" @@ -2521,6 +2404,10 @@ msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" "Αυτό είναι ένα άδειο πρόγραμμα, τί περιμένατε να δείτε σε αυτό το PDF;" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Διατροφικά δεδομένα" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Σύνολο" @@ -2702,6 +2589,10 @@ msgstr "" "Το wger Workout Manager είναι μια δωρεάν διαδικτυακή εφαρμογή ανοιχτού " "κώδικα που διαχειρίζεται τις ασκήσεις και τις προπονήσεις σας." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Επικοινωνία" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Εφαρμογή για κινητά τηλέφωνα" @@ -2912,6 +2803,10 @@ msgstr "" msgid "Account" msgstr "Λογαριασμός" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Πίνακας Ελέγχου" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Ρουτίνες προπόνησης" @@ -2986,14 +2881,14 @@ msgstr "Μορφή ημερομηνίας" msgid "You have to enter your weight" msgstr "Πρέπει να εισάγετε το βάρος σας" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Εισαγωγή βάρους" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Εισαγωγή ιστορικών βάρους" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Υποβολή" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3118,6 +3013,228 @@ msgstr "" msgid "Re-Submit" msgstr "Επανυποβολή" +#~ msgid "Image" +#~ msgstr "Εικόνα" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Μόνο PNG και JPEG εικόνες υποστηρίζονται" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Κάποιος τρόπος απάντησής σας (ηλεκτρονικό ταχυδρομείο κ.λπ.)" + +#~ msgid "Comment" +#~ msgstr "Σχόλια" + +#~ msgid "What do you want to say?" +#~ msgstr "Τί θέλετε να πείτε;" + +#~ msgid "Feedback" +#~ msgstr "Αναπληροφόρηση" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Η αναπληροφόρηση σας αποστάλθηκε με επιτυχία. Ευχαριστούμε!" + +#~ msgid "Category" +#~ msgstr "Κατηγορία" + +#~ msgid "Primary muscles" +#~ msgstr "Κύριοι μύς" + +#~ msgid "Secondary muscles" +#~ msgstr "Δευτερεύοντες μύς" + +#~ msgid "Variations" +#~ msgstr "Διαφοροποιήσεις" + +#~ msgid "Exercise Categories" +#~ msgstr "Κατηγορίες ασκήσεων" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Ένα σχόλιο για τον σωστό τρόπο εφαρμογής της άσκησης." + +#~ msgid "Alias for an exercise" +#~ msgstr "Ψευδώνυμο για μια άσκηση" + +#~ msgid "Line" +#~ msgstr "Γραμμή" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Χαμηλού-πολυγώνου" + +#~ msgid "Photo" +#~ msgstr "Φωτογραφία" + +#~ msgid "Other" +#~ msgstr "Άλλα" + +#~ msgid "Height" +#~ msgstr "Ύψος" + +#~ msgid "Width" +#~ msgstr "Πλάτος" + +#~ msgid "Main picture" +#~ msgstr "Κύρια εικόνα" + +#~ msgid "Language" +#~ msgstr "Γλώσσα" + +#~ msgid "Main video" +#~ msgstr "Κύριο βίντεο" + +#~ msgid "Video" +#~ msgstr "Βίντεο" + +#~ msgid "Size" +#~ msgstr "Μέγεθος" + +#~ msgid "Duration" +#~ msgstr "Διάρκεια" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, μακρύ όνομα" + +#~ msgid "Order" +#~ msgstr "Διάταξη" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Επάγγελμα" + +#~ msgid "Creation date" +#~ msgstr "Ημερομηνία δημιουργίας" + +#~ msgid "Workout template" +#~ msgstr "Υπόδειγμα προπόνησης" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Η επισήμανση μιας προπόνησης ως υπόδειγμα θα την δεσμεύσει και θα σας " +#~ "επιτρέψει να δημιουργήσετε αντίγραφά της" + +#~ msgid "Public template" +#~ msgstr "Δημόσιο υπόδειγμα" + +#~ msgid "A public template is available to other users" +#~ msgstr "Ένα δημόσιο υπόδειγμα είναι διαθέσιμο σε άλλους χρήστες" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Οτιδήποτε πληροφορίες που θέλετε να αποθηκεύσετε σε αυτήν την συνεδρία." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Οι εντυπώσεις σου για αυτήν την συνεδρία. Μπορέσατε να προπονηθείτε όσο " +#~ "θέλατε;" + +#~ msgid "Start time" +#~ msgstr "Ώρα έναρξης" + +#~ msgid "Finish time" +#~ msgstr "Ώρα λήξης" + +#~ msgid "Exercise day" +#~ msgstr "Μέρα προπόνησης" + +#~ msgid "Value" +#~ msgstr "Αξία" + +#~ msgid "In kcal per 100g" +#~ msgstr "Σε kcal ανα 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "Σε g ανα 100g προϊόντος" + +#~ msgid "Link to product" +#~ msgstr "Σύνδεσμος προς το προϊόν" + +#~ msgid "Brand name of product" +#~ msgstr "Επωνυμία του προϊόντος" + +#~ msgid "Ingredient Categories" +#~ msgstr "Κατηγορίες συστατικών" + +#~ msgid "Amount in grams" +#~ msgstr "Ποσότητα σε γραμμάρια" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Μονάδα ποσότητας, π.χ. \"1 Φλιτζάνι\" ή \"1/2 κουτάλι\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Πρόγραμμα διατροφής" + +#~ msgid "Meal" +#~ msgstr "Γεύμα" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Ημερομηνία και ώρα (περίπου)" + +#~ msgid "Time (approx)" +#~ msgstr "Ώρα (περίπου)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Δώστε στα γεύματα μια περιγραφή / όνομα κειμένου, όπως \"Πρωινό\" ή " +#~ "\"μετά την προπόνηση\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Μια περιγραφή του στόχου ενός προγράμματος, π.χ. \"Προετοιμασία για το " +#~ "καλοκαίρι\" ή \"Πρόσθεση μάζας\"" + +#~ msgid "Use daily calories" +#~ msgstr "Χρήση ημερήσιων θερμίδων" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Επιλέξτε το κουτί αν θέλετε να σημειώσετε το πρόγραμμα σαν στόχος " +#~ "ποσότητας θερμίδων. Μπορείτε να χρησιμοποιήσετε τον υπολογιστή για να " +#~ "πληκτρολογήσετε την τιμή εσείς." + +#~ msgid "Weight entry" +#~ msgstr "Εισαγωγή βάρους" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Πίσω στο \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Παραμετροποίηση για {}" + +#~ msgid "Height (in)" +#~ msgstr "Ύψος (σε)" + +#~ msgid "Weight (kg)" +#~ msgstr "Βάρος (κιλά)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Βάρος (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Υπολογισμός" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3130,18 +3247,6 @@ msgstr "Επανυποβολή" #~ msgid "The art style of your image" #~ msgstr "Το καλλιτεχνικό στυλ της εικόνας σας" -#~ msgid "Sets" -#~ msgstr "Σετ" - -#~ msgid "RiR" -#~ msgstr "Απόθεμα Επαναλήψεων" - -#~ msgid "Rest day" -#~ msgstr "Μέρα ανάπαυσης" - -#~ msgid "Nutritional data" -#~ msgstr "Διατροφικά δεδομένα" - #~ msgid "Workouts" #~ msgstr "Προπονήσεις" @@ -3187,9 +3292,6 @@ msgstr "Επανυποβολή" #~ "Λάβετε τον πηγαίο κώδικα αυτής της εφαρμογής και του διακομιστή της στο " #~ "github" -#~ msgid "Sample workout" -#~ msgstr "Δείγμα προπόνησης" - #~ msgid "Sample day" #~ msgstr "Δείγμα ημέρας" @@ -3594,9 +3696,6 @@ msgstr "Επανυποβολή" #~ msgid "Edit workout" #~ msgstr "Επεξεργασία προπόνησης" -#~ msgid "Copy workout" -#~ msgstr "Αντιγραφή προπόνησης" - #~ msgid "Copy" #~ msgstr "Αντιγραφή" @@ -3633,9 +3732,6 @@ msgstr "Επανυποβολή" #~ msgid "Your BMI is: " #~ msgstr "Το BMI σας είναι: " -#~ msgid "Legend" -#~ msgstr "Υπόμνημα" - #~ msgid "Adipositas III" #~ msgstr "Υπέρβαρο III" @@ -3709,9 +3805,6 @@ msgstr "Επανυποβολή" #~ msgid "Delete schedule" #~ msgstr "Διαγραφή προγράμματος" -#~ msgid "Weight log" -#~ msgstr "Εγγραφή βάρους" - #~ msgid "Weight log for workout" #~ msgstr "Εγγραφή βάρους για προπόνηση" @@ -3779,8 +3872,8 @@ msgstr "Επανυποβολή" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Ο χρήστης {0} υπέβαλλε ένα νέο συστατικό \"{1}\"." #~ msgid "Submission date" @@ -4257,8 +4350,8 @@ msgstr "Επανυποβολή" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4266,9 +4359,9 @@ msgstr "Επανυποβολή" #~ "η διαδικασία ανάπτυξης είναι ανοιχτή και πλήρως διαθέσιμο σε " #~ "οποιονδήποτε.\n" #~ "Αν είστε νέος στον κόσμο του ελεύθερου λογισμικού, σας συνιστούμε να " -#~ "ρίξετε μιά ματιά σε αυτό το άρθρο που περιληπτικά αναφέρει πως τα προγράμματα ανοιχτού κώδικα δουλεύουν " +#~ "ρίξετε μιά ματιά σε αυτό το άρθρο " +#~ "που περιληπτικά αναφέρει πως τα προγράμματα ανοιχτού κώδικα δουλεύουν " #~ "καλά." #~ msgid "" diff --git a/wger/locale/es/LC_MESSAGES/django.po b/wger/locale/es/LC_MESSAGES/django.po index 5630e64b0..ed91ad128 100644 --- a/wger/locale/es/LC_MESSAGES/django.po +++ b/wger/locale/es/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-16 08:08+0000\n" "Last-Translator: v7mbz \n" "Language-Team: Spanish \n" @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Editar" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Ingresar" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Nombre" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Apellido" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -86,54 +87,54 @@ msgstr "Apellido" msgid "Email" msgstr "Correo electrónico" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Se usa para restablecer contraseñas y opcionalmente para enviar avisos por " "correo electrónico." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Fecha de cumpleaños" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Datos personales" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Recordatorios de entrenamiento" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Otras configuraciones" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Guardar" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Se usa para restablecer constraseñas y, opcionalmente, para enviar avisos " "por correo electrónico." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Esta dirección de correo ya está en uso." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Contraseña" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Por favor, ingrese su contraseña actual." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -150,38 +151,21 @@ msgstr "Por favor, ingrese su contraseña actual." msgid "Delete" msgstr "Borrar" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Contraseña incorrecta" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "El Formulario está asegurado por recaptcha" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrarse" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contacto" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Alguna manera de responderte (correo electrónico u otros)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentario" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "¿Qué quieres decir?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Idioma - nombre corto" @@ -210,7 +194,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Nombre corto, por ejemplo CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Enlace" @@ -330,7 +314,7 @@ msgstr "" msgid "Age" msgstr "Edad" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Altura (cm)" @@ -380,8 +364,7 @@ msgstr "Calorías totales diarias" msgid "Total caloric intake, including e.g. any surplus" msgstr "Ingesta total de calorías, incluyendo cualquier suplemento" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Unidad de peso" @@ -408,22 +391,25 @@ msgstr "" "Días que han pasado desde el ingreso del último peso (ingrese 0 para " "desactivar)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "La suma de todas las horas tiene que ser 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nombre" @@ -443,7 +429,7 @@ msgstr "Página no encontrada" msgid "The page you requested does not exist." msgstr "La página que has solicitado no existe." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Ha ocurrido un error" @@ -467,7 +453,7 @@ msgstr "" "Estás navegando por la página como el usuario \"%(current_user)s\", todas " "las acciones se realizan sobre tus datos." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Volver a \"%(target)s\"" @@ -485,13 +471,6 @@ msgstr "" "las acciones se realizan sobre sus datos.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Volver a \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -544,11 +523,7 @@ msgstr "" "Haga clic en el siguiente enlace para confirmar su correo electrónico: " "%(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Escritorio" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Idiomas" @@ -614,7 +589,7 @@ msgstr "Listado de licencias" msgid "Nothing found" msgstr "No se ha encontrado nada" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Imprimir" @@ -656,7 +631,7 @@ msgid "Exercises" msgstr "Ejercicios" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administración" @@ -664,7 +639,7 @@ msgstr "Administración" msgid "Exercise edit history" msgstr "Historial de edición de ejercicios" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Equipo" @@ -734,7 +709,7 @@ msgstr "Documentación para desarrolladores" msgid "Get the code" msgstr "Código fuente" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Traduce" @@ -743,36 +718,41 @@ msgstr "Traduce" msgid "Reset password" msgstr "Restablecer la contraseña" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mis preferencias" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Cerrar sesión" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mis preferencias" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licencias" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Unidades de repetición" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Unidades de peso" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Lista de usuarios" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Gimnasios" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Restablecimiento de contraseña completado" @@ -835,27 +815,27 @@ msgstr "anterior" msgid "next" msgstr "próximo" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Cerrar" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Estás usando una cuenta de invitado, los datos que introduzcas se borrarán " "en una semana." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Crear datos de ejemplo" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Términos de servicio" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funciones" @@ -932,23 +912,14 @@ msgstr "Resumen" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Fecha" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripción" @@ -956,7 +927,7 @@ msgstr "Descripción" msgid "Number of logs (days)" msgstr "Número de registros (días)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Última actividad" @@ -969,12 +940,11 @@ msgstr "No se han encontrado rutinas." msgid "Log" msgstr "Registro" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Impresión general" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notas" @@ -984,28 +954,27 @@ msgid "Time" msgstr "Tiempo" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Peso" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energía" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteínas" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Hidratos de carbono" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Grasa" @@ -1065,7 +1034,8 @@ msgid "Details" msgstr "Detalles" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1154,10 +1124,14 @@ msgid "You need to verify your email to contribute exercises" msgstr "" "Necesitas verificar tu correo electrónico para contribuir con ejercicios" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Cambiar contraseña" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1185,7 +1159,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Borrado con éxito" @@ -1194,25 +1168,25 @@ msgstr "Borrado con éxito" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "¿Borrar {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Editar {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1222,18 +1196,6 @@ msgstr "" "peso y planes nutricionales para que puedas ver mejor lo que puede hacer " "esta página. ¡No dudes en editar o borrar las entradas!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Comentarios" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Enviar" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Tu comentario ha sido enviado con éxito, ¡gracias!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1243,106 +1205,43 @@ msgstr "La cuenta \"{0}\" ha sido borrada con éxito" msgid "You were successfully registered" msgstr "Te has registrado con éxito" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Preferecias actualizadas con éxito" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "El usuario ha sido desactivado con éxito" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "El usuario ha sido activado con éxito" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Editar usuario" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Nombre de usuario" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Gimnasio" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Se envió un correo electrónico de verificación a %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categoría" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Músculos primarios" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Músculos secundarios" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variantes" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Categorías de ejercicios" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Ejercicio" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Comentario describiendo como hacer correctamente el ejercicio." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alias para un ejercicio" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Línea" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Otros" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Imagen" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Imagen principal" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "En latín, p.ej. \"Pectoralis major\"" @@ -1355,56 +1254,19 @@ msgstr "Nombre alternativo" msgid "A more basic name for the muscle" msgstr "Un nombre más básico para el músculo" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Idioma" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "El tamaño máximo de archivo es %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "El tipo de archivo no es compatible" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "El archivo no es un video válido" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Vídeo principal" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Tamaño" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Duración" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Ancho" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Altura" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Códec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Códec, nombre largo" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Lista de equipos" @@ -1417,13 +1279,10 @@ msgstr "Historial de administración de ejercicios" msgid "Action" msgstr "Acción" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Usuario" @@ -1475,10 +1334,6 @@ msgstr "¿Borrar equipo?" msgid "Add muscle" msgstr "Añadir músculo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Sólo los formatos PNG y JPEG están soportados" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Añadir imagen" @@ -1546,8 +1401,7 @@ msgid "Contract type" msgstr "Tipo de contrato" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Cantidad" @@ -1564,12 +1418,10 @@ msgid "Contract is active" msgstr "Contrato está activo" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Fecha de comienzo" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Fecha final" @@ -1621,11 +1473,6 @@ msgstr "Mostrar nombre en la cabecera" msgid "Show the name of the gym in the site header" msgstr "Mostrar el nombre del gimnasio en la cabecera" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Configuración para {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Resumen de miembros inactivos" @@ -1907,7 +1754,7 @@ msgstr "Barra hacia arriba" msgid "Quads" msgstr "Cuádriceps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repeticiones" @@ -1943,6 +1790,197 @@ msgstr "Hasta fallo muscular" msgid "none (bodyweight exercise)" msgstr "ninguno (ejercicio de peso corporal)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Contenido" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Leyenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Registro de peso" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Datos personales" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Copiar rutina" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Rutina de ejemplo" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Rutina para %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1995,62 +2033,35 @@ msgstr "Enviar email" msgid "Correction" msgstr "Corrección" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Series" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Repeticiones" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "ReR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "descanso" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Día de descanso" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Ejercicio" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutina expirará pronto" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Rutina" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Orden" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sesión" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Rutina" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Unidad" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Fecha de creación" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Pantilla de entrenamiento" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Marcando un entrenamiento como una plantilla lo bloqueará y te permitirá " -"hacer copias de el" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Plantilla pública" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Una plantilla pública estará disponible para otros usuarios" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "La hora de inicio no puede ser posterior a la hora de finalización." @@ -2066,36 +2077,12 @@ msgstr "Neutral" msgid "Good" msgstr "Bueno" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Cualquier nota quieras guardar sobre esta sesión de entrenamiento." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Su impresión sobre esta sesión de entrenamiento. ¿Has entrenado tan bien " -"como podrías?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Tiempo de inicio" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Tiempo de finalizacion" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Si introduces una hora, debes introducir tanto la de inicio como la de " "finalización." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Día de ejercicio" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2149,44 +2136,32 @@ msgid "" msgstr "" "Recibirás regularmente estor recordatorios hasta que ingreses tu peso actual." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Rutina" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Rutina para %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Valor" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Unidad" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Altura (pulgadas)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Peso (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Peso (libras)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Calcular" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Ingesta básica de calorías" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Tu ingesta básica de calorías calculadas en base a los datos" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Calorias adicionales" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2194,116 +2169,14 @@ msgstr "" "Calorías adicionales para agregar a la tasa básica (para restar, introduce " "un número negativo)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingrediente" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Busque también los nombres en inglés" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "En kcal por 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "En g por 100g de producto" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Azúcar en los hidratos de carbono" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Contenido de grasas saturadas en grasas" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Fibra" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sodio" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Enlace al producto" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Marca del producto" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "La energía total ({self.energy}kcal) no es la suma aproximada de las " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Categoría de ingredientes" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Cantidad en gramos" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Unidad, p.ej. \"1 taza\" o \"1/2 cuchara\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Plan nutricional" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Comida" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Fecha y Hora (aprox.)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Hora (aprox.)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Dé a las comidas una descripción/nombre como \"Desayuno\" o \"Post entreno\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Una descripción o meta del plan, p.ej. \"Ganar masa\" o \"Prepararse para el " -"verano\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Usar calorías diarias" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Marque la casilla si desea marcar este plan como si tuviera una cantidad " -"objetivo de calorías. Puede usar la calculadora o ingresar el valor usted " -"mismo." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2366,6 +2239,10 @@ msgstr "Macronutrientes" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Azúcar en los hidratos de carbono" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2373,10 +2250,22 @@ msgstr "kJ" msgid "n.A." msgstr "n.d." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Contenido de grasas saturadas en grasas" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Otros" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Fibra" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sodio" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2466,7 +2355,7 @@ msgstr "" "aproximación. Si basas tu plan de nutrición en estos valores, obsérvate\n" "durante algunas semanas y cambia la cantidad total si es necesario." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Añadir nuevo ingrediente" @@ -2483,6 +2372,10 @@ msgstr "Plan nutricional para %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Esto es un plan vacío, ¿qué esperabas en el PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Valores nutricionales" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Total" @@ -2669,6 +2562,10 @@ msgstr "" "wger Workout Manager es una aplicación web gratuita y de código abierto que " "gestiona tus ejercicios y entrenamientos." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contacto" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Aplicación Móvil" @@ -2867,6 +2764,10 @@ msgstr "" msgid "Account" msgstr "Cuenta" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Escritorio" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Rutinas de entrenamiento" @@ -2941,14 +2842,14 @@ msgstr "Formato de fecha" msgid "You have to enter your weight" msgstr "Tienes que introducir su peso" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Entrada de peso" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importar diario de peso" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Enviar" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3069,6 +2970,232 @@ msgstr "" msgid "Re-Submit" msgstr "Re-enviar" +#~ msgid "Image" +#~ msgstr "Imagen" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Sólo los formatos PNG y JPEG están soportados" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Alguna manera de responderte (correo electrónico u otros)" + +#~ msgid "Comment" +#~ msgstr "Comentario" + +#~ msgid "What do you want to say?" +#~ msgstr "¿Qué quieres decir?" + +#~ msgid "Feedback" +#~ msgstr "Comentarios" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Tu comentario ha sido enviado con éxito, ¡gracias!" + +#~ msgid "Category" +#~ msgstr "Categoría" + +#~ msgid "Primary muscles" +#~ msgstr "Músculos primarios" + +#~ msgid "Secondary muscles" +#~ msgstr "Músculos secundarios" + +#~ msgid "Variations" +#~ msgstr "Variantes" + +#~ msgid "Exercise Categories" +#~ msgstr "Categorías de ejercicios" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Comentario describiendo como hacer correctamente el ejercicio." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alias para un ejercicio" + +#~ msgid "Line" +#~ msgstr "Línea" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Otros" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Width" +#~ msgstr "Ancho" + +#~ msgid "Main picture" +#~ msgstr "Imagen principal" + +#~ msgid "Language" +#~ msgstr "Idioma" + +#~ msgid "Main video" +#~ msgstr "Vídeo principal" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Tamaño" + +#~ msgid "Duration" +#~ msgstr "Duración" + +#~ msgid "Codec" +#~ msgstr "Códec" + +#~ msgid "Codec, long name" +#~ msgstr "Códec, nombre largo" + +#~ msgid "Routine" +#~ msgstr "Rutina" + +#~ msgid "Order" +#~ msgstr "Orden" + +#~ msgid "Session" +#~ msgstr "Sesión" + +#~ msgid "Creation date" +#~ msgstr "Fecha de creación" + +#~ msgid "Workout template" +#~ msgstr "Pantilla de entrenamiento" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Marcando un entrenamiento como una plantilla lo bloqueará y te permitirá " +#~ "hacer copias de el" + +#~ msgid "Public template" +#~ msgstr "Plantilla pública" + +#~ msgid "A public template is available to other users" +#~ msgstr "Una plantilla pública estará disponible para otros usuarios" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Cualquier nota quieras guardar sobre esta sesión de entrenamiento." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Su impresión sobre esta sesión de entrenamiento. ¿Has entrenado tan bien " +#~ "como podrías?" + +#~ msgid "Start time" +#~ msgstr "Tiempo de inicio" + +#~ msgid "Finish time" +#~ msgstr "Tiempo de finalizacion" + +#~ msgid "Exercise day" +#~ msgstr "Día de ejercicio" + +#~ msgid "Value" +#~ msgstr "Valor" + +#~ msgid "In kcal per 100g" +#~ msgstr "En kcal por 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "En g por 100g de producto" + +#~ msgid "Link to product" +#~ msgstr "Enlace al producto" + +#~ msgid "Brand name of product" +#~ msgstr "Marca del producto" + +#~ msgid "Ingredient Categories" +#~ msgstr "Categoría de ingredientes" + +#~ msgid "Amount in grams" +#~ msgstr "Cantidad en gramos" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Unidad, p.ej. \"1 taza\" o \"1/2 cuchara\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Plan nutricional" + +#~ msgid "Meal" +#~ msgstr "Comida" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Fecha y Hora (aprox.)" + +#~ msgid "Time (approx)" +#~ msgstr "Hora (aprox.)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Dé a las comidas una descripción/nombre como \"Desayuno\" o \"Post " +#~ "entreno\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Una descripción o meta del plan, p.ej. \"Ganar masa\" o \"Prepararse para " +#~ "el verano\"" + +#~ msgid "Use daily calories" +#~ msgstr "Usar calorías diarias" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Marque la casilla si desea marcar este plan como si tuviera una cantidad " +#~ "objetivo de calorías. Puede usar la calculadora o ingresar el valor usted " +#~ "mismo." + +#~ msgid "Weight entry" +#~ msgstr "Entrada de peso" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Volver a \"%(target)s\"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configuración para {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Altura (pulgadas)" + +#~ msgid "Weight (kg)" +#~ msgstr "Peso (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Peso (libras)" + +#~ msgid "Calculate" +#~ msgstr "Calcular" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "La energía total ({self.energy}kcal) no es la suma aproximada de las " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3081,21 +3208,6 @@ msgstr "Re-enviar" #~ msgid "The art style of your image" #~ msgstr "Estilo artístico de la imagen" -#~ msgid "Sets" -#~ msgstr "Series" - -#~ msgid "RiR" -#~ msgstr "ReR" - -#~ msgid "rest" -#~ msgstr "descanso" - -#~ msgid "Rest day" -#~ msgstr "Día de descanso" - -#~ msgid "Nutritional data" -#~ msgstr "Valores nutricionales" - #~ msgid "Workouts" #~ msgstr "Rutinas" @@ -3154,9 +3266,6 @@ msgstr "Re-enviar" #~ "Cómpranos un café para ayudar al proyecto, pagar los costos del servidor, " #~ "y mantenernos ocupados" -#~ msgid "Sample workout" -#~ msgstr "Rutina de ejemplo" - #~ msgid "Sample day" #~ msgstr "Día de ejemplo" @@ -3540,9 +3649,6 @@ msgstr "Re-enviar" #~ msgid "Edit workout" #~ msgstr "Editar rutina" -#~ msgid "Copy workout" -#~ msgstr "Copiar rutina" - #~ msgid "Copy" #~ msgstr "Copiar" @@ -3577,9 +3683,6 @@ msgstr "Re-enviar" #~ msgid "Your BMI is: " #~ msgstr "Tu IMC es: " -#~ msgid "Legend" -#~ msgstr "Leyenda" - #~ msgid "Adipositas III" #~ msgstr "Obesidad tipo III" @@ -3651,9 +3754,6 @@ msgstr "Re-enviar" #~ msgid "Delete schedule" #~ msgstr "Borrar programa" -#~ msgid "Weight log" -#~ msgstr "Registro de peso" - #~ msgid "Weight log for workout" #~ msgstr "Registro de peso para rutina" @@ -3719,8 +3819,8 @@ msgstr "Re-enviar" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" #~ "El usuario {request.user.username} ha enviado un nuevo ingrediente " #~ "\"{self.name}\"." @@ -4421,18 +4521,17 @@ msgstr "Re-enviar" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" #~ "wger Workout Manager está hecho por voluntarios, el proceso de desarollo " #~ "es abierto y es accesible a cualquiera que se interese. Si eres nuevo al " #~ "mundo del software libre, te recomendamos que leas este " -#~ "artículo que resume muy bien como funcionan los proyectos de código " -#~ "abierto." +#~ "schlitt.info/opensource/blog/" +#~ "0541_10_golden_rules_for_starting_with_open_source.html\">este artículo que resume muy bien como funcionan los proyectos de código abierto." #~ msgid "" #~ "Any kind of contribution is appreciated and welcome.\n" diff --git a/wger/locale/fa/LC_MESSAGES/django.po b/wger/locale/fa/LC_MESSAGES/django.po index a67b8386a..4bfb4183e 100644 --- a/wger/locale/fa/LC_MESSAGES/django.po +++ b/wger/locale/fa/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-12 17:07+0000\n" "Last-Translator: Mahmuoud Salehi \n" "Language-Team: Persian \n" @@ -53,23 +53,24 @@ msgstr "" msgid "Edit" msgstr "ویرایش" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "ورود" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "نام" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "نام خانوادگی" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -79,51 +80,51 @@ msgstr "نام خانوادگی" msgid "Email" msgstr "ایمیل" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "برای بازنشانی رمز عبور استفاده می شود، به صورت اختیاری، یادآوری های ایمیل." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "تاریخ تولد" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "اطلاعات شخصی" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "یاداوری تمرین" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "تنظیمات دیگر" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "ذخیره" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "استفاده شده برای بازیابی رمز عبور و به صورت اختیاری, یادآوری ایمیل" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "این ایمیل قبلا استفاده شده است." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "پسورد" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "لطفا رمز عبور فعلی خود را وارد کنید." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -140,38 +141,21 @@ msgstr "لطفا رمز عبور فعلی خود را وارد کنید." msgid "Delete" msgstr "حذف" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "رمز نامعتبر" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "این فرم با ریکپچا امن شده است" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "ثبت" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "ارتباط" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "راه های ارتباطی با شما(ایمیل و ... )" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "نظر" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "چه میخواهید بگویید؟" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "نام مخفف زبان " @@ -200,7 +184,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "مخفف نام شما، e.g. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "پیوند" @@ -315,7 +299,7 @@ msgstr "" msgid "Age" msgstr "سن" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "قد (سانتی متر)" @@ -365,8 +349,7 @@ msgstr "مجموع کالری روزانه" msgid "Total caloric intake, including e.g. any surplus" msgstr "مصرف کل کالری" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "واحد وزن" @@ -392,22 +375,25 @@ msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" "چند روز از آخرین وزن کشی شما میگذرد (0 را برای غیر فعال کردن وارد کنید)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "مجموع تمام ساعت ها باید 24 باشد" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "نام" @@ -427,7 +413,7 @@ msgstr "صفحه ای یافت نشد" msgid "The page you requested does not exist." msgstr "این صفحه وجو ندارد" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "خطا" @@ -450,7 +436,7 @@ msgstr "" "شما به عنوان کاربر \"%(current_user)s\" در حال تماشای سایت هستید، تمام " "اقدامات، روی داده‌های این کاربر انجام می‌شود." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "بازگشت به \"%(target)s\"" @@ -465,14 +451,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "بازگشت به \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -523,11 +501,7 @@ msgstr "تیم WGER" msgid "Please click the following link to confirm your email: %(link)s" msgstr "لطفاً برای تأیید ایمیل خود روی لینک زیر کلیک کنید: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "داشبورد" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "زبان ها" @@ -593,7 +567,7 @@ msgstr "لیست مجوز ها" msgid "Nothing found" msgstr "چیزی یافت نشد" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 #, fuzzy msgid "Imprint" msgstr "نشان دادن" @@ -641,7 +615,7 @@ msgid "Exercises" msgstr "تمرینات" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -651,7 +625,7 @@ msgstr "" msgid "Exercise edit history" msgstr "تمرینات" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "تجهیزات" @@ -722,7 +696,7 @@ msgstr "مستندات برنامه نوبیسان" msgid "Get the code" msgstr "کد را دریافت کنید" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "ترجمه" @@ -731,37 +705,42 @@ msgstr "ترجمه" msgid "Reset password" msgstr "بازنشانی رمز عبور" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "ترجیحات من" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "خروج" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "ترجیحات من" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "مجوز ها" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 #, fuzzy msgid "Repetition units" msgstr "واحد تکرار" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "واحد های وزن" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "لیست کاربر" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "باشگاه ها" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "تنظیم مجدد رمز عبور کامل شد" @@ -821,25 +800,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "بستن" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "چند نمونه پر کنید" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "امکانات" @@ -912,23 +891,14 @@ msgstr "بازنگری" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -936,7 +906,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -949,12 +919,11 @@ msgstr "تمرین یافت نشد" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -964,28 +933,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "وزن" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "انرژی" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "پروتئین" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "کربوهیدارت ها" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "چربی" @@ -1045,7 +1013,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1131,10 +1100,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1162,7 +1135,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1171,43 +1144,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1217,106 +1178,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1329,60 +1227,21 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "زبان" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 #, fuzzy #| msgid "%(birthdate)s is not a valid birthdate" msgid "File is not a valid video" msgstr "%(birthdate)s روز تولد معتبر نمی باشد" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "وزن" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1397,13 +1256,10 @@ msgstr "" msgid "Action" msgstr "امکانات" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1455,10 +1311,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1525,8 +1377,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1543,12 +1394,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1598,11 +1447,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1882,7 +1726,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1920,6 +1764,188 @@ msgstr "تا حد ناتوانی" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "اطلاعات شخصی" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "نمونه تمرینات" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1970,62 +1996,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "تمرین" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -#, fuzzy -#| msgid "Workouts schedules" -msgid "Workout template" -msgstr "برنامه تمرین" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -2041,32 +2040,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2110,161 +2087,47 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "تمرین" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Height (cm)" -msgid "Height (in)" -msgstr "قد (سانتی متر)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Height (cm)" -msgid "Weight (kg)" -msgstr "قد (سانتی متر)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Height (cm)" -msgid "Weight (lbs)" -msgstr "قد (سانتی متر)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "همچنین عناصر مورد نیاز را به انگلیسی نمایش بده" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "برنامه غذایی" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2318,6 +2181,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2325,10 +2192,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2402,7 +2281,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2419,6 +2298,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Nutrition plan" +msgid "Nutritional data" +msgstr "برنامه غذایی" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2576,6 +2461,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "ارتباط" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2758,6 +2647,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "داشبورد" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2831,14 +2724,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2934,20 +2827,59 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "راه های ارتباطی با شما(ایمیل و ... )" + +#~ msgid "Comment" +#~ msgstr "نظر" + +#~ msgid "What do you want to say?" +#~ msgstr "چه میخواهید بگویید؟" + #, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "وزن" + +#~ msgid "Language" +#~ msgstr "زبان" + +#, fuzzy +#~| msgid "Workouts schedules" +#~ msgid "Workout template" +#~ msgstr "برنامه تمرین" + +#~ msgid "Nutrition plan" #~ msgstr "برنامه غذایی" +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "بازگشت به \"%(target)s\"" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "قد (سانتی متر)" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Weight (kg)" +#~ msgstr "قد (سانتی متر)" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Weight (lbs)" +#~ msgstr "قد (سانتی متر)" + #~ msgid "Workouts" #~ msgstr "تمرینات" #~ msgid "About us" #~ msgstr "درباره ما" -#~ msgid "Sample workout" -#~ msgstr "نمونه تمرینات" - #~ msgid "Sample day" #~ msgstr "روز نمونه" diff --git a/wger/locale/fi/LC_MESSAGES/django.po b/wger/locale/fi/LC_MESSAGES/django.po index e039741fe..2960ae9f0 100644 --- a/wger/locale/fi/LC_MESSAGES/django.po +++ b/wger/locale/fi/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-12-08 07:00+0000\n" "Last-Translator: Petri Hämäläinen \n" "Language-Team: Finnish \n" @@ -54,23 +54,24 @@ msgstr "" msgid "Edit" msgstr "Muokkaa" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Kirjaudu sisään" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Etunimi" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Sukunimi" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -80,53 +81,53 @@ msgstr "Sukunimi" msgid "Email" msgstr "Sähköposti" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Käytetään salasanan nollaukseen ja valinnaisesti sähköpostimuistutuksiin." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Syntymäpäivä" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Henkilökohtaiset tiedot" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Harjoittelumuistutukset" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Muut asetukset" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Tallenna" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Käytetään uuden salasanan hankkimiseen ja valinnaisesti " "sähköpostimuistutuksiin." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Tämä sähköpostiosoite on jo käytössä." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Salasana" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Anna nykyinen salasanasi." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -143,38 +144,21 @@ msgstr "Anna nykyinen salasanasi." msgid "Delete" msgstr "Poista" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Väärä salasana" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Lomake on suojattu reCAPTCHA:lla" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Rekisteröidy" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Yhteydenotto" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Jokin tapa vastata sinulle (sähköposti, jne.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentti" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Mitä haluat sanoa?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Kielen lyhenne" @@ -203,7 +187,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Lyhenne" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Linkki" @@ -321,7 +305,7 @@ msgstr "" msgid "Age" msgstr "Ikä" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Pituus (cm)" @@ -371,8 +355,7 @@ msgstr "Päivittäisiä kaloreita yhteensä" msgid "Total caloric intake, including e.g. any surplus" msgstr "Syötävien kaloreiden määrä, sisältäen mahdolliset lisäkalorit" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Painoyksikkö" @@ -385,8 +368,8 @@ msgid "" "Allow external users to access your workouts and logs in a read-only mode. " "You need to set this before you can share links e.g. to social media." msgstr "" -"Salli ulkoisten käyttäjien käyttää harjoittelujasi ja lokejasi vain luku -" -"tilassa. Sinun on asetettava tämä, ennen kuin voit jakaa linkkejä, esim. " +"Salli ulkoisten käyttäjien käyttää harjoittelujasi ja lokejasi vain luku " +"-tilassa. Sinun on asetettava tämä, ennen kuin voit jakaa linkkejä, esim. " "sosiaaliseen mediaan." #: core/models/profile.py:352 @@ -398,22 +381,25 @@ msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" "Päivien määrä edellisestä painomerkinnästä (aseta 0 ottaaksesi pois päältä)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Tuntien summa tarvitsee olla 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nimi" @@ -433,7 +419,7 @@ msgstr "Sivua ei löydy" msgid "The page you requested does not exist." msgstr "Pyytämääsi sivua ei ole olemassa." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Tapahtui virhe" @@ -456,7 +442,7 @@ msgstr "" "Selaat sivustoa käyttäjän \"%(current_user)s\" näkymässä, kaikki toiminnot " "kohdistuvat hänen tietoihinsa." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Takaisin \"%(target)s\"" @@ -476,15 +462,6 @@ msgstr "" " heidän tietoihinsa.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Takaisin \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Oletko varma, että haluat poistaa tämän? Tätä toimintoa ei voi kumota." @@ -535,11 +512,7 @@ msgid "Please click the following link to confirm your email: %(link)s" msgstr "" "Napsauta seuraavaa linkkiä vahvistaaksesi sähköpostiosoitteesi: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Kojelauta" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Kielet" @@ -605,7 +578,7 @@ msgstr "Lisenssiluettelo" msgid "Nothing found" msgstr "Mitään ei löytynyt" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Jälki" @@ -647,7 +620,7 @@ msgid "Exercises" msgstr "Harjoitukset" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Hallinto" @@ -655,7 +628,7 @@ msgstr "Hallinto" msgid "Exercise edit history" msgstr "Harjoituksen muokkaushistoria" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Varusteet" @@ -725,7 +698,7 @@ msgstr "Kehittäjädokumentaatio" msgid "Get the code" msgstr "Hanki koodi" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Käännä" @@ -734,36 +707,41 @@ msgstr "Käännä" msgid "Reset password" msgstr "Nollaa salasana" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mieltymykseni" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Kirjaudu ulos" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mieltymykseni" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Lisenssit" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Toistoyksiköt" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Painoyksiköt" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Käyttäjäluettelo" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Kuntosalit" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Salasanan nollaus valmis" @@ -823,25 +801,25 @@ msgstr "edellinen" msgid "next" msgstr "seuraava" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Sulje" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "Käytät vierastiliä, syöttämäsi tiedot poistetaan viikon kuluttua." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Luo joitain esittelymerkintöjä" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Käyttöehdot" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Ominaisuudet" @@ -918,23 +896,14 @@ msgstr "Yleiskatsaus" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Päivämäärä" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Kuvaus" @@ -942,7 +911,7 @@ msgstr "Kuvaus" msgid "Number of logs (days)" msgstr "Lokien lukumäärä (päiviä)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Viimeinen toiminta" @@ -955,12 +924,11 @@ msgstr "Harjoituksia ei löytynyt." msgid "Log" msgstr "Loki" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Yleisvaikutelma" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Huomautukset" @@ -970,28 +938,27 @@ msgid "Time" msgstr "Aika" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Paino" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energia" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteiini" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Hiilihydraatit" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Rasva" @@ -1051,7 +1018,8 @@ msgid "Details" msgstr "Yksityiskohdat" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nro." @@ -1140,10 +1108,14 @@ msgid "You need to verify your email to contribute exercises" msgstr "" "Sinun on vahvistettava sähköpostiosoitteesi osallistuaksesi harjoituksiin" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Vaihda salasana" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1171,7 +1143,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Poistettu onnistuneesti" @@ -1180,25 +1152,25 @@ msgstr "Poistettu onnistuneesti" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Poista {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Muokkaa {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1208,18 +1180,6 @@ msgstr "" "(kehon)paino- ja ravitsemussuunnitelmamerkinnät, jotta näet paremmin, mitä " "tämä sivusto voi tehdä. Voit vapaasti muokata tai poistaa niitä!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Palaute" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Lähetä" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Palautteesi lähetys onnistui. Kiitos!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1229,106 +1189,43 @@ msgstr "Tili \"{0}\" poistettiin onnistuneesti" msgid "You were successfully registered" msgstr "Rekisteröidyt onnistuneesti" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Asetukset päivitetty onnistuneesti" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Käyttäjän poistaminen käytöstä onnistui" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Käyttäjän käyttöönotto onnistui" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Muokkaa käyttäjää" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "Tunnus" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Käyttäjänimi" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Kuntosali" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Vahvistussähköposti lähetettiin osoitteeseen %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Luokka" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Ensisijaiset lihakset" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Toissijaiset lihakset" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Muunnelmat" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Harjoitusluokat" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Harjoitus" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Kommentti siitä, kuinka tämä harjoitus tehdään oikein." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alias harjoitukselle" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linja" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Valokuva" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Muu" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Kuva" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Pääkuva" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latinaksi, esim. \"Pectoralis major\"" @@ -1341,56 +1238,19 @@ msgstr "Vaihtoehtoinen nimi" msgid "A more basic name for the muscle" msgstr "Tavallisempi nimi lihakselle" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Kieli" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Tiedoston enimmäiskoko on %(size)s Mt." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Tiedostotyyppiä ei tueta" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Tiedosto ei ole kelvollinen video" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Päävideo" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Koko" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Kesto" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Leveys" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Korkeus" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Koodekki" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Koodekki, pitkä nimi" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Varusteluettelo" @@ -1403,13 +1263,10 @@ msgstr "Harjoitusten järjestelmänvalvojan historia" msgid "Action" msgstr "Toiminta" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Käyttäjä" @@ -1461,10 +1318,6 @@ msgstr "Poistetaanko varuste?" msgid "Add muscle" msgstr "Lisää lihas" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Vain PNG- ja JPEG-formaatit ovat tuettuja" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Lisää kuva" @@ -1532,8 +1385,7 @@ msgid "Contract type" msgstr "Sopimuksen tyyppi" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Summa" @@ -1550,12 +1402,10 @@ msgid "Contract is active" msgstr "Sopimus on voimassa" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Aloituspäivämäärä" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Päättymispäivämäärä" @@ -1607,11 +1457,6 @@ msgstr "Näytä nimi otsikossa" msgid "Show the name of the gym in the site header" msgstr "Näytä kuntosalin nimi sivuston otsikossa" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Määritykset {self.gym.name}:lle" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Yleiskatsaus ei-aktiivisista jäsenistä" @@ -1892,7 +1737,7 @@ msgstr "Leuanvetotanko" msgid "Quads" msgstr "Etureidet" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Toistot" @@ -1928,6 +1773,193 @@ msgstr "Epäonnistumiseen saakka" msgid "none (bodyweight exercise)" msgstr "ei mitään (kehonpainoharjoittelu)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Sisältö" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Henkilökohtaiset tiedot" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Näyteharjoittelu" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Harjoitus %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1980,62 +2012,35 @@ msgstr "Lähetä sähköpostit" msgid "Correction" msgstr "Korjaus" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sarjat" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Toistot" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Lepopäivä" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Harjoitus" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutiini päättyy pian" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Rutiini" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Järjestys" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Harjoituskerta" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Harjoittelu" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Yksikkö" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Luontipäivä" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Harjoitusmalli" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Harjoituksen merkitseminen malliksi estää sen muokkauksen ja sallii sen " -"kopioimisen" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Julkinen malli" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Julkinen malli on käytettävissä myös muilla käyttäjilla" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Aloitusaika ei voi olla päättymisajan jälkeen." @@ -2051,36 +2056,10 @@ msgstr "Neutraali" msgid "Good" msgstr "Hyvä" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Mahdolliset huomautukset, jotka saatat haluta tallentaa tästä " -"harjoittelukerrasta." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Sinun vaikutelmasi tästä harjoittelukerrasta. Harjoittelitko niin hyvin kuin " -"pystyit??" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Alkamisaika" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Päättymisaika" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Jos syötät ajan, sinun on syötettävä sekä alkamis- että päättymisaika." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Harjoituspäivä" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2089,7 +2068,8 @@ msgstr "Nykyinen harjoituksesi '%(routine)s' vanheni %(days)s päivää sitten." #: manager/templates/routines/email_reminder.tpl:5 #, python-format msgid "Your current workout '%(routine)s' is about to expire in %(days)s days." -msgstr "Nykyinen harjoituksesi '%(routine)s' vanhenee %(days)s päivän kuluttua." +msgstr "" +"Nykyinen harjoituksesi '%(routine)s' vanhenee %(days)s päivän kuluttua." #: manager/templates/routines/email_reminder.tpl:9 msgid "" @@ -2132,154 +2112,46 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "Saat säännöllisesti muistutuksia, kunnes syötät painosi." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Harjoittelu" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Harjoitus %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Arvo" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Yksikkö" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Korkeus (tuumaa)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Paino (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Paino (paunaa)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Laske" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Perusenergiantarve" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Perusenergiantarpeesi tietojesi perusteella" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Perustarpeeseen lisättävät kalorit" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" "Perustarpeeseen lisättävät kalorit (vähentääksesi, syötä negatiivinen luku)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ainesosa" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Hae myös englanninkieliset nimet" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "kcal / 100 g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "g / 100 g tuotetta" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Sokerin osuus hiilihydraateista" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Tyydyttyneen rasvan osuus rasvoista" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Kuitu" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Suola" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Linkki tuotteeseen" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Tuotteen merkki" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2333,6 +2205,10 @@ msgstr "Makroravinteet" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Sokerin osuus hiilihydraateista" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2340,10 +2216,22 @@ msgstr "kJ" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Tyydyttyneen rasvan osuus rasvoista" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Muut" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Kuitu" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Suola" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2417,7 +2305,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Lisää uusi raaka-aine" @@ -2434,6 +2322,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Nutrition" +msgid "Nutritional data" +msgstr "Ravitsemus" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2593,6 +2487,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Yhteydenotto" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2773,6 +2671,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Kojelauta" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Harjoitusrutiinit" @@ -2844,14 +2746,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Lähetä" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2947,6 +2849,181 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Image" +#~ msgstr "Kuva" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Vain PNG- ja JPEG-formaatit ovat tuettuja" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Jokin tapa vastata sinulle (sähköposti, jne.)" + +#~ msgid "Comment" +#~ msgstr "Kommentti" + +#~ msgid "What do you want to say?" +#~ msgstr "Mitä haluat sanoa?" + +#~ msgid "Feedback" +#~ msgstr "Palaute" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Palautteesi lähetys onnistui. Kiitos!" + +#~ msgid "Category" +#~ msgstr "Luokka" + +#~ msgid "Primary muscles" +#~ msgstr "Ensisijaiset lihakset" + +#~ msgid "Secondary muscles" +#~ msgstr "Toissijaiset lihakset" + +#~ msgid "Variations" +#~ msgstr "Muunnelmat" + +#~ msgid "Exercise Categories" +#~ msgstr "Harjoitusluokat" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Kommentti siitä, kuinka tämä harjoitus tehdään oikein." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alias harjoitukselle" + +#~ msgid "Line" +#~ msgstr "Linja" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "Valokuva" + +#~ msgid "Other" +#~ msgstr "Muu" + +#~ msgid "Height" +#~ msgstr "Korkeus" + +#~ msgid "Width" +#~ msgstr "Leveys" + +#~ msgid "Main picture" +#~ msgstr "Pääkuva" + +#~ msgid "Language" +#~ msgstr "Kieli" + +#~ msgid "Main video" +#~ msgstr "Päävideo" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Koko" + +#~ msgid "Duration" +#~ msgstr "Kesto" + +#~ msgid "Codec" +#~ msgstr "Koodekki" + +#~ msgid "Codec, long name" +#~ msgstr "Koodekki, pitkä nimi" + +#~ msgid "Routine" +#~ msgstr "Rutiini" + +#~ msgid "Order" +#~ msgstr "Järjestys" + +#~ msgid "Session" +#~ msgstr "Harjoituskerta" + +#~ msgid "Creation date" +#~ msgstr "Luontipäivä" + +#~ msgid "Workout template" +#~ msgstr "Harjoitusmalli" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Harjoituksen merkitseminen malliksi estää sen muokkauksen ja sallii sen " +#~ "kopioimisen" + +#~ msgid "Public template" +#~ msgstr "Julkinen malli" + +#~ msgid "A public template is available to other users" +#~ msgstr "Julkinen malli on käytettävissä myös muilla käyttäjilla" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Mahdolliset huomautukset, jotka saatat haluta tallentaa tästä " +#~ "harjoittelukerrasta." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Sinun vaikutelmasi tästä harjoittelukerrasta. Harjoittelitko niin hyvin " +#~ "kuin pystyit??" + +#~ msgid "Start time" +#~ msgstr "Alkamisaika" + +#~ msgid "Finish time" +#~ msgstr "Päättymisaika" + +#~ msgid "Exercise day" +#~ msgstr "Harjoituspäivä" + +#~ msgid "Value" +#~ msgstr "Arvo" + +#~ msgid "In kcal per 100g" +#~ msgstr "kcal / 100 g" + +#~ msgid "In g per 100g of product" +#~ msgstr "g / 100 g tuotetta" + +#~ msgid "Link to product" +#~ msgstr "Linkki tuotteeseen" + +#~ msgid "Brand name of product" +#~ msgstr "Tuotteen merkki" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Takaisin \"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Määritykset {self.gym.name}:lle" + +#~ msgid "Height (in)" +#~ msgstr "Korkeus (tuumaa)" + +#~ msgid "Weight (kg)" +#~ msgstr "Paino (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Paino (paunaa)" + +#~ msgid "Calculate" +#~ msgstr "Laske" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -2959,26 +3036,12 @@ msgstr "" #~ msgid "The art style of your image" #~ msgstr "Kuvasi taidetyyli" -#~ msgid "Sets" -#~ msgstr "Sarjat" - -#~ msgid "Rest day" -#~ msgstr "Lepopäivä" - -#, fuzzy -#~| msgid "Nutrition" -#~ msgid "Nutritional data" -#~ msgstr "Ravitsemus" - #~ msgid "Workouts" #~ msgstr "Harjoitukset" #~ msgid "About us" #~ msgstr "Meistä" -#~ msgid "Sample workout" -#~ msgstr "Näyteharjoittelu" - #~ msgid "Sample day" #~ msgstr "Esimerkkipäivä" diff --git a/wger/locale/fr/LC_MESSAGES/django.po b/wger/locale/fr/LC_MESSAGES/django.po index 9a005aa2b..244eda917 100644 --- a/wger/locale/fr/LC_MESSAGES/django.po +++ b/wger/locale/fr/LC_MESSAGES/django.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-12-20 11:00+0000\n" "Last-Translator: Justin Pinheiro \n" "Language-Team: French \n" @@ -66,23 +66,24 @@ msgstr "" msgid "Edit" msgstr "Modifier" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Se connecter" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Prénom" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Nom" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -92,54 +93,54 @@ msgstr "Nom" msgid "Email" msgstr "Courriel" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Utilisé pour réinitialiser votre mot de passe et, optionnellement, vous " "envoyer des rappels par courriel." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Date de naissance" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Données personnelles" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Rappels d’entraînement" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Autres paramètres" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Sauvegarder" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Utilisé pour réinitialiser votre mot de passe et, optionnellement, vous " "envoyer des rappels par courriel." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Cette adresse courriel est déjà utilisée." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Mot de passe" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Veuillez entrer votre mot de passe actuel." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -156,38 +157,21 @@ msgstr "Veuillez entrer votre mot de passe actuel." msgid "Delete" msgstr "Supprimer" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Mot de passe invalide" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Le formulaire est sécurisé avec reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "S’inscrire" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Un moyen de vous répondre (courriel, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Commentaire" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Que voulez-vous nous dire ?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Nom court de la langue" @@ -216,7 +200,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Abbréviation, e.g. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Lien" @@ -334,7 +318,7 @@ msgstr "" msgid "Age" msgstr "Âge" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Taille (cm)" @@ -384,8 +368,7 @@ msgstr "Nombre total de calories par jour" msgid "Total caloric intake, including e.g. any surplus" msgstr "Total des entrées caloriques, incluant les suppléments" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Unité de poids" @@ -412,22 +395,25 @@ msgstr "" "Durée en jour de la sauvegarde à partir de la dernière entrée de poids " "(mettre 0 pour désactiver)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "La somme des heures doit être de 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nom" @@ -447,7 +433,7 @@ msgstr "Page introuvable" msgid "The page you requested does not exist." msgstr "La page demandée n'existe pas." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Une erreur est survenue" @@ -471,7 +457,7 @@ msgstr "" "Vous naviguez sur le site en tant qu'utilisateur \"%(current_user)s\", " "toutes les actions sont effectuées sur ses données." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Retour vers « %(target)s »" @@ -486,20 +472,11 @@ msgid "" " " msgstr "" "Vous êtes\n" -" en train de naviguer sur le site en tant qu’utilisateur « " -"%(current_user)s », toutes les actions sont effectuées sur \n" +" en train de naviguer sur le site en tant qu’utilisateur " +"« %(current_user)s », toutes les actions sont effectuées sur \n" " ses données.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Retour vers \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Êtes-vous sûr·e de vouloir supprimer ceci ? C’est irréversible." @@ -550,11 +527,7 @@ msgid "Please click the following link to confirm your email: %(link)s" msgstr "" "Veuillez cliquer sur le lien suivant pour confirmer votre e-mail : %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Tableau de bord" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Langues" @@ -620,7 +593,7 @@ msgstr "Liste des licences" msgid "Nothing found" msgstr "Rien trouvé" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Informations légales" @@ -662,7 +635,7 @@ msgid "Exercises" msgstr "Exercices" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administration" @@ -670,7 +643,7 @@ msgstr "Administration" msgid "Exercise edit history" msgstr "Historique d'édition d'exercice" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Équipement" @@ -740,7 +713,7 @@ msgstr "Documentation du développeur" msgid "Get the code" msgstr "Récupérer le code" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Traduire" @@ -749,36 +722,41 @@ msgstr "Traduire" msgid "Reset password" msgstr "Réinitialiser le mot de passe" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mes préférences" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Se déconnecter" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mes préférences" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licences" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Unités de répétition" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Unité de poids" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Liste des utilisateurs" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Activités" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Réinitialisation du mot de passe terminée" @@ -841,27 +819,27 @@ msgstr "précédent" msgid "next" msgstr "suivant" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Fermer" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Vous utilisez un compte invité, les données rentrées seront effacées après " "une semaine." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Créer des entrées de démo" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Conditions d’utilisation" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Fonctionnalités" @@ -938,23 +916,14 @@ msgstr "Aperçu" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Date" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Description" @@ -962,7 +931,7 @@ msgstr "Description" msgid "Number of logs (days)" msgstr "Nombre de journaux (jours)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Dernière activité" @@ -975,12 +944,11 @@ msgstr "Pas de séance trouvée." msgid "Log" msgstr "Journal" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Impression générale" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notes" @@ -990,28 +958,27 @@ msgid "Time" msgstr "Temps" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Poids" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Énergie" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Protéines" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Glucides" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Lipides" @@ -1071,7 +1038,8 @@ msgid "Details" msgstr "Détails" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "N°" @@ -1159,10 +1127,14 @@ msgstr "Envoyer un email de vérification" msgid "You need to verify your email to contribute exercises" msgstr "Vous devez vérifier votre email pour contribuer aux exercices" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Changer le mot de passe" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1190,7 +1162,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Supprimé avec succès" @@ -1199,25 +1171,25 @@ msgstr "Supprimé avec succès" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Supprimer {0} ?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Modifier {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1228,18 +1200,6 @@ msgstr "" "vous puissiez mieux voir ce que ce site web peut faire. N’hésitez pas à les " "modifier ou à les supprimer !" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Remarques" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Envoyer" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Votrecommentaire a été envoyé avec succès. Merci !" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1249,106 +1209,43 @@ msgstr "Le compte « {0} » a été supprimé avec succès" msgid "You were successfully registered" msgstr "Vous avez été enregistré·e avec succès" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Paramètres mis à jour" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "L'utilisateur a été correctement désactivé" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "L'utilisateur a été activé avec succès" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Modifier l’utilisateur" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Nom d’utilisateur" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Activités" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Un email de vérification a été envoyé à %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Catégorie" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Muscles primaires" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Muscles secondaires" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variations" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Catégorie d'exercices" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Exercice" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Un commentaire sur la meilleure manière de réaliser cet exercice." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alias pour un exercice" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Ligne" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Photo" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Autres" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Image" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Image principale" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "En latin, par ex. « Pectoralis major »" @@ -1361,56 +1258,19 @@ msgstr "Nom alternatif" msgid "A more basic name for the muscle" msgstr "Un nom plus basique pour le muscle" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Langue" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "La taille maximum du fichier est %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Le type de fichier n'est pas supporté" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Le fichier n'est pas une vidéo valide" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Vidéo principale" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Vidéo" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Taille" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Durée" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Largeur" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Taille" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, nom long" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Liste d'équipement" @@ -1423,13 +1283,10 @@ msgstr "Historique d'exercice admin" msgid "Action" msgstr "Action" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utilisateur" @@ -1481,10 +1338,6 @@ msgstr "Supprimer équipement ?" msgid "Add muscle" msgstr "Ajouter un muscle" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Seuls les formats PNG et JPEG sont pris en charge" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Ajouter une image" @@ -1555,8 +1408,7 @@ msgid "Contract type" msgstr "Type de contrat" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Quantité" @@ -1573,12 +1425,10 @@ msgid "Contract is active" msgstr "Le contrat est actif" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Date de début" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Date de fin" @@ -1630,11 +1480,6 @@ msgstr "Afficher le nom dans l’en-tête" msgid "Show the name of the gym in the site header" msgstr "Afficher le nom de la salle de sport dans l’en-tête du site" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Configuration pour {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Vue d’ensemble des membres inactifs" @@ -1918,7 +1763,7 @@ msgstr "Barre de traction" msgid "Quads" msgstr "Quadriceps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Répétitions" @@ -1954,6 +1799,197 @@ msgstr "Jusqu'à l'échec" msgid "none (bodyweight exercise)" msgstr "aucun (poids du corps)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Contenu" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Légende" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Journal de pesée" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Données personnelles" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Copier une séance" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Exemple de séance" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Séance pour %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -2007,62 +2043,35 @@ msgstr "Envoyer les courriels" msgid "Correction" msgstr "Correction" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Séries" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Reps" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "ReR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "repos" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Jour de repos" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Exercice" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "La routine expirera bientôt" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ordre" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Session" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Séance" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Unité" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Date de création" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Modèle d'entraînement" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Marquer une séance d'entraînement comme modèle la figera et vous permettra " -"d'en faire des copies" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Modèle public" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Un modèle public est disponible pour les autres utilisateurs" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "L'heure de début ne peut pas être après l'heure de fin." @@ -2078,35 +2087,11 @@ msgstr "Neutre" msgid "Good" msgstr "Bon" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Notez ce que vous voulez à propos de cette séance d'entraînement." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Vos impressions au sujet de cette séance d'entraînement. Avez-vous réussi à " -"faire les exercices ?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Heure début" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Heure fin" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Si vous entrez une heure, vous devez entrer l'heure de début et de fin." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Jour d'exercice" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2163,44 +2148,32 @@ msgstr "" "Vous allez régulièrement recevoir ces rappels jusqu'à ce que vous entrez " "votre poids actuel." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Séance" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Séance pour %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Valeur" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Unité" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Taille (in)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Poids (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Poids (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Calculer" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Apport calorique de base" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Votre apport calorique de base calculé avec vos données" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Calories supplémentaires" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2208,118 +2181,14 @@ msgstr "" "Les calories supplémentaires à ajouter au taux de base (pour soustraire, " "entrez un nombre négatif)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingrédient" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Chercher aussi le nom des ingrédients en anglais" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "En kcal/100 g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "En g pour 100 g de produit" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Sucre contenu dans les glucides" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Teneur en acides gras saturés dans les acides gras" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Fibre" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sodium" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Lien vers le produit" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Nom de la marque du produit" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" -"L'énergie totale ({self.energy}kcal) n'est pas une somme approximative du" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Catégories d’ingrédients" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Quantité en grammes" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Quantité, par exemple « 1 tasse » ou « 1/2 cuillère »" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Plan de nutrition" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Repas" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Date et heure (Approx.)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Temps (approx.)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Donnez aux repas une description textuelle / un nom tel que \"petit-" -"déjeuner\" ou \"après l'entraînement\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Une description de l’objectif du régime, par exemple « Gain de masse » ou « " -"Se préparer pour l’été »" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Utiliser les calories par jour" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Cochez la case si vous voulez marquer ce plan comme ayant une quantité " -"d’objectif de calories. Vous pouvez utiliser la calculatrice ou entrez la " -"valeur vous-même." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2386,6 +2255,10 @@ msgstr "Macronutriments" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Sucre contenu dans les glucides" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2393,10 +2266,22 @@ msgstr "kJ" msgid "n.A." msgstr "n.A." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Teneur en acides gras saturés dans les acides gras" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Autres" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Fibre" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sodium" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2486,7 +2371,7 @@ msgstr "" "basez votre plan de nutrition sur ces valeurs, observez pendant quelques " "semaines et changer le montant total si nécessaire." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Ajouter un nouvel ingrédient" @@ -2504,6 +2389,10 @@ msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" "Il s'agit d'un régime vide, à quoi vous attendiez-vous sur le PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Donnée nutritionnelle" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Total" @@ -2693,6 +2582,10 @@ msgstr "" "wger Workout Manager est une application web open source gratuit qui gère " "vos exercices et séances d’entraînement." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contact" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Application mobile" @@ -2897,6 +2790,10 @@ msgstr "" msgid "Account" msgstr "Compte" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Tableau de bord" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Routines d’entraînement" @@ -2971,14 +2868,14 @@ msgstr "Format de date" msgid "You have to enter your weight" msgstr "Vous devez entrer votre poids" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Entrée de poids" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importer vos journaux de poids" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Envoyer" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3099,6 +2996,234 @@ msgstr "" msgid "Re-Submit" msgstr "Renvoyer" +#~ msgid "Image" +#~ msgstr "Image" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Seuls les formats PNG et JPEG sont pris en charge" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Un moyen de vous répondre (courriel, etc.)" + +#~ msgid "Comment" +#~ msgstr "Commentaire" + +#~ msgid "What do you want to say?" +#~ msgstr "Que voulez-vous nous dire ?" + +#~ msgid "Feedback" +#~ msgstr "Remarques" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Votrecommentaire a été envoyé avec succès. Merci !" + +#~ msgid "Category" +#~ msgstr "Catégorie" + +#~ msgid "Primary muscles" +#~ msgstr "Muscles primaires" + +#~ msgid "Secondary muscles" +#~ msgstr "Muscles secondaires" + +#~ msgid "Variations" +#~ msgstr "Variations" + +#~ msgid "Exercise Categories" +#~ msgstr "Catégorie d'exercices" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Un commentaire sur la meilleure manière de réaliser cet exercice." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alias pour un exercice" + +#~ msgid "Line" +#~ msgstr "Ligne" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "Photo" + +#~ msgid "Other" +#~ msgstr "Autres" + +#~ msgid "Height" +#~ msgstr "Taille" + +#~ msgid "Width" +#~ msgstr "Largeur" + +#~ msgid "Main picture" +#~ msgstr "Image principale" + +#~ msgid "Language" +#~ msgstr "Langue" + +#~ msgid "Main video" +#~ msgstr "Vidéo principale" + +#~ msgid "Video" +#~ msgstr "Vidéo" + +#~ msgid "Size" +#~ msgstr "Taille" + +#~ msgid "Duration" +#~ msgstr "Durée" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, nom long" + +#~ msgid "Routine" +#~ msgstr "Routine" + +#~ msgid "Order" +#~ msgstr "Ordre" + +#~ msgid "Session" +#~ msgstr "Session" + +#~ msgid "Creation date" +#~ msgstr "Date de création" + +#~ msgid "Workout template" +#~ msgstr "Modèle d'entraînement" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Marquer une séance d'entraînement comme modèle la figera et vous " +#~ "permettra d'en faire des copies" + +#~ msgid "Public template" +#~ msgstr "Modèle public" + +#~ msgid "A public template is available to other users" +#~ msgstr "Un modèle public est disponible pour les autres utilisateurs" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Notez ce que vous voulez à propos de cette séance d'entraînement." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Vos impressions au sujet de cette séance d'entraînement. Avez-vous réussi " +#~ "à faire les exercices ?" + +#~ msgid "Start time" +#~ msgstr "Heure début" + +#~ msgid "Finish time" +#~ msgstr "Heure fin" + +#~ msgid "Exercise day" +#~ msgstr "Jour d'exercice" + +#~ msgid "Value" +#~ msgstr "Valeur" + +#~ msgid "In kcal per 100g" +#~ msgstr "En kcal/100 g" + +#~ msgid "In g per 100g of product" +#~ msgstr "En g pour 100 g de produit" + +#~ msgid "Link to product" +#~ msgstr "Lien vers le produit" + +#~ msgid "Brand name of product" +#~ msgstr "Nom de la marque du produit" + +#~ msgid "Ingredient Categories" +#~ msgstr "Catégories d’ingrédients" + +#~ msgid "Amount in grams" +#~ msgstr "Quantité en grammes" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Quantité, par exemple « 1 tasse » ou « 1/2 cuillère »" + +#~ msgid "Nutrition plan" +#~ msgstr "Plan de nutrition" + +#~ msgid "Meal" +#~ msgstr "Repas" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Date et heure (Approx.)" + +#~ msgid "Time (approx)" +#~ msgstr "Temps (approx.)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Donnez aux repas une description textuelle / un nom tel que \"petit-" +#~ "déjeuner\" ou \"après l'entraînement\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Une description de l’objectif du régime, par exemple « Gain de masse » ou " +#~ "« Se préparer pour l’été »" + +#~ msgid "Use daily calories" +#~ msgstr "Utiliser les calories par jour" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Cochez la case si vous voulez marquer ce plan comme ayant une quantité " +#~ "d’objectif de calories. Vous pouvez utiliser la calculatrice ou entrez la " +#~ "valeur vous-même." + +#~ msgid "Weight entry" +#~ msgstr "Entrée de poids" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Retour vers \"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configuration pour {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Taille (in)" + +#~ msgid "Weight (kg)" +#~ msgstr "Poids (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Poids (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Calculer" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "L'énergie totale ({self.energy}kcal) n'est pas une somme approximative du" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3111,21 +3236,6 @@ msgstr "Renvoyer" #~ msgid "The art style of your image" #~ msgstr "Le style d'art de votre image" -#~ msgid "Sets" -#~ msgstr "Séries" - -#~ msgid "RiR" -#~ msgstr "ReR" - -#~ msgid "rest" -#~ msgstr "repos" - -#~ msgid "Rest day" -#~ msgstr "Jour de repos" - -#~ msgid "Nutritional data" -#~ msgstr "Donnée nutritionnelle" - #~ msgid "Workouts" #~ msgstr "Entraînements" @@ -3184,9 +3294,6 @@ msgstr "Renvoyer" #~ "Achètes-nous un café pour aider le projet, payer pour les cours des " #~ "servers, et pour nous garder plein d'énergie" -#~ msgid "Sample workout" -#~ msgstr "Exemple de séance" - #~ msgid "Sample day" #~ msgstr "Exemple de jour" @@ -3589,9 +3696,6 @@ msgstr "Renvoyer" #~ msgid "Edit workout" #~ msgstr "Modifier la séance" -#~ msgid "Copy workout" -#~ msgstr "Copier une séance" - #~ msgid "Copy" #~ msgstr "Copier" @@ -3626,9 +3730,6 @@ msgstr "Renvoyer" #~ msgid "Your BMI is: " #~ msgstr "Votre IMC est : " -#~ msgid "Legend" -#~ msgstr "Légende" - #~ msgid "Adipositas III" #~ msgstr "Obésité III" @@ -3703,9 +3804,6 @@ msgstr "Renvoyer" #~ msgid "Delete schedule" #~ msgstr "Supprimer le programme" -#~ msgid "Weight log" -#~ msgstr "Journal de pesée" - #~ msgid "Weight log for workout" #~ msgstr "Journal de poids pour la séance" @@ -3774,8 +3872,8 @@ msgstr "Renvoyer" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" #~ "L’utilisateur {request.user.username} a soumis un nouvel ingrédient " #~ "« {self.name} »." @@ -4501,8 +4599,8 @@ msgstr "Renvoyer" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4511,9 +4609,10 @@ msgstr "Renvoyer" #~ "intéressée.\n" #~ "Si vous êtes nouveau/nouvelle dans le monde du logiciel libre, nous vous " #~ "recommandons de jeter un coup d’œil cet article qui résume la manière dont les projets à code " -#~ "source ouvert fonctionnent. " +#~ "opensource/blog/" +#~ "0541_10_golden_rules_for_starting_with_open_source.html\"> cet article qui résume la manière dont les projets à code source ouvert " +#~ "fonctionnent. " #~ msgid "" #~ "Any kind of contribution is appreciated and welcome.\n" diff --git a/wger/locale/he/LC_MESSAGES/django.po b/wger/locale/he/LC_MESSAGES/django.po index c81402e80..790c35886 100644 --- a/wger/locale/he/LC_MESSAGES/django.po +++ b/wger/locale/he/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-11-17 06:51+0000\n" "Last-Translator: \"Omer I.S.\" \n" "Language-Team: Hebrew \n" @@ -51,23 +51,24 @@ msgstr "" msgid "Edit" msgstr "עריכה" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "כניסה" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "שם פרטי" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "שם משפחה" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -77,50 +78,51 @@ msgstr "שם משפחה" msgid "Email" msgstr "דואר אלקטרוני" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." -msgstr "בשימוש עבור איפוס סיסמה וגם, באופן אופציונלי, לתזכורות בדואר האלקטרוני." +msgstr "" +"בשימוש עבור איפוס סיסמה וגם, באופן אופציונלי, לתזכורות בדואר האלקטרוני." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "תאריך לידה" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "נתונים אישיים" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "תזכורות לאימונים" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "הגדרות אחרות" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "שמירה" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "משמש לשחזור הסיסמה ולתזכורות אופציונליות." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "כתובת דוא״ל זו כבר נמצאת בשימוש." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "סיסמה" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "נא להקליד את סיסמתך הנוכחית." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -137,38 +139,21 @@ msgstr "נא להקליד את סיסמתך הנוכחית." msgid "Delete" msgstr "מחיקה" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "סיסמה שגויה" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "טופס זה מאובטח באמצעות reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "הרשמה" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "יצירת קשר" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "הערה" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "מה ברצונך לומר?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "שם שפה מקוצר" @@ -195,7 +180,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "קישור" @@ -298,7 +283,7 @@ msgstr "" msgid "Age" msgstr "גיל" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "גובה (ס״מ)" @@ -348,8 +333,7 @@ msgstr "סה״כ קלוריות ביום" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "יחידת משקל" @@ -371,22 +355,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "שם" @@ -406,7 +393,7 @@ msgstr "העמוד לא נמצא" msgid "The page you requested does not exist." msgstr "העמוד שביקשת אינו קיים." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "אירעה שגיאה" @@ -424,7 +411,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "חזרה לעמוד \"%(target)s\"" @@ -439,13 +426,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "האם למחוק? לא ניתן לבטל פעולה זו." @@ -494,11 +474,7 @@ msgstr "צוות wger" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "לוח מחוונים" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "שפות" @@ -564,7 +540,7 @@ msgstr "רשימת רישיונות" msgid "Nothing found" msgstr "לא נמצא דבר" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -606,7 +582,7 @@ msgid "Exercises" msgstr "תרגילים" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "ניהול" @@ -614,7 +590,7 @@ msgstr "ניהול" msgid "Exercise edit history" msgstr "היסטוריית עריכת התרגיל" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "ציוד" @@ -684,7 +660,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "תרגום" @@ -693,36 +669,41 @@ msgstr "תרגום" msgid "Reset password" msgstr "איפוס סיסמה" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "ההעדפות שלי" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "התנתקות" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "ההעדפות שלי" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "רישיונות" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "מכוני כושר" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "איפוס הסיסמה הושלם" @@ -778,25 +759,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "סגירה" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "תנאי השימוש" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -869,23 +850,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "תאריך" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "תיאור" @@ -893,7 +865,7 @@ msgstr "תיאור" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "פעילות אחרונה" @@ -906,12 +878,11 @@ msgstr "לא נמצאו אימונים." msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "הערות" @@ -921,28 +892,27 @@ msgid "Time" msgstr "זמן" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "משקל" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "אנרגיה" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "חלבונים" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "שומנים" @@ -1002,7 +972,8 @@ msgid "Details" msgstr "פרטים" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1088,10 +1059,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1119,7 +1094,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1128,43 +1103,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1174,106 +1137,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "קטגוריה" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1286,56 +1186,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1348,13 +1211,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1406,10 +1266,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1476,8 +1332,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1494,12 +1349,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1549,11 +1402,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1827,7 +1675,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "חזרות" @@ -1863,6 +1711,188 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "נתונים אישיים" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "אימון לדוגמא" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1913,60 +1943,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "חזרות" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "מנוחה בין סטים" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1982,32 +1987,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2051,153 +2034,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2251,6 +2126,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2258,10 +2137,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2335,7 +2226,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2352,6 +2243,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Sample nutritional plan" +msgid "Nutritional data" +msgstr "דיאטה לדוגמא" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2507,6 +2404,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "יצירת קשר" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2687,6 +2588,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "לוח מחוונים" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2758,14 +2663,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2861,16 +2766,14 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "RiR" -#~ msgstr "מנוחה בין סטים" +#~ msgid "Comment" +#~ msgstr "הערה" -#, fuzzy -#~| msgid "Sample nutritional plan" -#~ msgid "Nutritional data" -#~ msgstr "דיאטה לדוגמא" +#~ msgid "What do you want to say?" +#~ msgstr "מה ברצונך לומר?" -#~ msgid "Sample workout" -#~ msgstr "אימון לדוגמא" +#~ msgid "Category" +#~ msgstr "קטגוריה" #~ msgid "Sample day" #~ msgstr "יום לדוגמא" diff --git a/wger/locale/hi/LC_MESSAGES/django.po b/wger/locale/hi/LC_MESSAGES/django.po index 6fb1e472e..342d02f96 100644 --- a/wger/locale/hi/LC_MESSAGES/django.po +++ b/wger/locale/hi/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-12-01 06:00+0000\n" "Last-Translator: Madhav Agarwal \n" "Language-Team: Hindi \n" @@ -51,23 +51,24 @@ msgstr "" msgid "Edit" msgstr "संपादन" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "लॉग इन करें" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "पहला नाम" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "उपनाम" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -77,50 +78,50 @@ msgstr "उपनाम" msgid "Email" msgstr "ईमेल" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -138,38 +139,21 @@ msgstr "" msgid "Delete" msgstr "मितादे" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "अवैध पासवर्ड" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "फ़ॉर्म reCAPTCHA द्वारा सुरक्षित है" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "रजिस्टर" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -196,7 +180,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -299,7 +283,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -349,8 +333,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -372,22 +355,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -407,7 +393,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -425,7 +411,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -440,13 +426,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -495,11 +474,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "भाषाएँ" @@ -565,7 +540,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -607,7 +582,7 @@ msgid "Exercises" msgstr "व्यायाम" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -617,7 +592,7 @@ msgstr "" msgid "Exercise edit history" msgstr "व्यायाम" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -687,7 +662,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -696,36 +671,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -781,25 +761,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -872,23 +852,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -896,7 +867,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -909,12 +880,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -924,28 +894,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1005,7 +974,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1091,10 +1061,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1122,7 +1096,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1131,43 +1105,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1177,106 +1139,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1289,56 +1188,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1351,13 +1213,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1409,10 +1268,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1479,8 +1334,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1497,12 +1351,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1552,11 +1404,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1830,7 +1677,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1866,6 +1713,186 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "उदाहरणात्मक वर्कआउट" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1916,60 +1943,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1985,32 +1987,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2054,153 +2034,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2254,6 +2126,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2261,10 +2137,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2338,7 +2226,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2355,6 +2243,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Sample nutritional plan" +msgid "Nutritional data" +msgstr "उदाहरणात्मक पोषण योजना" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2510,6 +2404,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2690,6 +2588,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2761,14 +2663,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2864,14 +2766,6 @@ msgstr "" msgid "Re-Submit" msgstr "" -#, fuzzy -#~| msgid "Sample nutritional plan" -#~ msgid "Nutritional data" -#~ msgstr "उदाहरणात्मक पोषण योजना" - -#~ msgid "Sample workout" -#~ msgstr "उदाहरणात्मक वर्कआउट" - #~ msgid "Sample day" #~ msgstr "उदाहरणात्मक दिन" diff --git a/wger/locale/hr/LC_MESSAGES/django.po b/wger/locale/hr/LC_MESSAGES/django.po index 713296110..af51301d9 100644 --- a/wger/locale/hr/LC_MESSAGES/django.po +++ b/wger/locale/hr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-26 11:02+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -15,9 +15,8 @@ msgstr "" "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" +"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 5.14.1-dev\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 @@ -54,23 +53,24 @@ msgstr "" msgid "Edit" msgstr "Uredi" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Prijava" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Ime" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Prezime" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -80,52 +80,52 @@ msgstr "Prezime" msgid "Email" msgstr "E-mail adresa" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Koristi se za obnavljanje lozinki i opcionalno za podsjetnike putem e-pošte." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Datum rođenja" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Osobni podaci" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Podsjetitelji za treninge" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Druge postavke" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Spremi" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Koristi se za obnavljanje lozinki i opcionalno za podsjetnike putem e-pošte." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ova se e-mail adresa već koristi." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Lozinka" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Upiši svoju aktualnu lozinku." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -142,38 +142,21 @@ msgstr "Upiši svoju aktualnu lozinku." msgid "Delete" msgstr "Izbriši" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Nevaljana lozinka" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Obrazac je zaštićen pomoću reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registracija" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Neki način slanja odgovora (e-mail, itd.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentar" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Što želiš reći?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Kratko ime jezika" @@ -202,7 +185,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Kratko ime, npr. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Poveznica" @@ -315,7 +298,7 @@ msgstr "" msgid "Age" msgstr "Dob" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Veličina (cm)" @@ -365,8 +348,7 @@ msgstr "Ukupna dnevna koločina kalorija" msgid "Total caloric intake, including e.g. any surplus" msgstr "Ukupni dnevni unos kalorija, uključujući npr. višak" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Jedinica težine" @@ -391,22 +373,25 @@ msgstr "Automatski podsjenici za unose težine" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Broj dana nakon zadnjeg unosa težine (upiši 0 za deaktiviranje)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Zbroj svih sati mora biti 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Ime" @@ -426,7 +411,7 @@ msgstr "Stranica nije pronađena" msgid "The page you requested does not exist." msgstr "Stranica koju tražiš ne postoji." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Dogodila se greška" @@ -449,7 +434,7 @@ msgstr "" "Pregledavaš stranicu kao korisnik „%(current_user)s”, sve radnje se izvode s " "njegovim podacima." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Natrag na „%(target)s”" @@ -469,13 +454,6 @@ msgstr "" " njegovim podacima.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Natrag na „%(target)s”" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Stvarno želiš ovo izbrisati? Ova je nepovratna radnja." @@ -526,11 +504,7 @@ msgid "Please click the following link to confirm your email: %(link)s" msgstr "" "Pritisni sljedeću poveznicu za potvrđivanje tvoje e-mail adrese: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Kontrolna ploča" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Jezici" @@ -596,7 +570,7 @@ msgstr "Popis licenca" msgid "Nothing found" msgstr "Ništa nije pronađeno" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Impresum" @@ -638,7 +612,7 @@ msgid "Exercises" msgstr "Vježbe" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administracija" @@ -646,7 +620,7 @@ msgstr "Administracija" msgid "Exercise edit history" msgstr "Povijest uređivanja vježbe" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Oprema" @@ -716,7 +690,7 @@ msgstr "Dokumentacija za programere" msgid "Get the code" msgstr "Nabavi izvorni kod" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Prevedi" @@ -725,36 +699,41 @@ msgstr "Prevedi" msgid "Reset password" msgstr "Obnovi lozinku" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Moje postavke" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Odjava" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Moje postavke" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licence" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Jedinice ponavljanja" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Jedinice težine" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Popis korisnika" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Teretane" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Obnavljanje lozinke gotovo" @@ -814,26 +793,26 @@ msgstr "prethodno" msgid "next" msgstr "dalje" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Zatvori" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Koristiš račun gosta, upisani podaci će se izbrisati nakon tjedan dana." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Stvori neke demo snimke" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Uvjeti usluge" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Značajke" @@ -880,8 +859,8 @@ msgid "" "and can't be undone. " msgstr "" "Ova će radnja izbrisati korisnički račun „%(username)s”.\n" -"Također će nepovratno ukloniti sve s njime povezane podatke " -"(treninge, dnevnike, itd.)\n" +"Također će nepovratno ukloniti sve s njime povezane podatke (treninge, " +"dnevnike, itd.)\n" "i ne može se poništiti. " #: core/templates/user/login.html:17 @@ -910,23 +889,14 @@ msgstr "Pregled" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Datum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -934,7 +904,7 @@ msgstr "Opis" msgid "Number of logs (days)" msgstr "Broj dnevnika (dani)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Zadnja aktivnost" @@ -947,12 +917,11 @@ msgstr "Nije pronađen nijedan trening." msgid "Log" msgstr "Zapis" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Opći dojam" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Bilješke" @@ -962,28 +931,27 @@ msgid "Time" msgstr "Vrijeme" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Težina" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energija" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteini" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Ugljikohidrati" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Mast" @@ -1043,7 +1011,8 @@ msgid "Details" msgstr "Detalji" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Br." @@ -1129,10 +1098,14 @@ msgstr "Pošalji e-mail za ovjeru" msgid "You need to verify your email to contribute exercises" msgstr "Za dodavanje vježbi moraš ovjeriti tvoju e-mail adresu" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Promjeni lozinku" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1160,7 +1133,7 @@ msgstr "unca" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Uspješno izbrisano" @@ -1169,45 +1142,33 @@ msgstr "Uspješno izbrisano" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Izbrisati {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Uredi {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -"Izradili smo uzorke treninga, rasporede treninga, dnevnike težine, (tjelesnu)" -" težinu i unose za planove prehrane za bolji prikaz funkcionalnosti ove " -"stranice. Slobodno ih uredi ili izbriši!" - -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Povratne informacije" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Pošalji" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Tvoje povratne informacije su uspješno poslane. Hvala!" +"Izradili smo uzorke treninga, rasporede treninga, dnevnike težine, " +"(tjelesnu) težinu i unose za planove prehrane za bolji prikaz " +"funkcionalnosti ove stranice. Slobodno ih uredi ili izbriši!" #: core/views/user.py:143 #, python-brace-format @@ -1218,106 +1179,43 @@ msgstr "Račun „{0}” je uspješno izbrisan" msgid "You were successfully registered" msgstr "Uspješno si registriran/a" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Postavke su uspješno aktualizirane" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Korisnik je uspješno deaktiviran" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Korisnik je uspješno aktiviran" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Uredi korisnika" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Korisničko ime" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Teretana" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "E-mail za ovjeru je poslan na %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategorija" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Primarni mišići" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Sekundarni mišići" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Varijante" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Kategorije vježbi" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Vježba" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Komentar o tome kako pravilno izvesti ovu vježbu." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Pseudonim za vježbu" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linija" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Grubi poligoni" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Fotografija" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Drugo" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Slika" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Glavna slika" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Na latinskom, npr. „Pectoralis major”" @@ -1330,56 +1228,19 @@ msgstr "Alternativno ime" msgid "A more basic name for the muscle" msgstr "Osnovnije ime za mišić" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Jezik" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Maks. veličina datoteke je %(size)s MB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Vrsta detoteke se ne podržava" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Datoteka nije valjana video datoteka" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Glavni video" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Veličina" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Trajanje" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Širina" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Visina" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Kodek" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Kodek, dugo ime" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Popis opreme" @@ -1392,13 +1253,10 @@ msgstr "Povijest administratora vježbe" msgid "Action" msgstr "Radnja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Korisnik" @@ -1450,10 +1308,6 @@ msgstr "Izbrisati opremu?" msgid "Add muscle" msgstr "Dodaj mičić" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Podržani su samo PNG i JPEG formati" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Dodaj sliku" @@ -1522,8 +1376,7 @@ msgid "Contract type" msgstr "Vrsta ugovora" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Iznos" @@ -1540,12 +1393,10 @@ msgid "Contract is active" msgstr "Ugovor je aktivan" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Datum početka" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Datum kraja" @@ -1595,11 +1446,6 @@ msgstr "Prikaži ime u zaglavlju" msgid "Show the name of the gym in the site header" msgstr "Prikaži ime teretane u zaglavlju web stranice" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Konfiguracija za {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Pregled neaktivnih članova" @@ -1878,7 +1724,7 @@ msgstr "Šipka za povlačenje" msgid "Quads" msgstr "Kvadriceps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Ponavljanja" @@ -1914,6 +1760,197 @@ msgstr "Do neuspjeha" msgid "none (bodyweight exercise)" msgstr "bez (vježba za tjelesnu težinu)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Sadržaj" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Zapis težine" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Osobni podaci" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Kopiraj trening" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Primjer treninga" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Trening za %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1966,62 +2003,35 @@ msgstr "Šalji e-mail poruke" msgid "Correction" msgstr "Ispravak" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Setovi" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Ponavljanja" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "PUR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Dan odmora" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Vježba" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutina će uskoro isteći" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Rutina" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Redoslijed" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sesija" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Trening" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Jedinica" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum stvaranja" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Predložak za trening" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Označavanje treninga kao predloška će ga zamrznuti i omogućiti ti da ga " -"kopiraš" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Javni predložak" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Javni predložak je dostupan drugim korisnicima" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Vrijeme početka ne može biti prije vremena kraja." @@ -2037,33 +2047,10 @@ msgstr "Neutralno" msgid "Good" msgstr "Dobro" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Bilo koje bilješke koje želiš spremiti o ovoj sesiji treninga." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Tvoj dojam o ovoj sesiji treninga. Jesi li vježbao/la koliko si mogao/la?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Vrijeme početka" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Vrijeme kraja" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Ako upišeš vrijeme, moraš upisati vrijeme početka i vrijeme kraja." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Dan za vježbu" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2114,44 +2101,32 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "Takve podsjetnike ćeš primati sve dok ne uneseš svoju aktualnu težinu." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Trening" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Trening za %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Vrijednost" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Jedinica" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Visina (inč)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Težina (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Težina (funte)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Izračunaj" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Osnovni unos kalorija" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Osnovni unos kalorija izračunat za tvoje podatke" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Dodatne kalorije" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2159,114 +2134,14 @@ msgstr "" "Dodatne kalorije za dodavanje osnovnoj stopi (za oduzimanje upiši negativan " "broj)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Sastojak" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Također traži imena na engleskom jeziku" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "U kcal po 100 g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "U g po 100 g proizvoda" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Količina šećera u ugljikohidratima" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Količina zasićene masti u mastima" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Vlakno" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Natrij" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Poveznica za proizvod" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Ime proizvoda" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "Ukupna energija ({self.energy} kcal) nije približni zbroj od " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Kategorije sastojaka" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Količina u gramima" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Jedinica količine, npr. „1 šalica” ili „1/2 žlice”" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Plan prehrane" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Obrok" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Datum i vrijeme (otprilike)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Vrijeme (otprilike)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Obrocima zadaj tekstualni opis/ime kao što je „doručak” ili „nakon treninga”" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Opis cilja plana, npr. „Povećanje tjelesne mase” ili „Priprema za ljeto”" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Koristi dnevne kalorije" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Označi polje ako želiš označiti da ovaj plan ima ciljanu količinu kalorija. " -"Možeš koristiti kalkulator ili ručno upisati vrijednost." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2330,6 +2205,10 @@ msgstr "Makronutrijenti" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Količina šećera u ugljikohidratima" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2337,10 +2216,22 @@ msgstr "kJ" msgid "n.A." msgstr "--" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Količina zasićene masti u mastima" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Drugi" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Vlakno" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Natrij" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2430,7 +2321,7 @@ msgstr "" "temeljiš na ovim vrijednostima, prati razvoj par tjedana i\n" "po potrebi promijeni ukupnu količinu." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Dodaj novi sastojak" @@ -2447,6 +2338,10 @@ msgstr "Plan prehrane za %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Ovo je prazan plan. Što si očekivao/la u PDF-u?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Podaci prehrane" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Ukupno" @@ -2631,6 +2526,10 @@ msgstr "" "wger Workout Manager je besplatna web aplikacija otvorenog koda za " "upravljanje tvojim vježbama i treninzima." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Mobilna aplikacija" @@ -2826,6 +2725,10 @@ msgstr "" msgid "Account" msgstr "Račun" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Kontrolna ploča" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Rutine treninga" @@ -2899,14 +2802,14 @@ msgstr "Format datuma" msgid "You have to enter your weight" msgstr "Moraš upisati svoju težinu" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Unos težine" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Uvezi dnevnike težine" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Pošalji" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3025,6 +2928,228 @@ msgstr "" msgid "Re-Submit" msgstr "Pošalji ponovo" +#~ msgid "Image" +#~ msgstr "Slika" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Podržani su samo PNG i JPEG formati" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Neki način slanja odgovora (e-mail, itd.)" + +#~ msgid "Comment" +#~ msgstr "Komentar" + +#~ msgid "What do you want to say?" +#~ msgstr "Što želiš reći?" + +#~ msgid "Feedback" +#~ msgstr "Povratne informacije" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Tvoje povratne informacije su uspješno poslane. Hvala!" + +#~ msgid "Category" +#~ msgstr "Kategorija" + +#~ msgid "Primary muscles" +#~ msgstr "Primarni mišići" + +#~ msgid "Secondary muscles" +#~ msgstr "Sekundarni mišići" + +#~ msgid "Variations" +#~ msgstr "Varijante" + +#~ msgid "Exercise Categories" +#~ msgstr "Kategorije vježbi" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Komentar o tome kako pravilno izvesti ovu vježbu." + +#~ msgid "Alias for an exercise" +#~ msgstr "Pseudonim za vježbu" + +#~ msgid "Line" +#~ msgstr "Linija" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Grubi poligoni" + +#~ msgid "Photo" +#~ msgstr "Fotografija" + +#~ msgid "Other" +#~ msgstr "Drugo" + +#~ msgid "Height" +#~ msgstr "Visina" + +#~ msgid "Width" +#~ msgstr "Širina" + +#~ msgid "Main picture" +#~ msgstr "Glavna slika" + +#~ msgid "Language" +#~ msgstr "Jezik" + +#~ msgid "Main video" +#~ msgstr "Glavni video" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Veličina" + +#~ msgid "Duration" +#~ msgstr "Trajanje" + +#~ msgid "Codec" +#~ msgstr "Kodek" + +#~ msgid "Codec, long name" +#~ msgstr "Kodek, dugo ime" + +#~ msgid "Routine" +#~ msgstr "Rutina" + +#~ msgid "Order" +#~ msgstr "Redoslijed" + +#~ msgid "Session" +#~ msgstr "Sesija" + +#~ msgid "Creation date" +#~ msgstr "Datum stvaranja" + +#~ msgid "Workout template" +#~ msgstr "Predložak za trening" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Označavanje treninga kao predloška će ga zamrznuti i omogućiti ti da ga " +#~ "kopiraš" + +#~ msgid "Public template" +#~ msgstr "Javni predložak" + +#~ msgid "A public template is available to other users" +#~ msgstr "Javni predložak je dostupan drugim korisnicima" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Bilo koje bilješke koje želiš spremiti o ovoj sesiji treninga." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Tvoj dojam o ovoj sesiji treninga. Jesi li vježbao/la koliko si mogao/la?" + +#~ msgid "Start time" +#~ msgstr "Vrijeme početka" + +#~ msgid "Finish time" +#~ msgstr "Vrijeme kraja" + +#~ msgid "Exercise day" +#~ msgstr "Dan za vježbu" + +#~ msgid "Value" +#~ msgstr "Vrijednost" + +#~ msgid "In kcal per 100g" +#~ msgstr "U kcal po 100 g" + +#~ msgid "In g per 100g of product" +#~ msgstr "U g po 100 g proizvoda" + +#~ msgid "Link to product" +#~ msgstr "Poveznica za proizvod" + +#~ msgid "Brand name of product" +#~ msgstr "Ime proizvoda" + +#~ msgid "Ingredient Categories" +#~ msgstr "Kategorije sastojaka" + +#~ msgid "Amount in grams" +#~ msgstr "Količina u gramima" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Jedinica količine, npr. „1 šalica” ili „1/2 žlice”" + +#~ msgid "Nutrition plan" +#~ msgstr "Plan prehrane" + +#~ msgid "Meal" +#~ msgstr "Obrok" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Datum i vrijeme (otprilike)" + +#~ msgid "Time (approx)" +#~ msgstr "Vrijeme (otprilike)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Obrocima zadaj tekstualni opis/ime kao što je „doručak” ili „nakon " +#~ "treninga”" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Opis cilja plana, npr. „Povećanje tjelesne mase” ili „Priprema za ljeto”" + +#~ msgid "Use daily calories" +#~ msgstr "Koristi dnevne kalorije" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Označi polje ako želiš označiti da ovaj plan ima ciljanu količinu " +#~ "kalorija. Možeš koristiti kalkulator ili ručno upisati vrijednost." + +#~ msgid "Weight entry" +#~ msgstr "Unos težine" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Natrag na „%(target)s”" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfiguracija za {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Visina (inč)" + +#~ msgid "Weight (kg)" +#~ msgstr "Težina (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Težina (funte)" + +#~ msgid "Calculate" +#~ msgstr "Izračunaj" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "Ukupna energija ({self.energy} kcal) nije približni zbroj od " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3036,18 +3161,6 @@ msgstr "Pošalji ponovo" #~ msgid "The art style of your image" #~ msgstr "Stil tvoje slike" -#~ msgid "Sets" -#~ msgstr "Setovi" - -#~ msgid "RiR" -#~ msgstr "PUR" - -#~ msgid "Rest day" -#~ msgstr "Dan odmora" - -#~ msgid "Nutritional data" -#~ msgstr "Podaci prehrane" - #~ msgid "Workouts" #~ msgstr "Treninzi" @@ -3104,9 +3217,6 @@ msgstr "Pošalji ponovo" #~ "Pomogni projektu: kupi nam kavu, plati troškove poslužitelja i potiči nas " #~ "u našem radu" -#~ msgid "Sample workout" -#~ msgstr "Primjer treninga" - #~ msgid "Sample day" #~ msgstr "Primjer dana" @@ -3489,9 +3599,6 @@ msgstr "Pošalji ponovo" #~ msgid "Edit workout" #~ msgstr "Uredi trening" -#~ msgid "Copy workout" -#~ msgstr "Kopiraj trening" - #~ msgid "Copy" #~ msgstr "Kopiraj" @@ -3526,9 +3633,6 @@ msgstr "Pošalji ponovo" #~ msgid "Your BMI is: " #~ msgstr "Tvoj indeks tjelesne mase (BMI) iznosi: " -#~ msgid "Legend" -#~ msgstr "Legenda" - #~ msgid "Adipositas III" #~ msgstr "Adipoza III" @@ -3598,9 +3702,6 @@ msgstr "Pošalji ponovo" #~ msgid "Delete schedule" #~ msgstr "Izbriši raspored" -#~ msgid "Weight log" -#~ msgstr "Zapis težine" - #~ msgid "Weight log for workout" #~ msgstr "Zapis težine za trening" @@ -3666,8 +3767,8 @@ msgstr "Pošalji ponovo" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "{request.user.username} je poslao/la novi sastojak „{self.name}”." #~ msgid "Submission date" @@ -3750,8 +3851,8 @@ msgstr "Pošalji ponovo" #~ "{energy_approx}%)" #~ msgstr "" #~ "Ukupna energija ({energy} kcal) nije približni zbroj energije koju daju " -#~ "proteini, ugljikohidrati i masti ({energy_calculated} kcal +/" -#~ "−{energy_approx} %)" +#~ "proteini, ugljikohidrati i masti ({energy_calculated} kcal +/−" +#~ "{energy_approx} %)" #~ msgid "ingredient name" #~ msgstr "ime sastojka" diff --git a/wger/locale/hu/LC_MESSAGES/django.po b/wger/locale/hu/LC_MESSAGES/django.po index afc77144e..a06dab362 100644 --- a/wger/locale/hu/LC_MESSAGES/django.po +++ b/wger/locale/hu/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2023-12-29 22:12+0000\n" "Last-Translator: Adam Cool \n" "Language-Team: Hungarian \n" @@ -54,23 +54,24 @@ msgstr "" msgid "Edit" msgstr "Módosítás" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Bejelentkezés" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Keresztnév" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Vezetéknév" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -80,52 +81,52 @@ msgstr "Vezetéknév" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Jelszó visszaállításokhoz és opcionálisan, e-mail emlékeztetőkhöz használják." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Születés Időpontja" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Személyes adat" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Edzés emlékeztetők" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Egyéb beállítások" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Mentés" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Jelszó visszaállításokhoz és opcionálisan, e-mail emlékeztetőkhöz használják." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ez az e-mail cím már használatban van." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Jelszó" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Kérlek írd be a jelenlegi jelszavad." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -142,38 +143,21 @@ msgstr "Kérlek írd be a jelenlegi jelszavad." msgid "Delete" msgstr "Törlés" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Érvénytelen jelszó" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Ez az űrlap reCAPTCHA-val van biztosítva" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Regisztráció" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kapcsolat" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Néhány elérhetőség, hogy válaszolni tudjunk: (e-mail, stb.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Hozzászólás" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Mit szeretnél mondani?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Nyelv rövid neve" @@ -202,7 +186,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Rövid név, pl.: CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -310,7 +294,7 @@ msgstr "" msgid "Age" msgstr "Kor" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Magasság (cm)" @@ -360,8 +344,7 @@ msgstr "Teljes napi kalória" msgid "Total caloric intake, including e.g. any surplus" msgstr "Teljes kalória bevitel, beleérve pl: bármilyen többlet" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Súly egység" @@ -383,22 +366,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Az órák összegének meg kell egyeznie 24-el" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Név" @@ -418,7 +404,7 @@ msgstr "Az oldal nem található" msgid "The page you requested does not exist." msgstr "A kért oldal nem létezik." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -436,7 +422,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Vissza \"%(target)s\"" @@ -451,14 +437,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Vissza \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Biztosan törölni akarod? Ez a művelet nem visszavonható." @@ -511,11 +489,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Irányítópult" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Nyelvek" @@ -581,7 +555,7 @@ msgstr "Licenc lista" msgid "Nothing found" msgstr "Nincs találat" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -627,7 +601,7 @@ msgid "Exercises" msgstr "Gyakorlatok" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Adminisztráció" @@ -637,7 +611,7 @@ msgstr "Adminisztráció" msgid "Exercise edit history" msgstr "Ellenőrzésre váró gyakorlatok" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Felszerelés" @@ -707,7 +681,7 @@ msgstr "" msgid "Get the code" msgstr "Szerezd meg a kódot" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Lefordítás" @@ -716,36 +690,41 @@ msgstr "Lefordítás" msgid "Reset password" msgstr "Új jelszó igénylése" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Beállításaim" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Kijelentkezés" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Beállításaim" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licencek" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Edzőtermek" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Az új jelszó igénylése sikerült" @@ -801,27 +780,27 @@ msgstr "előző" msgid "next" msgstr "következő" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Bezárás" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Vendég hozzáférést használsz. A használat során bevitt adatok egy hét után " "törlésre kerülnek." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Készíts egy pár demó bejegyzést" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funkciók" @@ -894,23 +873,14 @@ msgstr "Áttekintés" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Dátum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Leírás" @@ -918,7 +888,7 @@ msgstr "Leírás" msgid "Number of logs (days)" msgstr "Bejegyzések száma (napok)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Utolsó tevékenység" @@ -931,12 +901,11 @@ msgstr "Nem található edzés." msgid "Log" msgstr "Bejegyzések" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Általános benyomás" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Megjegyzések" @@ -946,28 +915,27 @@ msgid "Time" msgstr "Idő" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Súly" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energia" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Fehérje" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Szénhidrát" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Zsír" @@ -1027,7 +995,8 @@ msgid "Details" msgstr "Részletek" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "sz." @@ -1113,10 +1082,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Jelszó megváltoztatása" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1144,7 +1117,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Sikeresen törölve" @@ -1153,43 +1126,31 @@ msgstr "Sikeresen törölve" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Töröljem {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "{0} módosítása" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Visszajelzés" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "A visszajelzésed sikeresen elküldtük. Köszönjük!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1199,108 +1160,43 @@ msgstr "A \"{0}\" fiók sikeresen törölve" msgid "You were successfully registered" msgstr "Sikeresen regisztráltál" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Beállítások sikeresen frissítve" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "A felhasználó sikeresen deaktiválva" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "A felhasználó sikeresen aktiválva" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Felhasználó módosítása" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Felhasználónév" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Edzőterem" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategória" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Elsődleges izmok" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Másodlagos izmok" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Gyakorlati kategóriák" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Gyakorlat" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Megjegyzés, hogy hogyan kell helyesen csinálni ezt a gyakorlatot." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Add new exercise" -msgid "Alias for an exercise" -msgstr "Új gyakorlat hozzáadása" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Kép" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latinul, pl.: \"Pectoralis major\"" @@ -1315,58 +1211,19 @@ msgstr "gyakorlat neve" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Nyelv" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Időtartam" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Súly" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Felszerelés lista" @@ -1383,13 +1240,10 @@ msgstr "Gyakorlati kategóriák" msgid "Action" msgstr "Műveletek" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Felhasználó" @@ -1443,10 +1297,6 @@ msgstr "Felszerelés törlése?" msgid "Add muscle" msgstr "Izom hozzáadása" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Csak PNG és JPEG formátumok támogatottak" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add new image" @@ -1517,8 +1367,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1535,12 +1384,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Kezdés dátuma" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1590,12 +1437,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "{} beállításai" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1873,7 +1714,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Ismétlések" @@ -1909,6 +1750,192 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Testsúly napló" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Személyes adat" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Edzés másolása" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Minta edzés" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1959,62 +1986,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sorozatok" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Ismétlés" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Pihenő nap" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Gyakorlat" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Sorrend" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Edzés" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Létrehozás dátuma" - -#: manager/models/routine.py:106 -#, fuzzy -#| msgid "Workout complete!" -msgid "Workout template" -msgstr "Edzés befejezve!" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "A kezdő időpont nem lehet a vég időpont után." @@ -2030,32 +2030,10 @@ msgstr "Semleges" msgid "Good" msgstr "Jó" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Kezdési idő" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Befejezési idő" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2099,161 +2077,47 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Edzés" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Height (cm)" -msgid "Height (in)" -msgstr "Magasság (cm)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (kg)" -msgstr "Testsúly napló" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (lbs)" -msgstr "Testsúly napló" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "Használjon hozzávalókat Angolul is" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Táplálkozási terv" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2307,6 +2171,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2314,10 +2182,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2391,7 +2271,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2408,6 +2288,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Nutrition plan" +msgid "Nutritional data" +msgstr "Táplálkozási terv" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2569,6 +2455,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kapcsolat" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2763,6 +2653,10 @@ msgstr "" msgid "Account" msgstr "Nincs fiókod?" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Irányítópult" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2838,14 +2732,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2941,26 +2835,111 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "Sorozatok" +#~ msgid "Image" +#~ msgstr "Kép" -#~ msgid "Rest day" -#~ msgstr "Pihenő nap" +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Csak PNG és JPEG formátumok támogatottak" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Néhány elérhetőség, hogy válaszolni tudjunk: (e-mail, stb.)" + +#~ msgid "Comment" +#~ msgstr "Hozzászólás" + +#~ msgid "What do you want to say?" +#~ msgstr "Mit szeretnél mondani?" + +#~ msgid "Feedback" +#~ msgstr "Visszajelzés" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "A visszajelzésed sikeresen elküldtük. Köszönjük!" + +#~ msgid "Category" +#~ msgstr "Kategória" + +#~ msgid "Primary muscles" +#~ msgstr "Elsődleges izmok" + +#~ msgid "Secondary muscles" +#~ msgstr "Másodlagos izmok" + +#~ msgid "Exercise Categories" +#~ msgstr "Gyakorlati kategóriák" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Megjegyzés, hogy hogyan kell helyesen csinálni ezt a gyakorlatot." #, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" +#~| msgid "Add new exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Új gyakorlat hozzáadása" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "Súly" + +#~ msgid "Language" +#~ msgstr "Nyelv" + +#~ msgid "Duration" +#~ msgstr "Időtartam" + +#~ msgid "Order" +#~ msgstr "Sorrend" + +#~ msgid "Creation date" +#~ msgstr "Létrehozás dátuma" + +#, fuzzy +#~| msgid "Workout complete!" +#~ msgid "Workout template" +#~ msgstr "Edzés befejezve!" + +#~ msgid "Start time" +#~ msgstr "Kezdési idő" + +#~ msgid "Finish time" +#~ msgstr "Befejezési idő" + +#~ msgid "Nutrition plan" #~ msgstr "Táplálkozási terv" +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Vissza \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "{} beállításai" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "Magasság (cm)" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Testsúly napló" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Testsúly napló" + #~ msgid "Workouts" #~ msgstr "Edzések" #~ msgid "About us" #~ msgstr "Rólunk" -#~ msgid "Sample workout" -#~ msgstr "Minta edzés" - #~ msgid "Sample day" #~ msgstr "Minta nap" @@ -3089,9 +3068,6 @@ msgstr "" #~ msgid "Edit workout" #~ msgstr "Edzés módosítása" -#~ msgid "Copy workout" -#~ msgstr "Edzés másolása" - #~ msgid "Copy" #~ msgstr "Másolás" @@ -3110,9 +3086,6 @@ msgstr "" #~ msgid "Delete schedule" #~ msgstr "Ütemterv törlése" -#~ msgid "Weight log" -#~ msgstr "Testsúly napló" - #~ msgid "Add weight log to this day" #~ msgstr "Testsúly bejegyzés hozzáadása ehhez a naphoz" @@ -3125,8 +3098,8 @@ msgstr "" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new exercise \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "A {0} felhasználó javasolt egy új gyakorlatot \"{1}\"." #~ msgid "Submission date" diff --git a/wger/locale/it/LC_MESSAGES/django.po b/wger/locale/it/LC_MESSAGES/django.po index 8289f26fe..10a9361bf 100644 --- a/wger/locale/it/LC_MESSAGES/django.po +++ b/wger/locale/it/LC_MESSAGES/django.po @@ -15,7 +15,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-09-10 09:02+0000\n" "Last-Translator: Luca Galli \n" "Language-Team: Italian \n" @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Modifica" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Entra" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Nome" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Cognome" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -86,54 +87,54 @@ msgstr "Cognome" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Usato per reimpostare la password e, opzionalmente, per i promemoria via e-" "mail." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Data di nascita" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Dati personali" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Promemoria allenamento" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Altre impostazioni" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Salva" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Usato per reimpostare la password e, opzionalmente, per i promemoria via e-" "mail." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Questo indirizzo e-mail è già in uso." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Password" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Si prega di inserire la tua password attuale." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -150,38 +151,21 @@ msgstr "Si prega di inserire la tua password attuale." msgid "Delete" msgstr "Elimina" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Password non valida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Questo modulo è protetto con reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrati" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contatto" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Un modo per contattarti (e-mail, ecc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Commento" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Che cosa vuoi dire?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Nome breve Lingua" @@ -210,7 +194,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Nome corto, e.g. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -329,7 +313,7 @@ msgstr "" msgid "Age" msgstr "Età" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Altezza (cm)" @@ -379,8 +363,7 @@ msgstr "Totale giornaliero calorico" msgid "Total caloric intake, including e.g. any surplus" msgstr "Totale calorico, incluso es. qualsiasi eccesso calorico" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Unità" @@ -407,22 +390,25 @@ msgstr "" "Numero di giorni dopo l'ultimo inserimento del peso (immettere 0 per " "disattivare)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "La somma di tutte le ore deve essere 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nome" @@ -442,7 +428,7 @@ msgstr "Pagina non trovata" msgid "The page you requested does not exist." msgstr "La pagina richiesta non esiste." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Qualcosa è andato storto" @@ -466,7 +452,7 @@ msgstr "" "Stai visitando il sito come \"%(current_user)s\", tutte le azioni sono " "effettuate sui suoi dati." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Ritorna a «%(target)s»" @@ -484,13 +470,6 @@ msgstr "" "effettuate sui suoi dati.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Ritorna a \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Sei sicuro/a di volerlo eliminare? Questa azione sarà permanente." @@ -540,11 +519,7 @@ msgstr "Il team wger" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Clicca sul seguente link per confermare la tua email: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Pagina principale" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Lingue" @@ -610,7 +585,7 @@ msgstr "Elenco delle licenze" msgid "Nothing found" msgstr "Trovato niente" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Impressum" @@ -652,7 +627,7 @@ msgid "Exercises" msgstr "Esercizi" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Amministrazione" @@ -660,7 +635,7 @@ msgstr "Amministrazione" msgid "Exercise edit history" msgstr "Aggiorna storico esercizi" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Attrezzatura" @@ -730,7 +705,7 @@ msgstr "Documentazione dello sviluppatore" msgid "Get the code" msgstr "Ottieni il codice" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Traduci" @@ -739,36 +714,41 @@ msgstr "Traduci" msgid "Reset password" msgstr "Reimposta la password" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Preferenze" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Esci" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Preferenze" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licenza" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Unità di ripetizione" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Unità peso" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Lista utenti" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Palestre" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "reimpostazione password completata" @@ -829,27 +809,27 @@ msgstr "precedente" msgid "next" msgstr "successivo" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Chiudi" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Stai usando un account ospite, i dati inseriti verranno cancellati dopo una " "settimana." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Crea alcune voci demo" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Termini di servizio" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Caratteristiche" @@ -926,23 +906,14 @@ msgstr "Panoramica" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Data" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descrizione" @@ -950,7 +921,7 @@ msgstr "Descrizione" msgid "Number of logs (days)" msgstr "Numero di registri (giorni)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Ultima attività" @@ -963,12 +934,11 @@ msgstr "Nessun allenamento trovato." msgid "Log" msgstr "Diario" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Impressioni generali" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Note" @@ -978,28 +948,27 @@ msgid "Time" msgstr "Tempo" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Peso" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energie" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteine" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Carboidrati" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Grassi" @@ -1059,7 +1028,8 @@ msgid "Details" msgstr "Dettagli" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Numero" @@ -1145,10 +1115,14 @@ msgstr "Invia email di verifica" msgid "You need to verify your email to contribute exercises" msgstr "Devi confermare l'email per contribuire agli esercizi" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Cambia la password" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1176,7 +1150,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Eliminato con successo" @@ -1185,25 +1159,25 @@ msgstr "Eliminato con successo" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Eliminare {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Modifica {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1214,18 +1188,6 @@ msgstr "" "vedere meglio ciò che questo sito può fare. Sentiti libero di modificarli o " "cancellarli!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Commenti" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Invia" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Il tuo commento è stato mandato con successo. Grazie!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1235,106 +1197,43 @@ msgstr "L'account «{0}» è stato eliminato con successo" msgid "You were successfully registered" msgstr "Ti sei registrato/a con successo" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Impostazioni aggiornate con successo" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Utente è stato disattivato con successo" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Utente è stato attivato con successo" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Modifica utente" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Nome utente" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Palestra" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Un'email di verifica è stata inviata a %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categoria" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Muscoli primari" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Muscoli secondari" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variazioni" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Categorie esercizi" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Esercizio" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Un commento su come eseguire correttamente l'esercizio." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Sinonimo per un esercizio" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linea" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Basso numero di poligoni" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Altro" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Immagine" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Immagine principale" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "In latino es. «Pectoralis major»" @@ -1347,56 +1246,19 @@ msgstr "Nome alternativo" msgid "A more basic name for the muscle" msgstr "Un nome più comune per il muscolo" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Lingua" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "La dimensione massima del file è %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Il tipo di file non è supportato" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Il file non è un video valido" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Video principale" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Dimensione" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Durata" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Larghezza" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Altezza" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, nome completo" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Lista attrezzatura" @@ -1409,13 +1271,10 @@ msgstr "Storico allenamenti admin" msgid "Action" msgstr "Azione" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utente" @@ -1467,10 +1326,6 @@ msgstr "Cancella attrezzatura?" msgid "Add muscle" msgstr "Aggiungi muscolo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Sono supportati solo i formati PNG e JPEG" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Aggiungi immagine" @@ -1537,8 +1392,7 @@ msgid "Contract type" msgstr "Tipo di contratto" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Quantità" @@ -1555,12 +1409,10 @@ msgid "Contract is active" msgstr "Contratto è attivo" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Data di partenza" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Data fine" @@ -1612,11 +1464,6 @@ msgstr "Mostra nome nell'intestazione" msgid "Show the name of the gym in the site header" msgstr "Mostra il nome della palestra nell'intestazione del sito" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Configurazione per {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Panoramica dei membri inattivi" @@ -1898,7 +1745,7 @@ msgstr "Spalliera" msgid "Quads" msgstr "Quadricipiti" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Ripetizioni" @@ -1934,6 +1781,197 @@ msgstr "Fino al Fallimento" msgid "none (bodyweight exercise)" msgstr "nessuno (esercizio a corpo libero)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Contenuto" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Leggenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Diario dei pesi" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Dati personali" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Copia allenamento" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Esempio di allenamento" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Allenamento per %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1986,62 +2024,35 @@ msgstr "Invia e-mail" msgid "Correction" msgstr "Correzione" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Serie" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Ripetizioni" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RiR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "pausa" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Giorno di riposo" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Esercizio" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Il programma scadrà presto" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Programma" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ordine" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sessione" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Allenamento" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Unità" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data di creazione" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Modello di allenamento" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Contrassegnare un allenamento come modello lo bloccherà e ti consentirà di " -"farne delle copie" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Modello pubblico" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Un modello pubblico è disponibile per altri utenti" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "L'ora di inizio non può essere successiva all'ora di fine." @@ -2057,36 +2068,11 @@ msgstr "Neutrale" msgid "Good" msgstr "Buono" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Eventuali note che potresti voler salvare su questa sessione di allenamento." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"La tua impressione su questa sessione di allenamento. Ti sei allenato al " -"meglio?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Inizio" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Fine" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Se inserisci un'ora, devi inserire sia l'ora di inizio che quella di fine." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Giorno di allenamento" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2141,44 +2127,32 @@ msgid "" msgstr "" "Riceverai regolarmente tali promemoria finché non inserisci il peso corrente." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Allenamento" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Allenamento per %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Valore" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Unità" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Altezza (in)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Peso (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Peso (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Calcola" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Assunzione calorica di base" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Il tuo apporto calorico di base calcolato per i tuoi dati" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Calorie aggiuntive" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2186,117 +2160,14 @@ msgstr "" "Calorie aggiuntive da aggiungere alla tariffa base (per sottrarre, inserire " "un numero negativo)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Alimenti" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Usa anche i nomi in inglese" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "In kcal/100 g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "In g per 100 g di prodotto" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Zuccheri contenuti nei carboidrati" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Grassi saturi contenuti nei grassi" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Fibra" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sodio" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Collega al prodotto" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Nome del produttore" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "L'energia totale ({self.energy}kcal) non è la somma approssimata di" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Categorie ingredienti" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Quantità in grammi" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Importo unitario, ad es. «1 tazza» o «1/2 cucchiaio»" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Piano nutrizionale" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Pasto" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Data e Ora (Approssimative)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Orario (approssimativo)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Dai ai pasti una descrizione testuale/nome come \"Colazione\" o \"Dopo " -"l'allenamento\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Una descrizione dell'obiettivo del piano, ad es. «Guadagna massa» o " -"«Preparati per l'estate»" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Usa calorie giornaliere" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Spunta la casella se vuoi contrassegnare questo piano come se avesse una " -"quantità di calorie da raggiungere. Puoi usare la calcolatrice o inserire il " -"valore tu stesso." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2364,6 +2235,10 @@ msgstr "Macronutrienti" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Zuccheri contenuti nei carboidrati" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2371,10 +2246,22 @@ msgstr "kJ" msgid "n.A." msgstr "n.D." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Grassi saturi contenuti nei grassi" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Altri" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Fibra" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sodio" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2467,7 +2354,7 @@ msgstr "" "osserva\n" "te stesso per alcune settimane e modificare l'importo totale, se necessario." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Aggiungi un nuovo ingrediente" @@ -2484,6 +2371,10 @@ msgstr "Piano nutrizionale per %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Questo è un piano vuoto, cosa ti aspettavi dal PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Dati nutrizionali" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Totale" @@ -2672,6 +2563,10 @@ msgstr "" "wger Workout Manager è un'applicazione web gratuita e open source che " "gestisce gli esercizi e gli allenamenti." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contatto" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "App mobile" @@ -2875,6 +2770,10 @@ msgstr "" msgid "Account" msgstr "Account" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Pagina principale" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Routine di allenamento" @@ -2949,14 +2848,14 @@ msgstr "Formato data" msgid "You have to enter your weight" msgstr "Devi inserire il tuo peso" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Voce del peso" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importa i registri del peso" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Invia" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3078,6 +2977,233 @@ msgstr "" msgid "Re-Submit" msgstr "Re-Invia" +#~ msgid "Image" +#~ msgstr "Immagine" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Sono supportati solo i formati PNG e JPEG" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Un modo per contattarti (e-mail, ecc.)" + +#~ msgid "Comment" +#~ msgstr "Commento" + +#~ msgid "What do you want to say?" +#~ msgstr "Che cosa vuoi dire?" + +#~ msgid "Feedback" +#~ msgstr "Commenti" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Il tuo commento è stato mandato con successo. Grazie!" + +#~ msgid "Category" +#~ msgstr "Categoria" + +#~ msgid "Primary muscles" +#~ msgstr "Muscoli primari" + +#~ msgid "Secondary muscles" +#~ msgstr "Muscoli secondari" + +#~ msgid "Variations" +#~ msgstr "Variazioni" + +#~ msgid "Exercise Categories" +#~ msgstr "Categorie esercizi" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Un commento su come eseguire correttamente l'esercizio." + +#~ msgid "Alias for an exercise" +#~ msgstr "Sinonimo per un esercizio" + +#~ msgid "Line" +#~ msgstr "Linea" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Basso numero di poligoni" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Altro" + +#~ msgid "Height" +#~ msgstr "Altezza" + +#~ msgid "Width" +#~ msgstr "Larghezza" + +#~ msgid "Main picture" +#~ msgstr "Immagine principale" + +#~ msgid "Language" +#~ msgstr "Lingua" + +#~ msgid "Main video" +#~ msgstr "Video principale" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Dimensione" + +#~ msgid "Duration" +#~ msgstr "Durata" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, nome completo" + +#~ msgid "Routine" +#~ msgstr "Programma" + +#~ msgid "Order" +#~ msgstr "Ordine" + +#~ msgid "Session" +#~ msgstr "Sessione" + +#~ msgid "Creation date" +#~ msgstr "Data di creazione" + +#~ msgid "Workout template" +#~ msgstr "Modello di allenamento" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Contrassegnare un allenamento come modello lo bloccherà e ti consentirà " +#~ "di farne delle copie" + +#~ msgid "Public template" +#~ msgstr "Modello pubblico" + +#~ msgid "A public template is available to other users" +#~ msgstr "Un modello pubblico è disponibile per altri utenti" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Eventuali note che potresti voler salvare su questa sessione di " +#~ "allenamento." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "La tua impressione su questa sessione di allenamento. Ti sei allenato al " +#~ "meglio?" + +#~ msgid "Start time" +#~ msgstr "Inizio" + +#~ msgid "Finish time" +#~ msgstr "Fine" + +#~ msgid "Exercise day" +#~ msgstr "Giorno di allenamento" + +#~ msgid "Value" +#~ msgstr "Valore" + +#~ msgid "In kcal per 100g" +#~ msgstr "In kcal/100 g" + +#~ msgid "In g per 100g of product" +#~ msgstr "In g per 100 g di prodotto" + +#~ msgid "Link to product" +#~ msgstr "Collega al prodotto" + +#~ msgid "Brand name of product" +#~ msgstr "Nome del produttore" + +#~ msgid "Ingredient Categories" +#~ msgstr "Categorie ingredienti" + +#~ msgid "Amount in grams" +#~ msgstr "Quantità in grammi" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Importo unitario, ad es. «1 tazza» o «1/2 cucchiaio»" + +#~ msgid "Nutrition plan" +#~ msgstr "Piano nutrizionale" + +#~ msgid "Meal" +#~ msgstr "Pasto" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Data e Ora (Approssimative)" + +#~ msgid "Time (approx)" +#~ msgstr "Orario (approssimativo)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Dai ai pasti una descrizione testuale/nome come \"Colazione\" o \"Dopo " +#~ "l'allenamento\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Una descrizione dell'obiettivo del piano, ad es. «Guadagna massa» o " +#~ "«Preparati per l'estate»" + +#~ msgid "Use daily calories" +#~ msgstr "Usa calorie giornaliere" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Spunta la casella se vuoi contrassegnare questo piano come se avesse una " +#~ "quantità di calorie da raggiungere. Puoi usare la calcolatrice o inserire " +#~ "il valore tu stesso." + +#~ msgid "Weight entry" +#~ msgstr "Voce del peso" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Ritorna a \"%(target)s\"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configurazione per {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Altezza (in)" + +#~ msgid "Weight (kg)" +#~ msgstr "Peso (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Peso (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Calcola" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "L'energia totale ({self.energy}kcal) non è la somma approssimata di" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3090,21 +3216,6 @@ msgstr "Re-Invia" #~ msgid "The art style of your image" #~ msgstr "Lo stile artistico della tua immagine" -#~ msgid "Sets" -#~ msgstr "Serie" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "rest" -#~ msgstr "pausa" - -#~ msgid "Rest day" -#~ msgstr "Giorno di riposo" - -#~ msgid "Nutritional data" -#~ msgstr "Dati nutrizionali" - #~ msgid "Workouts" #~ msgstr "Allenamento" @@ -3149,9 +3260,6 @@ msgstr "Re-Invia" #~ "Ottieni il codice sorgente di questa applicazione e del suo server su " #~ "GitHub" -#~ msgid "Sample workout" -#~ msgstr "Esempio di allenamento" - #~ msgid "Sample day" #~ msgstr "Esempio di giorno" @@ -3553,9 +3661,6 @@ msgstr "Re-Invia" #~ msgid "Edit workout" #~ msgstr "Modifica allenamento" -#~ msgid "Copy workout" -#~ msgstr "Copia allenamento" - #~ msgid "Copy" #~ msgstr "Copia" @@ -3590,9 +3695,6 @@ msgstr "Re-Invia" #~ msgid "Your BMI is: " #~ msgstr "Il tuo IMC è " -#~ msgid "Legend" -#~ msgstr "Leggenda" - #~ msgid "Adipositas III" #~ msgstr "Obesità III" @@ -3665,9 +3767,6 @@ msgstr "Re-Invia" #~ msgid "Delete schedule" #~ msgstr "Elimina programma" -#~ msgid "Weight log" -#~ msgstr "Diario dei pesi" - #~ msgid "Weight log for workout" #~ msgstr "Registro di peso per allenamento" @@ -3733,11 +3832,11 @@ msgstr "Re-Invia" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" -#~ "L'utente {request.user.username} ha inviato un nuovo ingrediente \"{self." -#~ "name}\"." +#~ "L'utente {request.user.username} ha inviato un nuovo ingrediente " +#~ "\"{self.name}\"." #~ msgid "Submission date" #~ msgstr "Data di inserimento" @@ -4464,8 +4563,8 @@ msgstr "Re-Invia" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4474,8 +4573,8 @@ msgstr "Re-Invia" #~ "interessato.\n" #~ "Se sei nuovo/a nel mondo del software libero, ti consigliamo di prendere " #~ "visione\n" -#~ "di questo\n" +#~ "di questo\n" #~ "articolo che riassume in che modo i progetti con codice sorgente " #~ "aperto funzionano molto bene. " diff --git a/wger/locale/ja/LC_MESSAGES/django.po b/wger/locale/ja/LC_MESSAGES/django.po index 8c64845af..fe72194cb 100644 --- a/wger/locale/ja/LC_MESSAGES/django.po +++ b/wger/locale/ja/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-09-22 11:52+0000\n" "Last-Translator: Ryohei Morimoto \n" "Language-Team: Japanese \n" @@ -56,23 +56,24 @@ msgstr "" msgid "Edit" msgstr "編集" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "ログイン" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "名前" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "姓" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -82,54 +83,54 @@ msgstr "姓" msgid "Email" msgstr "メール" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "パスワードの再設定、またはオプションとしてメールのリマインダー通知に使用され" "ます。" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "生年月日" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "パーソナルデータ" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "ワークアウトリマインダー通知" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "その他の設定" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "保存" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 #, fuzzy #| msgid "This email is already used." msgid "This e-mail address is already in use." msgstr "このメールアドレスは既に登録済みです。" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "パスワード" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "現在のパスワードを入力してください。" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -146,38 +147,21 @@ msgstr "現在のパスワードを入力してください。" msgid "Delete" msgstr "削除" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "パスワードは無効です。" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "登録" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "問い合わせ" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "コメント" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "言語省略名" @@ -206,7 +190,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "リンク" @@ -309,7 +293,7 @@ msgstr "" msgid "Age" msgstr "年齢" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "身長(cm)" @@ -359,8 +343,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "体重の単位" @@ -382,22 +365,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -417,7 +403,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -435,7 +421,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -450,13 +436,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -509,11 +488,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "ダッシュボード" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "言語" @@ -579,7 +554,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -621,7 +596,7 @@ msgid "Exercises" msgstr "運動" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -631,7 +606,7 @@ msgstr "" msgid "Exercise edit history" msgstr "運動" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -701,7 +676,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "翻訳" @@ -710,36 +685,41 @@ msgstr "翻訳" msgid "Reset password" msgstr "パスワード再設定" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "ロッグアウト" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -795,25 +775,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "閉じる" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "使用条件" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -886,23 +866,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "日付" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -910,7 +881,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -923,12 +894,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -938,28 +908,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "体重" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "エネルギー" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "タンパク質" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "炭水化物" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "脂肪質" @@ -1019,7 +988,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1105,10 +1075,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1136,7 +1110,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1145,43 +1119,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1191,106 +1153,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1303,58 +1202,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "表示言語" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "体重" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1369,13 +1229,10 @@ msgstr "" msgid "Action" msgstr "オプション" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1427,10 +1284,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add member" @@ -1499,8 +1352,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1517,12 +1369,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1572,11 +1422,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1856,7 +1701,7 @@ msgstr "プルアップ・バー" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "回数" @@ -1894,6 +1739,176 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "パーソナルデータ" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1944,60 +1959,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "セット" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "回" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "単位" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -2013,32 +2003,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2082,159 +2050,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "単位" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Height (cm)" -msgid "Height (in)" -msgstr "身長(cm)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Height (cm)" -msgid "Weight (kg)" -msgstr "身長(cm)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Height (cm)" -msgid "Weight (lbs)" -msgstr "身長(cm)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "基礎カロリー摂取量" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "材料" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "ナトリウム" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2288,6 +2142,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2295,10 +2153,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "ナトリウム" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2372,7 +2242,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2389,6 +2259,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Personal data" +msgid "Nutritional data" +msgstr "パーソナルデータ" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2548,6 +2424,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "問い合わせ" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2732,6 +2612,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "ダッシュボード" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2805,14 +2689,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2908,13 +2792,31 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "セット" +#~ msgid "Comment" +#~ msgstr "コメント" #, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "パーソナルデータ" +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "体重" + +#~ msgid "Language" +#~ msgstr "表示言語" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "身長(cm)" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Weight (kg)" +#~ msgstr "身長(cm)" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Weight (lbs)" +#~ msgstr "身長(cm)" #~ msgid "Add workout" #~ msgstr "ワークアウトを追加する" diff --git a/wger/locale/ko/LC_MESSAGES/django.po b/wger/locale/ko/LC_MESSAGES/django.po index bc3d24f13..e6c72ee07 100644 --- a/wger/locale/ko/LC_MESSAGES/django.po +++ b/wger/locale/ko/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-05-29 07:01+0000\n" "Last-Translator: kobo \n" "Language-Team: Korean \n" @@ -52,23 +52,24 @@ msgstr "" msgid "Edit" msgstr "편집" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "로그인" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "이름" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "성" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -78,50 +79,50 @@ msgstr "성" msgid "Email" msgstr "이메일" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "생일" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "개인 정보" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Workout 리마인더" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "기타 설정" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "저장" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "이 이메일 주소는 이미 사용중입니다." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "비밀번호" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "현재 비밀번호를 입력해주세요." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -138,38 +139,21 @@ msgstr "현재 비밀번호를 입력해주세요." msgid "Delete" msgstr "삭제" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "유효하지 않은 비밀번호" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "양식은 reCAPTCHA로 보호됩니다" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "등록" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "연락" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "답변방법 (이메일 등)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "댓글" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "어떤말을 하고 싶은가요?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "언어 코드" @@ -198,7 +182,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "짧은 이름, 예: CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "링크" @@ -309,7 +293,7 @@ msgstr "" msgid "Age" msgstr "나이" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "키 (cm)" @@ -359,8 +343,7 @@ msgstr "총 일일 칼로리" msgid "Total caloric intake, including e.g. any surplus" msgstr "예를 들어 잉여분을 포함한 총 칼로리 섭취량" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "몸무게 단위" @@ -384,22 +367,25 @@ msgstr "체중 입력에 대한 자동 알림" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "마지막 체중 입력 후 경과 일수(비활성화하려면 0 입력)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "모든 시간의 합은 24이어야 합니다" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "이름" @@ -419,7 +405,7 @@ msgstr "페이지를 찾을 수 없습니다" msgid "The page you requested does not exist." msgstr "요청하신 페이지가 존재하지 않습니다." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "에러 발생" @@ -442,7 +428,7 @@ msgstr "" "\"%(current_user)s\" 계정으로 사이트를 탐색하고 있습니다, 모든 작업은 해당 데" "이터를 대상으로 수행됩니다." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "\"%(target)s\"로 이동" @@ -461,13 +447,6 @@ msgstr "" " 해당 사용자의 데이터를 기반으로 수행됩니다.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "\"%(target)s\"로 이동" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "이 항목을 삭제하시겠습니까? 이 작업은 취소할 수 없습니다." @@ -516,11 +495,7 @@ msgstr "wger 팀" msgid "Please click the following link to confirm your email: %(link)s" msgstr "다음 링크를 클릭하여 이메일을 확인하세요: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "대시보드" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "언어" @@ -586,7 +561,7 @@ msgstr "라이센스 리스트" msgid "Nothing found" msgstr "데이터가 없습니다" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "날인" @@ -628,7 +603,7 @@ msgid "Exercises" msgstr "운동" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "관리" @@ -636,7 +611,7 @@ msgstr "관리" msgid "Exercise edit history" msgstr "운동 편집 이력" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "장비" @@ -706,7 +681,7 @@ msgstr "개발 가이드" msgid "Get the code" msgstr "코드 정보" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "번역" @@ -715,36 +690,41 @@ msgstr "번역" msgid "Reset password" msgstr "비밀번호 변경" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "내 환경설정" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "로그아웃" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "내 환경설정" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "라이선스" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "반복 단위" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "무게 단위" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "사용자 리스트" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "체육관" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "비밀번호 변경 완료" @@ -804,27 +784,27 @@ msgstr "이전" msgid "next" msgstr "다음" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "닫기" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "귀하는 게스트 계정을 사용하고 계시므로, 입력하신 데이터는 일주일 후 삭제됩니" "다." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "데모용 계정 만들기" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "서비스 약관" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "특징" @@ -900,23 +880,14 @@ msgstr "개요" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "일자" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "설명" @@ -924,7 +895,7 @@ msgstr "설명" msgid "Number of logs (days)" msgstr "로그 수(일)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "최종 활동" @@ -937,12 +908,11 @@ msgstr "Workout을 찾을 수 없음." msgid "Log" msgstr "로그" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "일반적인 인상" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "메모" @@ -952,28 +922,27 @@ msgid "Time" msgstr "시간" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "몸무게" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "에너지" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "단백질" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "탄수화물" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "지방" @@ -1033,7 +1002,8 @@ msgid "Details" msgstr "세부정보" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1119,10 +1089,14 @@ msgstr "확인 이메일 보내기" msgid "You need to verify your email to contribute exercises" msgstr "운동에 참여하려면 이메일을 확인해야 합니다" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "비밀번호 변경" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1150,7 +1124,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "삭제 성공" @@ -1159,25 +1133,25 @@ msgstr "삭제 성공" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "{0} 삭제하시겠어요?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "{0} 편집" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1186,18 +1160,6 @@ msgstr "" "이 사이트의 기능을 더 잘 확인하실 수 있도록 샘플 운동, 운동 일정, 체중 기록, " "(신체) 체중 및 영양 계획 항목을 만들었습니다. 자유롭게 수정하거나 삭제하세요!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "피드백" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "보내기" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "피드백이 성공적으로 전송되었습니다. 감사합니다!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1207,106 +1169,43 @@ msgstr "계정 \"{0}\"이 성공적으로 삭제되었습니다" msgid "You were successfully registered" msgstr "성공적으로 등록되었습니다" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "설정이 업데이트 되었습니다" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "사용자가 성공적으로 비활성화되었습니다" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "사용자가 성공적으로 활성화되었습니다" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "사용자 편집" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "사용자이름" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "짐" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "%(email)s로 확인 이메일이 전송되었습니다" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "카테고리" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "주 근육" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "이차 근육" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "변형" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "예시 카테고리" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "예시" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "이 운동을 올바르게 하는 방법에 대한 의견." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "운동의 별칭" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "줄" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Low-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "사진" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "기타" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "이미지" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "메인 그림" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "라틴어로 예를 들어 \"Pectoralis major\"" @@ -1319,56 +1218,19 @@ msgstr "대체명" msgid "A more basic name for the muscle" msgstr "근육에 대한 보다 기본적인 이름" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "언어" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "최대 파일 크기는 %(size)sMB입니다." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "파일 유형이 지원되지 않습니다" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "파일이 유효한 비디오가 아닙니다" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "메인 비디오" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "비디오" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "크기" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "기간" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "너비" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "키" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "코덱" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "코덱명이 너무 깁니다" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "장비 리스트" @@ -1381,13 +1243,10 @@ msgstr "운동 관리 기록" msgid "Action" msgstr "활동" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "사용자" @@ -1439,10 +1298,6 @@ msgstr "장비를 삭제하시겠습니까?" msgid "Add muscle" msgstr "근육 추가" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "PNG,JPEG 포맷만 지원합니다" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "이미지 추가" @@ -1509,8 +1364,7 @@ msgid "Contract type" msgstr "계약 유형" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "양" @@ -1527,12 +1381,10 @@ msgid "Contract is active" msgstr "계약이 활성화되었습니다" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "시작 날짜" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "종료 날짜" @@ -1584,11 +1436,6 @@ msgstr "헤더에 이름 표시" msgid "Show the name of the gym in the site header" msgstr "Site Header에 Gym 이름 표시" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "비활성 회원 개요" @@ -1867,7 +1714,7 @@ msgstr "풀업바" msgid "Quads" msgstr "쿼드" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "반복" @@ -1903,6 +1750,193 @@ msgstr "실패 전까지" msgid "none (bodyweight exercise)" msgstr "없음(체중 운동)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "내용" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "개인 정보" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "샘플 Workout" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "%s 를 위한 운동" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1954,60 +1988,35 @@ msgstr "이메일 보내기" msgid "Correction" msgstr "보정" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "세트" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "랩스" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RiR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "휴식" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "휴식" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "예시" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "루틴이 곧 만료됩니다" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "루틴" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "주문" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "세션" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "운동" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "단위" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "생성일" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "운동 알림 템플릿" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "운동을 템플릿으로 표시하면 운동이 고정되고 사본을 만들 수 있습니다" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "공개 템플릿" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "공개 템플릿은 다른 사용자에게 제공됩니다" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "시작 시간은 종료 시간 이후일 수 없습니다." @@ -2023,32 +2032,10 @@ msgstr "중립적" msgid "Good" msgstr "좋은" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "이 운동 세션에 관해 저장하고 싶은 메모가 있나요." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "이 운동 세션에 대한 당신의 인상은 어떠셨나요? 최대한 잘 운동하셨나요?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "시작 시간" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "종료 시간" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "시간을 입력하는 경우 시작 시간과 종료 시간을 모두 입력해야 합니다." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "운동한 날" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2099,157 +2086,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "현재 체중을 입력할 때까지 이러한 알림을 정기적으로 받게 됩니다." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "운동" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "%s 를 위한 운동" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "값" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "단위" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "키 (in)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "체중(kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "체중 (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "계산" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "기본 칼로리 섭취량" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "귀하의 데이터에 따라 계산된 기본 칼로리 섭취량" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "추가적인 칼로리" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "기본에 추가할 칼로리 (빼려면 음수 입력)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "성분" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "영어 이름도 검색해 보세요" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "100g 당 1kcal" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "제품 100g당 g" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "탄수화물의 당 함량" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "지방의 포화지방 함량" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "섬유질" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "나트륨" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "제품 링크" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "제품의 브랜드 이름" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "성분 카테고리" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "그램당 함유량" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "단위 수량, 예: \"1컵\" 또는 \"1/2스푼\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "영양 계획" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "식사" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "날짜 및 시간(대략)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "시간(대략)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"\"아침 식사\" 또는 \"운동 후\"와 같이 식사에 대한 텍스트 설명/이름을 지정하세" -"요" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "계획의 목표에 대한 설명(예: \"체중 증가\" 또는 \"여름 준비\")" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "일일 사용 칼로리" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"이 계획에 목표 칼로리량을 설정하려면 체크 표시를 하세요. 계산기를 사용하거나 " -"직접 값을 입력할 수 있습니다." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2313,6 +2188,10 @@ msgstr "다량 영양소" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "탄수화물의 당 함량" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2320,10 +2199,22 @@ msgstr "kJ" msgid "n.A." msgstr "n.A." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "지방의 포화지방 함량" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "기타" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "섬유질" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "나트륨" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2412,7 +2303,7 @@ msgstr "" "이 값을 기준으로 영양 계획을 세우는 경우, 몇 주 동안 자신의 상태를 관찰하고\n" "필요에 따라 총량을 변경하세요." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "새로운 성분 추가" @@ -2429,6 +2320,10 @@ msgstr "%s의 영양 계획" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "이건 빈 계획인데, PDF에서 무엇을 기대하셨나요?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "영양 데이터" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "총" @@ -2609,6 +2504,10 @@ msgstr "" "wger 운동 관리기는 운동과 훈련을 관리하는 무료 오픈 소스 웹 애플리케이션입니" "다." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "연락" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "모바일 앱" @@ -2803,6 +2702,10 @@ msgstr "" msgid "Account" msgstr "계정" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "대시보드" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "운동 루틴" @@ -2876,14 +2779,14 @@ msgstr "날짜 포맷" msgid "You have to enter your weight" msgstr "체중을 입력해야 합니다" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "체중 입력" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "체중 기록 가져오기" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "보내기" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3002,6 +2905,216 @@ msgstr "" msgid "Re-Submit" msgstr "다시 제출" +#~ msgid "Image" +#~ msgstr "이미지" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "PNG,JPEG 포맷만 지원합니다" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "답변방법 (이메일 등)" + +#~ msgid "Comment" +#~ msgstr "댓글" + +#~ msgid "What do you want to say?" +#~ msgstr "어떤말을 하고 싶은가요?" + +#~ msgid "Feedback" +#~ msgstr "피드백" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "피드백이 성공적으로 전송되었습니다. 감사합니다!" + +#~ msgid "Category" +#~ msgstr "카테고리" + +#~ msgid "Primary muscles" +#~ msgstr "주 근육" + +#~ msgid "Secondary muscles" +#~ msgstr "이차 근육" + +#~ msgid "Variations" +#~ msgstr "변형" + +#~ msgid "Exercise Categories" +#~ msgstr "예시 카테고리" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "이 운동을 올바르게 하는 방법에 대한 의견." + +#~ msgid "Alias for an exercise" +#~ msgstr "운동의 별칭" + +#~ msgid "Line" +#~ msgstr "줄" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Low-poly" + +#~ msgid "Photo" +#~ msgstr "사진" + +#~ msgid "Other" +#~ msgstr "기타" + +#~ msgid "Height" +#~ msgstr "키" + +#~ msgid "Width" +#~ msgstr "너비" + +#~ msgid "Main picture" +#~ msgstr "메인 그림" + +#~ msgid "Language" +#~ msgstr "언어" + +#~ msgid "Main video" +#~ msgstr "메인 비디오" + +#~ msgid "Video" +#~ msgstr "비디오" + +#~ msgid "Size" +#~ msgstr "크기" + +#~ msgid "Duration" +#~ msgstr "기간" + +#~ msgid "Codec" +#~ msgstr "코덱" + +#~ msgid "Codec, long name" +#~ msgstr "코덱명이 너무 깁니다" + +#~ msgid "Routine" +#~ msgstr "루틴" + +#~ msgid "Order" +#~ msgstr "주문" + +#~ msgid "Session" +#~ msgstr "세션" + +#~ msgid "Creation date" +#~ msgstr "생성일" + +#~ msgid "Workout template" +#~ msgstr "운동 알림 템플릿" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "운동을 템플릿으로 표시하면 운동이 고정되고 사본을 만들 수 있습니다" + +#~ msgid "Public template" +#~ msgstr "공개 템플릿" + +#~ msgid "A public template is available to other users" +#~ msgstr "공개 템플릿은 다른 사용자에게 제공됩니다" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "이 운동 세션에 관해 저장하고 싶은 메모가 있나요." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "이 운동 세션에 대한 당신의 인상은 어떠셨나요? 최대한 잘 운동하셨나요?" + +#~ msgid "Start time" +#~ msgstr "시작 시간" + +#~ msgid "Finish time" +#~ msgstr "종료 시간" + +#~ msgid "Exercise day" +#~ msgstr "운동한 날" + +#~ msgid "Value" +#~ msgstr "값" + +#~ msgid "In kcal per 100g" +#~ msgstr "100g 당 1kcal" + +#~ msgid "In g per 100g of product" +#~ msgstr "제품 100g당 g" + +#~ msgid "Link to product" +#~ msgstr "제품 링크" + +#~ msgid "Brand name of product" +#~ msgstr "제품의 브랜드 이름" + +#~ msgid "Ingredient Categories" +#~ msgstr "성분 카테고리" + +#~ msgid "Amount in grams" +#~ msgstr "그램당 함유량" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "단위 수량, 예: \"1컵\" 또는 \"1/2스푼\"" + +#~ msgid "Nutrition plan" +#~ msgstr "영양 계획" + +#~ msgid "Meal" +#~ msgstr "식사" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "날짜 및 시간(대략)" + +#~ msgid "Time (approx)" +#~ msgstr "시간(대략)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "\"아침 식사\" 또는 \"운동 후\"와 같이 식사에 대한 텍스트 설명/이름을 지정" +#~ "하세요" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "계획의 목표에 대한 설명(예: \"체중 증가\" 또는 \"여름 준비\")" + +#~ msgid "Use daily calories" +#~ msgstr "일일 사용 칼로리" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "이 계획에 목표 칼로리량을 설정하려면 체크 표시를 하세요. 계산기를 사용하거" +#~ "나 직접 값을 입력할 수 있습니다." + +#~ msgid "Weight entry" +#~ msgstr "체중 입력" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "\"%(target)s\"로 이동" + +#~ msgid "Height (in)" +#~ msgstr "키 (in)" + +#~ msgid "Weight (kg)" +#~ msgstr "체중(kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "체중 (lbs)" + +#~ msgid "Calculate" +#~ msgstr "계산" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3013,27 +3126,9 @@ msgstr "다시 제출" #~ msgid "The art style of your image" #~ msgstr "이미지의 아트 스타일" -#~ msgid "Sets" -#~ msgstr "세트" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "rest" -#~ msgstr "휴식" - -#~ msgid "Rest day" -#~ msgstr "휴식" - -#~ msgid "Nutritional data" -#~ msgstr "영양 데이터" - #~ msgid "Workouts" #~ msgstr "Workouts" -#~ msgid "Sample workout" -#~ msgstr "샘플 Workout" - #~ msgid "Sample day" #~ msgstr "예시 일" diff --git a/wger/locale/nl/LC_MESSAGES/django.po b/wger/locale/nl/LC_MESSAGES/django.po index 739f8f6ef..b4a4dde9a 100644 --- a/wger/locale/nl/LC_MESSAGES/django.po +++ b/wger/locale/nl/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-12-20 11:00+0000\n" "Last-Translator: Floris C \n" "Language-Team: Dutch \n" @@ -59,23 +59,24 @@ msgstr "" msgid "Edit" msgstr "Bewerk" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Aanmelden" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Voornaam" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Achternaam" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -85,54 +86,54 @@ msgstr "Achternaam" msgid "Email" msgstr "E-mail" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Gebruikt voor het opnieuw-instellen van wachtwoorden en, optioneel, e-" "mailherinneringen." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Geboortedatum" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Persoonlijke gegevens" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Workout-herinneringen" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Overige instellingen" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Opslaan" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Wordt gebruikt voor het resetten van een wachtwoord en optioneel voor e-mail " "herinneringen." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Dit e-mailadres wordt al gebruikt." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Wachtwoord" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Gelieve je huidige wachtwoord in te geven." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -149,38 +150,21 @@ msgstr "Gelieve je huidige wachtwoord in te geven." msgid "Delete" msgstr "Verwijder" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ongeldig wachtwoord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Dit formulier is beveiligd met reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registreer" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Een manier om je van antwoorden te voorzien (e-mail, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Opmerking" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Wat wil je zeggen?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Taal korte notatie" @@ -210,7 +194,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Korte naam, bijv. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -328,7 +312,7 @@ msgstr "" msgid "Age" msgstr "Leeftijd" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Hoogte (cm)" @@ -378,8 +362,7 @@ msgstr "Totale dagelijkse calorieën" msgid "Total caloric intake, including e.g. any surplus" msgstr "Totale calorie-inname, inclusief bvb. enige surplus" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Gewichteenheid" @@ -405,22 +388,25 @@ msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" "Aantal dagen na de laatste gewichtsingave ( geef 0 in om te deactiveren )" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Het toaal van alle uren moet 24 zijn" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Naam" @@ -440,7 +426,7 @@ msgstr "Pagina niet gevonden" msgid "The page you requested does not exist." msgstr "De pagina die je verzocht bestaat niet." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Er is een fout opgetreden" @@ -463,7 +449,7 @@ msgstr "" "Je bezoekt de website als gebruiker \"%(current_user)s\", alle acties worden " "uitgevoerd op eigen data." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Terug naar \"%(target)s\"" @@ -479,19 +465,10 @@ msgid "" msgstr "" "Je bezoekt\n" "\n" -" de website als gebruiker \"%" -"(current_user)s\", alle acties worden uitgevoerd op eigen data\n" +" de website als gebruiker " +"\"%(current_user)s\", alle acties worden uitgevoerd op eigen data\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Terug naar \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -542,11 +519,7 @@ msgstr "het wger Team" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Aub, klik op de volgende link om je email te bevestigen %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Dashboard" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Talen" @@ -612,7 +585,7 @@ msgstr "Licentielijst" msgid "Nothing found" msgstr "Niets gevonden" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Afdruk" @@ -654,7 +627,7 @@ msgid "Exercises" msgstr "Oefeningen" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administratie" @@ -662,7 +635,7 @@ msgstr "Administratie" msgid "Exercise edit history" msgstr "Oefening bewerkings historie" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Materiaal" @@ -732,7 +705,7 @@ msgstr "Developer documentatie" msgid "Get the code" msgstr "Download de code" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Vertaal" @@ -741,36 +714,41 @@ msgstr "Vertaal" msgid "Reset password" msgstr "Reset wachtwoord" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mijn voorkeuren" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Afmelden" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mijn voorkeuren" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licenties" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Herhalingen" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Gewichteenheden" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Gebruikerslijst" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Gyms" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Wachtwoord-reset voltooid" @@ -831,26 +809,26 @@ msgstr "vorige" msgid "next" msgstr "volgende" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Sluit" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Je gebruikt een gastaccount, ingevoerde data wordt verwijderd na een week." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Maak wat demo-ingaven aan" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Algemene voorwaarden" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Functies" @@ -925,23 +903,14 @@ msgstr "Overzicht" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Datum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschrijving" @@ -949,7 +918,7 @@ msgstr "Beschrijving" msgid "Number of logs (days)" msgstr "Aantal logs (dagen)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Laatste activiteit" @@ -962,12 +931,11 @@ msgstr "Geen workouts gevonden." msgid "Log" msgstr "Log" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Algemene indruk" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notities" @@ -977,28 +945,27 @@ msgid "Time" msgstr "Tijd" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Gewicht" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energie" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteïnen" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Koolhydraten" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Vet" @@ -1058,7 +1025,8 @@ msgid "Details" msgstr "Details" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1144,10 +1112,14 @@ msgstr "Verzend verificatie email" msgid "You need to verify your email to contribute exercises" msgstr "Je moet jouw email nog bevestigen om oefeningen te plaatsen" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Verander wachtwoord" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1175,7 +1147,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Met succes verwijderd" @@ -1184,25 +1156,25 @@ msgstr "Met succes verwijderd" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Verwijder {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Bewerk {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1212,18 +1184,6 @@ msgstr "" "(lichaam)gewicht en voedingsplannen aangemaakt zodat je beter kan zien wat " "deze site allemaal kan. Voel je vrij om ze te bewerken of verwijderen!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Feedback" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Insturen" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Je feedback werd met succes verzonden. Bedankt!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1233,106 +1193,43 @@ msgstr "Account \"{0}\" werd met succes verwijderd" msgid "You were successfully registered" msgstr "Je bent met succes geregistreerd" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Instellingen met succes aangepast" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "De gebruiker werd met succes gedeactiveerd" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "De gebruiker werd met succes geactiveerd" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Bewerk gebruiker" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Gebruikersnaam" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Gym" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Een verificatie email is verstuurd naar %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categorie" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Primaire spieren" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Secundaire spieren" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variaties" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Oefeningcategorieën" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Oefening" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Een opmerking over hoe je deze oefening correct kan uitvoeren." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Alias voor een oefening" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Regel" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Lage-poly" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Andere" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Afbeelding" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Hoofdafbeelding" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latijns, bvb. \"Pectoralis major\"" @@ -1345,56 +1242,19 @@ msgstr "Alternatieve naam" msgid "A more basic name for the muscle" msgstr "Een vereenvoudigde naam voor de spier" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Taal" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Maximale bestandsgrootte is %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Bestandstype wordt niet ondersteund" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Bestand is geen geldige video" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Hoofd video" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Grootte" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Duur" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Breedte" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Hoogte" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, lange naam" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Materiaallijst" @@ -1407,13 +1267,10 @@ msgstr "Admin oefening geschiedenis" msgid "Action" msgstr "Actie" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Gebruiker" @@ -1465,10 +1322,6 @@ msgstr "Materiaal verwijderen?" msgid "Add muscle" msgstr "Creëer spier" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Enkel PNG en JPEG-formaten worden ondersteund" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Voeg afbeelding toe" @@ -1536,8 +1389,7 @@ msgid "Contract type" msgstr "Contracttype" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Hoeveelheid" @@ -1554,12 +1406,10 @@ msgid "Contract is active" msgstr "Contract is actief" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Startdatum" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Einddatum" @@ -1611,11 +1461,6 @@ msgstr "Toon naam in hoofding" msgid "Show the name of the gym in the site header" msgstr "Toon de naam van de gym in de hoofding van de site" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Configuratie voor {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Overzicht van inactieve leden" @@ -1895,7 +1740,7 @@ msgstr "Optrekstaaf" msgid "Quads" msgstr "Quads" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Herhalingen" @@ -1931,6 +1776,197 @@ msgstr "Tot je faalt" msgid "none (bodyweight exercise)" msgstr "Geen (oefening met lichaamsgewicht)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Inhoud" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legende" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Gewichtlog" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Persoonlijke gegevens" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Kopieer workout" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Voorbeeldworkout" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Workout voor %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1983,62 +2019,35 @@ msgstr "Verzend e-mails" msgid "Correction" msgstr "Verbetering" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Sets" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Herhalingen" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RiR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "rust" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Rustdag" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Oefening" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Routine zal spoedig vervallen" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Volgorde" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sessie" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Workout" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Eenheid" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Creatiedatum" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Workout template" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Door een workout als template te markeren zal deze niet meer aan te passen " -"zijn en je in staat stellen om er kopieën van te maken" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Publieke template" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Een publieke template is beschikbaar voor andere gebruikers" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "De startijd kan niet na de eindtijd liggen." @@ -2054,34 +2063,10 @@ msgstr "Neutraal" msgid "Good" msgstr "Goed" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Eenderwelke opmerking die je wil bewarne over deze workout-sessie." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Je indruk over deze workout-sessie. Voerde je de oefening even goed uit als " -"je kon?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Starttijd" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Eindtijd" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Als je een tijd ingeeft, moet je zowel start- als eindtijd ingeven." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Oefeningdag" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2136,44 +2121,32 @@ msgstr "" "Je zal regelmatig dergelijke herinneringen totdat je je huidige gewicht hebt " "ingevoerd." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Workout" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Workout voor %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Waarde" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Eenheid" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Hoogte (in)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Gewicht (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Gewicht (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Bereken" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Basis calorie-inname" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Je basis calorie-inname zoals berekend voor je data" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Bijkomende calorieën" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2181,117 +2154,14 @@ msgstr "" "Bijkomende calorieën om toe te voegen aan het basisaantal (om af te trekken, " "voer een negatief cijfer in)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingrediënt" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Zoek ook in Engelse namen" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "In kcal per 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "In g per 100g product" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Suikerinhoud in koolhydraten" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Verzadigde vetinhoud in vetten" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Vezels" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Natrium" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Link naar product" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Merknaam van product" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" -"De totale energie ({self.energy}kcal) is niet de benaderende som van de " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Ingrediënt Categorieën" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Hoeveelheid in grammen" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Eenheidshoeveelheid, bvb. \"1 kopje\" of \"1/2 lepel\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Voedingsplan" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Maaltijd" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Datum en Tijd (Ongeveer.)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Tijd (ongeveer)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Geef maaltijden een tekstuele beschrijving / naam, zoals 'Ontbijt' of 'na de " -"workout'." - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Een omschrijving van het doel van je plan, bvb \"Massa verhogen\" of " -"\"Klaarstomen voor de zomer\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Gebruik dagelijkse calorieën" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Aanvinken als je dit plan wil aanduiden als hebbende een doelhoeveelheid " -"calorieën. Je kan de calculator gebruiken of de hoeveelheid zelf invullen." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2359,6 +2229,10 @@ msgstr "Macrovoedingstoffen" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Suikerinhoud in koolhydraten" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2366,10 +2240,22 @@ msgstr "kJ" msgid "n.A." msgstr "Nvt." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Verzadigde vetinhoud in vetten" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Anderen" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Vezels" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Natrium" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2461,7 +2347,7 @@ msgstr "" "observeer jezelf dan voor enkele weken en verander de totale hoeveelheid " "indien nodig." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Nieuw ingrediënt toevoegen" @@ -2478,6 +2364,10 @@ msgstr "Voedingsplan voor %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Dit is een leeg plan, wat had je verwacht op de PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Voedingsgegevens" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Taal" @@ -2663,6 +2553,10 @@ msgstr "" "wger Workout Manager is een gratis, open source webapplicatie die je " "oefeningen en workouts beheert." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contact" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Mobiele app" @@ -2863,6 +2757,10 @@ msgstr "" msgid "Account" msgstr "Account" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Dashboard" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Workout routines" @@ -2937,14 +2835,14 @@ msgstr "Datumformaat" msgid "You have to enter your weight" msgstr "U moet uw gewicht ingeven" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Gewichtingave" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importeer gewichtlogs" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Insturen" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2966,8 +2864,8 @@ msgstr "" "invoerveld.\n" "Het systeem zal het importformaat proberen te raden. Het enige waar je " "rekening mee moet houden is:\n" -"dat de eerste kolom de datum is en de tweede het " -"gewicht.\n" +"dat de eerste kolom de datum is en de tweede het " +"gewicht.\n" "Alle overige kolommen worden genegeerd. Er geldt een limiet van 1000 rijen.\n" #: weight/templates/import_csv_form.html:24 @@ -3064,6 +2962,233 @@ msgstr "" msgid "Re-Submit" msgstr "Her-indienen" +#~ msgid "Image" +#~ msgstr "Afbeelding" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Enkel PNG en JPEG-formaten worden ondersteund" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Een manier om je van antwoorden te voorzien (e-mail, etc.)" + +#~ msgid "Comment" +#~ msgstr "Opmerking" + +#~ msgid "What do you want to say?" +#~ msgstr "Wat wil je zeggen?" + +#~ msgid "Feedback" +#~ msgstr "Feedback" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Je feedback werd met succes verzonden. Bedankt!" + +#~ msgid "Category" +#~ msgstr "Categorie" + +#~ msgid "Primary muscles" +#~ msgstr "Primaire spieren" + +#~ msgid "Secondary muscles" +#~ msgstr "Secundaire spieren" + +#~ msgid "Variations" +#~ msgstr "Variaties" + +#~ msgid "Exercise Categories" +#~ msgstr "Oefeningcategorieën" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Een opmerking over hoe je deze oefening correct kan uitvoeren." + +#~ msgid "Alias for an exercise" +#~ msgstr "Alias voor een oefening" + +#~ msgid "Line" +#~ msgstr "Regel" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Lage-poly" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Andere" + +#~ msgid "Height" +#~ msgstr "Hoogte" + +#~ msgid "Width" +#~ msgstr "Breedte" + +#~ msgid "Main picture" +#~ msgstr "Hoofdafbeelding" + +#~ msgid "Language" +#~ msgstr "Taal" + +#~ msgid "Main video" +#~ msgstr "Hoofd video" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Grootte" + +#~ msgid "Duration" +#~ msgstr "Duur" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, lange naam" + +#~ msgid "Routine" +#~ msgstr "Routine" + +#~ msgid "Order" +#~ msgstr "Volgorde" + +#~ msgid "Session" +#~ msgstr "Sessie" + +#~ msgid "Creation date" +#~ msgstr "Creatiedatum" + +#~ msgid "Workout template" +#~ msgstr "Workout template" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Door een workout als template te markeren zal deze niet meer aan te " +#~ "passen zijn en je in staat stellen om er kopieën van te maken" + +#~ msgid "Public template" +#~ msgstr "Publieke template" + +#~ msgid "A public template is available to other users" +#~ msgstr "Een publieke template is beschikbaar voor andere gebruikers" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Eenderwelke opmerking die je wil bewarne over deze workout-sessie." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Je indruk over deze workout-sessie. Voerde je de oefening even goed uit " +#~ "als je kon?" + +#~ msgid "Start time" +#~ msgstr "Starttijd" + +#~ msgid "Finish time" +#~ msgstr "Eindtijd" + +#~ msgid "Exercise day" +#~ msgstr "Oefeningdag" + +#~ msgid "Value" +#~ msgstr "Waarde" + +#~ msgid "In kcal per 100g" +#~ msgstr "In kcal per 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "In g per 100g product" + +#~ msgid "Link to product" +#~ msgstr "Link naar product" + +#~ msgid "Brand name of product" +#~ msgstr "Merknaam van product" + +#~ msgid "Ingredient Categories" +#~ msgstr "Ingrediënt Categorieën" + +#~ msgid "Amount in grams" +#~ msgstr "Hoeveelheid in grammen" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Eenheidshoeveelheid, bvb. \"1 kopje\" of \"1/2 lepel\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Voedingsplan" + +#~ msgid "Meal" +#~ msgstr "Maaltijd" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Datum en Tijd (Ongeveer.)" + +#~ msgid "Time (approx)" +#~ msgstr "Tijd (ongeveer)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Geef maaltijden een tekstuele beschrijving / naam, zoals 'Ontbijt' of 'na " +#~ "de workout'." + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Een omschrijving van het doel van je plan, bvb \"Massa verhogen\" of " +#~ "\"Klaarstomen voor de zomer\"" + +#~ msgid "Use daily calories" +#~ msgstr "Gebruik dagelijkse calorieën" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Aanvinken als je dit plan wil aanduiden als hebbende een doelhoeveelheid " +#~ "calorieën. Je kan de calculator gebruiken of de hoeveelheid zelf invullen." + +#~ msgid "Weight entry" +#~ msgstr "Gewichtingave" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Terug naar \"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configuratie voor {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Hoogte (in)" + +#~ msgid "Weight (kg)" +#~ msgstr "Gewicht (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Gewicht (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Bereken" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "De totale energie ({self.energy}kcal) is niet de benaderende som van de " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3076,30 +3201,12 @@ msgstr "Her-indienen" #~ msgid "The art style of your image" #~ msgstr "De artistieke stijl van de afbeelding" -#~ msgid "Sets" -#~ msgstr "Sets" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "rest" -#~ msgstr "rust" - -#~ msgid "Rest day" -#~ msgstr "Rustdag" - -#~ msgid "Nutritional data" -#~ msgstr "Voedingsgegevens" - #~ msgid "Workouts" #~ msgstr "Workouts" #~ msgid "About us" #~ msgstr "Over ons" -#~ msgid "Sample workout" -#~ msgstr "Voorbeeldworkout" - #~ msgid "Sample day" #~ msgstr "Voorbeelddag" @@ -3477,9 +3584,6 @@ msgstr "Her-indienen" #~ msgid "Edit workout" #~ msgstr "Bewerk workout" -#~ msgid "Copy workout" -#~ msgstr "Kopieer workout" - #~ msgid "Copy" #~ msgstr "Kopieer" @@ -3511,9 +3615,6 @@ msgstr "Her-indienen" #~ msgid "Your BMI is: " #~ msgstr "Je BMI is:" -#~ msgid "Legend" -#~ msgstr "Legende" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3577,9 +3678,6 @@ msgstr "Her-indienen" #~ msgid "Delete schedule" #~ msgstr "Verwijder schema" -#~ msgid "Weight log" -#~ msgstr "Gewichtlog" - #~ msgid "Weight log for workout" #~ msgstr "Gewichtlog voor workout" @@ -3634,8 +3732,8 @@ msgstr "Her-indienen" #, fuzzy, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Gebruiker {0} diende een nieuw ingrediënt \"{1}\" in." #~ msgid "Submission date" @@ -4185,10 +4283,10 @@ msgstr "Her-indienen" #~ "Bedankt voor je interesse. Voel je vrij om één\n" #~ "van de manieren hieronder te gebruiken om feedback te sturen over eender " #~ "welk aspect van de site.\n" -#~ "Voor ondersteuning kan je hallo zeggen in het Discord-kanaal,\n" -#~ "om een fout te melden kan je dit doen in onze issue tracker." +#~ "Voor ondersteuning kan je hallo zeggen in het Discord-kanaal,\n" +#~ "om een fout te melden kan je dit doen in onze issue tracker." #~ msgid "" #~ "If you want to further help and improve this project,\n" @@ -4243,17 +4341,17 @@ msgstr "Her-indienen" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" #~ "wger Workout Manager is gebouwd door vrijwilligers. Het ontwikkelproces " #~ "is transparant en vrij toegankelijk voor alle geïnteresseerden. Als je " #~ "nieuw bent in de wereld van gratis software, raden we je aan een kijkje " -#~ "te nemen naar dit " -#~ "artikel\n" +#~ "te nemen naar dit artikel\n" #~ "waarin wordt samengevat hoe het ontwikkelen van een open-source project " #~ "goed kan verlopen." diff --git a/wger/locale/no/LC_MESSAGES/django.po b/wger/locale/no/LC_MESSAGES/django.po index d748db60b..f728524ba 100644 --- a/wger/locale/no/LC_MESSAGES/django.po +++ b/wger/locale/no/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2024-08-20 18:09+0000\n" "Last-Translator: GS Bacon \n" "Language-Team: Norwegian Bokmål This is an empty plan, what did you expect on the PDF?" msgstr "Dette er en tom plan, hva hadde du forventet i PDF dokumentet?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Ernæringsmessige data" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Totalt" @@ -2716,6 +2590,10 @@ msgstr "" "hvor Workout Manager er et gratis, åpen kildekode web-applikasjon som " "håndterer øvelser og trening." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2916,6 +2794,10 @@ msgstr "" msgid "Account" msgstr "Beløp" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Dashboard" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2999,14 +2881,14 @@ msgstr "Datoformat" msgid "You have to enter your weight" msgstr "Du må angi vekten din" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Vektoppføring" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importer vektlogger" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Send" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3128,6 +3010,216 @@ msgstr "" msgid "Re-Submit" msgstr "Send på nytt" +#~ msgid "Image" +#~ msgstr "Bilde" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Bare PNG og JPEG formater støttes" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "En måte å svare deg på (e-post, etc.)" + +#~ msgid "Comment" +#~ msgstr "Kommentar" + +#~ msgid "What do you want to say?" +#~ msgstr "Hva vil du si?" + +#~ msgid "Feedback" +#~ msgstr "Tilbakemelding" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Din tilbakemelding har blitt sendt. Takk!" + +#~ msgid "Category" +#~ msgstr "Kategori" + +#~ msgid "Primary muscles" +#~ msgstr "Primære muskler" + +#~ msgid "Secondary muscles" +#~ msgstr "Sekundære muskler" + +#~ msgid "Variations" +#~ msgstr "Variasjoner" + +#~ msgid "Exercise Categories" +#~ msgstr "Øvelses kategorier" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "En kommentar for hvordan denne øvelsen utføres korrekt." + +#, fuzzy +#~| msgid "Correcting an exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Retter en øvelse" + +#, fuzzy +#~| msgid "Others" +#~ msgid "Other" +#~ msgstr "Andre" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "Vekt" + +#~ msgid "Main picture" +#~ msgstr "Hovedbilde" + +#~ msgid "Language" +#~ msgstr "Språk" + +#, fuzzy +#~| msgid "Main picture" +#~ msgid "Main video" +#~ msgstr "Hovedbilde" + +#~ msgid "Duration" +#~ msgstr "Varighet" + +#, fuzzy +#~| msgid "Code" +#~ msgid "Codec" +#~ msgstr "Kode" + +#~ msgid "Order" +#~ msgstr "Rekkefølge" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Yrke" + +#~ msgid "Creation date" +#~ msgstr "Opprettelsesdato" + +#~ msgid "Workout template" +#~ msgstr "Treningsøktmal" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Markering av treningsøkt som mal fryser den og tillater deg å lage kopier " +#~ "av den" + +#~ msgid "Public template" +#~ msgstr "Offentlig mal" + +#~ msgid "A public template is available to other users" +#~ msgstr "En offentlig mal er tilgjengelig for andre brukere" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Eventuelle merknader som kan være lurt å lagre om denne treningsøkten." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Ditt inntrykk om denne treningsøkten . Trente du så godt som du kunne?" + +#~ msgid "Start time" +#~ msgstr "Starttid" + +#~ msgid "Finish time" +#~ msgstr "Sluttid" + +#~ msgid "Exercise day" +#~ msgstr "Treningsdag" + +#~ msgid "In kcal per 100g" +#~ msgstr "I kcal per 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "I g per 100g produkt" + +#~ msgid "Link to product" +#~ msgstr "Lenke til produkt" + +#~ msgid "Brand name of product" +#~ msgstr "Merkenavn for produkt" + +#~ msgid "Ingredient Categories" +#~ msgstr "Ingredienskategorier" + +#~ msgid "Amount in grams" +#~ msgstr "Mengde i gram" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Enhetsmengde , f.eks \"1 kopp\" eller \"1/2 skje\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Ernæringsplan" + +#~ msgid "Meal" +#~ msgstr "Måltid" + +#, fuzzy +#~| msgid "Time (approx)" +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Tid (ca)" + +#~ msgid "Time (approx)" +#~ msgstr "Tid (ca)" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "En beskrivelse av målet med planen, f.eks \"Få masse\" eller \"klar for " +#~ "sommeren\"" + +#~ msgid "Use daily calories" +#~ msgstr "Bruk daglige kalorier" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Kryss av i boksen hvis du ønsker å markere denne planen som et mål med " +#~ "mengde kalorier. Du kan bruke kalkulator eller angi verdien selv." + +#~ msgid "Weight entry" +#~ msgstr "Vektoppføring" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Tilbake til \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfigurasjon for {}" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "Høyde (cm)" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Vektlogg" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Vektlogg" + +#~ msgid "Calculate" +#~ msgstr "Beregn" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "Den totale energien ({self.energy} kcal) er ikke den omtrentlige summen av" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3137,18 +3229,6 @@ msgstr "Send på nytt" #~ "for øvelsen (vil bli vist i søket). Det første bildet blir automatisk " #~ "markert av systemet." -#~ msgid "Sets" -#~ msgstr "Sett" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "Rest day" -#~ msgstr "Hviledag" - -#~ msgid "Nutritional data" -#~ msgstr "Ernæringsmessige data" - #~ msgid "Workouts" #~ msgstr "Treningsøkter" @@ -3168,9 +3248,6 @@ msgstr "Send på nytt" #~ msgid "Source code" #~ msgstr "Kildekode" -#~ msgid "Sample workout" -#~ msgstr "Eksempel treningsøkt" - #~ msgid "Sample day" #~ msgstr "Eksempel dag" @@ -3589,9 +3666,6 @@ msgstr "Send på nytt" #~ msgid "Edit workout" #~ msgstr "Endre treningsøkt" -#~ msgid "Copy workout" -#~ msgstr "Kopier treningsøkt" - #~ msgid "Copy" #~ msgstr "Kopier" @@ -3626,9 +3700,6 @@ msgstr "Send på nytt" #~ msgid "Your BMI is: " #~ msgstr "Din BMI er:" -#~ msgid "Legend" -#~ msgstr "Forklaring" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3695,9 +3766,6 @@ msgstr "Send på nytt" #~ msgid "Delete schedule" #~ msgstr "Slett timeplan" -#~ msgid "Weight log" -#~ msgstr "Vektlogg" - #~ msgid "Weight log for workout" #~ msgstr "Vektlogg for denne treningsøkten" @@ -3765,8 +3833,8 @@ msgstr "Send på nytt" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Brukeren {0} sendte inn en ny ingrediens \"{1}\"." #~ msgid "Submission date" @@ -4435,8 +4503,8 @@ msgstr "Send på nytt" #~ "a>." #~ msgstr "" #~ "Hvis du ønsker å ytterligere hjelpe og forbedre dette prosjektet,\n" -#~ "kan det hende du også er interessert i å bidra." +#~ "kan det hende du også er interessert i å bidra." #~ msgid "Feedback form" #~ msgstr "Tilbakemeldings-skjema" @@ -4481,8 +4549,8 @@ msgstr "Send på nytt" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4490,8 +4558,8 @@ msgstr "Send på nytt" #~ "utviklingsprosessen er åpen og fritt tilgjengelig for alle som er " #~ "interessert.\n" #~ "Hvis du er ny på fri programvare verden, anbefaler vi å ta en\n" -#~ "titt på denne " +#~ "titt på denne " #~ "artikkelen som oppsummerer måten friprog-prosjekter fungerer veldig " #~ "bra. " diff --git a/wger/locale/os/LC_MESSAGES/django.po b/wger/locale/os/LC_MESSAGES/django.po index 6ef0a2024..c755f4c71 100644 --- a/wger/locale/os/LC_MESSAGES/django.po +++ b/wger/locale/os/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2021-04-11 18:54+0000\n" "Last-Translator: rge \n" "Language-Team: Ossetic (http://www.transifex.com/rge/wger-workout-manager/" @@ -50,23 +50,24 @@ msgstr "" msgid "Edit" msgstr "Ивын" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -76,50 +77,50 @@ msgstr "" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -136,38 +137,21 @@ msgstr "" msgid "Delete" msgstr "Схафын" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Хъуыды" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Ӕвзаджы цыбыр ном" @@ -196,7 +180,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -299,7 +283,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -349,8 +333,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -372,22 +355,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Ном" @@ -407,7 +393,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -425,7 +411,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -440,13 +426,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -499,11 +478,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -569,7 +544,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -611,7 +586,7 @@ msgid "Exercises" msgstr "Фӕлтӕрӕнтӕ" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Администраци" @@ -621,7 +596,7 @@ msgstr "Администраци" msgid "Exercise edit history" msgstr "Фӕлтӕрӕнты ӕмбырд" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -691,7 +666,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -700,36 +675,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -785,25 +765,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -876,23 +856,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Бон" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Ӕмбарынгӕнӕн" @@ -900,7 +871,7 @@ msgstr "Ӕмбарынгӕнӕн" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -913,12 +884,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -928,28 +898,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1009,7 +978,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Н." @@ -1095,10 +1065,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1126,7 +1100,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1135,43 +1109,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1181,108 +1143,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Ӕмбырд" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Фыццаг мускултӕ" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Дыггаг мускултӕ" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Фӕлтӕрӕнты ӕмбырд" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Фӕлтӕрӕн" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Ацы фӕлтӕрӕн раст куыд хъӕуы аразын, уый тыххӕй хъуыды." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Add new exercise" -msgid "Alias for an exercise" -msgstr "Ног фӕлтӕрӕн бафтауын" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1297,56 +1194,19 @@ msgstr "фӕлтӕрӕны ном" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Ӕвзаг" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1363,13 +1223,10 @@ msgstr "Фӕлтӕрӕнты ӕмбырд" msgid "Action" msgstr "Фадӕттӕ" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Архайӕг" @@ -1421,10 +1278,6 @@ msgstr "" msgid "Add muscle" msgstr "Мускул бафтауын" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1493,8 +1346,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1511,12 +1363,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1566,11 +1416,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1844,7 +1689,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1880,6 +1725,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1930,60 +1943,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Фӕлтӕрӕн" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1999,32 +1987,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2068,153 +2034,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2268,6 +2126,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2275,10 +2137,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2352,7 +2226,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2369,6 +2243,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2526,6 +2404,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2708,6 +2590,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2779,14 +2665,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2882,6 +2768,32 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Comment" +#~ msgstr "Хъуыды" + +#~ msgid "Category" +#~ msgstr "Ӕмбырд" + +#~ msgid "Primary muscles" +#~ msgstr "Фыццаг мускултӕ" + +#~ msgid "Secondary muscles" +#~ msgstr "Дыггаг мускултӕ" + +#~ msgid "Exercise Categories" +#~ msgstr "Фӕлтӕрӕнты ӕмбырд" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Ацы фӕлтӕрӕн раст куыд хъӕуы аразын, уый тыххӕй хъуыды." + +#, fuzzy +#~| msgid "Add new exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Ног фӕлтӕрӕн бафтауын" + +#~ msgid "Language" +#~ msgstr "Ӕвзаг" + #, fuzzy #~| msgid "Add new exercise" #~ msgid "Add one now" diff --git a/wger/locale/pl/LC_MESSAGES/django.po b/wger/locale/pl/LC_MESSAGES/django.po index db1942d62..8a2188a13 100644 --- a/wger/locale/pl/LC_MESSAGES/django.po +++ b/wger/locale/pl/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-02-25 19:10+0000\n" "Last-Translator: Karol Solecki \n" "Language-Team: Polish \n" @@ -61,23 +61,24 @@ msgstr "" msgid "Edit" msgstr "Edytuj" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Zaloguj" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Imię" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Nazwisko" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -87,50 +88,50 @@ msgstr "Nazwisko" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "Używany do resetowania hasła i przypomnień e-mail." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Data urodzenia" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Dane personalne" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Przypomnienia treningowe" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Inne ustawienia" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Zapisz" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "Używany do resetowania hasła i przypomnień." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ten adres e-mail jest już zajęty." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Hasło" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Wprowadź swoje aktualne hasło." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -147,38 +148,21 @@ msgstr "Wprowadź swoje aktualne hasło." msgid "Delete" msgstr "Usuń" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Hasło nieprawidłowe" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Formularz jest chroniony przez reCaptcha" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Zarejestruj" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Wybrany sposób kontaktu (e-mail itp.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentarz" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Co chcesz powiedzieć?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Skrócona nazwa języka" @@ -207,7 +191,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Krótka nazwa np. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -322,7 +306,7 @@ msgstr "" msgid "Age" msgstr "Wiek" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Wzrost (cm)" @@ -372,8 +356,7 @@ msgstr "Dzienna całkowita liczba kalorii" msgid "Total caloric intake, including e.g. any surplus" msgstr "Pełne spożycie kalorii, włączając surplus" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Jednostka wagi" @@ -398,22 +381,25 @@ msgstr "Przypominanie o uzupełnieniu aktualnej wagi" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Liczba dni od ostatniego wpisu wagi (wpisz 0 by deaktywować)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Godziny muszą sumować się do wartości 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nazwa" @@ -433,7 +419,7 @@ msgstr "Nie znaleziono strony" msgid "The page you requested does not exist." msgstr "Żadana strona nie została odnaleziona." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Wystąpił błąd" @@ -464,7 +450,7 @@ msgstr "" "dokonywane są na jego danych.\n" " " -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Wróć do \"%(target)s\"" @@ -488,14 +474,6 @@ msgstr "" "dokonywane są na jego danych.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Wróć do \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Czy na pewno chcesz to usunąć? Tej czynności nie będzie można cofnąć." @@ -544,11 +522,7 @@ msgstr "Drużyna Wger" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Kliknij poniższy link, aby potwierdzić swój adres e-mail: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Pulpit" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Języki" @@ -614,7 +588,7 @@ msgstr "Lista licencji" msgid "Nothing found" msgstr "Nic nie znaleziono" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Odcisk" @@ -656,7 +630,7 @@ msgid "Exercises" msgstr "Ćwiczenia" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Zarządzanie" @@ -664,7 +638,7 @@ msgstr "Zarządzanie" msgid "Exercise edit history" msgstr "Historia edycji ćwiczeń" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Sprzęt" @@ -734,7 +708,7 @@ msgstr "Dokumentacja" msgid "Get the code" msgstr "Pobierz kod źródłowy" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Tłumacz" @@ -743,36 +717,41 @@ msgstr "Tłumacz" msgid "Reset password" msgstr "Resetuj hasło" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Moje preferencje" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Wyloguj" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Moje preferencje" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licencje" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Jednostki potwórzeń" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Jednostki wagi" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Lista użytkowników" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Siłownie" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Resetowanie hasła zakończone" @@ -832,27 +811,27 @@ msgstr "poprzednie" msgid "next" msgstr "następne" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Zamknij" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Korzystasz z konta gościa, dane wpisane w tym trybie będą skasowane po " "tygodniu." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Utwórz kilka przykładowych wpisów" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Warunki świadczenia usługi" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Cechy" @@ -928,23 +907,14 @@ msgstr "Podsumowanie" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Data" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -952,7 +922,7 @@ msgstr "Opis" msgid "Number of logs (days)" msgstr "Liczba logów (dni)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Ostatnia aktywność" @@ -965,12 +935,11 @@ msgstr "Nie znaleziono treningu." msgid "Log" msgstr "Log" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Ogólna ocena" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notatki" @@ -980,28 +949,27 @@ msgid "Time" msgstr "Czas" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Ciężar" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energia" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Białko" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Węglowodany" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Tłuszcz" @@ -1061,7 +1029,8 @@ msgid "Details" msgstr "Szczegóły" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1149,10 +1118,14 @@ msgstr "Wyślij email weryfikacyjny" msgid "You need to verify your email to contribute exercises" msgstr "Aby przesyłać ćwiczenia, musisz zweryfikować swój adres e-mail" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Zmień hasło" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1180,7 +1153,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Pomyślnie usunięto" @@ -1189,25 +1162,25 @@ msgstr "Pomyślnie usunięto" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Usunąć {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Edytuj {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1217,18 +1190,6 @@ msgstr "" "oraz plany żywieniowe i wagowe, byś mógł lepiej zobaczyć co można zrobić na " "stronie. Możesz je dowolnie edytować lub skasować!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Opinia" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Zapisz" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Twoja opinia została poprawnie wysłana. Dziękujemy!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1238,106 +1199,43 @@ msgstr "Konto \"{0}\" zostało poprawnie skasowane" msgid "You were successfully registered" msgstr "Zostałeś poprawnie zarejestrowany" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Ustawienia pomyślnie zaktualizowane" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Użytkownik pomyślnie zdezaktywowany" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Użytkownik pomyślnie aktywowany" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Edytuj użytkownika" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Nazwa użytkownika" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Siłownia" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "E-mail weryfikacyjny został wysłany na adres %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategoria" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Mięśnie główne" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Mięśnie pomocnicze" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Możliwości" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Kategorie ćwiczeń" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Ćwiczenie" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Komentarz jak poprawnie wykonywać to ćwiczenie." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Nacisk na ćwiczenie" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linia" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Mało powtórzeń" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Zdjęcie" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Inny" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Obraz" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Główny obraz" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Po łacinie, np. \"Pectoralis major\"" @@ -1350,56 +1248,19 @@ msgstr "Alternatywna nazwa" msgid "A more basic name for the muscle" msgstr "Bardziej podstawowa nazwa mięśnia" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Język" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Maksymalny rozmiar pliku wynosi %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Typ pliku nie jest obsługiwany" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Plik nie jest prawidłowym filmem" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Główne wideo" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Wideo" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Rozmiar" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Czas trwania" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Szerokość" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Wzrost" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Kod" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Kod, długa nazwa" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Lista sprzętu" @@ -1412,13 +1273,10 @@ msgstr "Historia administratora ćwiczeń" msgid "Action" msgstr "Akcja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Użytkownik" @@ -1470,10 +1328,6 @@ msgstr "Usunąć sprzęt?" msgid "Add muscle" msgstr "Dodaj mięsień" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Tylko formaty PNG i JPEG są obsługiwane" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Dodaj obraz" @@ -1540,8 +1394,7 @@ msgid "Contract type" msgstr "Typ kontraktu" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Kwota" @@ -1558,12 +1411,10 @@ msgid "Contract is active" msgstr "Kontrakt jest aktywny" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Data rozpoczęcia" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Data zakończenia" @@ -1615,11 +1466,6 @@ msgstr "Pokaż imię w nagłówku" msgid "Show the name of the gym in the site header" msgstr "Pokaż nazwę sali treningowej w nagłówku strony" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Konfiguracja dla {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Rozpiska nieaktywnych członków" @@ -1899,7 +1745,7 @@ msgstr "Drążek" msgid "Quads" msgstr "Mięsień czworogłowy" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Powtórzenia" @@ -1935,6 +1781,197 @@ msgstr "Do porażki" msgid "none (bodyweight exercise)" msgstr "żaden (własny ciężar ciała)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Treść" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Wartości ciężarów" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Dane personalne" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Kopiuj trening" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Przykładowy trening" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Trening dla %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1985,65 +2022,37 @@ msgstr "Wyślij e-maile" msgid "Correction" msgstr "Korekta" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Serie" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Powtórzenia" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "Liczba powtórzeń w rezerwie" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Dzień odpoczynku" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Ćwiczenie" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Trening wkrótce wygaśnie" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Kolejność" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Zawód" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Trening" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Jednostka" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data utworzenia" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Szablon treningu" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Oznaczenie treningu jako szablon, zablokuje go i umożliwi jego kopiowanie" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Publiczny szablon" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Publiczny szablon dostępny jest dla innych użytkowników" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Czas rozpoczęcia nie może być po czasie zakończenia." @@ -2059,35 +2068,12 @@ msgstr "Średnio" msgid "Good" msgstr "Dobrze" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Wszelkie komentarz jakie chcesz dodać odnośnie tej sesji treningowej." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Twoja ocena tej sesji treningowej. Czy wszystko poszło po Twojej myśli?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Czas rozpoczęcia" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Czas zakończenia" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Jeżeli wpiszesz czas, musisz wpisać czas rozpoczęcia i zakończenia " "jednocześnie." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Dzień treningu" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2144,44 +2130,32 @@ msgid "" msgstr "" "Zawsze będziesz widział te powiadomienia, dopóki nie wpiszesz aktualnej wagi." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Trening" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Trening dla %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Wartość" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Jednostka" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Wzrost (in)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Waga (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Waga (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Oblicz" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Podstawowe spożycie kalorii" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Twoje podstawowe spożycie kalorii obliczone na podstawie danych" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Dodatkowe kalorie" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2189,113 +2163,14 @@ msgstr "" "Dodatkowe kalorie modyfikujące bazową wartość (by odjąć, wpisz ujemną " "wartość)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Składnik" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Szukaj również w języku angielskim" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "W kcal na 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "W g na 100g produktu" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Cukry proste" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Tłuszcze nasycone" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Błonnik" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sód" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Podlinkuj produkt" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Nazwa marki produktu" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" -"Całkowita energia ({self.energy}kcal) nie jest zgodna z przybliżoną sumą " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Kategorie składników" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Ilość w gramach" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Jednostka ilości, np. \"1 kubek\" lub \"1/2 łyżki\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Plan żywienia" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Posiłek" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Data oraz czas (przybliżony)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Czas (przybliżony)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "Nadaj posiłkom opis tekstowy/nazwę, np. „Śniadanie” lub „Po treningu”" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "Opis bądź cel planu, np. \"Zrób masę\" lub \"Przygotuj się na lato\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Wykorzystaj dzienne kalorie" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Zaznacz, jeżeli chcesz, by ten plan żywieniowy miał określoną ilość kalorii. " -"Możesz użyć kalkulatora albo wpisać wartość samodzielnie." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2360,6 +2235,10 @@ msgstr "Makroelementy" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Cukry proste" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2367,10 +2246,22 @@ msgstr "kJ" msgid "n.A." msgstr "N/A" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Tłuszcze nasycone" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Inne" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Błonnik" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sód" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2463,7 +2354,7 @@ msgstr "" "swój organizm przez kilka tygodni i w razie potrzeby dostosuj odpowiednie " "wartości." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Dodaj nowy składnik" @@ -2480,6 +2371,10 @@ msgstr "Plan dietetyczny dla %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Pusty plan, czego się spodziewałeś w PDFie?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Wartości odżywcze" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Sumarycznie" @@ -2663,6 +2558,10 @@ msgstr "" "wger Workout Manager to darmowa, aplikacja open source do zarzadzania " "ćwiczeniami i treningami." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Aplikacja Mobilna" @@ -2867,6 +2766,10 @@ msgstr "" msgid "Account" msgstr "Konto" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Pulpit" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Plany treningowe" @@ -2941,14 +2844,14 @@ msgstr "Format daty" msgid "You have to enter your weight" msgstr "Musisz wpisać swoją wagę" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Waga" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importuj wartości ciężarów" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Zapisz" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3067,6 +2970,228 @@ msgstr "" msgid "Re-Submit" msgstr "Prześlij ponownie" +#~ msgid "Image" +#~ msgstr "Obraz" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Tylko formaty PNG i JPEG są obsługiwane" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Wybrany sposób kontaktu (e-mail itp.)" + +#~ msgid "Comment" +#~ msgstr "Komentarz" + +#~ msgid "What do you want to say?" +#~ msgstr "Co chcesz powiedzieć?" + +#~ msgid "Feedback" +#~ msgstr "Opinia" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Twoja opinia została poprawnie wysłana. Dziękujemy!" + +#~ msgid "Category" +#~ msgstr "Kategoria" + +#~ msgid "Primary muscles" +#~ msgstr "Mięśnie główne" + +#~ msgid "Secondary muscles" +#~ msgstr "Mięśnie pomocnicze" + +#~ msgid "Variations" +#~ msgstr "Możliwości" + +#~ msgid "Exercise Categories" +#~ msgstr "Kategorie ćwiczeń" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Komentarz jak poprawnie wykonywać to ćwiczenie." + +#~ msgid "Alias for an exercise" +#~ msgstr "Nacisk na ćwiczenie" + +#~ msgid "Line" +#~ msgstr "Linia" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Mało powtórzeń" + +#~ msgid "Photo" +#~ msgstr "Zdjęcie" + +#~ msgid "Other" +#~ msgstr "Inny" + +#~ msgid "Height" +#~ msgstr "Wzrost" + +#~ msgid "Width" +#~ msgstr "Szerokość" + +#~ msgid "Main picture" +#~ msgstr "Główny obraz" + +#~ msgid "Language" +#~ msgstr "Język" + +#~ msgid "Main video" +#~ msgstr "Główne wideo" + +#~ msgid "Video" +#~ msgstr "Wideo" + +#~ msgid "Size" +#~ msgstr "Rozmiar" + +#~ msgid "Duration" +#~ msgstr "Czas trwania" + +#~ msgid "Codec" +#~ msgstr "Kod" + +#~ msgid "Codec, long name" +#~ msgstr "Kod, długa nazwa" + +#~ msgid "Order" +#~ msgstr "Kolejność" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Zawód" + +#~ msgid "Creation date" +#~ msgstr "Data utworzenia" + +#~ msgid "Workout template" +#~ msgstr "Szablon treningu" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Oznaczenie treningu jako szablon, zablokuje go i umożliwi jego kopiowanie" + +#~ msgid "Public template" +#~ msgstr "Publiczny szablon" + +#~ msgid "A public template is available to other users" +#~ msgstr "Publiczny szablon dostępny jest dla innych użytkowników" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Wszelkie komentarz jakie chcesz dodać odnośnie tej sesji treningowej." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Twoja ocena tej sesji treningowej. Czy wszystko poszło po Twojej myśli?" + +#~ msgid "Start time" +#~ msgstr "Czas rozpoczęcia" + +#~ msgid "Finish time" +#~ msgstr "Czas zakończenia" + +#~ msgid "Exercise day" +#~ msgstr "Dzień treningu" + +#~ msgid "Value" +#~ msgstr "Wartość" + +#~ msgid "In kcal per 100g" +#~ msgstr "W kcal na 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "W g na 100g produktu" + +#~ msgid "Link to product" +#~ msgstr "Podlinkuj produkt" + +#~ msgid "Brand name of product" +#~ msgstr "Nazwa marki produktu" + +#~ msgid "Ingredient Categories" +#~ msgstr "Kategorie składników" + +#~ msgid "Amount in grams" +#~ msgstr "Ilość w gramach" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Jednostka ilości, np. \"1 kubek\" lub \"1/2 łyżki\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Plan żywienia" + +#~ msgid "Meal" +#~ msgstr "Posiłek" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Data oraz czas (przybliżony)" + +#~ msgid "Time (approx)" +#~ msgstr "Czas (przybliżony)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Nadaj posiłkom opis tekstowy/nazwę, np. „Śniadanie” lub „Po treningu”" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Opis bądź cel planu, np. \"Zrób masę\" lub \"Przygotuj się na lato\"" + +#~ msgid "Use daily calories" +#~ msgstr "Wykorzystaj dzienne kalorie" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Zaznacz, jeżeli chcesz, by ten plan żywieniowy miał określoną ilość " +#~ "kalorii. Możesz użyć kalkulatora albo wpisać wartość samodzielnie." + +#~ msgid "Weight entry" +#~ msgstr "Waga" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Wróć do \"%(target)s\"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfiguracja dla {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Wzrost (in)" + +#~ msgid "Weight (kg)" +#~ msgstr "Waga (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Waga (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Oblicz" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "" +#~ "Całkowita energia ({self.energy}kcal) nie jest zgodna z przybliżoną sumą " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3079,18 +3204,6 @@ msgstr "Prześlij ponownie" #~ msgid "The art style of your image" #~ msgstr "Styl zdjęcia" -#~ msgid "Sets" -#~ msgstr "Serie" - -#~ msgid "RiR" -#~ msgstr "Liczba powtórzeń w rezerwie" - -#~ msgid "Rest day" -#~ msgstr "Dzień odpoczynku" - -#~ msgid "Nutritional data" -#~ msgstr "Wartości odżywcze" - #~ msgid "Workouts" #~ msgstr "Treningi" @@ -3147,9 +3260,6 @@ msgstr "Prześlij ponownie" #~ "Wesprzyj, aby pomóc projektowi, pokryj koszty serwera i zapewnij nam " #~ "dalszy rozwój" -#~ msgid "Sample workout" -#~ msgstr "Przykładowy trening" - #~ msgid "Sample day" #~ msgstr "Przykładowy dzień" @@ -3552,9 +3662,6 @@ msgstr "Prześlij ponownie" #~ msgid "Edit workout" #~ msgstr "Edytuj trening" -#~ msgid "Copy workout" -#~ msgstr "Kopiuj trening" - #~ msgid "Copy" #~ msgstr "Kopiuj" @@ -3590,9 +3697,6 @@ msgstr "Prześlij ponownie" #~ msgid "Your BMI is: " #~ msgstr "Twoje BMI to: " -#~ msgid "Legend" -#~ msgstr "Legenda" - #~ msgid "Adipositas III" #~ msgstr "Otyłość 3. stopnia" @@ -3664,9 +3768,6 @@ msgstr "Prześlij ponownie" #~ msgid "Delete schedule" #~ msgstr "Usuń harmonogram" -#~ msgid "Weight log" -#~ msgstr "Wartości ciężarów" - #~ msgid "Weight log for workout" #~ msgstr "Wartości ciężarów podczas treningu" @@ -3733,8 +3834,8 @@ msgstr "Prześlij ponownie" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" #~ "Użytkownik {request.user.username} dodał nowy składnik \"{self.name}\"." @@ -4426,8 +4527,8 @@ msgstr "Prześlij ponownie" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4435,8 +4536,8 @@ msgstr "Prześlij ponownie" #~ "proces rozwoju jest otwarty i dostępny dla wszystkich zainteresowanych.\n" #~ "Jeżeli jesteś nowy w świecie otwartego oprogramowania, polecamy zapoznać " #~ "się z\n" -#~ "tym\n" +#~ "tym\n" #~ "artykułem, który podsumowuje jak funkcjonują tego rodzaju projekty. " #~ msgid "" diff --git a/wger/locale/pt/LC_MESSAGES/django.po b/wger/locale/pt/LC_MESSAGES/django.po index aab7b0dcd..bfd739105 100644 --- a/wger/locale/pt/LC_MESSAGES/django.po +++ b/wger/locale/pt/LC_MESSAGES/django.po @@ -15,8 +15,8 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" -"PO-Revision-Date: 2025-10-07 18:01+0000\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" +"PO-Revision-Date: 2026-01-20 20:01+0000\n" "Last-Translator: Ninguém Mesmo \n" "Language-Team: Portuguese " "\n" @@ -25,7 +25,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 5.14-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Editar" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Login" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Primeiro nome" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Último nome" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -86,52 +87,52 @@ msgstr "Último nome" msgid "Email" msgstr "Email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Usado para redefinições de senha e, opcionalmente, lembretes por e-mail." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Data de Nascimento" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Dados pessoais" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Lembretes de treino" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Outras configurações" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Salvar" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Usado para redefinições de senha e, opcionalmente, lembretes por e-mail." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Este endereço de e-mail já está sendo usado." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Senha" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Por favor informe a sua senha atual." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -148,38 +149,21 @@ msgstr "Por favor informe a sua senha atual." msgid "Delete" msgstr "Remover" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Senha inválida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "O formulário está seguro com o reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Cadastro" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contato" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Meios de contato (e-mail, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentário" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "O que você quer dizer?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Abreviação do idioma" @@ -208,7 +192,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Abreviação, por exemplo CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -325,7 +309,7 @@ msgstr "" msgid "Age" msgstr "Idade" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Altura (cm)" @@ -375,8 +359,7 @@ msgstr "Total calorias diária" msgid "Total caloric intake, including e.g. any surplus" msgstr "Total de ingestão calórica, incluindo qualquer excedente" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Unidade de peso" @@ -400,22 +383,25 @@ msgstr "Lembretes automáticos para entradas de peso" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Número de dias após o último peso digitado (0 para desativar)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "A soma de todas as horas deve ser 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Nome" @@ -435,7 +421,7 @@ msgstr "Página não encontrada" msgid "The page you requested does not exist." msgstr "A página que você solicitou não existe." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Um erro ocorreu" @@ -458,7 +444,7 @@ msgstr "" "Você está navegando no site como o utilizador \"%(current_user)s\", todas as " "ações são realizadas nos dados dele(a)." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Voltar a \"%(target)s\"" @@ -478,15 +464,6 @@ msgstr "" " os seus dados.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Voltar para \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -536,11 +513,7 @@ msgstr "Equipe wger" msgid "Please click the following link to confirm your email: %(link)s" msgstr "Clique no seguinte link para confirmar seu e-mail: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Painel" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Idiomas" @@ -606,7 +579,7 @@ msgstr "Lista de licença" msgid "Nothing found" msgstr "Nada encontrado" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Imprimir" @@ -648,7 +621,7 @@ msgid "Exercises" msgstr "Exercícios" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administração" @@ -656,7 +629,7 @@ msgstr "Administração" msgid "Exercise edit history" msgstr "Histórico de edição do exercício" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Equipamento" @@ -726,7 +699,7 @@ msgstr "Documentação do desenvolvedor" msgid "Get the code" msgstr "Obtenha o código fonte" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Traduzir" @@ -735,36 +708,41 @@ msgstr "Traduzir" msgid "Reset password" msgstr "Redefinr a senha" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Minhas preferências" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Sair" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Minhas preferências" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licenças" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Unidades de repetição" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Unidades de peso" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Lista de utilizadores" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Academias" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Redefinição da palavra-passe completa" @@ -824,27 +802,27 @@ msgstr "Anterior" msgid "next" msgstr "Próximo" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Fechar" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Você está usando uma conta de convidado, todos os dados cadastrados serão " "apagados depois de uma semana." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Crie alguns registros de demonstração" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Termos de uso" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funcionalidades" @@ -921,23 +899,14 @@ msgstr "Visão geral" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Data" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "descrição" @@ -945,7 +914,7 @@ msgstr "descrição" msgid "Number of logs (days)" msgstr "Número de registros (dias)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Última atividade" @@ -958,12 +927,11 @@ msgstr "Nenhum treino encontrado." msgid "Log" msgstr "Log" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Impressão geral" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notas" @@ -973,28 +941,27 @@ msgid "Time" msgstr "Tempo" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Peso" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energia" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Proteína" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Carboidratos" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Gordura" @@ -1054,7 +1021,8 @@ msgid "Details" msgstr "Detalhes" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1115,8 +1083,8 @@ msgstr "Incluir na visão geral inativa" #, python-format msgid "Admin login is only available for users in %(gym_name)s" msgstr "" -"A autenticação de administrador está disponível apenas para utilizadores no %" -"(gym_name)s" +"A autenticação de administrador está disponível apenas para utilizadores no " +"%(gym_name)s" #: core/templates/user/overview.html:514 msgid "Log in as this user" @@ -1142,10 +1110,14 @@ msgstr "Enviar e-mail de verificação" msgid "You need to verify your email to contribute exercises" msgstr "É preciso verificar seu e-mail para contribuir com exercícios" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Mudar senha" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1173,7 +1145,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Apagado com sucesso" @@ -1182,25 +1154,25 @@ msgstr "Apagado com sucesso" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Remover {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Editar {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1210,18 +1182,6 @@ msgstr "" "(corporal) e plano de nutrição para que você possa ver melhor o que este " "site pode fazer. Sinta-se à vontade para os editar ou apagá-los!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Opiniões" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Submeter" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "O seu feedback foi enviado com sucesso. Obrigado!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1231,106 +1191,43 @@ msgstr "Conta \"{0}\" deletada com sucesso" msgid "You were successfully registered" msgstr "Você foi registrado com sucesso" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Configurações atualizadas com sucesso" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "O utilizador foi desativado com sucesso" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "O utilizador foi ativado com sucesso" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Editar utilizador" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "Identificação" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "utilizador" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Academia" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Um e-mail de verificação foi enviado para %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categoria" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Músculos primários" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Músculos secundários" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variações" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Categorias de exercício" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Exercício" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Um comentário sobre como executar corretamente este exercício." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Outro nome para um exercício" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linha" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Poucos polígonos" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Foto" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Outro" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Imagem" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Imagem principal" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Em latim, ex.: \"Pectoralis major\"" @@ -1343,56 +1240,19 @@ msgstr "Nome alternativo" msgid "A more basic name for the muscle" msgstr "Um nome mais básico para o músculo" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Idioma" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "O tamanho máximo de arquivo é %(size)sMB." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Tipo de arquivo não suportado" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "O arquivo não é um vídeo válido" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Vídeo principal" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Vídeo" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Tamanho" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Duração" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Largura" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Altura" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Codec" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Codec, nome longo" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Lista de equipamento" @@ -1405,13 +1265,10 @@ msgstr "Histórico de administração do exercício" msgid "Action" msgstr "Ação" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utilizador" @@ -1463,10 +1320,6 @@ msgstr "Apagar equipamento?" msgid "Add muscle" msgstr "Adicionar músculo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Somente os formatos PNG e JPEG são suportados" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Adicionar imagem" @@ -1534,8 +1387,7 @@ msgid "Contract type" msgstr "Tipo de contrato" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Quantidade" @@ -1552,12 +1404,10 @@ msgid "Contract is active" msgstr "Contrato está ativo" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Data início" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Data final" @@ -1609,11 +1459,6 @@ msgstr "Mostrar o nome no cabeçalho" msgid "Show the name of the gym in the site header" msgstr "Mostre o nome da academia no cabeçalho do site" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Configuração para {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Visão geral dos membros inativos" @@ -1895,7 +1740,7 @@ msgstr "Barra de puxar" msgid "Quads" msgstr "Quadríceps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repeticões" @@ -1931,6 +1776,177 @@ msgstr "Até falhar" msgid "none (bodyweight exercise)" msgstr "nenhum (exercício corporal)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Conteúdo" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "Milionário" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "Atlas" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "Passarinho matinal" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "Coruja Noturna" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "Novo ano, novo eu" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "Fénix" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "Recorde Pessoal" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "Completa o teu primeiro treino" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "Completa 10 treinos" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "Completa 50 treinos" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "Completa 100 treinos" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "Completa 200 treinos" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "Completa 500 treinos" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "Completa 1000 treinos" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "Mantém uma sequência de treinos de 30 dias" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "Treina sábado e domingo por 4 semanas consecutivas" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "Levanta um peso acumulado de 5000kg" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "Levanta um peso acumulado de 20000kg" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "Levanta um peso acumulado de 50000kg" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "Levanta um peso acumulado de 150000kg" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "Levanta um peso acumulado de 450000kg" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "Levanta um peso acumulado de 1000000kg" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "Levanta um peso acumulado de 10000000kg" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "Completa um treino antes das 6:00 da manhã" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "Completa um treino após as 21:00 horas" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "Treino em %s de janeiro" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "Volta a treinar após estar inativo por 30 dias" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "Alcança novo recorde pessoal em qualquer exercício" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1983,62 +1999,35 @@ msgstr "Enviar e-mails" msgid "Correction" msgstr "Correção" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Conjuntos" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Repetições" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "ReR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "descanso" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Dia de descanso" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Exercício" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rotina expirará brevemente" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Rotina" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ordem" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Sessão" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Treino" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Unidade" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data criação" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Modelo de treino" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Marcar um treino como modelo irá congelá-lo e permitir que você faça cópias " -"dele" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Modelo público" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Um modelo público está disponível para outros utilizadores" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "A hora de início não pode ser depois da hora de término." @@ -2054,35 +2043,11 @@ msgstr "Neutro" msgid "Good" msgstr "Bom" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Qualquer nota que você queira salvar sobre esta sessão de treinamento." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Sua impressão sobre esta sessão de treino. Você conseguir realizar os " -"exercícios da melhor for que você poderia?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Hora de início" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Hora de término" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Se você fornecer um tempo, você deve fornecer tempo de início e de fim." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Dia do exercício" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2136,44 +2101,32 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "Você receberá esses lembretes até que indique a sua massa atual." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Treino" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Treino para %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Valor" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Unidade" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Altura (pol)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Peso (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Peso (lbs)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Calcular" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Ingestão básica de calorias" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Seu consumo calórico básico conforme cálculo baseado em seus dados" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Calorias adicionais" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2181,117 +2134,14 @@ msgstr "" "Calorias adicionais para adicionar à taxa básica (para subtrair, entre com " "um número negativo)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingrediente" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Também buscar nomes em inglês" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "Em kcal por 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "Em g por 100g do produto" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Açúcar contido nos carboidratos" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Gordura saturada contida nas gorduras" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Fibra" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sódio" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Link para o produto" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Nome da marca do produto" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "A energia total ({self.energy}kcal) não é a soma aproximada de. " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Categorias de ingredientes" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "total em gramas" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Unidade para quantidade, ex. \"1 xícara\" ou \"1/2 colher\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Plano de nutrição" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Refeição" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Data e Hora (aprox.)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Tempo (aproximado)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Dar às refeições uma descrição textual / nome como \"Café da manhã\" ou " -"\"pós-treino\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Uma descrição do objetivo do plano, e.x. \"Ganhar mass\" ou \"Preparação " -"para o verão\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Utilizar as calorias diária" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Marque a caixa se você quiser marcar este plano como tendo por objetivo uma " -"quantidade de calorias. Você pode usar a calculadora ou entrar o valor " -"diretamente." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2357,6 +2207,10 @@ msgstr "Macronutrientes" msgid "kJ" msgstr "Kj" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Açúcar contido nos carboidratos" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2364,10 +2218,22 @@ msgstr "Kj" msgid "n.A." msgstr "n.d." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Gordura saturada contida nas gorduras" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Outros" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Fibra" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sódio" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2457,7 +2323,7 @@ msgstr "" "uma aproximação. Se você basear o seu plano de nutrição nestes valores, \n" "observe seu desempenho por algumas semanas e faça os ajustes necessários." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Adicione um novo ingrediente" @@ -2474,6 +2340,10 @@ msgstr "Plano nutricional para %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Este é um plano vazio, o quê você esperava no PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Dados nutricionais" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Total" @@ -2659,6 +2529,10 @@ msgstr "" "wger Workout Manager é uma aplicação web gratuita de código aberto que " "gerencia os seus exercícios e treinos." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contato" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Aplicativo móvel" @@ -2860,6 +2734,10 @@ msgstr "" msgid "Account" msgstr "Conta" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Painel" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Rotinas de treino" @@ -2934,14 +2812,14 @@ msgstr "Formato da data" msgid "You have to enter your weight" msgstr "Você precisa digitar seu peso" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Registro de peso" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importe logs de peso" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Submeter" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3065,6 +2943,234 @@ msgstr "" msgid "Re-Submit" msgstr "Re-submeter" +#~ msgid "Image" +#~ msgstr "Imagem" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Somente os formatos PNG e JPEG são suportados" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Meios de contato (e-mail, etc.)" + +#~ msgid "Comment" +#~ msgstr "Comentário" + +#~ msgid "What do you want to say?" +#~ msgstr "O que você quer dizer?" + +#~ msgid "Feedback" +#~ msgstr "Opiniões" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "O seu feedback foi enviado com sucesso. Obrigado!" + +#~ msgid "Category" +#~ msgstr "Categoria" + +#~ msgid "Primary muscles" +#~ msgstr "Músculos primários" + +#~ msgid "Secondary muscles" +#~ msgstr "Músculos secundários" + +#~ msgid "Variations" +#~ msgstr "Variações" + +#~ msgid "Exercise Categories" +#~ msgstr "Categorias de exercício" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Um comentário sobre como executar corretamente este exercício." + +#~ msgid "Alias for an exercise" +#~ msgstr "Outro nome para um exercício" + +#~ msgid "Line" +#~ msgstr "Linha" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Poucos polígonos" + +#~ msgid "Photo" +#~ msgstr "Foto" + +#~ msgid "Other" +#~ msgstr "Outro" + +#~ msgid "Height" +#~ msgstr "Altura" + +#~ msgid "Width" +#~ msgstr "Largura" + +#~ msgid "Main picture" +#~ msgstr "Imagem principal" + +#~ msgid "Language" +#~ msgstr "Idioma" + +#~ msgid "Main video" +#~ msgstr "Vídeo principal" + +#~ msgid "Video" +#~ msgstr "Vídeo" + +#~ msgid "Size" +#~ msgstr "Tamanho" + +#~ msgid "Duration" +#~ msgstr "Duração" + +#~ msgid "Codec" +#~ msgstr "Codec" + +#~ msgid "Codec, long name" +#~ msgstr "Codec, nome longo" + +#~ msgid "Routine" +#~ msgstr "Rotina" + +#~ msgid "Order" +#~ msgstr "Ordem" + +#~ msgid "Session" +#~ msgstr "Sessão" + +#~ msgid "Creation date" +#~ msgstr "Data criação" + +#~ msgid "Workout template" +#~ msgstr "Modelo de treino" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Marcar um treino como modelo irá congelá-lo e permitir que você faça " +#~ "cópias dele" + +#~ msgid "Public template" +#~ msgstr "Modelo público" + +#~ msgid "A public template is available to other users" +#~ msgstr "Um modelo público está disponível para outros utilizadores" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Qualquer nota que você queira salvar sobre esta sessão de treinamento." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Sua impressão sobre esta sessão de treino. Você conseguir realizar os " +#~ "exercícios da melhor for que você poderia?" + +#~ msgid "Start time" +#~ msgstr "Hora de início" + +#~ msgid "Finish time" +#~ msgstr "Hora de término" + +#~ msgid "Exercise day" +#~ msgstr "Dia do exercício" + +#~ msgid "Value" +#~ msgstr "Valor" + +#~ msgid "In kcal per 100g" +#~ msgstr "Em kcal por 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "Em g por 100g do produto" + +#~ msgid "Link to product" +#~ msgstr "Link para o produto" + +#~ msgid "Brand name of product" +#~ msgstr "Nome da marca do produto" + +#~ msgid "Ingredient Categories" +#~ msgstr "Categorias de ingredientes" + +#~ msgid "Amount in grams" +#~ msgstr "total em gramas" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Unidade para quantidade, ex. \"1 xícara\" ou \"1/2 colher\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Plano de nutrição" + +#~ msgid "Meal" +#~ msgstr "Refeição" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Data e Hora (aprox.)" + +#~ msgid "Time (approx)" +#~ msgstr "Tempo (aproximado)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Dar às refeições uma descrição textual / nome como \"Café da manhã\" ou " +#~ "\"pós-treino\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Uma descrição do objetivo do plano, e.x. \"Ganhar mass\" ou \"Preparação " +#~ "para o verão\"" + +#~ msgid "Use daily calories" +#~ msgstr "Utilizar as calorias diária" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Marque a caixa se você quiser marcar este plano como tendo por objetivo " +#~ "uma quantidade de calorias. Você pode usar a calculadora ou entrar o " +#~ "valor diretamente." + +#~ msgid "Weight entry" +#~ msgstr "Registro de peso" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Voltar para \"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Configuração para {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Altura (pol)" + +#~ msgid "Weight (kg)" +#~ msgstr "Peso (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Peso (lbs)" + +#~ msgid "Calculate" +#~ msgstr "Calcular" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "A energia total ({self.energy}kcal) não é a soma aproximada de. " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3077,21 +3183,6 @@ msgstr "Re-submeter" #~ msgid "The art style of your image" #~ msgstr "O estilo da sua imagem" -#~ msgid "Sets" -#~ msgstr "Conjuntos" - -#~ msgid "RiR" -#~ msgstr "ReR" - -#~ msgid "rest" -#~ msgstr "descanso" - -#~ msgid "Rest day" -#~ msgstr "Dia de descanso" - -#~ msgid "Nutritional data" -#~ msgstr "Dados nutricionais" - #~ msgid "Workouts" #~ msgstr "Treinos" @@ -3145,9 +3236,6 @@ msgstr "Re-submeter" #~ "Pague um café para ajudar o projeto, pagar o custo dos servidores e nos " #~ "manter empolgados" -#~ msgid "Sample workout" -#~ msgstr "Treino de exemplo" - #~ msgid "Sample day" #~ msgstr "Dia de exemplo" @@ -3548,9 +3636,6 @@ msgstr "Re-submeter" #~ msgid "Edit workout" #~ msgstr "Edite treino" -#~ msgid "Copy workout" -#~ msgstr "Copiar treino" - #~ msgid "Copy" #~ msgstr "Copiar" @@ -3585,9 +3670,6 @@ msgstr "Re-submeter" #~ msgid "Your BMI is: " #~ msgstr "Seu IMC é: " -#~ msgid "Legend" -#~ msgstr "Legenda" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3660,9 +3742,6 @@ msgstr "Re-submeter" #~ msgid "Delete schedule" #~ msgstr "Apagar cronograma" -#~ msgid "Weight log" -#~ msgstr "Log de peso" - #~ msgid "Weight log for workout" #~ msgstr "Registro de peso para o treino" @@ -3727,11 +3806,11 @@ msgstr "Re-submeter" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" -#~ "O utilizador {request.user.username} submeteu um novo ingrediente \"{self." -#~ "name}\"." +#~ "O utilizador {request.user.username} submeteu um novo ingrediente " +#~ "\"{self.name}\"." #~ msgid "Submission date" #~ msgstr "Data de submissão" @@ -4431,8 +4510,8 @@ msgstr "Re-submeter" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4441,8 +4520,8 @@ msgstr "Re-submeter" #~ "interessado.\n" #~ "Se você é novo ao mundo do software livre, nós recomendamos que você dê " #~ "uma\n" -#~ "olhada neste\n" +#~ "olhada neste\n" #~ "artigo que resume muito bem como os projetos open source trabalham. " #~ msgid "" diff --git a/wger/locale/ro/LC_MESSAGES/django.po b/wger/locale/ro/LC_MESSAGES/django.po index 3ffb69f5e..b6bb0abef 100644 --- a/wger/locale/ro/LC_MESSAGES/django.po +++ b/wger/locale/ro/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-09-12 14:01+0000\n" "Last-Translator: Vlad Bejenaru \n" "Language-Team: Romanian \n" @@ -57,23 +57,24 @@ msgstr "" msgid "Edit" msgstr "Editare" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Login" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Prenume" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Nume" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -83,54 +84,54 @@ msgstr "Nume" msgid "Email" msgstr "Adresa de email" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Folosit pentru resetarea parolei și, opțional, pentru memento-uri prin e-" "mail." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Data nașterii" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Date personale" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Mementouri de antrenament" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Alte setari" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Salvează" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Folosit pentru resetarea parolei și, opțional, pentru memento-uri prin e-" "mail." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Acest email este deja în uz." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Parola" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Te rog introdu parola curentă" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -147,38 +148,21 @@ msgstr "Te rog introdu parola curentă" msgid "Delete" msgstr "Ștergere" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Parola incorectă" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Acest formular este securizat cu reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Inregistreaza-te" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Metodă de contactare (e-mail, etc.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentariu" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Ce vrei să spui?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Denumirea limbii scurt" @@ -209,7 +193,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Nume scurt, de ex. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Link" @@ -326,7 +310,7 @@ msgstr "" msgid "Age" msgstr "Vârstă" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Înălțime (cm)" @@ -376,8 +360,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -399,22 +382,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Numele" @@ -434,7 +420,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "A apărut o eroare" @@ -452,7 +438,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -467,13 +453,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -526,11 +505,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Limbi" @@ -596,7 +571,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -640,7 +615,7 @@ msgid "Exercises" msgstr "Exerciții" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administrație" @@ -650,7 +625,7 @@ msgstr "Administrație" msgid "Exercise edit history" msgstr "Categorii de Exerciții" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -720,7 +695,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -729,36 +704,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Resetare completă a parolei" @@ -816,25 +796,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -907,23 +887,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Data" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descriere" @@ -931,7 +902,7 @@ msgstr "Descriere" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -944,12 +915,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -959,28 +929,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1040,7 +1009,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1126,10 +1096,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1157,7 +1131,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1166,43 +1140,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Ștergere {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Editare {0}?" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1212,108 +1174,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Categoria" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Mușchii primari" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Mușchii secundari" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Categorii de Exerciții" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Exercițiu" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Comentariu despre modul de a face acest exercițiu corect." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Add new exercise" -msgid "Alias for an exercise" -msgstr "Adăugați un exercițiu nou" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1328,60 +1225,21 @@ msgstr "numele exercițiului" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Limba" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 #, fuzzy #| msgid "%(birthdate)s is not a valid birthdate" msgid "File is not a valid video" msgstr "%(birthdate)s nu este o dată de naștere validă" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight log" -msgid "Height" -msgstr "Jurnalul de greutate" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1398,13 +1256,10 @@ msgstr "Categorii de Exerciții" msgid "Action" msgstr "Opțiuni" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utilizator" @@ -1459,10 +1314,6 @@ msgstr "" msgid "Add muscle" msgstr "Adaugă un mușchi" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1531,8 +1382,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1549,12 +1399,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1604,11 +1452,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1890,7 +1733,7 @@ msgstr "Bara de tragere" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1928,6 +1771,190 @@ msgstr "Până la eșec" msgid "none (bodyweight exercise)" msgstr "nici unul (exercițiu cu greutate corporală)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Jurnalul de greutate" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Date personale" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Workout de probă" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1978,62 +2005,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Exercițiu" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -#, fuzzy -#| msgid "Workout reminders" -msgid "Workout template" -msgstr "Mementouri de antrenament" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -2049,32 +2049,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2118,161 +2096,47 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Weight log" -msgid "Height (in)" -msgstr "Jurnalul de greutate" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (kg)" -msgstr "Jurnalul de greutate" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (lbs)" -msgstr "Jurnalul de greutate" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "Folosește și ingrediente din limba Engleză" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2331,6 +2195,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2338,10 +2206,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2415,7 +2295,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2432,6 +2312,12 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +#, fuzzy +#| msgid "Personal data" +msgid "Nutritional data" +msgstr "Date personale" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2589,6 +2475,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Contact" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2771,6 +2661,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2844,14 +2738,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2949,13 +2843,62 @@ msgstr "" msgid "Re-Submit" msgstr "Retrimiteți" -#, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "Date personale" +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Metodă de contactare (e-mail, etc.)" -#~ msgid "Sample workout" -#~ msgstr "Workout de probă" +#~ msgid "Comment" +#~ msgstr "Comentariu" + +#~ msgid "What do you want to say?" +#~ msgstr "Ce vrei să spui?" + +#~ msgid "Category" +#~ msgstr "Categoria" + +#~ msgid "Primary muscles" +#~ msgstr "Mușchii primari" + +#~ msgid "Secondary muscles" +#~ msgstr "Mușchii secundari" + +#~ msgid "Exercise Categories" +#~ msgstr "Categorii de Exerciții" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Comentariu despre modul de a face acest exercițiu corect." + +#, fuzzy +#~| msgid "Add new exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Adăugați un exercițiu nou" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Height" +#~ msgstr "Jurnalul de greutate" + +#~ msgid "Language" +#~ msgstr "Limba" + +#, fuzzy +#~| msgid "Workout reminders" +#~ msgid "Workout template" +#~ msgstr "Mementouri de antrenament" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Height (in)" +#~ msgstr "Jurnalul de greutate" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Jurnalul de greutate" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Jurnalul de greutate" #~ msgid "Sample day" #~ msgstr "Zi de probă" @@ -2996,9 +2939,6 @@ msgstr "Retrimiteți" #~ msgid "Delete weight entry for the %s" #~ msgstr "Ștergeți greutatea pentru %s" -#~ msgid "Weight log" -#~ msgstr "Jurnalul de greutate" - #~ msgid "Submission date" #~ msgstr "Data depunerii" diff --git a/wger/locale/ru/LC_MESSAGES/django.po b/wger/locale/ru/LC_MESSAGES/django.po index f608689c3..acacb8bf8 100644 --- a/wger/locale/ru/LC_MESSAGES/django.po +++ b/wger/locale/ru/LC_MESSAGES/django.po @@ -14,9 +14,9 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" -"PO-Revision-Date: 2025-09-16 20:01+0000\n" -"Last-Translator: Иван Редун \n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" +"PO-Revision-Date: 2026-01-03 23:01+0000\n" +"Last-Translator: Gevorg Danielyan \n" "Language-Team: Russian \n" "Language: ru\n" "MIME-Version: 1.0\n" @@ -25,7 +25,7 @@ msgstr "" "Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || " "(n%100>=11 && n%100<=14)? 2 : 3);\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 5.15.1\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -61,23 +61,24 @@ msgstr "" msgid "Edit" msgstr "Редактировать" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Войти" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Имя" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Фамилия" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -87,52 +88,52 @@ msgstr "Фамилия" msgid "Email" msgstr "Электронный адрес" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "Используется для сброса пароля и опциональных уведомлений по e-mail." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Дата рождения" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Персональные данные" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Напоминания тренировок" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Другие настройки" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Сохранить" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Необходимо для возобновлений пароля, и выборочно, напоминаний по электронной " "почте." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Этот электронный адрес уже используется." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Пароль" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Пожалуйста, введите ваш пароль." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -149,38 +150,21 @@ msgstr "Пожалуйста, введите ваш пароль." msgid "Delete" msgstr "Удалить" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Неверный пароль" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Данная форма защищена reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Зарегистрироваться" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Контакт" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Обратная связь с вами (электронная почта, и т.д.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Комментарий" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Что Вы имеете в виду?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Короткое обозночение языка" @@ -209,7 +193,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Краткое название, например, CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Ссылка" @@ -327,7 +311,7 @@ msgstr "" msgid "Age" msgstr "Возраст" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Рост (см)" @@ -377,8 +361,7 @@ msgstr "Общая суточная калорийность" msgid "Total caloric intake, including e.g. any surplus" msgstr "Общее потребление калорий, в том числе, любой излишек" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Единица веса" @@ -403,22 +386,25 @@ msgstr "Автоматические напоминания для записе msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Количество дней после последней записи веса (введите 0 для отключения)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Сумма всех часов должна быть 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Имя" @@ -438,7 +424,7 @@ msgstr "Страницу не найдено" msgid "The page you requested does not exist." msgstr "Страница, на которую Вы подали запрос, не существует." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Произошла ошибка" @@ -462,7 +448,7 @@ msgstr "" "Вы просматриваете сайт как пользователь \"%(current_user)s\", все действия " "выполняются с его данными." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Вернуться к \"%(target)s\"" @@ -482,14 +468,6 @@ msgstr "" " их данными.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "Вернуться к \"%(target)s\"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Вы уверены что хотите это удалить? Это действие необратимо." @@ -542,11 +520,7 @@ msgstr "" "Пожалуйста, перейдите по ссылке, чтобы подтвердить вашу электронную почту: " "%(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Панель управления" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Языки" @@ -612,7 +586,7 @@ msgstr "Список лицензий" msgid "Nothing found" msgstr "Ничего не найдено" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Отпечаток" @@ -654,7 +628,7 @@ msgid "Exercises" msgstr "Упражнения" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Администрация" @@ -662,7 +636,7 @@ msgstr "Администрация" msgid "Exercise edit history" msgstr "История редактирования упражнений" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Спортивное оборудование" @@ -732,7 +706,7 @@ msgstr "Документация для разработчиков" msgid "Get the code" msgstr "Получить код" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Перевести" @@ -741,36 +715,41 @@ msgstr "Перевести" msgid "Reset password" msgstr "Восстановить пароль" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Мои настройки" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Выйти" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Мои настройки" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Лицензии" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Единицы повторения" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Единицы веса" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Список пользователей" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Тренажерные залы" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Восстановления пароля завершена" @@ -830,27 +809,27 @@ msgstr "предыдущий" msgid "next" msgstr "следующий" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Закрыть" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Вы используете аккаунт для гостей, введенные данные будут удалены через " "неделю." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Создайте демо-записи" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Условия обслуживания" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Особенности" @@ -928,23 +907,14 @@ msgstr "Обзор" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Дата" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -952,7 +922,7 @@ msgstr "Описание" msgid "Number of logs (days)" msgstr "Количество записей (дней)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Последние действия" @@ -965,12 +935,11 @@ msgstr "Тренировок не найдено." msgid "Log" msgstr "Журнал" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Общее впечатление" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Заметки" @@ -980,28 +949,27 @@ msgid "Time" msgstr "Время" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Вес" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Энергия" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Белки" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Углеводы" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Жиры" @@ -1061,7 +1029,8 @@ msgid "Details" msgstr "Детали" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "№" @@ -1149,10 +1118,14 @@ msgstr "" "Вам необходимо подтвердить свой адрес электронной почты, чтобы добавлять " "упражнения" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Изменить" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "кг" @@ -1180,7 +1153,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Успешно удалено" @@ -1189,25 +1162,25 @@ msgstr "Успешно удалено" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Удалить {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Редактировать {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1217,18 +1190,6 @@ msgstr "" "масс тела и плана питания для наглядного примера возможностей этого сайта. " "Вы можете их изменить или удалить!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Отзывы" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Отправить" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Ваш отзыв был успешно отправлен. Спасибо!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1238,106 +1199,43 @@ msgstr "Аккаунт \"{0}\" успешно удален" msgid "You were successfully registered" msgstr "Вы были успешно зарегистрированы" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Настройки успешно обновлены" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Пользователь был успешно отключен" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Пользователь был успешно активирован" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Редактирование пользователя" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "Идентификация" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Имя пользователя" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Тренажерный зал" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "На адрес %(email)s было отправлено электронное письмо с подтверждением" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Категория" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Основные мышцы" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Второстепенные мышцы" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Вариации" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Категории упражнений" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Упражнение" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Коментарий о том, как правильно выполнять это упражнение." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Псевдоним для упражнения" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Линия" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Низкополигональный" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Фото" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Другое" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Изображение" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Основное изображение" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Латинское название (например: \"Pectoralis major\")" @@ -1350,56 +1248,19 @@ msgstr "Альтернативное название" msgid "A more basic name for the muscle" msgstr "Более простое название для мышцы" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Язык" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Максимальный размер файла - %(size)s МБ." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Тип файла не поддерживается" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Файл не содержит видеодорожку" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Основное видео" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Видео" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Размер" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Продолжительность" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Ширина" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Высота" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Кодек" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Кодек, длинное название" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Перечень оборудования" @@ -1412,13 +1273,10 @@ msgstr "История администрирования упражнений" msgid "Action" msgstr "Действие" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Пользователь" @@ -1470,10 +1328,6 @@ msgstr "Удалить оборудование?" msgid "Add muscle" msgstr "Добавить мышцу" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Поддерживаются только форматы PNG и JPEG" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Добавить изображение" @@ -1542,8 +1396,7 @@ msgid "Contract type" msgstr "Форма контракта" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Количество" @@ -1560,12 +1413,10 @@ msgid "Contract is active" msgstr "Контракт активен" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Дата начала" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Конечная дата" @@ -1617,12 +1468,6 @@ msgstr "Показывать имя в заголовке" msgid "Show the name of the gym in the site header" msgstr "Показывать название зала в шапке сайта" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "Конфигурация для {}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Обзор неактивных членов" @@ -1905,13 +1750,13 @@ msgstr "Брус для подтягивания" msgid "Quads" msgstr "Квадрицепсы" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повторений" #: i18n.tpl:31 msgid "Resistance band" -msgstr "" +msgstr "Эластичная лента" #: i18n.tpl:32 msgid "SZ-Bar" @@ -1941,6 +1786,197 @@ msgstr "До отказа" msgid "none (bodyweight exercise)" msgstr "Никакое (упражнение с весом тела)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Содержание" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Условное обозначение" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Регистрация веса" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Персональные данные" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Копировать тренировку" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Пример тренировки" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Тренировка для %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1993,63 +2029,38 @@ msgstr "Отправить письма" msgid "Correction" msgstr "Исправление" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Подходы" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Повтор" +#: manager/dataclasses.py:158 +#, fuzzy +msgid "RiR" +msgstr "ПвЗ" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "остальное" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Выходной день" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Упражнение" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Срок этой тренировки скоро истечет" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Рутина" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Порядок" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Сессия" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Тренировка" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Секция" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата создания" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Шаблон тренировки" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Отметив тренировку как шаблон, вы заморозите ее и сможете создавать ее копии" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Общедоступный шаблон" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Общедоступный шаблон доступен для других пользователей" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Время начала не может быть после времени окончания." @@ -2065,32 +2076,10 @@ msgstr "Нормально" msgid "Good" msgstr "Хорошо" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Заметки о тренировке, которые вы желаете сохранить." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "Ваше впечатление от тренировки. Выполняли ли вы упражнения как надо?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Время начала" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Время окончания" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Если вводить время, необходимо ввести время начала и окончания." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "День упражнений" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2146,44 +2135,32 @@ msgstr "" "Вы будете регулярно получать такие напоминания, пока не укажете свой текущий " "вес." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Тренировка" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Тренировка для %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Значение" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Секция" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Рост (см)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Вес (кг)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Вес (фунтов)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Рассчитать" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Основное потребление калорий" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Ваше основное потребление калорий, рассчитанное для ваших данных" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Дополнительные калории" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2191,116 +2168,14 @@ msgstr "" "Дополнительные калории для добавления к базовой ставке (для вычитывания, " "введите отрицательное число)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ингредиент" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Также ищите названия на английском" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "В ккал на 100г" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "В г на 100г продукта" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Содержание сахара в углеводах" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Содержание насыщенных жиров в жирах" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Волокно" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Натрий" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Ссылка на продукт" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Название бренда продукта" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Категории ингредиентов" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Количество в граммах" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Единица измерения количества, например \"1 чашка\" или \"1/2 ложки\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Программа питания" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Прием пищи" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Время (приблизительно)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Время (приблизительно)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Дайте блюдам текстовое описание / название, например, \"Завтрак\" или " -"\"После тренировки\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Описание цели плана, например \"Набрать вес\" или \"Подготовка к лету\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Используйте ежедневныу калории" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Поставьте галочку, если вы хотите пометить в этом плане наличие цели " -"количества калорий. Вы можете использовать калькулятор или ввести их " -"самостоятельно." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2361,6 +2236,10 @@ msgstr "Макронутриенты" msgid "kJ" msgstr "кДж" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Содержание сахара в углеводах" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2368,10 +2247,22 @@ msgstr "кДж" msgid "n.A." msgstr "не имеется в наличии" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Содержание насыщенных жиров в жирах" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Другие" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Волокно" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Натрий" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2461,7 +2352,7 @@ msgstr "" "вы создаете ваш план питания на этих значениях, понаблюдайте за собой " "несколько недель и при необходимости измените общее количество." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Добавить новый ингредиент" @@ -2478,6 +2369,10 @@ msgstr "План питания для %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Это пустой план, что Вы ожидали в PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Пищевые данные" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Итого" @@ -2670,6 +2565,10 @@ msgstr "" "wger Workout Manager - это бесплатное веб-приложение с открытым исходным " "кодом, которое управляет вашими упражнениями и тренировками." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Контакт" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Мобильное приложение" @@ -2882,6 +2781,10 @@ msgstr "" msgid "Account" msgstr "Аккаунт" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Панель управления" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2965,14 +2868,14 @@ msgstr "Формат даты" msgid "You have to enter your weight" msgstr "Вы должны ввести свой вес" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Запись веса" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Импортировать журнал веса" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Отправить" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3093,6 +2996,227 @@ msgstr "" msgid "Re-Submit" msgstr "Повторно отправить" +#~ msgid "Image" +#~ msgstr "Изображение" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Поддерживаются только форматы PNG и JPEG" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Обратная связь с вами (электронная почта, и т.д.)" + +#~ msgid "Comment" +#~ msgstr "Комментарий" + +#~ msgid "What do you want to say?" +#~ msgstr "Что Вы имеете в виду?" + +#~ msgid "Feedback" +#~ msgstr "Отзывы" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Ваш отзыв был успешно отправлен. Спасибо!" + +#~ msgid "Category" +#~ msgstr "Категория" + +#~ msgid "Primary muscles" +#~ msgstr "Основные мышцы" + +#~ msgid "Secondary muscles" +#~ msgstr "Второстепенные мышцы" + +#~ msgid "Variations" +#~ msgstr "Вариации" + +#~ msgid "Exercise Categories" +#~ msgstr "Категории упражнений" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Коментарий о том, как правильно выполнять это упражнение." + +#~ msgid "Alias for an exercise" +#~ msgstr "Псевдоним для упражнения" + +#~ msgid "Line" +#~ msgstr "Линия" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Низкополигональный" + +#~ msgid "Photo" +#~ msgstr "Фото" + +#~ msgid "Other" +#~ msgstr "Другое" + +#~ msgid "Height" +#~ msgstr "Высота" + +#~ msgid "Width" +#~ msgstr "Ширина" + +#~ msgid "Main picture" +#~ msgstr "Основное изображение" + +#~ msgid "Language" +#~ msgstr "Язык" + +#~ msgid "Main video" +#~ msgstr "Основное видео" + +#~ msgid "Video" +#~ msgstr "Видео" + +#~ msgid "Size" +#~ msgstr "Размер" + +#~ msgid "Duration" +#~ msgstr "Продолжительность" + +#~ msgid "Codec" +#~ msgstr "Кодек" + +#~ msgid "Codec, long name" +#~ msgstr "Кодек, длинное название" + +#~ msgid "Routine" +#~ msgstr "Рутина" + +#~ msgid "Order" +#~ msgstr "Порядок" + +#~ msgid "Session" +#~ msgstr "Сессия" + +#~ msgid "Creation date" +#~ msgstr "Дата создания" + +#~ msgid "Workout template" +#~ msgstr "Шаблон тренировки" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Отметив тренировку как шаблон, вы заморозите ее и сможете создавать ее " +#~ "копии" + +#~ msgid "Public template" +#~ msgstr "Общедоступный шаблон" + +#~ msgid "A public template is available to other users" +#~ msgstr "Общедоступный шаблон доступен для других пользователей" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "Заметки о тренировке, которые вы желаете сохранить." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Ваше впечатление от тренировки. Выполняли ли вы упражнения как надо?" + +#~ msgid "Start time" +#~ msgstr "Время начала" + +#~ msgid "Finish time" +#~ msgstr "Время окончания" + +#~ msgid "Exercise day" +#~ msgstr "День упражнений" + +#~ msgid "Value" +#~ msgstr "Значение" + +#~ msgid "In kcal per 100g" +#~ msgstr "В ккал на 100г" + +#~ msgid "In g per 100g of product" +#~ msgstr "В г на 100г продукта" + +#~ msgid "Link to product" +#~ msgstr "Ссылка на продукт" + +#~ msgid "Brand name of product" +#~ msgstr "Название бренда продукта" + +#~ msgid "Ingredient Categories" +#~ msgstr "Категории ингредиентов" + +#~ msgid "Amount in grams" +#~ msgstr "Количество в граммах" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "" +#~ "Единица измерения количества, например \"1 чашка\" или \"1/2 ложки\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Программа питания" + +#~ msgid "Meal" +#~ msgstr "Прием пищи" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Время (приблизительно)" + +#~ msgid "Time (approx)" +#~ msgstr "Время (приблизительно)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Дайте блюдам текстовое описание / название, например, \"Завтрак\" или " +#~ "\"После тренировки\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Описание цели плана, например \"Набрать вес\" или \"Подготовка к лету\"" + +#~ msgid "Use daily calories" +#~ msgstr "Используйте ежедневныу калории" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Поставьте галочку, если вы хотите пометить в этом плане наличие цели " +#~ "количества калорий. Вы можете использовать калькулятор или ввести их " +#~ "самостоятельно." + +#~ msgid "Weight entry" +#~ msgstr "Запись веса" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Вернуться к \"%(target)s\"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Конфигурация для {}" + +#~ msgid "Height (in)" +#~ msgstr "Рост (см)" + +#~ msgid "Weight (kg)" +#~ msgstr "Вес (кг)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Вес (фунтов)" + +#~ msgid "Calculate" +#~ msgstr "Рассчитать" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3105,22 +3229,6 @@ msgstr "Повторно отправить" #~ msgid "The art style of your image" #~ msgstr "Художественный стиль вашего изображения" -#~ msgid "Sets" -#~ msgstr "Подходы" - -#, fuzzy -#~ msgid "RiR" -#~ msgstr "ПвЗ" - -#~ msgid "rest" -#~ msgstr "остальное" - -#~ msgid "Rest day" -#~ msgstr "Выходной день" - -#~ msgid "Nutritional data" -#~ msgstr "Пищевые данные" - #~ msgid "Workouts" #~ msgstr "Тренировки" @@ -3166,9 +3274,6 @@ msgstr "Повторно отправить" #~ msgid "Get the source code of this application and its server on github" #~ msgstr "Получите исходный код этого приложения и его сервера на github" -#~ msgid "Sample workout" -#~ msgstr "Пример тренировки" - #~ msgid "Sample day" #~ msgstr "Пример дня" @@ -3588,9 +3693,6 @@ msgstr "Повторно отправить" #~ msgid "Edit workout" #~ msgstr "Изменить тренировку" -#~ msgid "Copy workout" -#~ msgstr "Копировать тренировку" - #~ msgid "Copy" #~ msgstr "Копировать" @@ -3625,9 +3727,6 @@ msgstr "Повторно отправить" #~ msgid "Your BMI is: " #~ msgstr "Ваш ИМТ: " -#~ msgid "Legend" -#~ msgstr "Условное обозначение" - #~ msgid "Adipositas III" #~ msgstr "Ожирение III" @@ -3693,9 +3792,6 @@ msgstr "Повторно отправить" #~ msgid "Delete schedule" #~ msgstr "Удалить программу" -#~ msgid "Weight log" -#~ msgstr "Регистрация веса" - #~ msgid "Weight log for workout" #~ msgstr "Регистрация веса для тренировки" @@ -3761,8 +3857,8 @@ msgstr "Повторно отправить" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Пользователь {0} представил новый ингредиент \"{1}\"." #~ msgid "Submission date" @@ -4088,8 +4184,8 @@ msgstr "Повторно отправить" #~ msgid "" #~ "You can also enter notes and a general impression (great, neutral, etc.)" #~ msgstr "" -#~ "Также можно ввести примечания и общее впечатление (Cупер, нормально, и т." -#~ "д.)" +#~ "Также можно ввести примечания и общее впечатление (Cупер, нормально, и " +#~ "т.д.)" #~ msgid "Among many others" #~ msgstr "Среди многих других" @@ -4449,8 +4545,8 @@ msgstr "Повторно отправить" #~ "(no registration needed)" #~ msgstr "" #~ "Воспользуйтесь общественной группой, чтобы получить поддержку для Вашей " -#~ "локальной wger установки, обговорить проблемы или Вашу новую идею, и т." -#~ "п.\n" +#~ "локальной wger установки, обговорить проблемы или Вашу новую идею, и " +#~ "т.п.\n" #~ "(нет необходимости в регистрации)" #~ msgid "Open feedback form" @@ -4464,8 +4560,8 @@ msgstr "Повторно отправить" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4473,10 +4569,9 @@ msgstr "Повторно отправить" #~ "процесс программирования открыт и свободно доступен всем " #~ "заинтересованым.\n" #~ "Если вы новичок в сфере свободного софта, мы рекомендуем вам заглянуть " -#~ "сюда эта " -#~ "статья очень доступно обьясняет как работают проекты в свободном " -#~ "софте." +#~ "сюда эта статья " +#~ "очень доступно обьясняет как работают проекты в свободном софте." #~ msgid "" #~ "Any kind of contribution is appreciated and welcome.\n" diff --git a/wger/locale/sk/LC_MESSAGES/django.po b/wger/locale/sk/LC_MESSAGES/django.po index 41d3fad7b..3137de6b2 100644 --- a/wger/locale/sk/LC_MESSAGES/django.po +++ b/wger/locale/sk/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,23 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -76,50 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -136,38 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -194,7 +178,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -297,7 +281,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -347,8 +331,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -370,22 +353,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -405,7 +391,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -423,7 +409,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -438,13 +424,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -493,11 +472,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -563,7 +538,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -605,7 +580,7 @@ msgid "Exercises" msgstr "" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -613,7 +588,7 @@ msgstr "" msgid "Exercise edit history" msgstr "" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -683,7 +658,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -692,36 +667,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -777,25 +757,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -868,23 +848,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,7 +863,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -905,12 +876,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -920,28 +890,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1001,7 +970,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1087,10 +1057,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1118,7 +1092,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1127,43 +1101,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1173,106 +1135,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1285,56 +1184,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1347,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1405,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1475,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1493,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1400,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1826,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1862,6 +1709,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1912,60 +1927,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1981,32 +1971,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2050,153 +2018,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2250,6 +2110,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2257,10 +2121,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2334,7 +2210,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2351,6 +2227,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2506,6 +2386,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2686,6 +2570,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,14 +2645,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" diff --git a/wger/locale/sl/LC_MESSAGES/django.po b/wger/locale/sl/LC_MESSAGES/django.po index ac2ba7c6d..b6eaa1c29 100644 --- a/wger/locale/sl/LC_MESSAGES/django.po +++ b/wger/locale/sl/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,23 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -76,50 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -136,38 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -194,7 +178,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -297,7 +281,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -347,8 +331,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -370,22 +353,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -405,7 +391,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -423,7 +409,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -438,13 +424,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -493,11 +472,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -563,7 +538,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -605,7 +580,7 @@ msgid "Exercises" msgstr "" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -613,7 +588,7 @@ msgstr "" msgid "Exercise edit history" msgstr "" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -683,7 +658,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -692,36 +667,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -777,25 +757,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -868,23 +848,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,7 +863,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -905,12 +876,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -920,28 +890,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1001,7 +970,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1087,10 +1057,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1118,7 +1092,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1127,43 +1101,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1173,106 +1135,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1285,56 +1184,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1347,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1405,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1475,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1493,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1400,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1826,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1862,6 +1709,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1912,60 +1927,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1981,32 +1971,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2050,153 +2018,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2250,6 +2110,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2257,10 +2121,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2334,7 +2210,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2351,6 +2227,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2506,6 +2386,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2686,6 +2570,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,14 +2645,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" diff --git a/wger/locale/sr/LC_MESSAGES/django.po b/wger/locale/sr/LC_MESSAGES/django.po index 05c0b2448..34e1ddfda 100644 --- a/wger/locale/sr/LC_MESSAGES/django.po +++ b/wger/locale/sr/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,23 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -76,50 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -136,38 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -194,7 +178,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -297,7 +281,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -347,8 +331,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -370,22 +353,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -405,7 +391,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -423,7 +409,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -438,13 +424,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -493,11 +472,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -563,7 +538,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -605,7 +580,7 @@ msgid "Exercises" msgstr "" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -613,7 +588,7 @@ msgstr "" msgid "Exercise edit history" msgstr "" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -683,7 +658,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -692,36 +667,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -777,25 +757,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -868,23 +848,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,7 +863,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -905,12 +876,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -920,28 +890,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1001,7 +970,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1087,10 +1057,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1118,7 +1092,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1127,43 +1101,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1173,106 +1135,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1285,56 +1184,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1347,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1405,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1475,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1493,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1400,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1826,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1862,6 +1709,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1912,60 +1927,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1981,32 +1971,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2050,153 +2018,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2250,6 +2110,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2257,10 +2121,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2334,7 +2210,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2351,6 +2227,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2506,6 +2386,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2686,6 +2570,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,14 +2645,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" diff --git a/wger/locale/sv/LC_MESSAGES/django.po b/wger/locale/sv/LC_MESSAGES/django.po index 83ef01385..d4bdcc2f2 100644 --- a/wger/locale/sv/LC_MESSAGES/django.po +++ b/wger/locale/sv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-04-08 08:05+0000\n" "Last-Translator: wonnock \n" "Language-Team: Swedish \n" @@ -56,23 +56,24 @@ msgstr "" msgid "Edit" msgstr "Redigera" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Logga in" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Förnamn" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Efternamn" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -82,52 +83,52 @@ msgstr "Efternamn" msgid "Email" msgstr "E-post" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Används för återställning av lösenord och e-postpåminnelser (Frivilligt)." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Födelsedatum" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Personlig data" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Träningspåminnelser" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Andra inställningar" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Spara" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Används för lösenordsåterställning och, frivilligt, för epostpåminnelser" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Denna mail används redan." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Lösenord" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Vänligen ange ditt nuvarande lösenord." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -144,38 +145,21 @@ msgstr "Vänligen ange ditt nuvarande lösenord." msgid "Delete" msgstr "Ta bort" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ogiltigt lösenord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Formuläret är säkrat med reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Registrera dig" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Något sätt att svara dig (e-post osv.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Vad vill du säga?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Språk kort namn" @@ -204,7 +188,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Kort namn, t.ex. OM-AR-OU 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Länk" @@ -316,7 +300,7 @@ msgstr "" msgid "Age" msgstr "Ålder" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Längd (cm)" @@ -366,8 +350,7 @@ msgstr "Totala dagliga kalorier" msgid "Total caloric intake, including e.g. any surplus" msgstr "Totala kaloriintaget, inklusive t.ex. eventuellt överskott" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Viktenhet" @@ -392,22 +375,25 @@ msgstr "Automatiska påminnleser för viktnoteringar" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "Antal dagar sedan senaste viktnotering (Ange 0 för att avaktivera)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Summan av alla timmar måste vara 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Namn" @@ -427,7 +413,7 @@ msgstr "Sidan kunde inte hittas" msgid "The page you requested does not exist." msgstr "Den sida du begärt finns inte." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Ett fel har uppstått" @@ -445,7 +431,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Tillbaka till \"%(target)s\"" @@ -460,15 +446,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Tillbaka till \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -518,11 +495,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Instrumentpanel" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Språk" @@ -588,7 +561,7 @@ msgstr "Licens lista" msgid "Nothing found" msgstr "Ingenting hittades" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -634,7 +607,7 @@ msgid "Exercises" msgstr "Övningar" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Administration" @@ -644,7 +617,7 @@ msgstr "Administration" msgid "Exercise edit history" msgstr "Träningsdag" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Utrustning" @@ -714,7 +687,7 @@ msgstr "Dokument för utvecklare" msgid "Get the code" msgstr "Hämta koden" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Översätt" @@ -723,36 +696,41 @@ msgstr "Översätt" msgid "Reset password" msgstr "Återställ lösenord" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Mina preferenser" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Logga ut" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Mina preferenser" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Licenser" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Repetitioner" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Viktenheter" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Användarlista" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Gym" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Lösenordsåterställning fullbordad" @@ -812,25 +790,25 @@ msgstr "tidigare" msgid "next" msgstr "nästa" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Stäng" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "Du använder ett gästkonto, data som anges tas bort efter en vecka." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Skapa några demoposter" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Villkor för tjänsten" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Funktioner" @@ -907,23 +885,14 @@ msgstr "Överblick" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Datum" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivning" @@ -931,7 +900,7 @@ msgstr "Beskrivning" msgid "Number of logs (days)" msgstr "Antal loggar (dagar)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Senaste aktiviteten" @@ -944,12 +913,11 @@ msgstr "Inga träningspass hittade." msgid "Log" msgstr "Log" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Generellt intryck" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Anteckningar" @@ -959,28 +927,27 @@ msgid "Time" msgstr "Tid" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Vikt" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Energi" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Protein" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Kolhydrater" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Fett" @@ -1040,7 +1007,8 @@ msgid "Details" msgstr "Detaljer" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1126,10 +1094,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Ändra lösenord" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kg" @@ -1157,7 +1129,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Borttagning genomförd" @@ -1166,25 +1138,25 @@ msgstr "Borttagning genomförd" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Ta bort {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Redigera {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1194,18 +1166,6 @@ msgstr "" "så du kan lära dig hur sidan fungerar. Känn dig fri att ändra eller ta bort " "dom!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Feedback" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Ladda upp" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Din feedback skickades. Tack!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1215,110 +1175,43 @@ msgstr "Konto \"{0}\" är nu borttaget" msgid "You were successfully registered" msgstr "Du är nu registrerad" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Inställningar uppdaterade" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Användaren har nu tagits bort" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Användaren har nu aktiverats" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Redigera användare" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Användarnamn" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Gym" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategori" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Primära muskler" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Sekundära muskler" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Variationer" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Övningskategorier" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Träning" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "En kommentar om hur man utför denna övning korrekt." - -#: exercises/models/exercise_alias.py:56 -#, fuzzy -#| msgid "Correcting an exercise" -msgid "Alias for an exercise" -msgstr "Korrigera en övning" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Linje" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -#, fuzzy -#| msgid "Others" -msgid "Other" -msgstr "Andra" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Bild" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Huvudbild" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "På latin, e.g. \"Pectoralis major\"" @@ -1333,62 +1226,19 @@ msgstr "Övningsnamn" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Språk" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -#, fuzzy -#| msgid "Main picture" -msgid "Main video" -msgstr "Huvudbild" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Längd" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Vikt" - -#: exercises/models/video.py:147 -#, fuzzy -#| msgid "Code" -msgid "Codec" -msgstr "Kod" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Utrustningslista" @@ -1405,13 +1255,10 @@ msgstr "Träningsdag" msgid "Action" msgstr "Åtgärder" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Användare" @@ -1469,10 +1316,6 @@ msgstr "Ta bort utrustning?" msgid "Add muscle" msgstr "Lägg till muskel" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "PNG- och JPEG-format som stöds" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add new image" @@ -1544,8 +1387,7 @@ msgid "Contract type" msgstr "Kontrakttyp" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Mängd" @@ -1562,12 +1404,10 @@ msgid "Contract is active" msgstr "Kontraktet är aktiv" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Startdatum" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdatum" @@ -1619,12 +1459,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, fuzzy, python-brace-format -#| msgid "Configuration for {}" -msgid "Configuration for {self.gym.name}" -msgstr "Konfiguration för {}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Överblick över inaktiva användare" @@ -1911,7 +1745,7 @@ msgstr "Pull-up bar" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repetitioner" @@ -1949,6 +1783,197 @@ msgstr "Tills Misslyckande" msgid "none (bodyweight exercise)" msgstr "ingen (kroppsvikt träning)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "Innehåll" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Legend" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Viktlogg" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Personlig data" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Kopiera träningspass" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Exempelpass" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "Träning för %s" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -2001,64 +2026,37 @@ msgstr "" msgid "Correction" msgstr "Korrigering" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Set" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Reps" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Vilodag" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Träning" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Träningspass snart löper ut" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Ordning" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Yrke" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Träning" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Enhet" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum för skapande" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Träningspassmall" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Starttiden kan inte vara efter sluttiden." @@ -2074,32 +2072,10 @@ msgstr "Neutral" msgid "Good" msgstr "Bra" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Eventuella kommentarer du kan vilja spara gällande detta träningspass" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "Din åsikt gällande denna träning session. Gjorde du ditt bästa?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Starttid" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Sluttid" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Om du anger en tid måste du ange både start-och sluttid." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Träningsdag" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2157,50 +2133,32 @@ msgstr "" "Du kommes regelbundet få sådana påminnelser tills du anger din nuvarande " "vikt." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Träning" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Träning för %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Enhet" -#: nutrition/forms.py:117 -#, fuzzy -#| msgid "Height (cm)" -msgid "Height (in)" -msgstr "Längd (cm)" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (kg)" -msgstr "Viktlogg" - -#: nutrition/forms.py:120 -#, fuzzy -#| msgid "Weight log" -msgid "Weight (lbs)" -msgstr "Viktlogg" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Beräkna" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Grundläggande kaloriintag" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Ditt grundläggande kaloriintag som beräknats för din data" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Extra kalorier" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2208,118 +2166,16 @@ msgstr "" "Extra kalorier att lägga till basen (för att subtrahera, ange ett negativt " "tal)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Ingrediens" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 #, fuzzy #| msgid "Also use ingredients in English" msgid "Also search for names in English" msgstr "Också använda ingredienser i Svenska" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "I kcal per 100g" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "I g per 100g av produkt" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Sockerinehåll i kolhydraterna" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Mättat-fett innehåll i fettet" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Natrium" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Mängd i gram" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Enhetsmängd (e.g. \"1 DL\" eller \"1/2 tesked\")" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Kostplan" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Måltid" - -#: nutrition/models/log.py:71 -#, fuzzy -#| msgid "Time (approx)" -msgid "Date and Time (Approx.)" -msgstr "Tid (ca)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Tid (ca)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"En beskrivning av målet för planen, t.ex. \"Gå upp i vikt\" eller " -"\"Förbereda mig för sommaren\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Använda dagliga kalorier" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Markera rutan om du vill att denna plan ska ha ett kalorimål. Du kan använda " -"kalkylatorn eller själv ange värdet." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2380,6 +2236,10 @@ msgstr "Makronäringsämnen" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Sockerinehåll i kolhydraterna" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2387,10 +2247,22 @@ msgstr "" msgid "n.A." msgstr "n.A." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Mättat-fett innehåll i fettet" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Andra" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Natrium" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2479,7 +2351,7 @@ msgstr "" "på dessa värden borde du observera dig själv under några veckor och ändra " "det totala beloppet om det behövs." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Lägg till en ny ingrediens" @@ -2496,6 +2368,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Detta är en tom plan, vad förväntade du dig på PDFen?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Näringsdata" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Totalt" @@ -2676,6 +2552,10 @@ msgstr "" "wger Workout Manager är en webapp med fri och öppen källkod som hanterar " "dina övningar, träningspass och din kost. " +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Kontakt" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2876,6 +2756,10 @@ msgstr "" msgid "Account" msgstr "Mängd" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Instrumentpanel" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2959,14 +2843,14 @@ msgstr "Datumformat" msgid "You have to enter your weight" msgstr "Du måste ange din vikt" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Viktinträde" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Importera viktloggarna" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Ladda upp" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3079,6 +2963,194 @@ msgstr "Du kan korrigera listan här och skicka om den så ofta du vill." msgid "Re-Submit" msgstr "Skicka igen" +#~ msgid "Image" +#~ msgstr "Bild" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "PNG- och JPEG-format som stöds" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Något sätt att svara dig (e-post osv.)" + +#~ msgid "Comment" +#~ msgstr "Kommentar" + +#~ msgid "What do you want to say?" +#~ msgstr "Vad vill du säga?" + +#~ msgid "Feedback" +#~ msgstr "Feedback" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Din feedback skickades. Tack!" + +#~ msgid "Category" +#~ msgstr "Kategori" + +#~ msgid "Primary muscles" +#~ msgstr "Primära muskler" + +#~ msgid "Secondary muscles" +#~ msgstr "Sekundära muskler" + +#~ msgid "Variations" +#~ msgstr "Variationer" + +#~ msgid "Exercise Categories" +#~ msgstr "Övningskategorier" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "En kommentar om hur man utför denna övning korrekt." + +#, fuzzy +#~| msgid "Correcting an exercise" +#~ msgid "Alias for an exercise" +#~ msgstr "Korrigera en övning" + +#~ msgid "Line" +#~ msgstr "Linje" + +#~ msgid "3D" +#~ msgstr "3D" + +#, fuzzy +#~| msgid "Others" +#~ msgid "Other" +#~ msgstr "Andra" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "Vikt" + +#~ msgid "Main picture" +#~ msgstr "Huvudbild" + +#~ msgid "Language" +#~ msgstr "Språk" + +#, fuzzy +#~| msgid "Main picture" +#~ msgid "Main video" +#~ msgstr "Huvudbild" + +#~ msgid "Duration" +#~ msgstr "Längd" + +#, fuzzy +#~| msgid "Code" +#~ msgid "Codec" +#~ msgstr "Kod" + +#~ msgid "Order" +#~ msgstr "Ordning" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Yrke" + +#~ msgid "Creation date" +#~ msgstr "Datum för skapande" + +#~ msgid "Workout template" +#~ msgstr "Träningspassmall" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Eventuella kommentarer du kan vilja spara gällande detta träningspass" + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "Din åsikt gällande denna träning session. Gjorde du ditt bästa?" + +#~ msgid "Start time" +#~ msgstr "Starttid" + +#~ msgid "Finish time" +#~ msgstr "Sluttid" + +#~ msgid "Exercise day" +#~ msgstr "Träningsdag" + +#~ msgid "In kcal per 100g" +#~ msgstr "I kcal per 100g" + +#~ msgid "In g per 100g of product" +#~ msgstr "I g per 100g av produkt" + +#~ msgid "Amount in grams" +#~ msgstr "Mängd i gram" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Enhetsmängd (e.g. \"1 DL\" eller \"1/2 tesked\")" + +#~ msgid "Nutrition plan" +#~ msgstr "Kostplan" + +#~ msgid "Meal" +#~ msgstr "Måltid" + +#, fuzzy +#~| msgid "Time (approx)" +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Tid (ca)" + +#~ msgid "Time (approx)" +#~ msgstr "Tid (ca)" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "En beskrivning av målet för planen, t.ex. \"Gå upp i vikt\" eller " +#~ "\"Förbereda mig för sommaren\"" + +#~ msgid "Use daily calories" +#~ msgstr "Använda dagliga kalorier" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Markera rutan om du vill att denna plan ska ha ett kalorimål. Du kan " +#~ "använda kalkylatorn eller själv ange värdet." + +#~ msgid "Weight entry" +#~ msgstr "Viktinträde" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Tillbaka till \"%(target)s\n" +#~ " \"" + +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Konfiguration för {}" + +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "Längd (cm)" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Viktlogg" + +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Viktlogg" + +#~ msgid "Calculate" +#~ msgstr "Beräkna" + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3088,24 +3160,12 @@ msgstr "Skicka igen" #~ "övning (kommer visar i t.ex. sökresultaten). Den första bilden markeras " #~ "automatiskt av systemet." -#~ msgid "Sets" -#~ msgstr "Set" - -#~ msgid "Rest day" -#~ msgstr "Vilodag" - -#~ msgid "Nutritional data" -#~ msgstr "Näringsdata" - #~ msgid "Workouts" #~ msgstr "Träningspass" #~ msgid "About us" #~ msgstr "Om oss" -#~ msgid "Sample workout" -#~ msgstr "Exempelpass" - #~ msgid "Sample day" #~ msgstr "Exempeldag" @@ -3488,9 +3548,6 @@ msgstr "Skicka igen" #~ msgid "Edit workout" #~ msgstr "Redigera träningspass" -#~ msgid "Copy workout" -#~ msgstr "Kopiera träningspass" - #~ msgid "Copy" #~ msgstr "Kopiera" @@ -3518,9 +3575,6 @@ msgstr "Skicka igen" #~ msgid "Your BMI is: " #~ msgstr "Din BMI är: " -#~ msgid "Legend" -#~ msgstr "Legend" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3583,9 +3637,6 @@ msgstr "Skicka igen" #~ msgid "Delete schedule" #~ msgstr "Ta bort schema" -#~ msgid "Weight log" -#~ msgstr "Viktlogg" - #~ msgid "Weight log for workout" #~ msgstr "Viktlogg för träningspass" @@ -3648,8 +3699,8 @@ msgstr "Skicka igen" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Användare {0} har skickat in en ny ingrediens \"{1}\"." #~ msgid "Submission date" @@ -4243,16 +4294,16 @@ msgstr "Skicka igen" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" #~ "wger Workout Manager är byggd av volontärer. Utvecklingsprocessen är " #~ "öppen och fritt tillgänglig för alla intresserade.\n" #~ "Om du är ny till fri- programvaruvärlden, rekommenderar vi att ta en titt " -#~ "på den här " +#~ "på den här " #~ "artikeln som sammanfattar hur öppen- källkodrprojekt fungerar mycket " #~ "bra. " diff --git a/wger/locale/ta/LC_MESSAGES/django.po b/wger/locale/ta/LC_MESSAGES/django.po index 7a816f84d..5a682bc6a 100644 --- a/wger/locale/ta/LC_MESSAGES/django.po +++ b/wger/locale/ta/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,23 +49,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -75,50 +76,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -135,38 +136,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -193,7 +177,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -296,7 +280,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -346,8 +330,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -369,22 +352,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -404,7 +390,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -422,7 +408,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -437,13 +423,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -492,11 +471,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -562,7 +537,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -604,7 +579,7 @@ msgid "Exercises" msgstr "" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -612,7 +587,7 @@ msgstr "" msgid "Exercise edit history" msgstr "" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -682,7 +657,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -691,36 +666,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -776,25 +756,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -867,23 +847,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -891,7 +862,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -904,12 +875,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -919,28 +889,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1000,7 +969,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1086,10 +1056,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1117,7 +1091,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1126,43 +1100,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1172,106 +1134,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1284,56 +1183,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1346,13 +1208,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1404,10 +1263,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1474,8 +1329,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1492,12 +1346,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1547,11 +1399,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1825,7 +1672,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1861,6 +1708,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1911,60 +1926,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1980,32 +1970,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2049,153 +2017,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2249,6 +2109,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2256,10 +2120,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2333,7 +2209,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2350,6 +2226,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2505,6 +2385,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2685,6 +2569,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2756,14 +2644,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" diff --git a/wger/locale/th/LC_MESSAGES/django.po b/wger/locale/th/LC_MESSAGES/django.po index e4fe9bec1..b84f891d5 100644 --- a/wger/locale/th/LC_MESSAGES/django.po +++ b/wger/locale/th/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,23 +49,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -75,50 +76,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -135,38 +136,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -193,7 +177,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "" @@ -296,7 +280,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -346,8 +330,7 @@ msgstr "" msgid "Total caloric intake, including e.g. any surplus" msgstr "" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "" @@ -369,22 +352,25 @@ msgstr "" msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "" @@ -404,7 +390,7 @@ msgstr "" msgid "The page you requested does not exist." msgstr "" -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "" @@ -422,7 +408,7 @@ msgid "" "performed on their data." msgstr "" -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "" @@ -437,13 +423,6 @@ msgid "" " " msgstr "" -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "" @@ -492,11 +471,7 @@ msgstr "" msgid "Please click the following link to confirm your email: %(link)s" msgstr "" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "" @@ -562,7 +537,7 @@ msgstr "" msgid "Nothing found" msgstr "" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "" @@ -604,7 +579,7 @@ msgid "Exercises" msgstr "" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "" @@ -612,7 +587,7 @@ msgstr "" msgid "Exercise edit history" msgstr "" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "" @@ -682,7 +657,7 @@ msgstr "" msgid "Get the code" msgstr "" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "" @@ -691,36 +666,41 @@ msgstr "" msgid "Reset password" msgstr "" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "" @@ -776,25 +756,25 @@ msgstr "" msgid "next" msgstr "" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "" @@ -867,23 +847,14 @@ msgstr "" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -891,7 +862,7 @@ msgstr "" msgid "Number of logs (days)" msgstr "" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "" @@ -904,12 +875,11 @@ msgstr "" msgid "Log" msgstr "" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "" @@ -919,28 +889,27 @@ msgid "Time" msgstr "" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "" @@ -1000,7 +969,8 @@ msgid "Details" msgstr "" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "" @@ -1086,10 +1056,14 @@ msgstr "" msgid "You need to verify your email to contribute exercises" msgstr "" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "" @@ -1117,7 +1091,7 @@ msgstr "" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "" @@ -1126,43 +1100,31 @@ msgstr "" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1172,106 +1134,43 @@ msgstr "" msgid "You were successfully registered" msgstr "" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "" - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1284,56 +1183,19 @@ msgstr "" msgid "A more basic name for the muscle" msgstr "" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "" -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "" @@ -1346,13 +1208,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1404,10 +1263,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1474,8 +1329,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "" @@ -1492,12 +1346,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1547,11 +1399,6 @@ msgstr "" msgid "Show the name of the gym in the site header" msgstr "" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "" @@ -1825,7 +1672,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -1861,6 +1708,174 @@ msgstr "" msgid "none (bodyweight exercise)" msgstr "" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1911,60 +1926,35 @@ msgstr "" msgid "Correction" msgstr "" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "" @@ -1980,32 +1970,10 @@ msgstr "" msgid "Good" msgstr "" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2049,153 +2017,45 @@ msgid "" "You will regularly receive such reminders till you enter your current weight." msgstr "" +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "" -#: measurements/models/measurement.py:51 -msgid "Value" +#: nutrition/forms.py:62 +msgid "Unit" msgstr "" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "" - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2249,6 +2109,10 @@ msgstr "" msgid "kJ" msgstr "" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2256,10 +2120,22 @@ msgstr "" msgid "n.A." msgstr "" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2333,7 +2209,7 @@ msgid "" "yourself for some weeks and change the total amount if needed." msgstr "" -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "" @@ -2350,6 +2226,10 @@ msgstr "" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "" @@ -2505,6 +2385,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2685,6 +2569,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2756,14 +2644,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" diff --git a/wger/locale/tr/LC_MESSAGES/django.po b/wger/locale/tr/LC_MESSAGES/django.po index f5b7a0094..bc17669df 100644 --- a/wger/locale/tr/LC_MESSAGES/django.po +++ b/wger/locale/tr/LC_MESSAGES/django.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2024-07-20 17:09+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" @@ -55,23 +55,24 @@ msgstr "" msgid "Edit" msgstr "Düzenle" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Oturum aç" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "İsim" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Soyisim" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -81,54 +82,54 @@ msgstr "Soyisim" msgid "Email" msgstr "E-posta" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Parola sıfırlamaları ve isteğe bağlı olarak e-posta hatırlatıcıları için " "kullanılır." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Doğum tarihi" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Kişisel bilgiler" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Antrenman hatırlatıcıları" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Diğer ayarlar" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Kaydet" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Parola sıfırlamaları ve isteğe bağlı olarak e-posta hatırlatıcıları için " "kullanılır." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Bu e-posta adresi zaten kullanılıyor." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Parola" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Lütfen geçerli parolanızı girin." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -145,38 +146,21 @@ msgstr "Lütfen geçerli parolanızı girin." msgid "Delete" msgstr "Sil" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Geçersiz parola" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Form reCAPTCHA ile güvence altına alındı" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Kayıt ol" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "İletişim" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Size cevap vermenin bir yolu (e-posta vb.)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Yorum" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Ne söylemek istiyorsun?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Dilin kısa adı" @@ -205,7 +189,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Kısa ad, ör. CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Bağlantı" @@ -319,7 +303,7 @@ msgstr "" msgid "Age" msgstr "Yaş" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Boy (cm)" @@ -369,8 +353,7 @@ msgstr "Toplam günlük kalori" msgid "Total caloric intake, including e.g. any surplus" msgstr "Toplam kalori alımı, örn. herhangi bir fazlalık" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Ağırlık birimi" @@ -396,22 +379,25 @@ msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" "Son ağırlık girişinden sonraki gün sayısı (devre dışı bırakmak için 0 girin)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Tüm saatlerin toplamı 24 olmalıdır" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "İsim" @@ -431,7 +417,7 @@ msgstr "Sayfa bulunamadı" msgid "The page you requested does not exist." msgstr "İstediğiniz sayfa mevcut değil." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Bir hata oluştu" @@ -461,7 +447,7 @@ msgstr "" "işlemler onların verileri üzerinde gerçekleştirilir.\n" " " -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "\"%(target)s\" sayfasına geri dön" @@ -485,14 +471,6 @@ msgstr "" "işlemler onların verileri üzerinde gerçekleştirilir.\n" " " -#: core/templates/base_wide.html:12 -#, fuzzy, python-format -#| msgid "Back to \"%(target)s\"" -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "\"%(target)s\" sayfasına geri dön" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Bunu silmek istediğinizden emin misiniz? Bu eylem geri alınamaz." @@ -543,11 +521,7 @@ msgstr "wger Ekibi" msgid "Please click the following link to confirm your email: %(link)s" msgstr "E-posta adresinizi doğrulamak için lütfen tıklayın: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Gösterge Paneli" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Diller" @@ -613,7 +587,7 @@ msgstr "Lisans listesi" msgid "Nothing found" msgstr "Hiçbir şey Bulunamadı" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Künye" @@ -655,7 +629,7 @@ msgid "Exercises" msgstr "Egzersizler" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Yönetim" @@ -663,7 +637,7 @@ msgstr "Yönetim" msgid "Exercise edit history" msgstr "Egzersiz düzenleme geçmişi" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Ekipman" @@ -733,7 +707,7 @@ msgstr "Geliştirici belgeleri" msgid "Get the code" msgstr "Kodu alın" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Çevir" @@ -742,36 +716,41 @@ msgstr "Çevir" msgid "Reset password" msgstr "Parolayı sıfırla" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Benim tercihlerim" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Çıkış" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Benim tercihlerim" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Lisanslar" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Tekrarlama birimleri" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Ağırlık birimleri" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Kullanıcı listesi" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Spor salonları" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Parola sıfırlama tamamlandı" @@ -831,26 +810,26 @@ msgstr "önceki" msgid "next" msgstr "Sonraki" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Kapat" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Misafir hesabı kullanıyorsunuz, girilen veriler bir hafta sonra silinecek." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Bazı demo girişleri oluşturun" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Kullanım Şartları" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Özellikleri" @@ -927,23 +906,14 @@ msgstr "Genel Bakış" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Tarih" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Açıklama" @@ -951,7 +921,7 @@ msgstr "Açıklama" msgid "Number of logs (days)" msgstr "Günlük sayısı (gün)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Son Aktivite" @@ -964,12 +934,11 @@ msgstr "Antrenman bulunamadı." msgid "Log" msgstr "Kayıt" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Genel izlenim" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Notlar" @@ -979,28 +948,27 @@ msgid "Time" msgstr "Zaman" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Kilo" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Enerji" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Protein" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Karbonhidratlar" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Yağ" @@ -1060,7 +1028,8 @@ msgid "Details" msgstr "Detaylar" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "Nr." @@ -1149,10 +1118,14 @@ msgid "You need to verify your email to contribute exercises" msgstr "" "Egzersizlere katkıda bulunmak için e-posta adresinizi doğrulamanız gerekiyor" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Parola değiştir" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "kilogram" @@ -1180,7 +1153,7 @@ msgstr "oz" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Başarıyla silindi" @@ -1189,25 +1162,25 @@ msgstr "Başarıyla silindi" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "{0} silinsin mi?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "{0} düzenleyin" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1217,18 +1190,6 @@ msgstr "" "egzersiz programları, ağırlık kayıtları, (vücut) ağırlık ve beslenme planı " "girişleri oluşturduk. Düzenlemekten veya silmekten çekinmeyin!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "geri bildirim" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Sunmak" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Geri bildiriminiz başarıyla gönderildi. Teşekkür ederim!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1238,106 +1199,43 @@ msgstr "\"{0}\" hesabı başarıyla silindi" msgid "You were successfully registered" msgstr "Başarıyla kaydoldunuz" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Ayarlar başarıyla güncellendi" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Kullanıcı başarıyla devre dışı bırakıldı" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Kullanıcı başarıyla etkinleştirildi" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Kullanıcıyı düzenle" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "İD" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Kullanıcı adı" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Jimnastik" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "%(email)s adresine bir doğrulama e-postası gönderildi" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Kategori" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Birincil kaslar" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "İkincil kaslar" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Varyasyonlar" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Egzersiz Kategorileri" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Egzersiz" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Bu alıştırmanın nasıl doğru bir şekilde yapılacağına dair bir yorum." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Bir egzersizin takma adı" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Çizgi" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3B" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Düşük poli" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Fotoğraf" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Diğer" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Resim" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Ana resim" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latince, ör. \"Büyük pektoralis\"" @@ -1350,56 +1248,19 @@ msgstr "Alternatif ad" msgid "A more basic name for the muscle" msgstr "Kas için daha temel bir isim" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Dil" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Azami dosya boyutu %(size)sMB'dir." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Dosya türü desteklenmiyor" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Dosya geçerli bir video değil" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Ana video" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Video" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Boyut" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Süresi" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Genişlik" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Yükseklik" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Kodek" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Kodek, uzun ad" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Ekipman listesi" @@ -1412,13 +1273,10 @@ msgstr "Egzersiz yönetici geçmişi" msgid "Action" msgstr "Eylem" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Kullanıcı" @@ -1470,10 +1328,6 @@ msgstr "Ekipman silinsin mi?" msgid "Add muscle" msgstr "Kas ekleyin" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Yalnızca PNG ve JPEG formatları desteklenir" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Resim ekle" @@ -1543,8 +1397,7 @@ msgid "Contract type" msgstr "Sözleşme tipi" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Miktar" @@ -1561,12 +1414,10 @@ msgid "Contract is active" msgstr "Sözleşme aktif" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Başlangıç tarihi" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Bitiş tarihi" @@ -1618,11 +1469,6 @@ msgstr "Adı başlıkta göster" msgid "Show the name of the gym in the site header" msgstr "Site başlığında spor salonunun adını gösterin" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "{self.gym.name} için yapılandırma" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Etkin olmayan üyelere genel bakış" @@ -1904,7 +1750,7 @@ msgstr "Barfiks çubuğu" msgid "Quads" msgstr "Quads kasları" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Tekrarlar" @@ -1940,6 +1786,197 @@ msgstr "Başarısızlığa Kadar" msgid "none (bodyweight exercise)" msgstr "yok (vücut ağırlığı egzersizi)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "" + +#: i18n.tpl:42 +#, fuzzy +#| msgctxt "As in \"content of an email\"" +#| msgid "Content" +msgid "Consistent" +msgstr "İçerik" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Efsane" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "" + +#: i18n.tpl:58 +#, fuzzy +#| msgid "Weight log" +msgid "Night Owl" +msgstr "Ağırlık günlüğü" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "" + +#: i18n.tpl:61 +#, fuzzy +#| msgid "Personal data" +msgid "Personal Record" +msgstr "Kişisel bilgiler" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Antrenmanı kopyala" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Örnek antrenman" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "" + +#: i18n.tpl:80 +#, fuzzy +#| msgid "Workout for %s" +msgid "Work out on January 1st" +msgstr "%s için egzersiz" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1992,66 +2029,37 @@ msgstr "E-postaları gönder" msgid "Correction" msgstr "Düzeltme" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Setleri" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Temsilciler" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "RiR" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "Dinlenme günü" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Egzersiz" + #: manager/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Antrenman yakında sona erecek" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Sipariş" - -#: manager/models/log.py:78 -#, fuzzy -#| msgid "Profession" -msgid "Session" -msgstr "Meslek" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Antrenman" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Birim" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Oluşturulma tarihi" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Antrenman şablonu" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Bir antrenmanı şablon olarak işaretlemek onu donduracak ve kopyalarını " -"oluşturmanıza izin verecektir" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Herkese açık şablon" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Herkese açık bir şablon diğer kullanıcılar tarafından kullanılabilir" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Başlangıç zamanı, bitiş zamanından sonra olamaz." @@ -2067,36 +2075,11 @@ msgstr "Nötr" msgid "Good" msgstr "İyi" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "" -"Bu egzersiz seansı hakkında kaydetmek isteyebileceğiniz herhangi bir not." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "" -"Bu egzersiz seansı hakkındaki izleniminiz. Yapabildiğin kadar iyi egzersiz " -"yaptın mı?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Başlangıç saati" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Bitiş zamanı" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "" "Bir saat girerseniz, hem başlangıç hem de bitiş saatini girmeniz gerekir." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "Egzersiz günü" - #: manager/templates/routines/email_reminder.tpl:3 #, fuzzy, python-format #| msgid "Your current workout '%(workout)s' expired %(days)s days ago." @@ -2154,161 +2137,46 @@ msgstr "" "Mevcut kilonuzu girene kadar düzenli olarak bu tür hatırlatıcılar " "alacaksınız." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Antrenman" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "%s için egzersiz" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Değer" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Birim" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Boy (inç)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Ağırlık (kg)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Ağırlık (paunt)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Hesaplamak" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Temel kalori alımı" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Verileriniz için hesaplanan temel kalori alımınız" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Ek kaloriler" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" msgstr "" "Baz orana eklenecek ek kaloriler (çıkarmak için negatif bir sayı girin)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Bileşen" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Ayrıca İngilizce adları da arayın" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "100 g başına kcal olarak" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "100 g ürün başına g cinsinden" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Karbonhidratlardaki şeker içeriği" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Yağlarda doymuş yağ içeriği" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Lif" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Sodyum" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Ürün bağlantısı" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Ürünün marka adı" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "Toplam enerji ({self.energy} kcal), yaklaşık toplamı değil " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "İçerik Kategorileri" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Gram cinsinden miktar" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Birim miktar, ör. \"1 Fincan\" veya \"1/2 kaşık\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "Beslenme planı" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Yemek" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Tarih ve Saat (Yaklaşık)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Zaman (yaklaşık)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Yemeklere \"Kahvaltı\" veya \"antrenmandan sonra\" gibi metinsel bir " -"açıklama / ad verin" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "" -"Planın amacının bir açıklaması, ör. \"Kitle kazanın\" veya \"Yaza " -"hazırlanın\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Günlük kalori kullanın" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Bu planı hedef miktarda kalori içeriyor olarak işaretlemek istiyorsanız " -"kutuyu işaretleyin. Hesap makinesini kullanabilir veya değeri kendiniz " -"girebilirsiniz." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2375,6 +2243,10 @@ msgstr "Makrobesinler" msgid "kJ" msgstr "kJ" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Karbonhidratlardaki şeker içeriği" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2382,10 +2254,22 @@ msgstr "kJ" msgid "n.A." msgstr "n.A." +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Yağlarda doymuş yağ içeriği" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Diğerleri" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Lif" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Sodyum" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2475,7 +2359,7 @@ msgstr "" "yaklaşım. Beslenme planınızı bu değerlere dayandırırsanız,\n" "birkaç hafta boyunca kendiniz ve gerekirse toplam miktarı değiştirin." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Yeni bir malzeme ekle" @@ -2492,6 +2376,10 @@ msgstr "%s için beslenme planı" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Bu boş bir plan, PDF'den ne bekliyordunuz?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Beslenme verileri" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Toplamda" @@ -2676,6 +2564,10 @@ msgstr "" "wger Workout Manager, egzersizlerinizi ve antrenmanlarınızı yöneten özgür, " "açık kaynaklı bir web uygulamasıdır." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "İletişim" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Mobil uygulama" @@ -2879,6 +2771,10 @@ msgstr "" msgid "Account" msgstr "Hesap" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Gösterge Paneli" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Antrenman programları" @@ -2953,14 +2849,14 @@ msgstr "Tarih Biçimi" msgid "You have to enter your weight" msgstr "Kilonuzu girmelisiniz" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Ağırlık girişi" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Kilo günlüklerini içe aktar" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Sunmak" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3084,6 +2980,234 @@ msgstr "" msgid "Re-Submit" msgstr "Yeniden Gönder" +#~ msgid "Image" +#~ msgstr "Resim" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Yalnızca PNG ve JPEG formatları desteklenir" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Size cevap vermenin bir yolu (e-posta vb.)" + +#~ msgid "Comment" +#~ msgstr "Yorum" + +#~ msgid "What do you want to say?" +#~ msgstr "Ne söylemek istiyorsun?" + +#~ msgid "Feedback" +#~ msgstr "geri bildirim" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Geri bildiriminiz başarıyla gönderildi. Teşekkür ederim!" + +#~ msgid "Category" +#~ msgstr "Kategori" + +#~ msgid "Primary muscles" +#~ msgstr "Birincil kaslar" + +#~ msgid "Secondary muscles" +#~ msgstr "İkincil kaslar" + +#~ msgid "Variations" +#~ msgstr "Varyasyonlar" + +#~ msgid "Exercise Categories" +#~ msgstr "Egzersiz Kategorileri" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "" +#~ "Bu alıştırmanın nasıl doğru bir şekilde yapılacağına dair bir yorum." + +#~ msgid "Alias for an exercise" +#~ msgstr "Bir egzersizin takma adı" + +#~ msgid "Line" +#~ msgstr "Çizgi" + +#~ msgid "3D" +#~ msgstr "3B" + +#~ msgid "Low-poly" +#~ msgstr "Düşük poli" + +#~ msgid "Photo" +#~ msgstr "Fotoğraf" + +#~ msgid "Other" +#~ msgstr "Diğer" + +#~ msgid "Height" +#~ msgstr "Yükseklik" + +#~ msgid "Width" +#~ msgstr "Genişlik" + +#~ msgid "Main picture" +#~ msgstr "Ana resim" + +#~ msgid "Language" +#~ msgstr "Dil" + +#~ msgid "Main video" +#~ msgstr "Ana video" + +#~ msgid "Video" +#~ msgstr "Video" + +#~ msgid "Size" +#~ msgstr "Boyut" + +#~ msgid "Duration" +#~ msgstr "Süresi" + +#~ msgid "Codec" +#~ msgstr "Kodek" + +#~ msgid "Codec, long name" +#~ msgstr "Kodek, uzun ad" + +#~ msgid "Order" +#~ msgstr "Sipariş" + +#, fuzzy +#~| msgid "Profession" +#~ msgid "Session" +#~ msgstr "Meslek" + +#~ msgid "Creation date" +#~ msgstr "Oluşturulma tarihi" + +#~ msgid "Workout template" +#~ msgstr "Antrenman şablonu" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Bir antrenmanı şablon olarak işaretlemek onu donduracak ve kopyalarını " +#~ "oluşturmanıza izin verecektir" + +#~ msgid "Public template" +#~ msgstr "Herkese açık şablon" + +#~ msgid "A public template is available to other users" +#~ msgstr "" +#~ "Herkese açık bir şablon diğer kullanıcılar tarafından kullanılabilir" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Bu egzersiz seansı hakkında kaydetmek isteyebileceğiniz herhangi bir not." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "" +#~ "Bu egzersiz seansı hakkındaki izleniminiz. Yapabildiğin kadar iyi " +#~ "egzersiz yaptın mı?" + +#~ msgid "Start time" +#~ msgstr "Başlangıç saati" + +#~ msgid "Finish time" +#~ msgstr "Bitiş zamanı" + +#~ msgid "Exercise day" +#~ msgstr "Egzersiz günü" + +#~ msgid "Value" +#~ msgstr "Değer" + +#~ msgid "In kcal per 100g" +#~ msgstr "100 g başına kcal olarak" + +#~ msgid "In g per 100g of product" +#~ msgstr "100 g ürün başına g cinsinden" + +#~ msgid "Link to product" +#~ msgstr "Ürün bağlantısı" + +#~ msgid "Brand name of product" +#~ msgstr "Ürünün marka adı" + +#~ msgid "Ingredient Categories" +#~ msgstr "İçerik Kategorileri" + +#~ msgid "Amount in grams" +#~ msgstr "Gram cinsinden miktar" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Birim miktar, ör. \"1 Fincan\" veya \"1/2 kaşık\"" + +#~ msgid "Nutrition plan" +#~ msgstr "Beslenme planı" + +#~ msgid "Meal" +#~ msgstr "Yemek" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Tarih ve Saat (Yaklaşık)" + +#~ msgid "Time (approx)" +#~ msgstr "Zaman (yaklaşık)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Yemeklere \"Kahvaltı\" veya \"antrenmandan sonra\" gibi metinsel bir " +#~ "açıklama / ad verin" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "" +#~ "Planın amacının bir açıklaması, ör. \"Kitle kazanın\" veya \"Yaza " +#~ "hazırlanın\"" + +#~ msgid "Use daily calories" +#~ msgstr "Günlük kalori kullanın" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Bu planı hedef miktarda kalori içeriyor olarak işaretlemek istiyorsanız " +#~ "kutuyu işaretleyin. Hesap makinesini kullanabilir veya değeri kendiniz " +#~ "girebilirsiniz." + +#~ msgid "Weight entry" +#~ msgstr "Ağırlık girişi" + +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "\"%(target)s\" sayfasına geri dön" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "{self.gym.name} için yapılandırma" + +#~ msgid "Height (in)" +#~ msgstr "Boy (inç)" + +#~ msgid "Weight (kg)" +#~ msgstr "Ağırlık (kg)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Ağırlık (paunt)" + +#~ msgid "Calculate" +#~ msgstr "Hesaplamak" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "Toplam enerji ({self.energy} kcal), yaklaşık toplamı değil " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3096,18 +3220,6 @@ msgstr "Yeniden Gönder" #~ msgid "The art style of your image" #~ msgstr "Resminizin sanat tarzı" -#~ msgid "Sets" -#~ msgstr "Setleri" - -#~ msgid "RiR" -#~ msgstr "RiR" - -#~ msgid "Rest day" -#~ msgstr "Dinlenme günü" - -#~ msgid "Nutritional data" -#~ msgstr "Beslenme verileri" - #~ msgid "Workouts" #~ msgstr "Egzersizler" @@ -3165,9 +3277,6 @@ msgstr "Yeniden Gönder" #~ "Projeye yardımcı olmak, sunucu masraflarını karşılamak ve geliştirmeyi " #~ "desteklemek için bağış yapın" -#~ msgid "Sample workout" -#~ msgstr "Örnek antrenman" - #~ msgid "Sample day" #~ msgstr "Örnek gün" @@ -3568,9 +3677,6 @@ msgstr "Yeniden Gönder" #~ msgid "Edit workout" #~ msgstr "Antrenmanı düzenle" -#~ msgid "Copy workout" -#~ msgstr "Antrenmanı kopyala" - #~ msgid "Copy" #~ msgstr "Kopyala" @@ -3605,9 +3711,6 @@ msgstr "Yeniden Gönder" #~ msgid "Your BMI is: " #~ msgstr "BMI değeriniz: " -#~ msgid "Legend" -#~ msgstr "Efsane" - #~ msgid "Adipositas III" #~ msgstr "Yağlanma III" @@ -3680,9 +3783,6 @@ msgstr "Yeniden Gönder" #~ msgid "Delete schedule" #~ msgstr "Programı sil" -#~ msgid "Weight log" -#~ msgstr "Ağırlık günlüğü" - #~ msgid "Weight log for workout" #~ msgstr "Egzersiz için ağırlık günlüğü" @@ -3748,8 +3848,8 @@ msgstr "Yeniden Gönder" #, python-brace-format #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "" #~ "{request.user.username} kullanıcısı yeni bir içerik \"{self.name}\" " #~ "gönderdi." @@ -4469,8 +4569,8 @@ msgstr "Yeniden Gönder" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" @@ -4479,8 +4579,8 @@ msgstr "Yeniden Gönder" #~ "erişilebilirdir.\n" #~ "Özgür yazılım dünyasında yeniyseniz, açık kaynaklı projelerin çok iyi " #~ "çalıştığını\n" -#~ "özetleyen bu\n" +#~ "özetleyen bu\n" #~ "makaleye bir göz atmanızı tavsiye ederiz. " #~ msgid "" diff --git a/wger/locale/uk/LC_MESSAGES/django.po b/wger/locale/uk/LC_MESSAGES/django.po index 64025efbc..3a52cfb5c 100644 --- a/wger/locale/uk/LC_MESSAGES/django.po +++ b/wger/locale/uk/LC_MESSAGES/django.po @@ -12,8 +12,8 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" -"PO-Revision-Date: 2025-10-02 15:01+0000\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" +"PO-Revision-Date: 2026-01-19 13:01+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -24,7 +24,7 @@ msgstr "" "? 0 : n % 1 == 0 && n % 10 >= 2 && n % 10 <= 4 && (n % 100 < 12 || n % 100 > " "14) ? 1 : n % 1 == 0 && (n % 10 ==0 || (n % 10 >=5 && n % 10 <=9) || (n % " "100 >=11 && n % 100 <=14 )) ? 2: 3);\n" -"X-Generator: Weblate 5.14-dev\n" +"X-Generator: Weblate 5.16-dev\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Змінити" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:91 core/templates/navigation.html:271 #: core/templates/navigation.html:278 core/templates/user/login.html:4 +#: core/templates/user/registration_sidebar.html:12 #: software/templates/features.html:82 software/templates/features.html:448 msgid "Login" msgstr "Вхід" -#: core/forms.py:108 core/forms.py:222 gym/views/export.py:61 +#: core/forms.py:130 core/forms.py:244 gym/views/export.py:61 #: gym/views/gym.py:217 msgid "First name" msgstr "Ім'я" -#: core/forms.py:109 core/forms.py:223 core/templates/user/overview.html:284 +#: core/forms.py:131 core/forms.py:245 core/templates/user/overview.html:284 #: gym/views/export.py:62 gym/views/gym.py:217 msgid "Last name" msgstr "Прізвище" -#: core/forms.py:111 core/forms.py:188 core/templates/user/overview.html:288 +#: core/forms.py:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 #: gym/templates/contract/view.html:77 gym/templates/gym/member_list.html:116 #: gym/templates/gym/new_user.html:30 gym/views/export.py:60 @@ -86,54 +87,54 @@ msgstr "Прізвище" msgid "Email" msgstr "Адреса електронної пошти" -#: core/forms.py:112 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Використовується для скидання пароля і, і за необхідності, нагадування " "електронною поштою." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Дата народження" -#: core/forms.py:155 +#: core/forms.py:177 msgid "Personal data" msgstr "Особисті дані" -#: core/forms.py:167 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Нагадування про тренування" -#: core/forms.py:174 +#: core/forms.py:196 msgid "Other settings" msgstr "Інші параметри" -#: core/forms.py:182 core/views/user.py:611 core/views/user.py:626 -#: core/views/user.py:638 gym/forms.py:73 utils/generic_views.py:143 +#: core/forms.py:204 core/views/user.py:614 core/views/user.py:629 +#: core/views/user.py:641 gym/forms.py:73 utils/generic_views.py:143 msgid "Save" msgstr "Зберегти" -#: core/forms.py:189 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Використовується для скидання пароля і, при необхідності, нагадування " "електронною поштою." -#: core/forms.py:218 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ця адреса електронної пошти вже використовується." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 msgid "Password" msgstr "Пароль" -#: core/forms.py:241 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Введіть свій поточний пароль." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 #: core/templates/repetition_unit/list.html:22 #: core/templates/user/overview.html:233 @@ -150,38 +151,21 @@ msgstr "Введіть свій поточний пароль." msgid "Delete" msgstr "Вилучити" -#: core/forms.py:259 +#: core/forms.py:281 msgid "Invalid password" msgstr "Неправильний пароль" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Форма захищена reCAPTCHA" -#: core/forms.py:287 core/forms.py:309 core/templates/navigation.html:272 -#: core/templates/navigation.html:285 core/templates/template.html:150 +#: core/forms.py:314 core/forms.py:341 core/templates/navigation.html:272 +#: core/templates/navigation.html:285 core/templates/template.html:123 #: core/templates/user/login.html:21 core/views/user.py:285 #: software/templates/features.html:87 software/templates/features.html:442 msgid "Register" msgstr "Зареєструватись" -#: core/forms.py:323 software/templates/features.html:45 -msgid "Contact" -msgstr "Контакт" - -#: core/forms.py:324 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Яким чином відповідати вам (електронна пошта, тощо)" - -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Коментар" - -#: core/forms.py:333 -msgid "What do you want to say?" -msgstr "Що ви хочете сказати?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Коротке позначення мови" @@ -210,7 +194,7 @@ msgstr "" msgid "Short name, e.g. CC-BY-SA 3" msgstr "Коротке ім'я, н-д CC-BY-SA 3" -#: core/models/license.py:45 nutrition/models/ingredient.py:223 +#: core/models/license.py:45 msgid "Link" msgstr "Посилання" @@ -323,7 +307,7 @@ msgstr "" msgid "Age" msgstr "Вік" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Зріст (см)" @@ -373,8 +357,7 @@ msgstr "Денна кількість калорій" msgid "Total caloric intake, including e.g. any surplus" msgstr "Загальне споживання калорій, в тому числі, будь-який надлишок" -#: core/models/profile.py:333 nutrition/models/ingredient_weight_unit.py:45 -#: nutrition/models/log.py:96 nutrition/models/meal_item.py:59 +#: core/models/profile.py:333 msgid "Weight unit" msgstr "Одиниця ваги" @@ -400,22 +383,25 @@ msgid "Number of days after the last weight entry (enter 0 to deactivate)" msgstr "" "Кількість днів після останнього запису ваги (введіть 0 для деактивації)" -#: core/models/profile.py:439 +#: core/models/profile.py:379 +msgid "Enable trophies" +msgstr "Увімкнути трофеї" + +#: core/models/profile.py:380 +msgid "Enable or disable the trophy system for this user" +msgstr "Увімкнути або вимкнути систему трофеїв для цього користувача" + +#: core/models/profile.py:446 msgid "The sum of all hours has to be 24" msgstr "Сума всіх годин повинна дорівнювати 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 -#: core/templates/user/overview.html:280 core/views/user.py:586 -#: exercises/models/category.py:29 exercises/models/equipment.py:29 -#: exercises/models/muscle.py:36 exercises/models/translation.py:56 -#: gym/models/contract.py:52 gym/models/contract.py:103 gym/models/gym.py:46 +#: core/templates/user/overview.html:280 core/views/user.py:589 +#: exercises/models/muscle.py:36 gym/models/contract.py:52 +#: gym/models/contract.py:103 gym/models/gym.py:46 #: gym/models/user_document.py:84 gym/templates/contract/view.html:50 #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 -#: gym/views/gym.py:158 manager/models/day.py:73 manager/models/routine.py:81 -#: measurements/models/category.py:36 nutrition/models/ingredient.py:126 -#: nutrition/models/ingredient_category.py:27 nutrition/models/meal.py:65 -#: nutrition/models/weight_unit.py:38 -#: nutrition/templates/ingredient/view.html:151 +#: gym/views/gym.py:158 nutrition/templates/ingredient/view.html:151 msgid "Name" msgstr "Ім'я" @@ -435,7 +421,7 @@ msgstr "Сторінку не знайдено" msgid "The page you requested does not exist." msgstr "Запитана вами сторінка не існує." -#: core/templates/500.html:4 core/templates/template_no_context.html:37 +#: core/templates/500.html:4 core/templates/template_no_context.html:36 msgid "An error occurred" msgstr "Сталася помилка" @@ -458,7 +444,7 @@ msgstr "" "Ви переглядаєте сайт як користувач \"%(current_user)s\", усі дії виконуються " "з його даними." -#: core/templates/base.html:15 +#: core/templates/base.html:15 core/templates/base_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" msgstr "Назад до \"%(target)s\"" @@ -478,15 +464,6 @@ msgstr "" " їхні дані.\n" " " -#: core/templates/base_wide.html:12 -#, python-format -msgid "" -"Back to \"%(target)s\n" -" \"" -msgstr "" -"Назад до \"%(target)s\n" -" \"" - #: core/templates/delete.html:4 msgid "Are you sure you want to delete this? This action cannot be undone." msgstr "Ви дійсно хочете вилучити це? Цю дію неможливо скасувати." @@ -539,11 +516,7 @@ msgstr "" "Будь ласка, перейдіть за наступним посиланням, щоб підтвердити свою " "електронну пошту: %(link)s" -#: core/templates/index.html:4 software/templates/features.html:453 -msgid "Dashboard" -msgstr "Панель" - -#: core/templates/language/overview.html:4 core/templates/navigation.html:334 +#: core/templates/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" msgstr "Мови" @@ -609,7 +582,7 @@ msgstr "Список ліцензій" msgid "Nothing found" msgstr "Нічого не знайдено" -#: core/templates/misc/about.html:4 core/templates/template.html:187 +#: core/templates/misc/about.html:4 core/templates/template.html:160 msgid "Imprint" msgstr "Відбиток" @@ -651,7 +624,7 @@ msgid "Exercises" msgstr "Вправи" #: core/templates/navigation.html:102 core/templates/navigation.html:176 -#: core/templates/navigation.html:329 +#: core/templates/navigation.html:339 msgid "Administration" msgstr "Адміністрація" @@ -659,7 +632,7 @@ msgstr "Адміністрація" msgid "Exercise edit history" msgstr "Історія редагування вправи" -#: core/templates/navigation.html:112 exercises/models/base.py:107 +#: core/templates/navigation.html:112 msgid "Equipment" msgstr "Обладнання" @@ -729,7 +702,7 @@ msgstr "Документація для розробників" msgid "Get the code" msgstr "Отримати код" -#: core/templates/navigation.html:255 core/templates/template.html:226 +#: core/templates/navigation.html:255 core/templates/template.html:199 #: software/templates/features.html:603 msgid "Translate" msgstr "Перекласти" @@ -738,36 +711,41 @@ msgstr "Перекласти" msgid "Reset password" msgstr "Скинути пароль" -#: core/templates/navigation.html:310 -msgid "My preferences" -msgstr "Мої налаштування" - -#: core/templates/navigation.html:319 +#: core/templates/navigation.html:301 core/templates/navigation.html:329 msgid "Logout" msgstr "Вийти" -#: core/templates/navigation.html:342 +#: core/templates/navigation.html:320 +msgid "My preferences" +msgstr "Мої налаштування" + +#: core/templates/navigation.html:352 msgid "Licenses" msgstr "Ліцензії" -#: core/templates/navigation.html:350 +#: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" msgstr "Одиниці повторень" -#: core/templates/navigation.html:358 core/templates/weight_unit/list.html:4 +#: core/templates/navigation.html:368 core/templates/weight_unit/list.html:4 #: nutrition/templates/ingredient/view.html:141 msgid "Weight units" msgstr "Одиниця ваги" -#: core/templates/navigation.html:366 core/templates/user/list.html:4 +#: core/templates/navigation.html:376 core/templates/user/list.html:4 msgid "User list" msgstr "Список користувачів" -#: core/templates/navigation.html:372 +#: core/templates/navigation.html:382 msgid "Gyms" msgstr "Тренажерні зали" +#: core/templates/navigation.html:403 +#: trophies/templates/trophies/overview.html:7 +msgid "Trophies" +msgstr "Трофеї" + #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" msgstr "Відновлення пароля завершено" @@ -827,27 +805,27 @@ msgstr "назад" msgid "next" msgstr "вперед" -#: core/templates/template.html:123 +#: core/templates/template.html:96 msgid "Close" msgstr "Закрити" -#: core/templates/template.html:139 +#: core/templates/template.html:112 msgid "" "You are using a guest account, data entered will be deleted after a week." msgstr "" "Ви використовуєте обліковий запис гостя, введені дані будуть видалені через " "тиждень." -#: core/templates/template.html:144 +#: core/templates/template.html:117 msgid "Create some demo entries" msgstr "Створіть деякі демонстраційні записи" -#: core/templates/template.html:192 software/templates/features.html:568 +#: core/templates/template.html:165 software/templates/features.html:568 #: software/templates/tos.html:7 msgid "Terms of service" msgstr "Умови надання послуг" -#: core/templates/template_features.html:60 software/templates/features.html:9 +#: core/templates/template_features.html:53 software/templates/features.html:9 msgid "Features" msgstr "Особливості" @@ -924,23 +902,14 @@ msgstr "Огляд" #: core/templates/user/overview.html:34 core/templates/user/overview.html:76 #: core/templates/user/overview.html:120 core/templates/user/overview.html:152 -#: exercises/models/base.py:122 exercises/models/base.py:128 -#: exercises/models/translation.py:61 exercises/models/translation.py:67 -#: exercises/models/video.py:163 exercises/models/video.py:169 -#: gallery/models/image.py:42 manager/helpers.py:88 manager/models/log.py:53 -#: manager/models/session.py:73 measurements/models/measurement.py:46 -#: nutrition/models/ingredient.py:87 nutrition/models/ingredient.py:93 -#: nutrition/models/ingredient.py:231 weight/models.py:51 +#: manager/helpers.py:88 software/templates/about_us.html:170 #: weight/templates/import_csv_preview.html:13 #: weight/templates/import_csv_preview.html:42 weight/views.py:54 msgid "Date" msgstr "Дата" #: core/templates/user/overview.html:35 core/templates/user/overview.html:153 -#: exercises/models/translation.py:49 gallery/models/image.py:65 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Опис" @@ -948,7 +917,7 @@ msgstr "Опис" msgid "Number of logs (days)" msgstr "Кількість записів (днів)" -#: core/templates/user/overview.html:37 core/views/user.py:587 +#: core/templates/user/overview.html:37 core/views/user.py:590 #: gym/templates/gym/email_inactive_members.html:4 gym/views/gym.py:158 msgid "Last activity" msgstr "Остання активність" @@ -961,12 +930,11 @@ msgstr "Не знайдено жодних тренувань." msgid "Log" msgstr "Журнал" -#: core/templates/user/overview.html:77 manager/models/session.py:91 +#: core/templates/user/overview.html:77 msgid "General impression" msgstr "Загальне враження" #: core/templates/user/overview.html:78 core/templates/user/overview.html:390 -#: manager/models/session.py:81 msgid "Notes" msgstr "Примітки" @@ -976,28 +944,27 @@ msgid "Time" msgstr "Час" #: core/templates/user/overview.html:112 core/templates/user/overview.html:121 -#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:53 -#: weight/templates/import_csv_preview.html:14 +#: manager/helpers.py:89 weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" msgstr "Вага" -#: core/templates/user/overview.html:154 nutrition/models/ingredient.py:131 +#: core/templates/user/overview.html:154 #: nutrition/templates/ingredient/view.html:51 nutrition/views/plan.py:245 msgid "Energy" msgstr "Енергія" -#: core/templates/user/overview.html:155 nutrition/models/ingredient.py:138 +#: core/templates/user/overview.html:155 #: nutrition/templates/ingredient/view.html:58 nutrition/views/plan.py:251 msgid "Protein" msgstr "Білок" -#: core/templates/user/overview.html:156 nutrition/models/ingredient.py:146 +#: core/templates/user/overview.html:156 #: nutrition/templates/ingredient/view.html:64 nutrition/views/plan.py:259 msgid "Carbohydrates" msgstr "Вуглеводи" -#: core/templates/user/overview.html:157 nutrition/models/ingredient.py:164 +#: core/templates/user/overview.html:157 #: nutrition/templates/ingredient/view.html:80 nutrition/views/plan.py:273 msgid "Fat" msgstr "Жири" @@ -1057,7 +1024,8 @@ msgid "Details" msgstr "Деталі" #: core/templates/user/overview.html:276 gym/views/export.py:57 -#: manager/helpers.py:89 +#: manager/helpers.py:89 nutrition/views/plan.py:151 +#: nutrition/views/plan.py:157 msgid "Nr." msgstr "№" @@ -1143,10 +1111,14 @@ msgstr "Надіслати електронний лист для підтвер msgid "You need to verify your email to contribute exercises" msgstr "Вам необхідно підтвердити свою електронну пошту, щоб надсилати вправи" -#: core/templates/user/preferences.html:55 core/views/user.py:598 +#: core/templates/user/preferences.html:55 core/views/user.py:601 msgid "Change password" msgstr "Змінити пароль" +#: core/templates/user/registration_sidebar.html:8 +msgid "Already have an account?" +msgstr "Вже маєте обліковий запис?" + #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" msgstr "кг" @@ -1174,7 +1146,7 @@ msgstr "унцій" #: core/views/languages.py:85 exercises/views/categories.py:122 #: exercises/views/equipment.py:103 exercises/views/muscles.py:99 -#: nutrition/views/ingredient.py:119 nutrition/views/unit.py:110 +#: nutrition/views/ingredient.py:120 nutrition/views/unit.py:110 msgid "Successfully deleted" msgstr "Успішно вилучено" @@ -1183,25 +1155,25 @@ msgstr "Успішно вилучено" #: exercises/views/categories.py:128 exercises/views/muscles.py:106 #: gallery/views/images.py:124 gym/views/admin_notes.py:196 #: gym/views/document.py:206 gym/views/gym.py:481 -#: nutrition/views/ingredient.py:126 nutrition/views/unit.py:117 +#: nutrition/views/ingredient.py:127 nutrition/views/unit.py:117 #, python-brace-format msgid "Delete {0}?" msgstr "Вилучити {0}?" #: core/views/languages.py:111 core/views/license.py:85 -#: core/views/repetition_units.py:86 core/views/user.py:461 +#: core/views/repetition_units.py:86 core/views/user.py:464 #: core/views/weight_units.py:86 exercises/views/categories.py:98 #: exercises/views/equipment.py:81 exercises/views/muscles.py:87 #: gym/views/admin_notes.py:161 gym/views/config.py:68 #: gym/views/contract.py:186 gym/views/contract_option.py:123 #: gym/views/contract_type.py:123 gym/views/document.py:171 -#: gym/views/gym.py:463 nutrition/views/ingredient.py:145 +#: gym/views/gym.py:463 nutrition/views/ingredient.py:146 #: nutrition/views/unit.py:143 #, python-brace-format msgid "Edit {0}" msgstr "Змінити {0}" -#: core/views/misc.py:90 +#: core/views/misc.py:74 msgid "" "We have created sample workout, workout schedules, weight logs, (body) " "weight and nutrition plan entries so you can better see what this site can " @@ -1211,18 +1183,6 @@ msgstr "" "тіла та плани харчування, щоб ви могли краще побачити, що може зробити цей " "сайт. Ви можете редагувати або видаляти їх!" -#: core/views/misc.py:125 -msgid "Feedback" -msgstr "Відгук" - -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Надіслати" - -#: core/views/misc.py:152 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Ваш відгук успішно надіслано. Дякуємо!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1232,106 +1192,43 @@ msgstr "Обліковий запис \"{0}\" успішно видалено" msgid "You were successfully registered" msgstr "Ви успішно зареєстровані" -#: core/views/user.py:338 +#: core/views/user.py:341 msgid "Settings successfully updated" msgstr "Налаштування успішно оновлено" -#: core/views/user.py:377 +#: core/views/user.py:380 msgid "The user was successfully deactivated" msgstr "Користувач був успішно деактивований" -#: core/views/user.py:414 +#: core/views/user.py:417 msgid "The user was successfully activated" msgstr "Користувач успішно активований" -#: core/views/user.py:429 +#: core/views/user.py:432 msgid "Edit user" msgstr "Редагувати користувача" -#: core/views/user.py:584 gym/templates/gym/member_list.html:26 +#: core/views/user.py:587 gym/templates/gym/member_list.html:26 #: gym/views/gym.py:158 msgid "ID" msgstr "ID" -#: core/views/user.py:585 gym/forms.py:95 gym/templates/contract/view.html:55 +#: core/views/user.py:588 gym/forms.py:95 gym/templates/contract/view.html:55 #: gym/templates/gym/member_list.html:27 gym/views/export.py:59 #: gym/views/gym.py:158 gym/views/gym.py:217 msgid "Username" msgstr "Ім'я користувача" -#: core/views/user.py:588 gym/templates/gym/new_user.html:34 +#: core/views/user.py:591 gym/templates/gym/new_user.html:34 #: gym/views/export.py:58 gym/views/gym.py:217 msgid "Gym" msgstr "Тренажерний зал" -#: core/views/user.py:647 +#: core/views/user.py:650 #, python-format msgid "A verification email was sent to %(email)s" msgstr "Підтверджувальний лист було надіслано на електронну адресу %(email)s" -#: exercises/models/base.py:86 nutrition/models/ingredient.py:245 -msgid "Category" -msgstr "Категорія" - -#: exercises/models/base.py:93 -msgid "Primary muscles" -msgstr "Основні м'язи" - -#: exercises/models/base.py:99 -msgid "Secondary muscles" -msgstr "Другорядні м'язи" - -#: exercises/models/base.py:114 -msgid "Variations" -msgstr "Варіації" - -#: exercises/models/category.py:34 -msgid "Exercise Categories" -msgstr "Категорії вправ" - -#: exercises/models/comment.py:49 exercises/models/exercise_alias.py:50 -#: exercises/models/image.py:75 exercises/models/video.py:98 -#: manager/helpers.py:89 manager/models/log.py:91 -msgid "Exercise" -msgstr "Вправа" - -#: exercises/models/comment.py:56 -msgid "A comment about how to correctly do this exercise." -msgstr "Коментар про те, як правильно виконувати цю вправу." - -#: exercises/models/exercise_alias.py:56 -msgid "Alias for an exercise" -msgstr "Псевдонім вправи" - -#: exercises/models/image.py:58 -msgid "Line" -msgstr "Лінія" - -#: exercises/models/image.py:59 -msgid "3D" -msgstr "3D" - -#: exercises/models/image.py:60 -msgid "Low-poly" -msgstr "Малополігональний" - -#: exercises/models/image.py:61 -msgid "Photo" -msgstr "Знімок" - -#: exercises/models/image.py:62 -msgid "Other" -msgstr "Інше" - -#: exercises/models/image.py:81 gallery/models/image.py:51 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Зображення" - -#: exercises/models/image.py:89 -msgid "Main picture" -msgstr "Головне зображення" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "На латині, напр. \"Pectoralis major\"" @@ -1344,56 +1241,19 @@ msgstr "Альтернативна назва" msgid "A more basic name for the muscle" msgstr "Більш основна назва м'язів" -#: exercises/models/translation.py:74 nutrition/models/ingredient.py:81 -#: nutrition/models/weight_unit.py:32 -msgid "Language" -msgstr "Мова" - -#: exercises/models/video.py:52 +#: exercises/models/video.py:50 #, python-format msgid "Maximum file size is %(size)sMB." msgstr "Максимальний розмір файлу - %(size)sМБ." -#: exercises/models/video.py:59 exercises/models/video.py:67 +#: exercises/models/video.py:57 exercises/models/video.py:65 msgid "File type is not supported" msgstr "Тип файлу не підтримується" -#: exercises/models/video.py:72 +#: exercises/models/video.py:70 msgid "File is not a valid video" msgstr "Файл не є припустимим відеофайлом" -#: exercises/models/video.py:104 -msgid "Main video" -msgstr "Головне відео" - -#: exercises/models/video.py:110 -msgid "Video" -msgstr "Відео" - -#: exercises/models/video.py:117 -msgid "Size" -msgstr "Розмір" - -#: exercises/models/video.py:124 -msgid "Duration" -msgstr "Тривалість" - -#: exercises/models/video.py:133 -msgid "Width" -msgstr "Ширина" - -#: exercises/models/video.py:140 -msgid "Height" -msgstr "Висота" - -#: exercises/models/video.py:147 -msgid "Codec" -msgstr "Кодек" - -#: exercises/models/video.py:155 -msgid "Codec, long name" -msgstr "Кодек, довга назва" - #: exercises/templates/equipment/admin-overview.html:4 msgid "Equipment list" msgstr "Список обладнання" @@ -1406,13 +1266,10 @@ msgstr "Історія адміністрування вправ" msgid "Action" msgstr "Дія" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 -#: gym/forms.py:58 gym/templates/gym/email_inactive_members.html:4 +#: exercises/templates/history/overview.html:28 gym/forms.py:58 +#: gym/templates/gym/email_inactive_members.html:4 #: gym/templates/gym/new_user.html:22 -#: gym/templates/gym/reset_user_password.html:20 manager/models/log.py:59 -#: manager/models/routine.py:76 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Користувач" @@ -1464,10 +1321,6 @@ msgstr "Видалити обладнання?" msgid "Add muscle" msgstr "Додати м'язи" -#: gallery/models/image.py:52 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "Підтримуються лише формати PNG і JPEG" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "Додати зображення" @@ -1534,8 +1387,7 @@ msgid "Contract type" msgstr "Тип контракту" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:62 nutrition/models/ingredient_weight_unit.py:54 -#: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 +#: nutrition/forms.py:58 msgid "Amount" msgstr "Сума" @@ -1552,12 +1404,10 @@ msgid "Contract is active" msgstr "Контракт активний" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:98 nutrition/models/plan.py:62 msgid "Start date" msgstr "Дата початку" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:102 nutrition/models/plan.py:68 msgid "End date" msgstr "Кінцева дата" @@ -1609,11 +1459,6 @@ msgstr "Показувати назву в заголовку" msgid "Show the name of the gym in the site header" msgstr "Показати назву тренажерного залу в заголовку сайта" -#: gym/models/gym_config.py:68 -#, python-brace-format -msgid "Configuration for {self.gym.name}" -msgstr "Конфігурація для {self.gym.name}" - #: gym/models/user_config.py:65 gym/templates/gym/member_list.html:200 msgid "Overview of inactive members" msgstr "Огляд неактивних членів" @@ -1894,7 +1739,7 @@ msgstr "Перекладина" msgid "Quads" msgstr "Квадрицепс" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повтори" @@ -1930,6 +1775,174 @@ msgstr "До відмови" msgid "none (bodyweight exercise)" msgstr "немає (вправа з вагою тіла)" +#: i18n.tpl:41 +msgid "Beginner" +msgstr "Початківець" + +#: i18n.tpl:42 +msgid "Consistent" +msgstr "Послідовний" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "Присвячений" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "Одержимий" + +#: i18n.tpl:45 +msgid "Legend" +msgstr "Умовне позначення" + +#: i18n.tpl:46 +msgid "Veteran" +msgstr "Ветеран" + +#: i18n.tpl:47 +msgid "Titan" +msgstr "Титан" + +#: i18n.tpl:48 +msgid "Unstoppable" +msgstr "Непереможний" + +#: i18n.tpl:49 +msgid "Weekend Warrior" +msgstr "Воїн вихідного дня" + +#: i18n.tpl:50 +msgid "Elephant lifter" +msgstr "Підйомник слонів" + +#: i18n.tpl:51 +msgid "Bus lifter" +msgstr "Підйомник автобуса" + +#: i18n.tpl:52 +msgid "Plane lifter" +msgstr "Літак-підйомник" + +#: i18n.tpl:53 +msgid "Blue whale lifter" +msgstr "Підйомник синього кита" + +#: i18n.tpl:54 +msgid "Space Station lifter" +msgstr "Підйомник космічної станції" + +#: i18n.tpl:55 +msgid "Millionaire" +msgstr "Мільйонер" + +#: i18n.tpl:56 +msgid "Atlas" +msgstr "Атлас" + +#: i18n.tpl:57 +msgid "Early Bird" +msgstr "Рання пташка" + +#: i18n.tpl:58 +msgid "Night Owl" +msgstr "Нічна сова" + +#: i18n.tpl:59 +msgid "New Year, New Me" +msgstr "Новий рік, нова я" + +#: i18n.tpl:60 +msgid "Phoenix" +msgstr "Фенікс" + +#: i18n.tpl:61 +msgid "Personal Record" +msgstr "Особистий рекорд" + +#: i18n.tpl:62 +msgid "Complete your first workout" +msgstr "Завершіть своє перше тренування" + +#: i18n.tpl:63 +msgid "Complete 10 workouts" +msgstr "Виконайте 10 тренувань" + +#: i18n.tpl:64 +msgid "Complete 50 workouts" +msgstr "Виконайте 50 тренувань" + +#: i18n.tpl:65 +msgid "Complete 100 workouts" +msgstr "Виконайте 100 тренувань" + +#: i18n.tpl:66 +msgid "Complete 200 workouts" +msgstr "Виконайте 200 тренувань" + +#: i18n.tpl:67 +msgid "Complete 500 workouts" +msgstr "Виконайте 500 тренувань" + +#: i18n.tpl:68 +msgid "Complete 1000 workouts" +msgstr "Виконайте 1000 тренувань" + +#: i18n.tpl:69 +msgid "Maintain a 30-day workout streak" +msgstr "Підтримуйте 30-денну серію тренувань" + +#: i18n.tpl:70 +msgid "Work out on Saturday and Sunday for 4 consecutive weekends" +msgstr "Тренуйтеся в суботу та неділю протягом 4 вихідних поспіль" + +#: i18n.tpl:71 +msgid "Lift a cumulative total of 5.000 kg" +msgstr "Підняти загальну вагу 5.000 кг" + +#: i18n.tpl:72 +msgid "Lift a cumulative total of 20.000 kg" +msgstr "Підняти загальну вагу 20 000 кг" + +#: i18n.tpl:73 +msgid "Lift a cumulative total of 50.000 kg" +msgstr "Підняти загальну вагу 50 000 кг" + +#: i18n.tpl:74 +msgid "Lift a cumulative total of 150.000 kg" +msgstr "Підняти загальну вагу 150 000 кг" + +#: i18n.tpl:75 +msgid "Lift a cumulative total of 450.000 kg" +msgstr "Підняти загальну вагу 450 000 кг" + +#: i18n.tpl:76 +msgid "Lift a cumulative total of 1.000.000 kg" +msgstr "Підняти загальну вагу 1.000.000 кг" + +#: i18n.tpl:77 +msgid "Lift a cumulative total of 10.000.000 kg" +msgstr "Підняти загальну вагу 10 000.000 кг" + +#: i18n.tpl:78 +msgid "Complete a workout before 6:00 AM" +msgstr "Завершіть тренування до 6:00 ранку" + +#: i18n.tpl:79 +msgid "Complete a workout after 9:00 PM" +msgstr "Завершіть тренування після 21:00" + +#: i18n.tpl:80 +msgid "Work out on January 1st" +msgstr "Тренуйтеся 1 січня" + +#: i18n.tpl:81 +msgid "Return to training after being inactive for 30 days" +msgstr "Повернення до тренувань після 30 днів бездіяльності" + +#: i18n.tpl:82 +msgid "Achieve a new Personal Record on any exercise" +msgstr "Досягніть нового особистого рекорду в будь-якій вправі" + #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" msgid "Subject" @@ -1982,62 +1995,35 @@ msgstr "Надсилати електронні листи" msgid "Correction" msgstr "Виправлення" +#: manager/dataclasses.py:106 +msgid "Sets" +msgstr "Підходи" + #: manager/dataclasses.py:124 manager/helpers.py:89 msgid "Reps" msgstr "Повтори" +#: manager/dataclasses.py:158 +msgid "RiR" +msgstr "Повторів можете зробити" + +#: manager/dataclasses.py:165 +msgid "rest" +msgstr "відпочинок" + +#: manager/helpers.py:80 +msgid "Rest day" +msgstr "День відпочинку" + +#: manager/helpers.py:89 +msgid "Exercise" +msgstr "Вправа" + #: manager/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Термін дії процедури скоро закінчиться" -#: manager/models/day.py:52 -msgid "Routine" -msgstr "Рутина" - -#: manager/models/day.py:60 manager/models/slot.py:34 -#: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 -msgid "Order" -msgstr "Порядок" - -#: manager/models/log.py:78 -msgid "Session" -msgstr "Сесія" - -#: manager/models/log.py:97 manager/views/pdf.py:75 manager/views/pdf.py:144 -msgid "Workout" -msgstr "Тренування" - -#: manager/models/log.py:114 manager/models/log.py:149 -#: manager/models/slot_entry.py:122 measurements/models/category.py:41 -#: nutrition/forms.py:66 -msgid "Unit" -msgstr "Одиниця" - -#: manager/models/routine.py:93 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата створення" - -#: manager/models/routine.py:106 -msgid "Workout template" -msgstr "Шаблон тренування" - -#: manager/models/routine.py:108 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Позначення тренування як шаблону заморозить його і дозволить вам зробити " -"його копії" - -#: manager/models/routine.py:116 -msgid "Public template" -msgstr "Загальнодоступний шаблон" - -#: manager/models/routine.py:117 -msgid "A public template is available to other users" -msgstr "Загальнодоступний шаблон доступний для інших користувачів" - -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:153 manager/models/session.py:145 msgid "The start time cannot be after the end time." msgstr "Час початку не може бути після часу закінчення." @@ -2053,32 +2039,10 @@ msgstr "Нейтрально" msgid "Good" msgstr "Добре" -#: manager/models/session.py:84 -msgid "Any notes you might want to save about this workout session." -msgstr "Будь-які нотатки, які ви захочете зберегти в цьому сеансі тренування." - -#: manager/models/session.py:96 -msgid "" -"Your impression about this workout session. Did you exercise as well as you " -"could?" -msgstr "Ваше враження від тренування. Чи виконували ви вправи як треба?" - -#: manager/models/session.py:104 -msgid "Start time" -msgstr "Час початку" - -#: manager/models/session.py:113 -msgid "Finish time" -msgstr "Час завершення" - -#: manager/models/session.py:144 +#: manager/models/session.py:142 msgid "If you enter a time, you must enter both start and end time." msgstr "Якщо вводити час, необхідно ввести час початку і закінчення." -#: manager/models/slot.py:26 -msgid "Exercise day" -msgstr "День тренування" - #: manager/templates/routines/email_reminder.tpl:3 #, python-format msgid "Your current workout '%(routine)s' expired %(days)s days ago." @@ -2136,44 +2100,32 @@ msgstr "" "Ви будете регулярно отримувати такі нагадування, поки не введете поточну " "вагу." +#: manager/views/pdf.py:75 manager/views/pdf.py:144 +msgid "Workout" +msgstr "Тренування" + #: manager/views/pdf.py:77 manager/views/pdf.py:146 #, python-format msgid "Workout for %s" msgstr "Тренування для %s" -#: measurements/models/measurement.py:51 -msgid "Value" -msgstr "Значення" +#: nutrition/forms.py:62 +msgid "Unit" +msgstr "Одиниця" -#: nutrition/forms.py:117 -msgid "Height (in)" -msgstr "Зріст (см)" - -#: nutrition/forms.py:120 -msgid "Weight (kg)" -msgstr "Вага (кг)" - -#: nutrition/forms.py:120 -msgid "Weight (lbs)" -msgstr "Вага (фунти)" - -#: nutrition/forms.py:133 -msgid "Calculate" -msgstr "Обчислити" - -#: nutrition/forms.py:207 nutrition/templates/rate/form.html:76 +#: nutrition/forms.py:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" msgstr "Основне споживання калорій" -#: nutrition/forms.py:208 +#: nutrition/forms.py:171 msgid "Your basic caloric intake as calculated for your data" msgstr "Ваше основне споживання калорій, розраховане для ваших даних" -#: nutrition/forms.py:213 +#: nutrition/forms.py:176 msgid "Additional calories" msgstr "Додаткові калорії" -#: nutrition/forms.py:215 +#: nutrition/forms.py:178 msgid "" "Additional calories to add to the base rate (to substract, enter a negative " "number)" @@ -2181,115 +2133,14 @@ msgstr "" "Додаткові калорії для додавання до базової ставки (для віднімання, введіть " "від'ємне число)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 -#: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 +#: nutrition/forms.py:209 msgid "Ingredient" msgstr "Інгредієнт" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Також шукайте імена англійською мовою" -#: nutrition/models/ingredient.py:132 -msgid "In kcal per 100g" -msgstr "В ккал на 100 г" - -#: nutrition/models/ingredient.py:139 nutrition/models/ingredient.py:147 -#: nutrition/models/ingredient.py:157 nutrition/models/ingredient.py:165 -#: nutrition/models/ingredient.py:175 nutrition/models/ingredient.py:185 -#: nutrition/models/ingredient.py:195 -msgid "In g per 100g of product" -msgstr "В г на 100г продукту" - -#: nutrition/models/ingredient.py:156 -#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 -msgid "Sugar content in carbohydrates" -msgstr "Вміст цукру в вуглеводах" - -#: nutrition/models/ingredient.py:174 -#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 -msgid "Saturated fat content in fats" -msgstr "Вміст жиру у жирах" - -#: nutrition/models/ingredient.py:184 -#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 -msgid "Fiber" -msgstr "Волокна" - -#: nutrition/models/ingredient.py:194 -#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 -msgid "Sodium" -msgstr "Натрій" - -#: nutrition/models/ingredient.py:224 -msgid "Link to product" -msgstr "Посилання на виріб" - -#: nutrition/models/ingredient.py:253 -msgid "Brand name of product" -msgstr "Торгова марка виробу" - -#: nutrition/models/ingredient.py:320 -#, python-brace-format -msgid "The total energy ({self.energy}kcal) is not the approximate sum of the " -msgstr "Загальна енергія ({self.energy}ккал) не є приблизною сумою " - -#: nutrition/models/ingredient_category.py:31 -msgid "Ingredient Categories" -msgstr "Категорії інгредієнтів" - -#: nutrition/models/ingredient_weight_unit.py:49 -msgid "Amount in grams" -msgstr "Кількість в грамах" - -#: nutrition/models/ingredient_weight_unit.py:55 -msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" -msgstr "Одиниця кількісті, напр. \"1 чашка\" або \"1/2 ложки\"" - -#: nutrition/models/log.py:52 nutrition/models/meal.py:48 -#: nutrition/models/meal_item.py:48 nutrition/models/plan.py:117 -msgid "Nutrition plan" -msgstr "План харчування" - -#: nutrition/models/log.py:61 -msgid "Meal" -msgstr "Приймання їжі" - -#: nutrition/models/log.py:71 -msgid "Date and Time (Approx.)" -msgstr "Дата і час (приблизно)" - -#: nutrition/models/meal.py:60 -msgid "Time (approx)" -msgstr "Час (приблизно)" - -#: nutrition/models/meal.py:67 -msgid "" -"Give meals a textual description / name such as \"Breakfast\" or \"after " -"workout\"" -msgstr "" -"Дайте стравам текстовий опис / назву, таку як \"Сніданок\" або \"після " -"тренування\"" - -#: nutrition/models/plan.py:78 -msgid "" -"A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare for " -"summer\"" -msgstr "Опис мети плану, напр. \"Набір маси\" або \"Підготування до літа\"" - -#: nutrition/models/plan.py:99 -msgid "Use daily calories" -msgstr "Використовуйте щоденні калорії" - -#: nutrition/models/plan.py:102 -msgid "" -"Tick the box if you want to mark this plan as having a goal amount of " -"calories. You can use the calculator or enter the value yourself." -msgstr "" -"Поставте прапорець, якщо ви хочете відзначити цей план як такий, що має " -"кількість калорій. Ви можете скористатися калькулятором або ввести значення " -"самостійно." - #: nutrition/templates/ingredient/email_new.tpl:1 #, python-format msgid "" @@ -2355,6 +2206,10 @@ msgstr "Макроелементи" msgid "kJ" msgstr "кДж" +#: nutrition/templates/ingredient/view.html:70 nutrition/views/plan.py:267 +msgid "Sugar content in carbohydrates" +msgstr "Вміст цукру в вуглеводах" + #: nutrition/templates/ingredient/view.html:75 #: nutrition/templates/ingredient/view.html:91 #: nutrition/templates/ingredient/view.html:113 @@ -2362,10 +2217,22 @@ msgstr "кДж" msgid "n.A." msgstr "немає в наявності" +#: nutrition/templates/ingredient/view.html:86 nutrition/views/plan.py:281 +msgid "Saturated fat content in fats" +msgstr "Вміст жиру у жирах" + #: nutrition/templates/ingredient/view.html:102 msgid "Others" msgstr "Інші" +#: nutrition/templates/ingredient/view.html:108 nutrition/views/plan.py:287 +msgid "Fiber" +msgstr "Волокна" + +#: nutrition/templates/ingredient/view.html:118 nutrition/views/plan.py:293 +msgid "Sodium" +msgstr "Натрій" + #: nutrition/templates/ingredient/view.html:143 #: nutrition/templates/units/list.html:50 nutrition/views/unit.py:86 msgid "Add new weight unit" @@ -2458,7 +2325,7 @@ msgstr "" "свій план харчування на цих значеннях, поспостерігайте за собою кілька\n" "тижнів і при необхідності змініть загальну кількість." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Додати новий інгредієнт" @@ -2475,6 +2342,10 @@ msgstr "План харчування для %s" msgid "This is an empty plan, what did you expect on the PDF?" msgstr "Це порожній план, що ви очікували на PDF?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "Харчові дані" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "Разом" @@ -2661,6 +2532,10 @@ msgstr "" "wger Workout Manager - безплатний вебзастосунок з відкритим вихідним кодом, " "який керує вашими вправами та тренуванням." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Контакт" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Мобільний застосунок" @@ -2861,6 +2736,10 @@ msgstr "" msgid "Account" msgstr "Обліковий запис" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Панель" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Процедури тренувань" @@ -2935,14 +2814,14 @@ msgstr "Формат дати" msgid "You have to enter your weight" msgstr "Ви повинні ввести свою вагу" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "Запис ваги" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "Імпортувати журнал ваги" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "Надіслати" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -3064,6 +2943,230 @@ msgstr "" msgid "Re-Submit" msgstr "Повторно подати" +#~ msgid "Image" +#~ msgstr "Зображення" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "Підтримуються лише формати PNG і JPEG" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Яким чином відповідати вам (електронна пошта, тощо)" + +#~ msgid "Comment" +#~ msgstr "Коментар" + +#~ msgid "What do you want to say?" +#~ msgstr "Що ви хочете сказати?" + +#~ msgid "Feedback" +#~ msgstr "Відгук" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "Ваш відгук успішно надіслано. Дякуємо!" + +#~ msgid "Category" +#~ msgstr "Категорія" + +#~ msgid "Primary muscles" +#~ msgstr "Основні м'язи" + +#~ msgid "Secondary muscles" +#~ msgstr "Другорядні м'язи" + +#~ msgid "Variations" +#~ msgstr "Варіації" + +#~ msgid "Exercise Categories" +#~ msgstr "Категорії вправ" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "Коментар про те, як правильно виконувати цю вправу." + +#~ msgid "Alias for an exercise" +#~ msgstr "Псевдонім вправи" + +#~ msgid "Line" +#~ msgstr "Лінія" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "Малополігональний" + +#~ msgid "Photo" +#~ msgstr "Знімок" + +#~ msgid "Other" +#~ msgstr "Інше" + +#~ msgid "Height" +#~ msgstr "Висота" + +#~ msgid "Width" +#~ msgstr "Ширина" + +#~ msgid "Main picture" +#~ msgstr "Головне зображення" + +#~ msgid "Language" +#~ msgstr "Мова" + +#~ msgid "Main video" +#~ msgstr "Головне відео" + +#~ msgid "Video" +#~ msgstr "Відео" + +#~ msgid "Size" +#~ msgstr "Розмір" + +#~ msgid "Duration" +#~ msgstr "Тривалість" + +#~ msgid "Codec" +#~ msgstr "Кодек" + +#~ msgid "Codec, long name" +#~ msgstr "Кодек, довга назва" + +#~ msgid "Routine" +#~ msgstr "Рутина" + +#~ msgid "Order" +#~ msgstr "Порядок" + +#~ msgid "Session" +#~ msgstr "Сесія" + +#~ msgid "Creation date" +#~ msgstr "Дата створення" + +#~ msgid "Workout template" +#~ msgstr "Шаблон тренування" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "" +#~ "Позначення тренування як шаблону заморозить його і дозволить вам зробити " +#~ "його копії" + +#~ msgid "Public template" +#~ msgstr "Загальнодоступний шаблон" + +#~ msgid "A public template is available to other users" +#~ msgstr "Загальнодоступний шаблон доступний для інших користувачів" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "" +#~ "Будь-які нотатки, які ви захочете зберегти в цьому сеансі тренування." + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "Ваше враження від тренування. Чи виконували ви вправи як треба?" + +#~ msgid "Start time" +#~ msgstr "Час початку" + +#~ msgid "Finish time" +#~ msgstr "Час завершення" + +#~ msgid "Exercise day" +#~ msgstr "День тренування" + +#~ msgid "Value" +#~ msgstr "Значення" + +#~ msgid "In kcal per 100g" +#~ msgstr "В ккал на 100 г" + +#~ msgid "In g per 100g of product" +#~ msgstr "В г на 100г продукту" + +#~ msgid "Link to product" +#~ msgstr "Посилання на виріб" + +#~ msgid "Brand name of product" +#~ msgstr "Торгова марка виробу" + +#~ msgid "Ingredient Categories" +#~ msgstr "Категорії інгредієнтів" + +#~ msgid "Amount in grams" +#~ msgstr "Кількість в грамах" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "Одиниця кількісті, напр. \"1 чашка\" або \"1/2 ложки\"" + +#~ msgid "Nutrition plan" +#~ msgstr "План харчування" + +#~ msgid "Meal" +#~ msgstr "Приймання їжі" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "Дата і час (приблизно)" + +#~ msgid "Time (approx)" +#~ msgstr "Час (приблизно)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "" +#~ "Дайте стравам текстовий опис / назву, таку як \"Сніданок\" або \"після " +#~ "тренування\"" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "Опис мети плану, напр. \"Набір маси\" або \"Підготування до літа\"" + +#~ msgid "Use daily calories" +#~ msgstr "Використовуйте щоденні калорії" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "Поставте прапорець, якщо ви хочете відзначити цей план як такий, що має " +#~ "кількість калорій. Ви можете скористатися калькулятором або ввести " +#~ "значення самостійно." + +#~ msgid "Weight entry" +#~ msgstr "Запис ваги" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "Назад до \"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "Конфігурація для {self.gym.name}" + +#~ msgid "Height (in)" +#~ msgstr "Зріст (см)" + +#~ msgid "Weight (kg)" +#~ msgstr "Вага (кг)" + +#~ msgid "Weight (lbs)" +#~ msgstr "Вага (фунти)" + +#~ msgid "Calculate" +#~ msgstr "Обчислити" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "Загальна енергія ({self.energy}ккал) не є приблизною сумою " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -3076,21 +3179,6 @@ msgstr "Повторно подати" #~ msgid "The art style of your image" #~ msgstr "Художній стиль вашого зображення" -#~ msgid "Sets" -#~ msgstr "Підходи" - -#~ msgid "RiR" -#~ msgstr "Повторів можете зробити" - -#~ msgid "rest" -#~ msgstr "відпочинок" - -#~ msgid "Rest day" -#~ msgstr "День відпочинку" - -#~ msgid "Nutritional data" -#~ msgstr "Харчові дані" - #~ msgid "Workouts" #~ msgstr "Тренування" @@ -3146,9 +3234,6 @@ msgstr "Повторно подати" #~ "Купіть нам каву, щоб допомогти проекту, оплатити витрати на сервер і " #~ "підтримати нас" -#~ msgid "Sample workout" -#~ msgstr "Пробне тренування" - #~ msgid "Sample day" #~ msgstr "Пробний день" @@ -3540,9 +3625,6 @@ msgstr "Повторно подати" #~ msgid "Edit workout" #~ msgstr "Змінити тренування" -#~ msgid "Copy workout" -#~ msgstr "Копіювати тренування" - #~ msgid "Copy" #~ msgstr "Копіювати" @@ -3577,9 +3659,6 @@ msgstr "Повторно подати" #~ msgid "Your BMI is: " #~ msgstr "Ваш ІМТ: " -#~ msgid "Legend" -#~ msgstr "Умовне позначення" - #~ msgid "Adipositas III" #~ msgstr "Ожиріння III" @@ -3652,9 +3731,6 @@ msgstr "Повторно подати" #~ msgid "Delete schedule" #~ msgstr "Видалити програму" -#~ msgid "Weight log" -#~ msgstr "Журнал ваги" - #~ msgid "Weight log for workout" #~ msgstr "Журнал ваги для тренування" @@ -3720,8 +3796,8 @@ msgstr "Повторно подати" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new ingredient \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "Користувач {0} подав новий інгредієнт \"{1}\"." #~ msgid "Submission date" @@ -4413,8 +4489,8 @@ msgstr "Повторно подати" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" diff --git a/wger/locale/zh_Hans/LC_MESSAGES/django.po b/wger/locale/zh_Hans/LC_MESSAGES/django.po index 49476795d..78be488aa 100644 --- a/wger/locale/zh_Hans/LC_MESSAGES/django.po +++ b/wger/locale/zh_Hans/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-10-01 16:48+0530\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-07-25 05:03+0000\n" "Last-Translator: KW Lam \n" "Language-Team: Chinese (Simplified Han script) This is an empty plan, what did you expect on the PDF?" msgstr "这是一个空的计划,你希望在 PDF 上有什么?" +#: nutrition/views/plan.py:230 +msgid "Nutritional data" +msgstr "营养数据" + #: nutrition/views/plan.py:238 msgid "Total" msgstr "总量" @@ -2596,6 +2495,10 @@ msgid "" "your exercises and workouts." msgstr "wger 健身管理器是一个免费的开源网络应用。" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "联系" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "手机应用" @@ -2781,6 +2684,10 @@ msgstr "源代码以 GNU ALPLv3 许可证发行!你可以从 GitHub 上开发 msgid "Account" msgstr "账户" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "管理面板" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "例行健身" @@ -2854,14 +2761,14 @@ msgstr "日期格式" msgid "You have to enter your weight" msgstr "您必须输入您的体重" -#: weight/models.py:78 -msgid "Weight entry" -msgstr "体重输入" - #: weight/templates/import_csv_form.html:4 msgid "Import weight logs" msgstr "导入体重日志" +#: weight/templates/import_csv_form.html:9 +msgid "Submit" +msgstr "提交" + #: weight/templates/import_csv_form.html:15 msgid "" "Use this import field to import your weight logs into Workout\n" @@ -2978,6 +2885,224 @@ msgstr "" msgid "Re-Submit" msgstr "重新提交" +#~ msgid "Image" +#~ msgstr "图片" + +#~ msgid "Only PNG and JPEG formats are supported" +#~ msgstr "只支持PNG和JPEG格式的图片" + +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "回复你问题的方式(邮件等)" + +#~ msgid "Comment" +#~ msgstr "评论" + +#~ msgid "What do you want to say?" +#~ msgstr "你怎么看?" + +#~ msgid "Feedback" +#~ msgstr "反馈" + +#~ msgid "Your feedback was successfully sent. Thank you!" +#~ msgstr "你的反馈已经成功发送.非常感谢!" + +#~ msgid "Category" +#~ msgstr "类别" + +#~ msgid "Primary muscles" +#~ msgstr "主要训练肌肉" + +#~ msgid "Secondary muscles" +#~ msgstr "次要肌肉" + +#~ msgid "Variations" +#~ msgstr "变体" + +#~ msgid "Exercise Categories" +#~ msgstr "训练类别" + +#~ msgid "A comment about how to correctly do this exercise." +#~ msgstr "关于如何正确做这个健身项目的评论." + +#~ msgid "Alias for an exercise" +#~ msgstr "训练项目别称" + +#~ msgid "Line" +#~ msgstr "线条" + +#~ msgid "3D" +#~ msgstr "3D" + +#~ msgid "Low-poly" +#~ msgstr "低多边形" + +#~ msgid "Photo" +#~ msgstr "照片" + +#~ msgid "Other" +#~ msgstr "其他" + +#~ msgid "Height" +#~ msgstr "身高" + +#~ msgid "Width" +#~ msgstr "宽度" + +#~ msgid "Main picture" +#~ msgstr "首图" + +#~ msgid "Language" +#~ msgstr "语言" + +#~ msgid "Main video" +#~ msgstr "主视频" + +#~ msgid "Video" +#~ msgstr "视频" + +#~ msgid "Size" +#~ msgstr "大小" + +#~ msgid "Duration" +#~ msgstr "时长" + +#~ msgid "Codec" +#~ msgstr "编码" + +#~ msgid "Codec, long name" +#~ msgstr "编解码器的全称" + +#~ msgid "Routine" +#~ msgstr "训练计划" + +#~ msgid "Order" +#~ msgstr "順序" + +#~ msgid "Session" +#~ msgstr "训练时段" + +#~ msgid "Creation date" +#~ msgstr "创建日期" + +#~ msgid "Workout template" +#~ msgstr "健身计划模板" + +#~ msgid "" +#~ "Marking a workout as a template will freeze it and allow you to make " +#~ "copies of it" +#~ msgstr "将锻炼标记为模板将冻结它并允许您复制它" + +#~ msgid "Public template" +#~ msgstr "公共模板" + +#~ msgid "A public template is available to other users" +#~ msgstr "公共模板可供其他用户使用" + +#~ msgid "Any notes you might want to save about this workout session." +#~ msgstr "您可能想要保存的有关本次锻炼课程的任何笔记。" + +#~ msgid "" +#~ "Your impression about this workout session. Did you exercise as well as " +#~ "you could?" +#~ msgstr "您对本次锻炼的印象。您锻炼得尽善尽美了吗?" + +#~ msgid "Start time" +#~ msgstr "开始时间" + +#~ msgid "Finish time" +#~ msgstr "结束时间" + +#~ msgid "Exercise day" +#~ msgstr "训练日" + +#~ msgid "Value" +#~ msgstr "值" + +#~ msgid "In kcal per 100g" +#~ msgstr "以千卡/100克" + +#~ msgid "In g per 100g of product" +#~ msgstr "以克计/100克的产品" + +#~ msgid "Link to product" +#~ msgstr "产品链接" + +#~ msgid "Brand name of product" +#~ msgstr "产品品牌" + +#~ msgid "Ingredient Categories" +#~ msgstr "成分类别" + +#~ msgid "Amount in grams" +#~ msgstr "以克记的重量" + +#~ msgid "Unit amount, e.g. \"1 Cup\" or \"1/2 spoon\"" +#~ msgstr "容量(例如一杯或半勺)" + +#~ msgid "Nutrition plan" +#~ msgstr "营养计划" + +#~ msgid "Meal" +#~ msgstr "一餐" + +#~ msgid "Date and Time (Approx.)" +#~ msgstr "日期和时间(估计)" + +#~ msgid "Time (approx)" +#~ msgstr "时间(估计)" + +#~ msgid "" +#~ "Give meals a textual description / name such as \"Breakfast\" or \"after " +#~ "workout\"" +#~ msgstr "为这一餐添加名字或文本描述(例如早餐或健身后)" + +#~ msgid "" +#~ "A description of the goal of the plan, e.g. \"Gain mass\" or \"Prepare " +#~ "for summer\"" +#~ msgstr "描述这个计划的目标(例如“增重”或者“为夏天做准备”)" + +#~ msgid "Use daily calories" +#~ msgstr "使用日常卡路里" + +#~ msgid "" +#~ "Tick the box if you want to mark this plan as having a goal amount of " +#~ "calories. You can use the calculator or enter the value yourself." +#~ msgstr "" +#~ "如果你想标记一个有目标热量的计划,请勾选此项。你可以使用热量计算器或自己输" +#~ "入一个值。" + +#~ msgid "Weight entry" +#~ msgstr "体重输入" + +#, python-format +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "" +#~ "返回到\"%(target)s\n" +#~ " \"" + +#, python-brace-format +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "{self.gym.name}配置" + +#~ msgid "Height (in)" +#~ msgstr "身高(英寸)" + +#~ msgid "Weight (kg)" +#~ msgstr "体重(千克)" + +#~ msgid "Weight (lbs)" +#~ msgstr "体重(磅)" + +#~ msgid "Calculate" +#~ msgstr "计算" + +#, python-brace-format +#~ msgid "" +#~ "The total energy ({self.energy}kcal) is not the approximate sum of the " +#~ msgstr "总热量({self.energy}千卡)并非加总 " + #~ msgid "" #~ "Tick the box if you want to set this image as the main one for the " #~ "exercise (will be shown e.g. in the search). The first image is " @@ -2989,21 +3114,6 @@ msgstr "重新提交" #~ msgid "The art style of your image" #~ msgstr "您的图片的艺术风格" -#~ msgid "Sets" -#~ msgstr "组" - -#~ msgid "RiR" -#~ msgstr "力竭之前的剩余次数" - -#~ msgid "rest" -#~ msgstr "休息" - -#~ msgid "Rest day" -#~ msgstr "休息日" - -#~ msgid "Nutritional data" -#~ msgstr "营养数据" - #~ msgid "Workouts" #~ msgstr "健身" @@ -3051,9 +3161,6 @@ msgstr "重新提交" #~ "fueled" #~ msgstr "打赏我们来支持这个项目!" -#~ msgid "Sample workout" -#~ msgstr "健身示例" - #~ msgid "Sample day" #~ msgstr "示例健身日" @@ -3416,9 +3523,6 @@ msgstr "重新提交" #~ msgid "Edit workout" #~ msgstr "编辑健身" -#~ msgid "Copy workout" -#~ msgstr "拷贝健身" - #~ msgid "Copy" #~ msgstr "复制" @@ -3453,9 +3557,6 @@ msgstr "重新提交" #~ msgid "Your BMI is: " #~ msgstr "你的体重指数是:" -#~ msgid "Legend" -#~ msgstr "说明" - #~ msgid "Adipositas III" #~ msgstr "三级肥胖" @@ -3510,9 +3611,6 @@ msgstr "重新提交" #~ msgid "Add exercises to this workout day" #~ msgstr "新增健身项目到这个健身日" -#~ msgid "Weight log" -#~ msgstr "体重日志" - #~ msgid "Weight log for workout" #~ msgstr "健身的体重日志" @@ -3537,8 +3635,8 @@ msgstr "重新提交" #, fuzzy, python-brace-format #~| msgid "The user {0} submitted a new exercise \"{1}\"." #~ msgid "" -#~ "The user {request.user.username} submitted a new ingredient \"{self." -#~ "name}\"." +#~ "The user {request.user.username} submitted a new ingredient \"{self.name}" +#~ "\"." #~ msgstr "用户{0}提交了一次新训练“{1}”." #~ msgid "Submission date" @@ -3936,8 +4034,8 @@ msgstr "重新提交" #~ "you might also be interested in contributing." #~ msgstr "" -#~ "如果你想要更近一步地帮助提升这个项目,你或许也会对 感兴趣." +#~ "如果你想要更近一步地帮助提升这个项目,你或许也会对 感兴趣." #~ msgid "Feedback form" #~ msgstr "反馈表格" @@ -3982,17 +4080,16 @@ msgstr "重新提交" #~ "the development process is open and freely accessible to anybody " #~ "interested.\n" #~ "If you are new to the free software world, we recommend to take a\n" -#~ "look this\n" +#~ "look this\n" #~ "article which summarizes they way open source projects work very " #~ "well. " #~ msgstr "" #~ "wger 健身经理是志愿者们参与开发的.整个开发的过程\n" #~ "是公开的,并且任何对这个项目感兴趣的人都可以免费参与进来.如果您对自由软件世" #~ "界不熟悉,那么我们推荐您浏览\n" -#~ "一下这篇文章, \n" +#~ "一下这篇文章, \n" #~ "它会告诉您开源项目是如何良好运作的." #, fuzzy diff --git a/wger/manager/models/day.py b/wger/manager/models/day.py index 6bea637d8..74700dc76 100644 --- a/wger/manager/models/day.py +++ b/wger/manager/models/day.py @@ -19,7 +19,6 @@ from typing import List # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.manager.dataclasses import SlotData @@ -48,7 +47,7 @@ class Day(models.Model): routine = models.ForeignKey( 'Routine', - verbose_name=_('Routine'), + verbose_name='Routine', on_delete=models.CASCADE, related_name='days', ) @@ -56,7 +55,7 @@ class Day(models.Model): order = models.PositiveIntegerField( default=1, null=False, - verbose_name=_('Order'), + verbose_name='Order', db_index=True, ) @@ -69,13 +68,13 @@ class Day(models.Model): name = models.CharField( max_length=20, - verbose_name=_('Name'), + verbose_name='Name', blank=True, # needed for rest days ) description = models.CharField( max_length=1000, - verbose_name=_('Description'), + verbose_name='Description', blank=True, ) diff --git a/wger/manager/models/log.py b/wger/manager/models/log.py index b5fabd36f..5370e84c9 100644 --- a/wger/manager/models/log.py +++ b/wger/manager/models/log.py @@ -21,7 +21,6 @@ import datetime from django.contrib.auth.models import User from django.core.exceptions import ValidationError from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.core.models import ( @@ -50,13 +49,13 @@ class WorkoutLog(models.Model): objects = WorkoutLogManager() date = models.DateTimeField( - verbose_name=_('Date'), + verbose_name='Date', default=datetime.datetime.now, ) user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', editable=False, on_delete=models.CASCADE, ) @@ -75,7 +74,7 @@ class WorkoutLog(models.Model): session = models.ForeignKey( 'WorkoutSession', - verbose_name=_('Session'), + verbose_name='Session', on_delete=models.CASCADE, null=True, related_name='logs', @@ -88,13 +87,13 @@ class WorkoutLog(models.Model): exercise = models.ForeignKey( Exercise, - verbose_name=_('Exercise'), + verbose_name='Exercise', on_delete=models.CASCADE, ) routine = models.ForeignKey( 'Routine', - verbose_name=_('Workout'), + verbose_name='Workout', on_delete=models.CASCADE, null=True, ) @@ -111,7 +110,7 @@ class WorkoutLog(models.Model): repetitions_unit = models.ForeignKey( RepetitionUnit, - verbose_name=_('Unit'), + verbose_name='Repetitions unit', default=REP_UNIT_REPETITIONS, on_delete=models.CASCADE, null=True, @@ -135,7 +134,7 @@ class WorkoutLog(models.Model): repetitions_target = models.DecimalField( max_digits=6, decimal_places=2, - verbose_name=_('Repetitions'), + verbose_name='Repetitions target', validators=[NullMinValueValidator(0)], null=True, blank=True, @@ -146,7 +145,7 @@ class WorkoutLog(models.Model): weight_unit = models.ForeignKey( WeightUnit, - verbose_name=_('Unit'), + verbose_name='Weight unit', default=WEIGHT_UNIT_KG, on_delete=models.CASCADE, null=True, @@ -170,7 +169,7 @@ class WorkoutLog(models.Model): weight_target = models.DecimalField( max_digits=6, decimal_places=2, - verbose_name=_('Weight'), + verbose_name='Weight target', validators=[NullMinValueValidator(0)], null=True, blank=True, diff --git a/wger/manager/models/rest_config.py b/wger/manager/models/rest_config.py index bce37609b..a6fc2b7a7 100644 --- a/wger/manager/models/rest_config.py +++ b/wger/manager/models/rest_config.py @@ -13,6 +13,7 @@ # # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . + # Django from django.core.validators import ( MaxValueValidator, diff --git a/wger/manager/models/routine.py b/wger/manager/models/routine.py index 426a583e1..2f5683eb6 100644 --- a/wger/manager/models/routine.py +++ b/wger/manager/models/routine.py @@ -74,48 +74,46 @@ class Routine(models.Model): user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) name = models.CharField( - verbose_name=_('Name'), + verbose_name='Name', max_length=25, blank=True, ) description = models.TextField( - verbose_name=_('Description'), + verbose_name='Description', max_length=1000, blank=True, ) created = models.DateTimeField( - _('Creation date'), + verbose_name='Creation date', auto_now_add=True, ) start = models.DateField( - _('Start date'), + verbose_name='Start date', ) end = models.DateField( - _('End date'), + verbose_name='End date', ) is_template = models.BooleanField( - verbose_name=_('Workout template'), - help_text=_( - 'Marking a workout as a template will freeze it and allow you to make copies of it' - ), + verbose_name='Workout template', + help_text='Marking a workout as a template will freeze it and allow you to make copies of it', default=False, null=False, ) """Marking a workout as a template will freeze it and allow you to make copies of it""" is_public = models.BooleanField( - verbose_name=_('Public template'), - help_text=_('A public template is available to other users'), + verbose_name='Public template', + help_text='A public template is available to other users', default=False, null=False, ) diff --git a/wger/manager/models/session.py b/wger/manager/models/session.py index 092cbf4f6..053845b7b 100644 --- a/wger/manager/models/session.py +++ b/wger/manager/models/session.py @@ -44,7 +44,7 @@ class WorkoutSession(models.Model): user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) """ @@ -70,7 +70,7 @@ class WorkoutSession(models.Model): """ date = models.DateField( - verbose_name=_('Date'), + verbose_name='Date', default=datetime.date.today, ) """ @@ -78,30 +78,28 @@ class WorkoutSession(models.Model): """ notes = models.TextField( - verbose_name=_('Notes'), + verbose_name='Notes', null=True, blank=True, - help_text=_('Any notes you might want to save about this workout session.'), + help_text='Any notes you might want to save about this workout session.', ) """ User notes about the workout """ impression = models.CharField( - verbose_name=_('General impression'), + verbose_name='General impression', max_length=2, choices=IMPRESSION, default=IMPRESSION_NEUTRAL, - help_text=_( - 'Your impression about this workout session. Did you exercise as well as you could?' - ), + help_text='Your impression about this workout session. Did you exercise as well as you could?', ) """ The user's general impression of workout """ time_start = models.TimeField( - verbose_name=_('Start time'), + verbose_name='Start time', blank=True, null=True, ) @@ -110,7 +108,7 @@ class WorkoutSession(models.Model): """ time_end = models.TimeField( - verbose_name=_('Finish time'), + verbose_name='Finish time', blank=True, null=True, ) diff --git a/wger/manager/models/slot.py b/wger/manager/models/slot.py index 32009dc2d..379eb7df7 100644 --- a/wger/manager/models/slot.py +++ b/wger/manager/models/slot.py @@ -3,7 +3,6 @@ from typing import List # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.manager.dataclasses import ( @@ -23,7 +22,7 @@ class Slot(models.Model): day = models.ForeignKey( Day, - verbose_name=_('Exercise day'), + verbose_name='Exercise day', on_delete=models.CASCADE, related_name='slots', ) @@ -31,13 +30,13 @@ class Slot(models.Model): order = models.PositiveIntegerField( default=1, null=False, - verbose_name=_('Order'), + verbose_name='Order', db_index=True, ) comment = models.CharField( max_length=200, - verbose_name=_('Comment'), + verbose_name='Comment', blank=True, ) diff --git a/wger/manager/models/slot_entry.py b/wger/manager/models/slot_entry.py index 25e37237f..dfc4a606f 100644 --- a/wger/manager/models/slot_entry.py +++ b/wger/manager/models/slot_entry.py @@ -29,7 +29,6 @@ from typing import ( from django.conf import settings from django.core.cache import cache from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.core.models import ( @@ -119,7 +118,7 @@ class SlotEntry(models.Model): weight_unit = models.ForeignKey( WeightUnit, - verbose_name=_('Unit'), + verbose_name='Unit', default=WEIGHT_UNIT_KG, on_delete=models.CASCADE, null=True, diff --git a/wger/measurements/models/category.py b/wger/measurements/models/category.py index d52144ef8..c20bab84f 100644 --- a/wger/measurements/models/category.py +++ b/wger/measurements/models/category.py @@ -17,7 +17,6 @@ # Django from django.contrib.auth.models import User from django.db import models -from django.utils.translation import gettext_lazy as _ class Category(models.Model): @@ -28,17 +27,17 @@ class Category(models.Model): user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) name = models.CharField( - verbose_name=_('Name'), + verbose_name='Name', max_length=100, ) unit = models.CharField( - verbose_name=_('Unit'), + verbose_name='Unit', max_length=30, ) diff --git a/wger/measurements/models/measurement.py b/wger/measurements/models/measurement.py index 90cdfd034..02f98ab39 100644 --- a/wger/measurements/models/measurement.py +++ b/wger/measurements/models/measurement.py @@ -23,7 +23,6 @@ from django.core.validators import ( MinValueValidator, ) from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.measurements.models import Category @@ -38,17 +37,17 @@ class Measurement(models.Model): category = models.ForeignKey( Category, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) date = models.DateField( - _('Date'), + verbose_name='Date', default=datetime.datetime.now, ) value = models.DecimalField( - verbose_name=_('Value'), + verbose_name='Value', max_digits=6, decimal_places=2, validators=[ @@ -58,7 +57,7 @@ class Measurement(models.Model): ) notes = models.CharField( - verbose_name=_('Description'), + verbose_name='Description', max_length=100, blank=True, ) diff --git a/wger/nutrition/models/image.py b/wger/nutrition/models/image.py index 8136cd6b6..a2bad9beb 100644 --- a/wger/nutrition/models/image.py +++ b/wger/nutrition/models/image.py @@ -20,7 +20,6 @@ import uuid # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.utils.helpers import BaseImage @@ -56,8 +55,8 @@ class Image(AbstractLicenseModel, models.Model, BaseImage): """Image for this ingredient""" image = models.ImageField( - verbose_name=_('Image'), - help_text=_('Only PNG and JPEG formats are supported'), + verbose_name='Image', + help_text='Only PNG and JPEG formats are supported', upload_to=ingredient_image_upload_dir, height_field='height', width_field='width', diff --git a/wger/nutrition/models/ingredient.py b/wger/nutrition/models/ingredient.py index 312ec5f0b..99099fb5c 100644 --- a/wger/nutrition/models/ingredient.py +++ b/wger/nutrition/models/ingredient.py @@ -34,7 +34,6 @@ from django.db import models from django.http import HttpRequest from django.urls import reverse from django.utils.text import slugify -from django.utils.translation import gettext_lazy as _ # Third Party from openfoodfacts import API @@ -78,19 +77,19 @@ class Ingredient(AbstractLicenseModel, models.Model): language = models.ForeignKey( Language, - verbose_name=_('Language'), + verbose_name='Language', editable=False, on_delete=models.CASCADE, ) created = models.DateTimeField( - _('Date'), + verbose_name='Date', auto_now_add=True, ) """Date when the ingredient was created""" last_update = models.DateTimeField( - _('Date'), + 'Date', auto_now=True, blank=True, editable=False, @@ -123,28 +122,28 @@ class Ingredient(AbstractLicenseModel, models.Model): # Product infos name = models.CharField( max_length=200, - verbose_name=_('Name'), + verbose_name='Name', validators=[MinLengthValidator(3)], ) energy = models.IntegerField( - verbose_name=_('Energy'), - help_text=_('In kcal per 100g'), + verbose_name='Energy', + help_text='In kcal per 100g', ) protein = models.DecimalField( decimal_places=3, max_digits=6, - verbose_name=_('Protein'), - help_text=_('In g per 100g of product'), + verbose_name='Protein', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) carbohydrates = models.DecimalField( decimal_places=3, max_digits=6, - verbose_name=_('Carbohydrates'), - help_text=_('In g per 100g of product'), + verbose_name='Carbohydrates', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) @@ -153,16 +152,16 @@ class Ingredient(AbstractLicenseModel, models.Model): max_digits=6, blank=True, null=True, - verbose_name=_('Sugar content in carbohydrates'), - help_text=_('In g per 100g of product'), + verbose_name='Sugar content in carbohydrates', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) fat = models.DecimalField( decimal_places=3, max_digits=6, - verbose_name=_('Fat'), - help_text=_('In g per 100g of product'), + verbose_name='Fat', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) @@ -171,8 +170,8 @@ class Ingredient(AbstractLicenseModel, models.Model): max_digits=6, blank=True, null=True, - verbose_name=_('Saturated fat content in fats'), - help_text=_('In g per 100g of product'), + verbose_name='Saturated fat content in fats', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) @@ -181,8 +180,8 @@ class Ingredient(AbstractLicenseModel, models.Model): max_digits=6, blank=True, null=True, - verbose_name=_('Fiber'), - help_text=_('In g per 100g of product'), + verbose_name='Fiber', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) @@ -191,8 +190,8 @@ class Ingredient(AbstractLicenseModel, models.Model): max_digits=6, blank=True, null=True, - verbose_name=_('Sodium'), - help_text=_('In g per 100g of product'), + verbose_name='Sodium', + help_text='In g per 100g of product', validators=[MinValueValidator(Decimal(0)), MaxValueValidator(Decimal(100))], ) @@ -220,15 +219,15 @@ class Ingredient(AbstractLicenseModel, models.Model): """Name of the source, such as Open Food Facts""" source_url = models.URLField( - verbose_name=_('Link'), - help_text=_('Link to product'), + verbose_name='Link', + help_text='Link to product', blank=True, null=True, ) """URL of the product at the source""" last_imported = models.DateTimeField( - _('Date'), + 'Date', auto_now_add=True, null=True, blank=True, @@ -242,7 +241,7 @@ class Ingredient(AbstractLicenseModel, models.Model): category = models.ForeignKey( IngredientCategory, - verbose_name=_('Category'), + verbose_name='Category', on_delete=models.CASCADE, null=True, blank=True, @@ -250,7 +249,7 @@ class Ingredient(AbstractLicenseModel, models.Model): brand = models.CharField( max_length=200, - verbose_name=_('Brand name of product'), + verbose_name='Brand name of product', null=True, blank=True, ) @@ -316,11 +315,9 @@ class Ingredient(AbstractLicenseModel, models.Model): if not ((energy_upper > energy_calculated) and (energy_calculated > energy_lower)): raise ValidationError( - _( - f'The total energy ({self.energy}kcal) is not the approximate sum of the ' - f'energy provided by protein, carbohydrates and fat ({energy_calculated}kcal' - f' +/-{self.ENERGY_APPROXIMATION}%)' - ) + f'The total energy ({self.energy}kcal) is not the approximate sum of the ' + f'energy provided by protein, carbohydrates and fat ({energy_calculated}kcal' + f' +/-{self.ENERGY_APPROXIMATION}%)' ) def save(self, *args, **kwargs): diff --git a/wger/nutrition/models/ingredient_category.py b/wger/nutrition/models/ingredient_category.py index 356986ee7..02faea4e4 100644 --- a/wger/nutrition/models/ingredient_category.py +++ b/wger/nutrition/models/ingredient_category.py @@ -16,7 +16,6 @@ # Django from django.db import models -from django.utils.translation import gettext_lazy as _ class IngredientCategory(models.Model): @@ -24,11 +23,11 @@ class IngredientCategory(models.Model): Model for an Ingredient category """ - name = models.CharField(max_length=100, verbose_name=_('Name')) + name = models.CharField(max_length=100, verbose_name='Name') # Metaclass to set some other properties class Meta: - verbose_name_plural = _('Ingredient Categories') + verbose_name_plural = 'Ingredient Categories' ordering = [ 'name', ] diff --git a/wger/nutrition/models/ingredient_weight_unit.py b/wger/nutrition/models/ingredient_weight_unit.py index defd0f8b2..e31073721 100644 --- a/wger/nutrition/models/ingredient_weight_unit.py +++ b/wger/nutrition/models/ingredient_weight_unit.py @@ -19,7 +19,6 @@ import logging # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # Local from .ingredient import Ingredient @@ -36,23 +35,23 @@ class IngredientWeightUnit(models.Model): ingredient = models.ForeignKey( Ingredient, - verbose_name=_('Ingredient'), + verbose_name='Ingredient', editable=False, on_delete=models.CASCADE, ) unit = models.ForeignKey( WeightUnit, - verbose_name=_('Weight unit'), + verbose_name='Weight unit', on_delete=models.CASCADE, ) - gram = models.IntegerField(verbose_name=_('Amount in grams')) + gram = models.IntegerField(verbose_name='Amount in grams') amount = models.DecimalField( decimal_places=2, max_digits=5, default=1, - verbose_name=_('Amount'), - help_text=_('Unit amount, e.g. "1 Cup" or "1/2 spoon"'), + verbose_name='Amount', + help_text='Unit amount, e.g. "1 Cup" or "1/2 spoon"', ) def get_owner_object(self): diff --git a/wger/nutrition/models/log.py b/wger/nutrition/models/log.py index 0f51d3905..fb4b27566 100644 --- a/wger/nutrition/models/log.py +++ b/wger/nutrition/models/log.py @@ -24,7 +24,6 @@ from django.core.validators import ( ) from django.db import models from django.utils import timezone -from django.utils.translation import gettext_lazy as _ # wger from wger.nutrition.helpers import BaseMealItem @@ -49,7 +48,7 @@ class LogItem(BaseMealItem, models.Model): plan = models.ForeignKey( NutritionPlan, - verbose_name=_('Nutrition plan'), + verbose_name='Nutrition plan', on_delete=models.CASCADE, ) """ @@ -58,7 +57,7 @@ class LogItem(BaseMealItem, models.Model): meal = models.ForeignKey( Meal, - verbose_name=_('Meal'), + verbose_name='Meal', on_delete=models.SET_NULL, related_name='log_items', blank=True, @@ -68,13 +67,13 @@ class LogItem(BaseMealItem, models.Model): The meal this log belongs to (optional) """ - datetime = models.DateTimeField(verbose_name=_('Date and Time (Approx.)'), default=timezone.now) + datetime = models.DateTimeField(verbose_name='Date and Time (Approx.)', default=timezone.now) """ Time and date when the log was added """ comment = models.TextField( - verbose_name=_('Comment'), + verbose_name='Comment', blank=True, null=True, ) @@ -84,7 +83,7 @@ class LogItem(BaseMealItem, models.Model): ingredient = models.ForeignKey( Ingredient, - verbose_name=_('Ingredient'), + verbose_name='Ingredient', on_delete=models.CASCADE, ) """ @@ -93,7 +92,7 @@ class LogItem(BaseMealItem, models.Model): weight_unit = models.ForeignKey( IngredientWeightUnit, - verbose_name=_('Weight unit'), + verbose_name='Weight unit', null=True, blank=True, on_delete=models.CASCADE, @@ -105,7 +104,7 @@ class LogItem(BaseMealItem, models.Model): amount = models.DecimalField( decimal_places=2, max_digits=6, - verbose_name=_('Amount'), + verbose_name='Amount', validators=[MinValueValidator(Decimal(1)), MaxValueValidator(Decimal(1000))], ) """ diff --git a/wger/nutrition/models/meal.py b/wger/nutrition/models/meal.py index b32185c73..180b65d3f 100644 --- a/wger/nutrition/models/meal.py +++ b/wger/nutrition/models/meal.py @@ -19,7 +19,6 @@ import logging # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.utils.fields import Html5TimeField @@ -45,27 +44,25 @@ class Meal(models.Model): plan = models.ForeignKey( NutritionPlan, - verbose_name=_('Nutrition plan'), + verbose_name='Nutrition plan', editable=False, on_delete=models.CASCADE, ) order = models.IntegerField( - verbose_name=_('Order'), + verbose_name='Order', blank=True, editable=False, ) time = Html5TimeField( null=True, blank=True, - verbose_name=_('Time (approx)'), + verbose_name='Time (approx)', ) name = models.CharField( max_length=25, blank=True, - verbose_name=_('Name'), - help_text=_( - 'Give meals a textual description / name such as "Breakfast" or "after workout"' - ), + verbose_name='Name', + help_text='Give meals a textual description / name such as "Breakfast" or "after workout"', ) def __str__(self): diff --git a/wger/nutrition/models/meal_item.py b/wger/nutrition/models/meal_item.py index a2b64147b..c773be163 100644 --- a/wger/nutrition/models/meal_item.py +++ b/wger/nutrition/models/meal_item.py @@ -24,7 +24,6 @@ from django.core.validators import ( MinValueValidator, ) from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.nutrition.helpers import BaseMealItem @@ -45,32 +44,32 @@ class MealItem(BaseMealItem, models.Model): meal = models.ForeignKey( Meal, - verbose_name=_('Nutrition plan'), + verbose_name='Nutrition plan', editable=False, on_delete=models.CASCADE, ) ingredient = models.ForeignKey( Ingredient, - verbose_name=_('Ingredient'), + verbose_name='Ingredient', on_delete=models.CASCADE, ) weight_unit = models.ForeignKey( IngredientWeightUnit, - verbose_name=_('Weight unit'), + verbose_name='Weight unit', null=True, blank=True, on_delete=models.CASCADE, ) order = models.IntegerField( - verbose_name=_('Order'), + verbose_name='Order', blank=True, editable=False, ) amount = models.DecimalField( decimal_places=2, max_digits=6, - verbose_name=_('Amount'), + verbose_name='Amount', validators=[MinValueValidator(Decimal(1)), MaxValueValidator(Decimal(1000))], ) diff --git a/wger/nutrition/models/plan.py b/wger/nutrition/models/plan.py index 7924d5f93..635d2a804 100644 --- a/wger/nutrition/models/plan.py +++ b/wger/nutrition/models/plan.py @@ -23,7 +23,6 @@ from django.contrib.auth.models import User from django.core.cache import cache from django.db import models from django.urls import reverse -from django.utils.translation import gettext_lazy as _ # wger from wger.nutrition.consts import ENERGY_FACTOR @@ -48,24 +47,24 @@ class NutritionPlan(models.Model): user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', editable=False, on_delete=models.CASCADE, ) creation_date = models.DateField( - _('Creation date'), + 'Creation date', auto_now_add=True, ) start = models.DateField( - _('Start date'), + verbose_name='Start date', blank=True, default=datetime.date.today, ) end = models.DateField( - _('End date'), + verbose_name='End date', null=True, blank=True, ) @@ -73,10 +72,8 @@ class NutritionPlan(models.Model): description = models.CharField( max_length=80, blank=True, - verbose_name=_('Description'), - help_text=_( - 'A description of the goal of the plan, e.g. "Gain mass" or "Prepare for summer"' - ), + verbose_name='Description', + help_text='A description of the goal of the plan, e.g. "Gain mass" or "Prepare for summer"', ) only_logging = models.BooleanField( @@ -96,9 +93,9 @@ class NutritionPlan(models.Model): goal_fat = models.IntegerField(null=True, default=None) has_goal_calories = models.BooleanField( - verbose_name=_('Use daily calories'), + verbose_name='Use daily calories', default=False, - help_text=_( + help_text=( 'Tick the box if you want to mark this ' 'plan as having a goal amount of calories. ' 'You can use the calculator or enter the ' @@ -114,7 +111,7 @@ class NutritionPlan(models.Model): if self.description: return self.description else: - return str(_('Nutrition plan')) + return 'Nutrition plan' def get_absolute_url(self): """ diff --git a/wger/nutrition/models/weight_unit.py b/wger/nutrition/models/weight_unit.py index aba3ded75..cc069364f 100644 --- a/wger/nutrition/models/weight_unit.py +++ b/wger/nutrition/models/weight_unit.py @@ -16,7 +16,6 @@ # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # wger from wger.core.models import Language @@ -29,13 +28,13 @@ class WeightUnit(models.Model): language = models.ForeignKey( Language, - verbose_name=_('Language'), + verbose_name='Language', editable=False, on_delete=models.CASCADE, ) name = models.CharField( max_length=200, - verbose_name=_('Name'), + verbose_name='Name', ) # Metaclass to set some other properties diff --git a/wger/nutrition/views/ingredient.py b/wger/nutrition/views/ingredient.py index be3312639..489918d03 100644 --- a/wger/nutrition/views/ingredient.py +++ b/wger/nutrition/views/ingredient.py @@ -121,7 +121,7 @@ class IngredientDeleteView( # Send some additional data to the template def get_context_data(self, **kwargs): - context = super(IngredientDeleteView, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Delete {0}?').format(self.object) return context @@ -141,7 +141,7 @@ class IngredientEditView(WgerFormMixin, LoginRequiredMixin, PermissionRequiredMi """ Send some additional data to the template """ - context = super(IngredientEditView, self).get_context_data(**kwargs) + context = super().get_context_data(**kwargs) context['title'] = _('Edit {0}').format(self.object) return context diff --git a/wger/tasks.py b/wger/tasks.py index 9efa37f12..106328927 100644 --- a/wger/tasks.py +++ b/wger/tasks.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - # This file is part of wger Workout Manager. # # wger Workout Manager is free software: you can redistribute it and/or modify @@ -17,7 +15,6 @@ # Standard Library import logging import os -import pathlib import sys import tempfile @@ -25,9 +22,9 @@ import tempfile import django from django.core.management import ( call_command, + color_style, execute_from_command_line, ) -from django.utils.crypto import get_random_string # Third Party import requests @@ -42,6 +39,8 @@ from tqdm import tqdm logger = logging.getLogger(__name__) FIXTURE_URL = 'https://github.com/wger-project/data/raw/master/fixtures/' +style = color_style() + @task( help={ @@ -56,8 +55,6 @@ def start(context, address='localhost', port=8000, settings_path=None, extra_arg """ Start the application using django's built in webserver """ - - # Find the path to the settings and setup the django environment setup_django_environment(settings_path) argv = ['', 'runserver', '--noreload'] @@ -70,22 +67,14 @@ def start(context, address='localhost', port=8000, settings_path=None, extra_arg @task( help={ - 'settings-path': 'Path to settings file (absolute path). Leave empty for default', - 'database-path': 'Path to sqlite database (absolute path). Leave empty for default', + 'settings-path': 'Path to settings file. Leave empty for default (settings.main)', + 'process-static': 'Whether to process static files (install npm packages and process css). Default: True', } ) -def bootstrap(context, settings_path=None, database_path=None, process_static=True): +def bootstrap(context, settings_path=None, process_static=True): """ Performs all steps necessary to bootstrap the application """ - - # Create settings if necessary - if settings_path is None: - settings_path = get_path('settings.py') - if not os.path.exists(settings_path): - create_settings(context, settings_path=settings_path, database_path=database_path) - - # Find the path to the settings and setup the django environment setup_django_environment(settings_path) # Create Database if necessary @@ -101,93 +90,11 @@ def bootstrap(context, settings_path=None, database_path=None, process_static=Tr context.run('npm run build:css:sass') -@task( - help={ - 'settings-path': 'Path to settings file (absolute path). Leave empty for default', - 'database-path': 'Path to sqlite database (absolute path). Leave empty for default', - 'database-type': 'Database type to use. Supported: sqlite3, postgresql. Default: sqlite3', - 'key-length': 'Length of the generated secret key. Default: 50', - } -) -def create_settings( - context, - settings_path=None, - database_path=None, - database_type='sqlite3', - key_length=50, -): - """ - Creates a local settings file - """ - if settings_path is None: - settings_path = get_path('settings.py') - - settings_module = os.path.dirname(settings_path) - print(f'*** Creating settings file at {settings_module}') - - if database_path is None: - database_path = get_path('database.sqlite').as_posix() - dbpath_value = database_path - - media_folder_path = get_path('media').as_posix() - - # Use localhost with default django port if no URL given - url = 'http://localhost:8000' - - # Fill in the config file template - settings_template = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'settings.tpl') - with open(settings_template, 'r') as settings_file: - settings_content = settings_file.read() - - if database_type == 'postgresql': - dbengine = 'postgresql' - dbname = 'wger' - dbuser = 'wger' - dbpassword = 'wger' - dbhost = 'localhost' - dbport = 5432 - elif database_type == 'sqlite3': - dbengine = 'sqlite3' - dbname = dbpath_value - dbuser = '' - dbpassword = '' - dbhost = '' - dbport = '' - - # Create a random SECRET_KEY to put it in the settings. - # from django.core.management.commands.startproject - secret_key = get_random_string(key_length, 'abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') - - settings_content = settings_content.format( - dbname=dbname, - dbpath=dbpath_value, - dbengine=dbengine, - dbuser=dbuser, - dbpassword=dbpassword, - dbhost=dbhost, - dbport=dbport, - default_key=secret_key, - siteurl=url, - media_folder_path=media_folder_path, - ) - - if not os.path.exists(settings_module): - os.makedirs(settings_module) - - if not os.path.exists(os.path.dirname(database_path)): - os.makedirs(os.path.dirname(database_path)) - - with open(settings_path, 'w') as settings_file: - settings_file.write(settings_content) - - @task(help={'settings-path': 'Path to settings file (absolute path). Leave empty for default'}) -def create_or_reset_admin(context, settings_path=None): +def create_or_reset_admin(context, settings_path: str = None): """ Creates an admin user or resets the password for an existing one """ - - # Find the path to the settings and setup the django environment setup_django_environment(settings_path) # can't be imported in global scope as it already requires @@ -207,25 +114,21 @@ def create_or_reset_admin(context, settings_path=None): call_command('loaddata', path + 'users.json') -@task(help={'settings-path': 'Path to settings file (absolute path). Leave empty for default'}) +@task(help={'settings-path': 'Path to settings file. Leave empty for default (settings.main)'}) def migrate_db(context, settings_path=None): """ Run all database migrations """ - - # Find the path to the settings and setup the django environment setup_django_environment(settings_path) call_command('migrate') -@task(help={'settings-path': 'Path to settings file (absolute path). Leave empty for default'}) -def load_fixtures(context, settings_path=None): +@task(help={'settings-path': 'Path to settings file. Leave empty for default (settings.main)'}) +def load_fixtures(context, settings_path: str = None): """ Loads all fixtures """ - - # Find the path to the settings and setup the django environment setup_django_environment(settings_path) # Gym @@ -257,13 +160,11 @@ def load_fixtures(context, settings_path=None): call_command('loaddata', 'gym-adminconfig.json') -@task(help={'settings-path': 'Path to settings file (absolute path). Leave empty for default'}) -def load_online_fixtures(context, settings_path=None): +@task(help={'settings-path': 'Path to settings file. Leave empty for default (settings.main)'}) +def load_online_fixtures(context, settings_path: str = None): """ Downloads fixtures from server and installs them (at the moment only ingredients) """ - - # Find the path to the settings and set up the django environment setup_django_environment(settings_path) # Prepare the download @@ -291,57 +192,28 @@ def load_online_fixtures(context, settings_path=None): os.unlink(f.name) -@task -def config_location(context): - """ - Returns the default location for the settings file and the data folder - """ - print('Default locations:') - print(f'* settings: {get_path("settings.py")}') - print(f'* media folder: {get_path("media")}') - print(f'* database path: {get_path("database.sqlite")}') - - # # # Helper functions # -# Note: these functions were originally in wger/utils/main.py but were moved -# here because of different import problems (the packaged pip-installed -# packaged has a different sys path than the local one) -# - - -def get_path(file='settings.py') -> pathlib.Path: - """ - Return the path of the given file relatively to the wger source folder - - Note: one parent is the step from e.g. some-checkout/wger/settings.py - to some-checkout/wger, the second one to get to the source folder - itself. - """ - return (pathlib.Path(__file__).parent.parent / file).resolve() - - -def setup_django_environment(settings_path): +def setup_django_environment(settings_path: str = None): """ Setup the django environment """ + if settings_path is not None: + print(f'*** Using settings from argument: {settings_path}') + os.environ['DJANGO_SETTINGS_MODULE'] = settings_path + elif os.environ.get('DJANGO_SETTINGS_MODULE') is not None: + print(f'*** Using settings from env: {os.environ.get("DJANGO_SETTINGS_MODULE")}') + else: + os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.main' + print('*** No settings given, using settings.main') - # Use default settings if the user didn't specify something else - if settings_path is None: - settings_path = get_path('settings.py').as_posix() - print(f'*** No settings given, using {settings_path}') - - # Find out file path and fine name of settings and setup django - settings_file = os.path.basename(settings_path) - settings_module_name = ''.join(settings_file.split('.')[:-1]) - if '.' in settings_module_name: - print("'.' is not an allowed character in the settings-file") + # Check if we are in the wger source folder + if not os.path.isfile('manage.py'): + print(style.ERROR('Error: please run this script from the wger checkout folder')) sys.exit(1) - settings_module_dir = os.path.dirname(settings_path) - sys.path.append(settings_module_dir) - os.environ[django.conf.ENVIRONMENT_VARIABLE] = '%s' % settings_module_name + django.setup() @@ -356,12 +228,11 @@ def database_exists(): from django.db import DatabaseError try: - # TODO: Use another model, the User could be deactivated User.objects.count() except DatabaseError: return False - except ImproperlyConfigured: - print('Your settings file seems broken') + except ImproperlyConfigured as e: + print(style.ERROR('Your settings file seems broken: '), e) sys.exit(0) else: return True @@ -369,9 +240,7 @@ def database_exists(): def make_program(): ns = Collection( - start, bootstrap, - create_settings, create_or_reset_admin, migrate_db, load_fixtures, diff --git a/wger/trophies/README.md b/wger/trophies/README.md index f86b42b13..336882202 100644 --- a/wger/trophies/README.md +++ b/wger/trophies/README.md @@ -10,6 +10,8 @@ their workout activities. - **Progressive Trophies**: Show user progress towards earning a trophy - **Hidden Trophies**: Secret achievements that are revealed only when earned +- **Repeatable Trophies**: Trophies can be earned multiple times, for + example PR trophies. Context data can be added to each earned trophy. - **Automatic Evaluation**: Trophies are evaluated automatically when workout data changes - **Statistics Tracking**: Denormalized statistics for efficient trophy @@ -54,6 +56,7 @@ Defines an achievement that users can earn. - `is_hidden`: Hidden until earned - `is_progressive`: Shows progress percentage - `is_active`: Can be earned (admins can disable) +- `is_repeatable`: Can be earned multiple times - `order`: Display order ### UserTrophy @@ -66,6 +69,7 @@ Links users to their earned trophies. - `earned_at`: Timestamp when earned - `progress`: Progress percentage (0-100) - `is_notified`: For future notification system +- `context_data`: Additionnal information on the trophy ### UserStatistics @@ -118,6 +122,10 @@ Trophy checkers are Python classes that determine if a user has earned a trophy. - Params: `{'inactive_days': 30}` - Example: "Return to training after 30 days inactive" +8. **personal_record**: Check for new PRs + - Params: `{'log': WorkoutLog}` + - Example: "Beats PR on exercise 'Bench Press Dumbells' by logging 100kg for 10 reps." + ## Management Commands ### Load Trophies @@ -125,14 +133,8 @@ Trophy checkers are Python classes that determine if a user has earned a trophy. Load the initial set of trophies into the database: ```bash -# Load new trophies (skip existing) -python manage.py load_trophies - -# Update existing trophies -python manage.py load_trophies --update - -# Verbose output -python manage.py load_trophies -v 2 +# Load trophies (overwrites existing ones if IDs match) +python manage.py loaddata initial_trophies ``` ### Evaluate Trophies @@ -531,7 +533,7 @@ python manage.py test wger.trophies.tests.test_integration ## Initial Trophies -The system includes 9 initial trophies: +The system includes 10 initial trophies. 1. **Beginner**: Complete your first workout 2. **Unstoppable**: Maintain a 30-day workout streak @@ -544,8 +546,9 @@ The system includes 9 initial trophies: 8. **New Year, New Me**: Work out on January 1st 9. **Phoenix** (Hidden): Return to training after being inactive for 30 days +10. **PR Trophy** Achieve a new Personal Record on any exercise -Load them with: `python manage.py load_trophies` +Load them with: `python manage.py loaddata initial_trophies` ## Troubleshooting diff --git a/wger/trophies/__init__.py b/wger/trophies/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/wger/trophies/api/filtersets.py b/wger/trophies/api/filtersets.py index f30ff9c9f..911e2d7e6 100644 --- a/wger/trophies/api/filtersets.py +++ b/wger/trophies/api/filtersets.py @@ -37,6 +37,7 @@ class TrophyFilterSet(filters.FilterSet): 'is_active': ['exact'], 'is_hidden': ['exact'], 'is_progressive': ['exact'], + 'is_repeatable': ['exact'], } @@ -49,7 +50,11 @@ class UserTrophyFilterSet(filters.FilterSet): model = UserTrophy fields = { 'id': ['exact', 'in'], - 'trophy': ['exact', 'in'], 'earned_at': ['exact', 'gt', 'gte', 'lt', 'lte'], 'is_notified': ['exact'], + 'trophy': ['exact', 'in'], + 'trophy__is_active': ['exact'], + 'trophy__is_hidden': ['exact'], + 'trophy__is_repeatable': ['exact'], + 'trophy__trophy_type': ['exact', 'in'], } diff --git a/wger/trophies/api/serializers.py b/wger/trophies/api/serializers.py index 6bd3a0033..bf5e073e2 100644 --- a/wger/trophies/api/serializers.py +++ b/wger/trophies/api/serializers.py @@ -14,6 +14,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +# Standard Library +import logging + +# Django +from django.templatetags.static import static +from django.utils.translation import gettext as _ + # Third Party from rest_framework import serializers @@ -25,6 +32,9 @@ from wger.trophies.models import ( ) +logger = logging.getLogger(__name__) + + class TrophySerializer(serializers.ModelSerializer): """ Serializer for Trophy model. @@ -32,6 +42,10 @@ class TrophySerializer(serializers.ModelSerializer): Shows trophy information for listing active trophies. """ + image = serializers.SerializerMethodField() + name = serializers.SerializerMethodField() + description = serializers.SerializerMethodField() + class Meta: model = Trophy fields = ( @@ -43,10 +57,30 @@ class TrophySerializer(serializers.ModelSerializer): 'trophy_type', 'is_hidden', 'is_progressive', + 'is_repeatable', 'order', ) read_only_fields = fields + def get_name(self, obj: Trophy): + """Translate the trophy name""" + return _(obj.name) + + def get_description(self, obj: Trophy): + """Translate the trophy description""" + return _(obj.description) + + def get_image(self, obj: Trophy): + """Build absolute URL to trophy image, if possible.""" + + request = self.context.get('request') + if request is not None: + return request.build_absolute_uri(static(obj.image_rel_path)) + + # no host available + logger.info('Cannot build absolute URL for trophy image without request context') + return None + class UserTrophySerializer(serializers.ModelSerializer): """ @@ -65,6 +99,7 @@ class UserTrophySerializer(serializers.ModelSerializer): 'earned_at', 'progress', 'is_notified', + 'context_data', ) read_only_fields = fields diff --git a/wger/trophies/api/views.py b/wger/trophies/api/views.py index d46e7834e..675b79fcb 100644 --- a/wger/trophies/api/views.py +++ b/wger/trophies/api/views.py @@ -121,12 +121,19 @@ class TrophyViewSet(viewsets.ReadOnlyModelViewSet): return Response([]) include_hidden = request.user.is_staff + include_repeatable = request.GET.get('include_repeatable', 'false') == 'true' progress_data = TrophyService.get_all_trophy_progress( request.user, include_hidden=include_hidden, + include_repeatable=include_repeatable, ) - serializer = TrophyProgressSerializer(progress_data, many=True) + serializer = TrophyProgressSerializer( + progress_data, + many=True, + # Important: provide request in context for image URL building + context={'request': request}, + ) return Response(serializer.data) @@ -145,7 +152,7 @@ class UserTrophyViewSet(viewsets.ReadOnlyModelViewSet): serializer_class = UserTrophySerializer filterset_class = UserTrophyFilterSet - ordering_fields = ['earned_at', 'trophy__name'] + ordering_fields = ['earned_at', 'trophy__trophy_type', 'trophy__name'] ordering = ['-earned_at'] is_private = True diff --git a/wger/trophies/apps.py b/wger/trophies/apps.py index ab3ef9d91..227c13b86 100644 --- a/wger/trophies/apps.py +++ b/wger/trophies/apps.py @@ -23,4 +23,4 @@ class TrophiesConfig(AppConfig): verbose_name = 'Trophies' def ready(self): - import wger.trophies.signals # noqa: F401 + import wger.trophies.signals diff --git a/wger/trophies/checkers/__init__.py b/wger/trophies/checkers/__init__.py index 86c5fadb6..a86c5a0a0 100644 --- a/wger/trophies/checkers/__init__.py +++ b/wger/trophies/checkers/__init__.py @@ -14,9 +14,10 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . +# ruff: noqa: F401 + # Local from .base import BaseTrophyChecker -from .count_based import CountBasedChecker from .date_based import DateBasedChecker from .inactivity_return import InactivityReturnChecker from .registry import CheckerRegistry @@ -24,3 +25,4 @@ from .streak import StreakChecker from .time_based import TimeBasedChecker from .volume import VolumeChecker from .weekend_warrior import WeekendWarriorChecker +from .workout_count_based import WorkoutCountBasedChecker diff --git a/wger/trophies/checkers/base.py b/wger/trophies/checkers/base.py index 613b9850f..1b6dd62fd 100644 --- a/wger/trophies/checkers/base.py +++ b/wger/trophies/checkers/base.py @@ -19,6 +19,7 @@ from abc import ( ABC, abstractmethod, ) +from decimal import Decimal from typing import ( Any, Optional, @@ -26,6 +27,10 @@ from typing import ( # Django from django.contrib.auth.models import User +from django.utils import formats + +# wger +from wger.trophies.models import Trophy class BaseTrophyChecker(ABC): @@ -124,5 +129,25 @@ class BaseTrophyChecker(ABC): """ return True + def get_context_data(self) -> Optional[dict]: + """ + Returns context information about the trophy. + + Override this method in subclasses to return informative context. + + Returns: + None if no context, dict context information otherwise + """ + return None + + @staticmethod + def format_number(val: Decimal | float): + return formats.number_format( + val, + decimal_pos=0 if val >= 1000 else 1, + use_l10n=True, + force_grouping=True, + ) + def __repr__(self) -> str: return f'<{self.__class__.__name__}(user={self.user.username}, trophy={self.trophy.name})>' diff --git a/wger/trophies/checkers/date_based.py b/wger/trophies/checkers/date_based.py index 6fa43d922..07c4ece9e 100644 --- a/wger/trophies/checkers/date_based.py +++ b/wger/trophies/checkers/date_based.py @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# Standard Library -from typing import Any - # Local from .base import BaseTrophyChecker diff --git a/wger/trophies/checkers/inactivity_return.py b/wger/trophies/checkers/inactivity_return.py index 2533d3b01..7614c7d74 100644 --- a/wger/trophies/checkers/inactivity_return.py +++ b/wger/trophies/checkers/inactivity_return.py @@ -16,7 +16,6 @@ # Standard Library import datetime -from typing import Any # Local from .base import BaseTrophyChecker diff --git a/wger/trophies/checkers/personal_record.py b/wger/trophies/checkers/personal_record.py new file mode 100644 index 000000000..ea2b00aa1 --- /dev/null +++ b/wger/trophies/checkers/personal_record.py @@ -0,0 +1,151 @@ +# This file is part of wger Workout Manager . +# Copyright (C) 2013 - 2021 wger Team +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU Affero General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with this program. If not, see . + +# Standard Library +import logging +from decimal import Decimal +from typing import Optional + +# wger +from wger.manager.models import WorkoutLog +from wger.trophies.models.trophy import Trophy +from wger.trophies.models.user_trophy import UserTrophy + +# Local +from .base import BaseTrophyChecker + + +logger = logging.getLogger(__name__) + + +class PersonalRecordChecker(BaseTrophyChecker): + """ + Checker for Personal Record (PR) repeatable trophy. + + Used to detect when PRs are beaten and award trophies accordingly. + + params: + log (WorkoutLog): workout log used to check if a PR was beaten. + + """ + + def _estimate_one_rep_max(self) -> float: + """ + Estimates the user's one-rep max (1RM) using Brzycki's formula: + 1RM = weight * (36 / (37 - repetitions)) + + Note: returning float because of serialization issues with Decimal in JSON. + """ + log: WorkoutLog | None = self.params.get('log') + if not log: + raise ValueError('Log should not be None') + + weight = log.weight + repetitions = log.repetitions + rir = log.rir + + if weight is None: + raise ValueError('Weight should not be None') + if repetitions is None: + raise ValueError('Repetitions should not be None') + if rir is not None: + repetitions += rir + + if repetitions == 37: + raise ValueError("In Brzycki's formula, repetitions cannot be equal to 37.") + + result = weight * (Decimal('36') / (Decimal('37') - repetitions)) + return round(float(result), 2) + + def check(self) -> bool: + """Check if user has beaten Personal Record.""" + log = self.params.get('log', None) + + if not log: + return False + + exercise = getattr(log, 'exercise', None) + + pr_trophy = Trophy.objects.get(name='Personal Record') + if not pr_trophy: + raise Exception("Trophy 'Personal Record' not found.") + + last_pr = ( + UserTrophy.objects.filter( + user=log.user, + trophy=pr_trophy, + context_data__exercise_id=exercise.id, + ) + .order_by('-earned_at') + .first() + ) + + if last_pr and last_pr.context_data: + prev = last_pr.context_data.get('one_rep_max_estimate') + try: + current = self._estimate_one_rep_max() + except Exception: + return False + + if prev is not None and prev >= current: + return False + + return True + + def get_progress(self) -> float: + """Get progress as percentage.""" + return 100.0 if self.check() else 0.0 + + def get_context_data(self) -> Optional[dict]: + log: WorkoutLog | None = self.params.get('log', None) + + if not log: + return None + + session = log.session + exercise = log.exercise + repetitions_unit = log.repetitions_unit + weight_unit = log.weight_unit + repetitions = log.repetitions + weight = log.weight + + try: + one_rm_estimate = self._estimate_one_rep_max() + except Exception as e: + logger.warning(f'PR estimation failed : {e}') + one_rm_estimate = None + + return { + 'log_id': log.id, + 'date': log.date.isoformat(), + 'session_id': session.id if session else None, + 'exercise_id': exercise.id if exercise else None, + 'repetitions_unit_id': repetitions_unit.id if repetitions_unit else None, + 'repetitions': float(repetitions) if repetitions else None, + 'weight_unit_id': weight_unit.id if weight_unit else None, + 'weight': float(weight) if weight else None, + 'iteration': log.iteration, + 'one_rep_max_estimate': one_rm_estimate, + } + + def get_target_value(self) -> str: + return 'N/A' + + def get_current_value(self) -> str: + return 'N/A' + + def get_progress_display(self) -> str: + return 'N/A' diff --git a/wger/trophies/checkers/registry.py b/wger/trophies/checkers/registry.py index b7b5dee1c..df7a619d9 100644 --- a/wger/trophies/checkers/registry.py +++ b/wger/trophies/checkers/registry.py @@ -25,15 +25,19 @@ from typing import ( # Django from django.contrib.auth.models import User +# wger +from wger.trophies.models.trophy import Trophy + # Local from .base import BaseTrophyChecker -from .count_based import CountBasedChecker from .date_based import DateBasedChecker from .inactivity_return import InactivityReturnChecker +from .personal_record import PersonalRecordChecker from .streak import StreakChecker from .time_based import TimeBasedChecker from .volume import VolumeChecker from .weekend_warrior import WeekendWarriorChecker +from .workout_count_based import WorkoutCountBasedChecker logger = logging.getLogger(__name__) @@ -50,13 +54,14 @@ class CheckerRegistry: # Registry mapping simple keys to checker classes # Using simple keys instead of full Python paths to avoid breakage if module structure changes _registry: Dict[str, Type[BaseTrophyChecker]] = { - 'count_based': CountBasedChecker, + 'workout_count_based': WorkoutCountBasedChecker, 'streak': StreakChecker, 'weekend_warrior': WeekendWarriorChecker, 'volume': VolumeChecker, 'time_based': TimeBasedChecker, 'date_based': DateBasedChecker, 'inactivity_return': InactivityReturnChecker, + 'personal_record': PersonalRecordChecker, } @classmethod @@ -109,7 +114,7 @@ class CheckerRegistry: def create_checker( cls, user: User, - trophy: 'Trophy', + trophy: Trophy, ) -> Optional[BaseTrophyChecker]: """ Factory method to create a checker instance for a trophy. @@ -125,7 +130,7 @@ class CheckerRegistry: checker_class = cls.get_checker_class(trophy.checker_class) if checker_class is None: - logger.warning( + logger.error( f'Checker class not found in registry: {trophy.checker_class} ' f'for trophy: {trophy.name}' ) diff --git a/wger/trophies/checkers/streak.py b/wger/trophies/checkers/streak.py index a5a3bbc23..d682032cc 100644 --- a/wger/trophies/checkers/streak.py +++ b/wger/trophies/checkers/streak.py @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# Standard Library -from typing import Any - # Local from .base import BaseTrophyChecker diff --git a/wger/trophies/checkers/volume.py b/wger/trophies/checkers/volume.py index 0a7649ed5..3c3c2a7ac 100644 --- a/wger/trophies/checkers/volume.py +++ b/wger/trophies/checkers/volume.py @@ -16,10 +16,6 @@ # Standard Library from decimal import Decimal -from typing import ( - Any, - Union, -) # Local from .base import BaseTrophyChecker @@ -74,15 +70,4 @@ class VolumeChecker(BaseTrophyChecker): current = self.get_current_value() target = self.get_target_value() - # Format large numbers with commas for readability - if current >= 1000: - current_str = f'{current:,.0f}' - else: - current_str = f'{current:.1f}' - - if target >= 1000: - target_str = f'{target:,.0f}' - else: - target_str = f'{target:.1f}' - - return f'{current_str} / {target_str} kg' + return f'{self.format_number(current)} / {self.format_number(target)} kg' diff --git a/wger/trophies/checkers/weekend_warrior.py b/wger/trophies/checkers/weekend_warrior.py index 5325d5081..d27348330 100644 --- a/wger/trophies/checkers/weekend_warrior.py +++ b/wger/trophies/checkers/weekend_warrior.py @@ -14,9 +14,6 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# Standard Library -from typing import Any - # Local from .base import BaseTrophyChecker diff --git a/wger/trophies/checkers/count_based.py b/wger/trophies/checkers/workout_count_based.py similarity index 95% rename from wger/trophies/checkers/count_based.py rename to wger/trophies/checkers/workout_count_based.py index fed68b068..b5593558e 100644 --- a/wger/trophies/checkers/count_based.py +++ b/wger/trophies/checkers/workout_count_based.py @@ -14,16 +14,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . -# Standard Library -from typing import Any - # Local from .base import BaseTrophyChecker -class CountBasedChecker(BaseTrophyChecker): +class WorkoutCountBasedChecker(BaseTrophyChecker): """ - Checker for count-based trophies. + Checker for workout count-based trophies. Used for trophies that require completing a certain number of workouts. diff --git a/wger/trophies/fixtures/initial_trophies.json b/wger/trophies/fixtures/initial_trophies.json index cbeef12ff..c42775bd1 100644 --- a/wger/trophies/fixtures/initial_trophies.json +++ b/wger/trophies/fixtures/initial_trophies.json @@ -3,21 +3,133 @@ "model": "trophies.trophy", "pk": 1, "fields": { + "uuid": "9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60", "name": "Beginner", "description": "Complete your first workout", "trophy_type": "count", - "checker_class": "count_based", + "checker_class": "workout_count_based", "checker_params": {"count": 1}, "is_hidden": false, "is_progressive": false, "is_active": true, - "order": 1 + "order": 1, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 2, "fields": { + "uuid": "0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f", + "name": "Consistent", + "description": "Complete 10 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 10}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 2, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 3, + "fields": { + "uuid": "4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d", + "name": "Dedicated", + "description": "Complete 50 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 50}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 3, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 4, + "fields": { + "uuid": "d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b", + "name": "Obsessed", + "description": "Complete 100 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 100}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 4, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 5, + "fields": { + "uuid": "e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a", + "name": "Legend", + "description": "Complete 200 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 200}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 5, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 6, + "fields": { + "uuid": "f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b", + "name": "Veteran", + "description": "Complete 500 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 500}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 6, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 7, + "fields": { + "uuid": "a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c", + "name": "Titan", + "description": "Complete 1000 workouts", + "trophy_type": "count", + "checker_class": "workout_count_based", + "checker_params": {"count": 1000}, + "is_hidden": false, + "is_progressive": false, + "is_active": true, + "order": 7, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 8, + "fields": { + "uuid": "b605b6a1-953d-41fb-87c9-a2f88b5f5907", "name": "Unstoppable", "description": "Maintain a 30-day workout streak", "trophy_type": "sequence", @@ -26,13 +138,16 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 2 + "order": 8, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 3, + "pk": 9, "fields": { + "uuid": "bf60e051-a9a5-4bf5-ac4b-1aa713febca7", "name": "Weekend Warrior", "description": "Work out on Saturday and Sunday for 4 consecutive weekends", "trophy_type": "sequence", @@ -41,88 +156,196 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 3 + "order": 9, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 4, + "pk": 10, "fields": { - "name": "Lifter", - "description": "Lift a cumulative total of 5,000 kg", + "uuid": "5353989b-adc0-481b-a9bc-64365a9179e8", + "name": "Elephant lifter", + "description": "Lift a cumulative total of 5.000 kg", "trophy_type": "volume", "checker_class": "volume", "checker_params": {"kg": 5000}, "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 4 + "order": 10, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 5, + "pk": 11, "fields": { - "name": "Atlas", - "description": "Lift a cumulative total of 100,000 kg", + "uuid": "3c53887b-feba-4d73-8022-e446f46395c8", + "name": "Bus lifter", + "description": "Lift a cumulative total of 20.000 kg", "trophy_type": "volume", "checker_class": "volume", - "checker_params": {"kg": 100000}, + "checker_params": {"kg": 20000}, "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 5 + "order": 11, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 6, + "pk": 12, "fields": { + "uuid": "70ee1605-20b8-4c8d-87a1-3787b9b3939d", + "name": "Plane lifter", + "description": "Lift a cumulative total of 50.000 kg", + "trophy_type": "volume", + "checker_class": "volume", + "checker_params": {"kg": 50000}, + "is_hidden": true, + "is_progressive": true, + "is_active": true, + "order": 12, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 13, + "fields": { + "uuid": "3b4521ee-14bc-4a31-a3d8-e6859e183a35", + "name": "Blue whale lifter", + "description": "Lift a cumulative total of 150.000 kg", + "trophy_type": "volume", + "checker_class": "volume", + "checker_params": {"kg": 100000}, + "is_hidden": true, + "is_progressive": true, + "is_active": true, + "order": 13, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 14, + "fields": { + "uuid": "f0a5fd12-2508-4654-89aa-3d6dbb29c7e3", + "name": "Space Station lifter", + "description": "Lift a cumulative total of 450.000 kg", + "trophy_type": "volume", + "checker_class": "volume", + "checker_params": {"kg": 450000}, + "is_hidden": true, + "is_progressive": true, + "is_active": true, + "order": 14, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 15, + "fields": { + "uuid": "2c770528-3528-4f0a-9d1a-342d96935bdf", + "name": "Millionaire", + "description": "Lift a cumulative total of 1.000.000 kg (that's a fully loaded space shuttle!)", + "trophy_type": "volume", + "checker_class": "volume", + "checker_params": {"kg": 1000000}, + "is_hidden": true, + "is_progressive": true, + "is_active": true, + "order": 15, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 16, + "fields": { + "uuid": "e414c29d-5828-4ca3-83b5-4837a71ed48f", + "name": "Atlas", + "description": "Lift a cumulative total of 10.000.000 kg", + "trophy_type": "volume", + "checker_class": "volume", + "checker_params": {"kg": 10000000}, + "is_hidden": true, + "is_progressive": true, + "is_active": true, + "order": 16, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 17, + "fields": { + "uuid": "cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c", "name": "Early Bird", "description": "Complete a workout before 6:00 AM", "trophy_type": "time", "checker_class": "time_based", "checker_params": {"before": "06:00"}, - "is_hidden": false, + "is_hidden": true, "is_progressive": false, "is_active": true, - "order": 6 + "order": 17, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 7, + "pk": 18, "fields": { + "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", "name": "Night Owl", - "description": "Complete a workout after 9:00 PM", + "description": "Complete a workout after 11:00 PM", "trophy_type": "time", "checker_class": "time_based", - "checker_params": {"after": "21:00"}, - "is_hidden": false, + "checker_params": {"after": "23:00"}, + "is_hidden": true, "is_progressive": false, "is_active": true, - "order": 7 + "order": 18, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 8, + "pk": 19, "fields": { + "uuid": "31a71d9a-bf26-4f18-b82f-afefe6f50df2", "name": "New Year, New Me", "description": "Work out on January 1st", "trophy_type": "date", "checker_class": "date_based", "checker_params": {"month": 1, "day": 1}, - "is_hidden": false, + "is_hidden": true, "is_progressive": false, "is_active": true, - "order": 8 + "order": 19, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", - "pk": 9, + "pk": 20, "fields": { + "uuid": "32bb12da-b25f-4e18-81e4-b695eb65283e", "name": "Phoenix", "description": "Return to training after being inactive for 30 days", "trophy_type": "other", @@ -131,7 +354,27 @@ "is_hidden": true, "is_progressive": false, "is_active": true, - "order": 9 + "order": 20, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 21, + "fields": { + "uuid": "d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e", + "name": "Personal Record", + "description": "Repeatable Personal Record (PR) trophy", + "trophy_type": "pr", + "checker_class": "personal_record", + "checker_params": {}, + "is_hidden": true, + "is_progressive": false, + "is_repeatable": true, + "order": 21, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } } ] diff --git a/wger/trophies/management/commands/load_trophies.py b/wger/trophies/management/commands/load_trophies.py deleted file mode 100644 index fee11214b..000000000 --- a/wger/trophies/management/commands/load_trophies.py +++ /dev/null @@ -1,190 +0,0 @@ -# This file is part of wger Workout Manager . -# Copyright (C) 2013 - 2021 wger Team -# -# wger Workout Manager is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# wger Workout Manager is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -# Django -from django.core.management.base import BaseCommand -from django.utils.translation import gettext_lazy as _ - -# wger -from wger.trophies.models import Trophy - - -class Command(BaseCommand): - """ - Load initial trophy definitions into the database. - - This command is idempotent - it can be run multiple times safely. - Existing trophies with the same name will be updated, not duplicated. - """ - - help = 'Load initial trophy definitions into the database' - - def add_arguments(self, parser): - parser.add_argument( - '--update', - action='store_true', - dest='update', - default=False, - help='Update existing trophies if they already exist', - ) - - def handle(self, **options): - """ - Load the initial trophy definitions. - """ - verbosity = int(options['verbosity']) - update_existing = options['update'] - - # Define the initial trophies - trophies_data = [ - { - 'name': _('Beginner'), - 'description': _('Complete your first workout'), - 'trophy_type': Trophy.TYPE_COUNT, - 'checker_class': 'count_based', - 'checker_params': {'count': 1}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 1, - }, - { - 'name': _('Unstoppable'), - 'description': _('Maintain a 30-day workout streak'), - 'trophy_type': Trophy.TYPE_SEQUENCE, - 'checker_class': 'streak', - 'checker_params': {'days': 30}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 2, - }, - { - 'name': _('Weekend Warrior'), - 'description': _('Work out on Saturday and Sunday for 4 consecutive weekends'), - 'trophy_type': Trophy.TYPE_SEQUENCE, - 'checker_class': 'weekend_warrior', - 'checker_params': {'weekends': 4}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 3, - }, - { - 'name': _('Lifter'), - 'description': _('Lift a cumulative total of 5,000 kg'), - 'trophy_type': Trophy.TYPE_VOLUME, - 'checker_class': 'volume', - 'checker_params': {'kg': 5000}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 4, - }, - { - 'name': _('Atlas'), - 'description': _('Lift a cumulative total of 100,000 kg'), - 'trophy_type': Trophy.TYPE_VOLUME, - 'checker_class': 'volume', - 'checker_params': {'kg': 100000}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 5, - }, - { - 'name': _('Early Bird'), - 'description': _('Complete a workout before 6:00 AM'), - 'trophy_type': Trophy.TYPE_TIME, - 'checker_class': 'time_based', - 'checker_params': {'before': '06:00'}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 6, - }, - { - 'name': _('Night Owl'), - 'description': _('Complete a workout after 9:00 PM'), - 'trophy_type': Trophy.TYPE_TIME, - 'checker_class': 'time_based', - 'checker_params': {'after': '21:00'}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 7, - }, - { - 'name': _('New Year, New Me'), - 'description': _('Work out on January 1st'), - 'trophy_type': Trophy.TYPE_DATE, - 'checker_class': 'date_based', - 'checker_params': {'month': 1, 'day': 1}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 8, - }, - { - 'name': _('Phoenix'), - 'description': _('Return to training after being inactive for 30 days'), - 'trophy_type': Trophy.TYPE_OTHER, - 'checker_class': 'inactivity_return', - 'checker_params': {'inactive_days': 30}, - 'is_hidden': True, - 'is_progressive': False, - 'order': 9, - }, - ] - - created_count = 0 - updated_count = 0 - skipped_count = 0 - - for trophy_data in trophies_data: - # Convert lazy translation to string for database lookup - name = str(trophy_data['name']) - - # Check if trophy already exists - existing = Trophy.objects.filter(name=name).first() - - if existing: - if update_existing: - # Update existing trophy - for key, value in trophy_data.items(): - if key != 'name': # Don't update the name - setattr(existing, key, value) - existing.save() - updated_count += 1 - - if verbosity >= 2: - self.stdout.write(self.style.SUCCESS(f'✓ Updated trophy: {name}')) - else: - skipped_count += 1 - - if verbosity >= 2: - self.stdout.write(self.style.WARNING(f'- Skipped existing trophy: {name}')) - else: - # Create new trophy - Trophy.objects.create(**trophy_data) - created_count += 1 - - if verbosity >= 2: - self.stdout.write(self.style.SUCCESS(f'+ Created trophy: {name}')) - - # Summary - if verbosity >= 1: - self.stdout.write( - self.style.SUCCESS( - f'\nTrophy loading complete:\n' - f' Created: {created_count}\n' - f' Updated: {updated_count}\n' - f' Skipped: {skipped_count}\n' - f' Total: {len(trophies_data)}' - ) - ) diff --git a/wger/trophies/management/commands/recalculate_statistics.py b/wger/trophies/management/commands/recalculate_statistics.py index 4da4af6cc..1e701a45e 100644 --- a/wger/trophies/management/commands/recalculate_statistics.py +++ b/wger/trophies/management/commands/recalculate_statistics.py @@ -26,6 +26,9 @@ from django.core.management.base import ( ) from django.utils import timezone +# Third Party +from tqdm import tqdm + # wger from wger.trophies.services.statistics import UserStatisticsService @@ -128,22 +131,23 @@ class Command(BaseCommand): processed = 0 errors = 0 - for user in users: - try: - UserStatisticsService.update_statistics(user) - processed += 1 + with tqdm(total=total_users, unit='B', unit_scale=True) as pbar: + for user in users: + try: + UserStatisticsService.update_statistics(user) + processed += 1 - if verbosity >= 2: - self.stdout.write(self.style.SUCCESS(f'✓ Processed: {user.username}')) - elif verbosity >= 1 and processed % 100 == 0: - self.stdout.write(f' Processed {processed}/{total_users} users...') + if verbosity >= 2: + self.stdout.write(self.style.SUCCESS(f'✓ Processed: {user.username}')) + elif verbosity >= 1: + pbar.update(1) - except Exception as e: - errors += 1 - if verbosity >= 1: - self.stdout.write( - self.style.ERROR(f'✗ Error processing {user.username}: {str(e)}') - ) + except Exception as e: + errors += 1 + if verbosity >= 1: + self.stdout.write( + self.style.ERROR(f'✗ Error processing {user.username}: {str(e)}') + ) if verbosity >= 1: self.stdout.write( diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 8388d0ee9..b9973c59b 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -1,9 +1,9 @@ # Generated by Django 5.2.8 on 2025-11-25 10:54 +import uuid + import django.core.validators import django.db.models.deletion -import uuid -import wger.trophies.models.trophy from django.conf import settings from django.db import migrations, models @@ -41,15 +41,6 @@ class Migration(migrations.Migration): verbose_name='Description', ), ), - ( - 'image', - models.ImageField( - blank=True, - null=True, - upload_to=wger.trophies.models.trophy.trophy_image_upload_path, - verbose_name='Image', - ), - ), ( 'trophy_type', models.CharField( @@ -59,6 +50,7 @@ class Migration(migrations.Migration): ('count', 'Count-based'), ('sequence', 'Sequence-based'), ('date', 'Date-based'), + ('pr', 'Personal Record'), ('other', 'Other'), ], default='other', @@ -108,6 +100,14 @@ class Migration(migrations.Migration): verbose_name='Active', ), ), + ( + 'is_repeatable', + models.BooleanField( + default=False, + help_text='If true, this trophy can be earned multiple times', + verbose_name='Repeatable', + ), + ), ( 'order', models.PositiveIntegerField( @@ -228,6 +228,15 @@ class Migration(migrations.Migration): verbose_name='User', ), ), + ( + 'last_complete_weekend_date', + models.DateField( + blank=True, + help_text='Date of the last Saturday where both Sat and Sun had workouts', + null=True, + verbose_name='Last complete weekend date', + ), + ), ], options={ 'verbose_name': 'User statistics', @@ -243,6 +252,15 @@ class Migration(migrations.Migration): auto_created=True, primary_key=True, serialize=False, verbose_name='ID' ), ), + ( + 'user', + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name='earned_trophies', + to=settings.AUTH_USER_MODEL, + verbose_name='User', + ), + ), ( 'earned_at', models.DateTimeField( @@ -281,12 +299,13 @@ class Migration(migrations.Migration): ), ), ( - 'user', - models.ForeignKey( - on_delete=django.db.models.deletion.CASCADE, - related_name='earned_trophies', - to=settings.AUTH_USER_MODEL, - verbose_name='User', + 'context_data', + models.JSONField( + blank=True, + default=None, + help_text='Additional information concerning this trophy', + null=True, + verbose_name='Context data', ), ), ], @@ -294,7 +313,6 @@ class Migration(migrations.Migration): 'verbose_name': 'User trophy', 'verbose_name_plural': 'User trophies', 'ordering': ['-earned_at'], - 'unique_together': {('user', 'trophy')}, }, ), ] diff --git a/wger/trophies/migrations/0002_add_last_complete_weekend_date.py b/wger/trophies/migrations/0002_add_last_complete_weekend_date.py deleted file mode 100644 index 1efe35882..000000000 --- a/wger/trophies/migrations/0002_add_last_complete_weekend_date.py +++ /dev/null @@ -1,22 +0,0 @@ -# Generated by Django 5.2.8 on 2025-12-02 11:46 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - dependencies = [ - ('trophies', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='userstatistics', - name='last_complete_weekend_date', - field=models.DateField( - blank=True, - help_text='Date of the last Saturday where both Sat and Sun had workouts', - null=True, - verbose_name='Last complete weekend date', - ), - ), - ] diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py new file mode 100644 index 000000000..06a00d976 --- /dev/null +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -0,0 +1,263 @@ +# Generated by Django 5.2.9 on 2025-12-03 18:33 + +from django.db import migrations +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.migrations.state import StateApps + +volume_trophy_data = { + 'trophy_type': 'volume', + 'checker_class': 'volume', + 'is_hidden': False, + 'is_progressive': True, + 'is_repeatable': False, +} + +workout_count_trophy_data = { + 'trophy_type': 'count', + 'checker_class': 'workout_count_based', + 'is_hidden': False, + 'is_progressive': True, + 'is_repeatable': False, +} + +# Define the initial trophies (same as in load_trophies management command) +trophies_data = [ + { + **workout_count_trophy_data, + 'uuid': '9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60', + 'name': 'Beginner', + 'description': 'Complete your first workout', + 'checker_params': {'count': 1}, + 'order': 1, + }, + { + **workout_count_trophy_data, + 'uuid': '0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f', + 'name': 'Consistent', + 'description': 'Complete 10 workouts', + 'checker_params': {'count': 10}, + 'is_hidden': False, + 'order': 2, + }, + { + **workout_count_trophy_data, + 'uuid': '4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d', + 'name': 'Dedicated', + 'description': 'Complete 50 workouts', + 'checker_params': {'count': 50}, + 'order': 3, + }, + { + **workout_count_trophy_data, + 'uuid': 'd2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b', + 'name': 'Obsessed', + 'description': 'Complete 100 workouts', + 'checker_params': {'count': 100}, + 'is_hidden': True, + 'order': 4, + }, + { + **workout_count_trophy_data, + 'uuid': 'e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a', + 'name': 'Legend', + 'description': 'Complete 200 workouts', + 'checker_params': {'count': 200}, + 'is_hidden': True, + 'order': 5, + }, + { + **workout_count_trophy_data, + 'uuid': 'f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b', + 'name': 'Veteran', + 'description': 'Complete 500 workouts', + 'checker_params': {'count': 500}, + 'is_hidden': True, + 'order': 6, + }, + { + **workout_count_trophy_data, + 'uuid': 'a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c', + 'name': 'Titan', + 'description': 'Complete 1000 workouts', + 'checker_params': {'count': 1000}, + 'is_hidden': True, + 'order': 7, + }, + { + 'uuid': 'b605b6a1-953d-41fb-87c9-a2f88b5f5907', + 'name': 'Unstoppable', + 'description': 'Maintain a 30-day workout streak', + 'trophy_type': 'sequence', + 'checker_class': 'streak', + 'checker_params': {'days': 30}, + 'is_progressive': True, + 'is_hidden': False, + 'order': 8, + }, + { + 'uuid': 'bf60e051-a9a5-4bf5-ac4b-1aa713febca7', + 'name': 'Weekend Warrior', + 'description': 'Work out on Saturday and Sunday for 4 consecutive weekends', + 'trophy_type': 'sequence', + 'checker_class': 'weekend_warrior', + 'checker_params': {'weekends': 4}, + 'is_progressive': True, + 'is_hidden': False, + 'order': 9, + }, + { + **volume_trophy_data, + 'uuid': '5353989b-adc0-481b-a9bc-64365a9179e8', + 'name': 'Elephant lifter', + 'description': 'Lift a cumulative total of 5.000 kg', + 'checker_params': {'kg': 5_000}, + 'order': 10, + }, + { + **volume_trophy_data, + 'uuid': '3c53887b-feba-4d73-8022-e446f46395c8', + 'name': 'Bus lifter', + 'description': 'Lift a cumulative total of 20.000 kg', + 'checker_params': {'kg': 20_000}, + 'order': 11, + }, + { + **volume_trophy_data, + 'uuid': '70ee1605-20b8-4c8d-87a1-3787b9b3939d', + 'name': 'Plane lifter', + 'description': 'Lift a cumulative total of 50.000 kg', + 'checker_params': {'kg': 50_000}, + 'order': 12, + }, + { + **volume_trophy_data, + 'uuid': '3b4521ee-14bc-4a31-a3d8-e6859e183a35', + 'name': 'Blue whale lifter', + 'description': 'Lift a cumulative total of 150.000 kg', + 'checker_params': {'kg': 150_000}, + 'is_hidden': True, + 'order': 13, + }, + { + **volume_trophy_data, + 'uuid': 'f0a5fd12-2508-4654-89aa-3d6dbb29c7e3', + 'name': 'Space Station lifter', + 'description': 'Lift a cumulative total of 450.000 kg', + 'checker_params': {'kg': 450_000}, + 'is_hidden': True, + 'order': 14, + }, + { + **volume_trophy_data, + 'uuid': '2c770528-3528-4f0a-9d1a-342d96935bdf', + 'name': 'Millionaire', + 'description': 'Lift a cumulative total of 1.000.000 kg', + 'checker_params': {'kg': 1_000_000}, + 'is_hidden': True, + 'order': 15, + }, + { + **volume_trophy_data, + 'uuid': 'e414c29d-5828-4ca3-83b5-4837a71ed48f', + 'name': 'Atlas', + 'description': 'Lift a cumulative total of 10.000.000 kg', + 'checker_params': {'kg': 10_000_000}, + 'is_hidden': True, + 'order': 16, + }, + { + 'uuid': 'cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c', + 'name': 'Early Bird', + 'description': 'Complete a workout before 6:00 AM', + 'trophy_type': 'time', + 'checker_class': 'time_based', + 'checker_params': {'before': '06:00'}, + 'is_hidden': True, + 'is_progressive': False, + 'order': 17, + }, + { + 'uuid': '2b00ff1e-69f8-47f0-b8df-976a4127a425', + 'name': 'Night Owl', + 'description': 'Complete a workout after 11:00 PM', + 'trophy_type': 'time', + 'checker_class': 'time_based', + 'checker_params': {'after': '23:00'}, + 'is_hidden': True, + 'is_progressive': False, + 'order': 18, + }, + { + 'uuid': '31a71d9a-bf26-4f18-b82f-afefe6f50df2', + 'name': 'New Year, New Me', + 'description': 'Work out on January 1st', + 'trophy_type': 'date', + 'checker_class': 'date_based', + 'checker_params': {'month': 1, 'day': 1}, + 'is_hidden': True, + 'is_progressive': False, + 'order': 19, + }, + { + 'uuid': '32bb12da-b25f-4e18-81e4-b695eb65283e', + 'name': 'Phoenix', + 'description': 'Return to training after being inactive for 30 days', + 'trophy_type': 'other', + 'checker_class': 'inactivity_return', + 'checker_params': {'inactive_days': 30}, + 'is_hidden': True, + 'is_progressive': False, + 'order': 20, + }, + { + 'uuid': 'd4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e', + 'name': 'Personal Record', + 'description': 'Achieve a new Personal Record on any exercise', + 'trophy_type': 'pr', + 'checker_class': 'personal_record', + 'checker_params': {}, + 'is_hidden': True, + 'is_progressive': False, + 'is_repeatable': True, + 'order': 21, + }, +] + + +def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + """ + Load the initial set of 9 trophies. + + This migration almost idempotent - it will update trophies that already exist + based on the trophy UUID. + """ + Trophy = apps.get_model('trophies', 'Trophy') + + for trophy_data in trophies_data: + Trophy.objects.update_or_create(uuid=trophy_data['uuid'], defaults=trophy_data) + + +def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + """ + Reverse migration - delete the initial trophies. + + This is optional and can be left as a no-op if you want to keep + trophies even when rolling back migrations. + """ + Trophy = apps.get_model('trophies', 'Trophy') + + trophy_names = [t['name'] for t in trophies_data] + + deleted_count = Trophy.objects.filter(name__in=trophy_names).delete()[0] + if deleted_count > 0: + print(f'Trophy migration reverse: Deleted {deleted_count} trophies') + + +class Migration(migrations.Migration): + dependencies = [ + ('trophies', '0001_initial'), + ] + + operations = [ + migrations.RunPython(load_initial_trophies, reverse_load_trophies), + ] diff --git a/wger/trophies/migrations/0003_load_initial_trophies.py b/wger/trophies/migrations/0003_load_initial_trophies.py deleted file mode 100644 index 67be18aa0..000000000 --- a/wger/trophies/migrations/0003_load_initial_trophies.py +++ /dev/null @@ -1,157 +0,0 @@ -# Generated by Django 5.2.9 on 2025-12-03 18:33 - -from django.db import migrations - - -def load_initial_trophies(apps, schema_editor): - """ - Load the initial set of 9 trophies. - - This migration is idempotent - it will skip trophies that already exist - based on the trophy name. - """ - Trophy = apps.get_model('trophies', 'Trophy') - - # Define the initial trophies (same as in load_trophies management command) - trophies_data = [ - { - 'name': 'Beginner', - 'description': 'Complete your first workout', - 'trophy_type': 'count', - 'checker_class': 'count_based', - 'checker_params': {'count': 1}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 1, - }, - { - 'name': 'Unstoppable', - 'description': 'Maintain a 30-day workout streak', - 'trophy_type': 'sequence', - 'checker_class': 'streak', - 'checker_params': {'days': 30}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 2, - }, - { - 'name': 'Weekend Warrior', - 'description': 'Work out on Saturday and Sunday for 4 consecutive weekends', - 'trophy_type': 'sequence', - 'checker_class': 'weekend_warrior', - 'checker_params': {'weekends': 4}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 3, - }, - { - 'name': 'Lifter', - 'description': 'Lift a cumulative total of 5,000 kg', - 'trophy_type': 'volume', - 'checker_class': 'volume', - 'checker_params': {'kg': 5000}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 4, - }, - { - 'name': 'Atlas', - 'description': 'Lift a cumulative total of 100,000 kg', - 'trophy_type': 'volume', - 'checker_class': 'volume', - 'checker_params': {'kg': 100000}, - 'is_hidden': False, - 'is_progressive': True, - 'order': 5, - }, - { - 'name': 'Early Bird', - 'description': 'Complete a workout before 6:00 AM', - 'trophy_type': 'time', - 'checker_class': 'time_based', - 'checker_params': {'before': '06:00'}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 6, - }, - { - 'name': 'Night Owl', - 'description': 'Complete a workout after 9:00 PM', - 'trophy_type': 'time', - 'checker_class': 'time_based', - 'checker_params': {'after': '21:00'}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 7, - }, - { - 'name': 'New Year, New Me', - 'description': 'Work out on January 1st', - 'trophy_type': 'date', - 'checker_class': 'date_based', - 'checker_params': {'month': 1, 'day': 1}, - 'is_hidden': False, - 'is_progressive': False, - 'order': 8, - }, - { - 'name': 'Phoenix', - 'description': 'Return to training after being inactive for 30 days', - 'trophy_type': 'other', - 'checker_class': 'inactivity_return', - 'checker_params': {'inactive_days': 30}, - 'is_hidden': True, - 'is_progressive': False, - 'order': 9, - }, - ] - - created_count = 0 - skipped_count = 0 - - for trophy_data in trophies_data: - # Check if trophy already exists - if not Trophy.objects.filter(name=trophy_data['name']).exists(): - Trophy.objects.create(**trophy_data) - created_count += 1 - else: - skipped_count += 1 - - if created_count > 0: - print(f'Trophy migration: Created {created_count} trophies, skipped {skipped_count}') - - -def reverse_load_trophies(apps, schema_editor): - """ - Reverse migration - delete the initial trophies. - - This is optional and can be left as a no-op if you want to keep - trophies even when rolling back migrations. - """ - Trophy = apps.get_model('trophies', 'Trophy') - - trophy_names = [ - 'Beginner', - 'Unstoppable', - 'Weekend Warrior', - 'Lifter', - 'Atlas', - 'Early Bird', - 'Night Owl', - 'New Year, New Me', - 'Phoenix', - ] - - deleted_count = Trophy.objects.filter(name__in=trophy_names).delete()[0] - if deleted_count > 0: - print(f'Trophy migration reverse: Deleted {deleted_count} trophies') - - -class Migration(migrations.Migration): - dependencies = [ - ('trophies', '0002_add_last_complete_weekend_date'), - ] - - operations = [ - migrations.RunPython(load_initial_trophies, reverse_load_trophies), - ] diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index a7463ab92..1014f4d24 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -19,15 +19,6 @@ import uuid # Django from django.db import models -from django.utils.translation import gettext_lazy as _ - - -def trophy_image_upload_path(instance, filename): - """ - Returns the upload path for trophy images - """ - ext = filename.split('.')[-1] - return f'trophies/{instance.uuid}.{ext}' class Trophy(models.Model): @@ -40,15 +31,17 @@ class Trophy(models.Model): TYPE_COUNT = 'count' TYPE_SEQUENCE = 'sequence' TYPE_DATE = 'date' + TYPE_PR = 'pr' TYPE_OTHER = 'other' TROPHY_TYPES = ( - (TYPE_TIME, _('Time-based')), - (TYPE_VOLUME, _('Volume-based')), - (TYPE_COUNT, _('Count-based')), - (TYPE_SEQUENCE, _('Sequence-based')), - (TYPE_DATE, _('Date-based')), - (TYPE_OTHER, _('Other')), + (TYPE_TIME, 'Time-based'), + (TYPE_VOLUME, 'Volume-based'), + (TYPE_COUNT, 'Count-based'), + (TYPE_SEQUENCE, 'Sequence-based'), + (TYPE_DATE, 'Date-based'), + (TYPE_PR, 'Personal Record'), + (TYPE_OTHER, 'Other'), ) uuid = models.UUIDField( @@ -56,80 +49,79 @@ class Trophy(models.Model): editable=False, unique=True, ) - """Unique identifier for the trophy""" + """Unique identifier for the trophy (also used for image filenames)""" name = models.CharField( max_length=100, - verbose_name=_('Name'), - help_text=_('The name of the trophy'), + verbose_name='Name', + help_text='The name of the trophy', ) - """The name of the trophy""" + """The user-facing name of the trophy""" description = models.TextField( - verbose_name=_('Description'), - help_text=_('A description of how to earn this trophy'), + verbose_name='Description', + help_text='A description of how to earn this trophy', blank=True, default='', ) """Description of the trophy and how to earn it""" - image = models.ImageField( - verbose_name=_('Image'), - upload_to=trophy_image_upload_path, - blank=True, - null=True, - ) - """Optional image for the trophy""" - trophy_type = models.CharField( max_length=20, choices=TROPHY_TYPES, default=TYPE_OTHER, - verbose_name=_('Trophy type'), - help_text=_('The type of criteria used to evaluate this trophy'), + verbose_name='Trophy type', + help_text='The type of criteria used to evaluate this trophy', ) """The type of trophy (time, volume, count, sequence, date, other)""" checker_class = models.CharField( max_length=255, - verbose_name=_('Checker class'), - help_text=_('The Python class path used to check if this trophy is earned'), + verbose_name='Checker class', + help_text='The Python class path used to check if this trophy is earned', ) """Python path to the checker class (e.g., 'wger.trophies.checkers.CountBasedChecker')""" checker_params = models.JSONField( default=dict, blank=True, - verbose_name=_('Checker parameters'), - help_text=_('JSON parameters passed to the checker class'), + verbose_name='Checker parameters', + help_text='JSON parameters passed to the checker class', ) """Parameters for the checker class (e.g., {'count': 1} for workout count)""" is_hidden = models.BooleanField( default=False, - verbose_name=_('Hidden'), - help_text=_('If true, this trophy is hidden until earned'), + verbose_name='Hidden', + help_text='If true, this trophy is hidden until earned', ) """Whether the trophy is hidden until earned""" is_progressive = models.BooleanField( default=False, - verbose_name=_('Progressive'), - help_text=_('If true, this trophy shows progress towards completion'), + verbose_name='Progressive', + help_text='If true, this trophy shows progress towards completion', ) """Whether to show progress towards earning the trophy""" is_active = models.BooleanField( default=True, - verbose_name=_('Active'), - help_text=_('If false, this trophy cannot be earned'), + verbose_name='Active', + help_text='If false, this trophy cannot be earned', ) """Whether the trophy is active and can be earned""" + is_repeatable = models.BooleanField( + default=False, + verbose_name='Repeatable', + help_text='If true, this trophy can be earned multiple times', + ) + """Whether the trophy can be earned multiple times""" + order = models.PositiveIntegerField( default=0, - verbose_name=_('Order'), - help_text=_('Display order of the trophy'), + verbose_name='Order', + help_text='Display order of the trophy', ) """Display order for the trophy""" @@ -147,8 +139,8 @@ class Trophy(models.Model): class Meta: ordering = ['order', 'name'] - verbose_name = _('Trophy') - verbose_name_plural = _('Trophies') + verbose_name = 'Trophy' + verbose_name_plural = 'Trophies' def __str__(self): return self.name @@ -158,3 +150,10 @@ class Trophy(models.Model): Trophies don't have an owner - they are global """ return None + + @property + def image_rel_path(self): + """ + Returns the relative (to the static folder) path to the trophy image + """ + return f'trophies/{self.trophy_type}/{self.uuid}.png' diff --git a/wger/trophies/models/user_statistics.py b/wger/trophies/models/user_statistics.py index 21a8afb31..9c9c59689 100644 --- a/wger/trophies/models/user_statistics.py +++ b/wger/trophies/models/user_statistics.py @@ -17,7 +17,6 @@ # Django from django.contrib.auth.models import User from django.db import models -from django.utils.translation import gettext_lazy as _ class UserStatistics(models.Model): @@ -31,7 +30,7 @@ class UserStatistics(models.Model): User, on_delete=models.CASCADE, related_name='trophy_statistics', - verbose_name=_('User'), + verbose_name='User', ) """The user these statistics belong to""" @@ -39,95 +38,95 @@ class UserStatistics(models.Model): max_digits=12, decimal_places=2, default=0, - verbose_name=_('Total weight lifted'), - help_text=_('Cumulative weight lifted in kg'), + verbose_name='Total weight lifted', + help_text='Cumulative weight lifted in kg', ) """Total cumulative weight lifted in kg""" total_workouts = models.PositiveIntegerField( default=0, - verbose_name=_('Total workouts'), - help_text=_('Total number of workout sessions completed'), + verbose_name='Total workouts', + help_text='Total number of workout sessions completed', ) """Total number of workout sessions completed""" current_streak = models.PositiveIntegerField( default=0, - verbose_name=_('Current streak'), - help_text=_('Current consecutive days with workouts'), + verbose_name='Current streak', + help_text='Current consecutive days with workouts', ) """Current consecutive workout streak in days""" longest_streak = models.PositiveIntegerField( default=0, - verbose_name=_('Longest streak'), - help_text=_('Longest consecutive days with workouts'), + verbose_name='Longest streak', + help_text='Longest consecutive days with workouts', ) """Longest consecutive workout streak ever achieved""" last_workout_date = models.DateField( null=True, blank=True, - verbose_name=_('Last workout date'), - help_text=_('Date of the most recent workout'), + verbose_name='Last workout date', + help_text='Date of the most recent workout', ) """Date of the most recent workout""" earliest_workout_time = models.TimeField( null=True, blank=True, - verbose_name=_('Earliest workout time'), - help_text=_('Earliest time a workout was started'), + verbose_name='Earliest workout time', + help_text='Earliest time a workout was started', ) """Earliest time a workout was ever started""" latest_workout_time = models.TimeField( null=True, blank=True, - verbose_name=_('Latest workout time'), - help_text=_('Latest time a workout was started'), + verbose_name='Latest workout time', + help_text='Latest time a workout was started', ) """Latest time a workout was ever started""" weekend_workout_streak = models.PositiveIntegerField( default=0, - verbose_name=_('Weekend workout streak'), - help_text=_('Consecutive weekends with workouts on both Saturday and Sunday'), + verbose_name='Weekend workout streak', + help_text='Consecutive weekends with workouts on both Saturday and Sunday', ) """Consecutive weekends with workouts on both Saturday and Sunday""" last_complete_weekend_date = models.DateField( null=True, blank=True, - verbose_name=_('Last complete weekend date'), - help_text=_('Date of the last Saturday where both Sat and Sun had workouts'), + verbose_name='Last complete weekend date', + help_text='Date of the last Saturday where both Sat and Sun had workouts', ) """Used for tracking consecutive weekend workouts""" last_inactive_date = models.DateField( null=True, blank=True, - verbose_name=_('Last inactive date'), - help_text=_('Last date before the current activity period began'), + verbose_name='Last inactive date', + help_text='Last date before the current activity period began', ) """Used for Phoenix trophy - tracks when user was last inactive""" worked_out_jan_1 = models.BooleanField( default=False, - verbose_name=_('Worked out on January 1st'), - help_text=_('Whether user has ever worked out on January 1st'), + verbose_name='Worked out on January 1st', + help_text='Whether user has ever worked out on January 1st', ) """Flag for New Year, New Me trophy""" last_updated = models.DateTimeField( auto_now=True, - verbose_name=_('Last updated'), + verbose_name='Last updated', ) """When these statistics were last updated""" class Meta: - verbose_name = _('User statistics') - verbose_name_plural = _('User statistics') + verbose_name = 'User statistics' + verbose_name_plural = 'User statistics' def __str__(self): return f'Statistics for {self.user.username}' diff --git a/wger/trophies/models/user_trophy.py b/wger/trophies/models/user_trophy.py index 3a8a4e353..5131707fa 100644 --- a/wger/trophies/models/user_trophy.py +++ b/wger/trophies/models/user_trophy.py @@ -20,8 +20,10 @@ from django.core.validators import ( MaxValueValidator, MinValueValidator, ) -from django.db import models -from django.utils.translation import gettext_lazy as _ +from django.db import ( + IntegrityError, + models, +) # Local from .trophy import Trophy @@ -36,7 +38,7 @@ class UserTrophy(models.Model): User, on_delete=models.CASCADE, related_name='earned_trophies', - verbose_name=_('User'), + verbose_name='User', ) """The user who earned the trophy""" @@ -44,37 +46,45 @@ class UserTrophy(models.Model): Trophy, on_delete=models.CASCADE, related_name='user_trophies', - verbose_name=_('Trophy'), + verbose_name='Trophy', ) """The trophy that was earned""" earned_at = models.DateTimeField( auto_now_add=True, - verbose_name=_('Earned at'), - help_text=_('When the trophy was earned'), + verbose_name='Earned at', + help_text='When the trophy was earned', ) """When the trophy was earned""" progress = models.FloatField( default=0.0, validators=[MinValueValidator(0.0), MaxValueValidator(100.0)], - verbose_name=_('Progress'), - help_text=_('Progress towards earning the trophy (0-100)'), + verbose_name='Progress', + help_text='Progress towards earning the trophy (0-100)', ) """Progress towards earning the trophy (0-100%)""" is_notified = models.BooleanField( default=False, - verbose_name=_('Notified'), - help_text=_('Whether the user has been notified about earning this trophy'), + verbose_name='Notified', + help_text='Whether the user has been notified about earning this trophy', ) """Whether the user has been notified about this trophy (for future notification system)""" + context_data = models.JSONField( + blank=True, + null=True, + default=None, + verbose_name='Context data', + help_text='Additional information concerning this trophy', + ) + """Additional information concerning this trophy (useful for repeatable trophies)""" + class Meta: ordering = ['-earned_at'] - verbose_name = _('User trophy') - verbose_name_plural = _('User trophies') - unique_together = [['user', 'trophy']] + verbose_name = 'User trophy' + verbose_name_plural = 'User trophies' def __str__(self): return f'{self.user.username} - {self.trophy.name}' @@ -84,3 +94,14 @@ class UserTrophy(models.Model): Returns the object that has owner information """ return self + + def save(self, *args, **kwargs): + # Prevent duplicate non-repeatable trophies (allow more than one if trophy.is_repeatable) + if ( + not self.trophy.is_repeatable + and UserTrophy.objects.filter(user=self.user, trophy=self.trophy) + .exclude(pk=self.pk) + .exists() + ): + raise IntegrityError('User already has this non-repeatable trophy') + super().save(*args, **kwargs) diff --git a/wger/trophies/services/statistics.py b/wger/trophies/services/statistics.py index 91c881f5f..2128953c7 100644 --- a/wger/trophies/services/statistics.py +++ b/wger/trophies/services/statistics.py @@ -22,7 +22,6 @@ from typing import Optional # Django from django.contrib.auth.models import User -from django.db.models import Sum # wger from wger.manager.consts import WEIGHT_UNIT_LB diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 69d220c99..45cbfae2f 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -26,7 +26,6 @@ from typing import ( # Django from django.conf import settings from django.contrib.auth.models import User -from django.db.models import Q from django.utils import timezone # wger @@ -61,6 +60,7 @@ class TrophyService: Checks each active trophy the user hasn't earned yet using the appropriate checker class. Awards trophies where criteria are met. + Always re-evaluates repeatable trophies. Args: user: The user to evaluate trophies for @@ -71,14 +71,12 @@ class TrophyService: if cls.should_skip_user(user): return [] - # Get all active trophies the user hasn't earned - earned_trophy_ids = UserTrophy.objects.filter(user=user).values_list('trophy_id', flat=True) - unevaluated_trophies = Trophy.objects.filter(is_active=True).exclude( - id__in=earned_trophy_ids - ) + # Evaluate all active trophies. evaluate_trophy() will skip non-repeatable trophies + # the user already has, while repeatable trophies are always checked. + trophies = Trophy.objects.filter(is_active=True).order_by('order', 'name') awarded = [] - for trophy in unevaluated_trophies: + for trophy in trophies: user_trophy = cls.evaluate_trophy(user, trophy) if user_trophy: awarded.append(user_trophy) @@ -104,7 +102,10 @@ class TrophyService: return None # Check if already earned - if UserTrophy.objects.filter(user=user, trophy=trophy).exists(): + if ( + not trophy.is_repeatable + and UserTrophy.objects.filter(user=user, trophy=trophy).exists() + ): return None # Get the checker for this trophy @@ -115,7 +116,8 @@ class TrophyService: try: if checker.check(): - return cls.award_trophy(user, trophy, progress=100.0) + context = checker.get_context_data() + return cls.award_trophy(user, trophy, progress=100.0, context_data=context) except Exception as e: logger.error( f'Error checking trophy {trophy.name} for user {user.id}: {e}', exc_info=True @@ -124,7 +126,13 @@ class TrophyService: return None @classmethod - def award_trophy(cls, user: User, trophy: Trophy, progress: float = 100.0) -> UserTrophy: + def award_trophy( + cls, + user: User, + trophy: Trophy, + progress: float = 100.0, + context_data: Optional[dict] = None, + ) -> UserTrophy: """ Award a trophy to a user. @@ -134,15 +142,22 @@ class TrophyService: user: The user to award the trophy to trophy: The trophy to award progress: The progress value (default 100 for earned) + context_data: Additional information regarding the trophy awarded Returns: The created UserTrophy instance """ - user_trophy, created = UserTrophy.objects.get_or_create( - user=user, - trophy=trophy, - defaults={'progress': progress}, - ) + if trophy.is_repeatable: + created = True + user_trophy = UserTrophy.objects.create( + user=user, trophy=trophy, progress=progress, context_data=context_data + ) + else: + user_trophy, created = UserTrophy.objects.get_or_create( + user=user, + trophy=trophy, + defaults={'progress': progress, 'context_data': context_data}, + ) if created: logger.info(f'Awarded trophy "{trophy.name}" to user {user.username}') @@ -165,7 +180,12 @@ class TrophyService: ) @classmethod - def get_all_trophy_progress(cls, user: User, include_hidden: bool = False) -> List[Dict]: + def get_all_trophy_progress( + cls, + user: User, + include_hidden: bool = False, + include_repeatable: bool = False, + ) -> List[Dict]: """ Get all trophies with progress information for a user. @@ -175,6 +195,7 @@ class TrophyService: Args: user: The user to get trophy progress for include_hidden: If True, include hidden trophies even if not earned + include_repeatable: If True, include repeatable (PR) trophies Returns: List of dicts with trophy info and progress @@ -186,7 +207,11 @@ class TrophyService: # Get user's earned trophies earned = { - ut.trophy_id: ut for ut in UserTrophy.objects.filter(user=user).select_related('trophy') + ut.trophy_id: ut + for ut in UserTrophy.objects.filter( + user=user, + trophy__is_repeatable=include_repeatable, + ).select_related('trophy') } for trophy in trophies: @@ -220,7 +245,8 @@ class TrophyService: current = progress_data['current_value'] target = progress_data['target_value'] if current is not None and target is not None: - progress_data['progress_display'] = f'{current}/{target}' + progress_data['progress_display'] = checker.get_progress_display() + # progress_data['progress_display'] = f'{current}/{target}' except Exception as e: logger.error(f'Error getting progress for trophy {trophy.name}: {e}') diff --git a/wger/trophies/signals.py b/wger/trophies/signals.py index 0cf54e134..55aafe330 100644 --- a/wger/trophies/signals.py +++ b/wger/trophies/signals.py @@ -25,6 +25,7 @@ when workouts are logged, edited, or deleted. import logging # Django +from django.conf import settings from django.db.models.signals import ( post_delete, post_save, @@ -36,7 +37,11 @@ from wger.manager.models import ( WorkoutLog, WorkoutSession, ) +from wger.trophies.checkers.registry import CheckerRegistry +from wger.trophies.models.trophy import Trophy +from wger.trophies.models.user_trophy import UserTrophy from wger.trophies.services import UserStatisticsService +from wger.trophies.services.trophy import TrophyService from wger.trophies.tasks import evaluate_user_trophies_task @@ -49,10 +54,10 @@ def _trigger_trophy_evaluation(user_id: int): Uses Celery if available, otherwise evaluates synchronously. """ - try: + if settings.WGER_SETTINGS['USE_CELERY']: evaluate_user_trophies_task.delay(user_id) - except Exception: - # Celery not available - evaluate synchronously + else: + # Celery not available or configured - evaluate synchronously # Django from django.contrib.auth.models import User @@ -69,7 +74,7 @@ def _trigger_trophy_evaluation(user_id: int): @receiver(post_save, sender=WorkoutLog) -def workout_log_saved(sender, instance, created, **kwargs): +def workout_log_saved(sender, instance: WorkoutLog, created: bool, **kwargs): """ Handle WorkoutLog save events. @@ -87,6 +92,20 @@ def workout_log_saved(sender, instance, created, **kwargs): user=instance.user, workout_log=instance, ) + + # Personal Record award + trophy = Trophy.objects.get(name='Personal Record', is_active=True) + checker = CheckerRegistry.create_checker(instance.user, trophy) + checker.params = {'log': instance} + existing = UserTrophy.objects.filter( + user=instance.user, trophy=trophy, context_data__log_id=instance.id + ).exists() + if not existing and checker and checker.check(): + context = checker.get_context_data() + TrophyService.award_trophy( + instance.user, trophy, progress=100.0, context_data=context + ) + else: # Edited log - full recalculation for accuracy UserStatisticsService.update_statistics(instance.user) @@ -98,7 +117,7 @@ def workout_log_saved(sender, instance, created, **kwargs): @receiver(post_delete, sender=WorkoutLog) -def workout_log_deleted(sender, instance, **kwargs): +def workout_log_deleted(sender, instance: WorkoutLog, **kwargs): """ Handle WorkoutLog delete events. @@ -117,7 +136,7 @@ def workout_log_deleted(sender, instance, **kwargs): @receiver(post_save, sender=WorkoutSession) -def workout_session_saved(sender, instance, created, **kwargs): +def workout_session_saved(sender, instance: WorkoutSession, created: bool, **kwargs): """ Handle WorkoutSession save events. @@ -149,7 +168,7 @@ def workout_session_saved(sender, instance, created, **kwargs): @receiver(post_delete, sender=WorkoutSession) -def workout_session_deleted(sender, instance, **kwargs): +def workout_session_deleted(sender, instance: WorkoutSession, **kwargs): """ Handle WorkoutSession delete events. diff --git a/wger/trophies/static/trophies/count/0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f.png b/wger/trophies/static/trophies/count/0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f.png new file mode 100644 index 000000000..546fe139d Binary files /dev/null and b/wger/trophies/static/trophies/count/0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f.png differ diff --git a/wger/trophies/static/trophies/count/4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d.png b/wger/trophies/static/trophies/count/4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d.png new file mode 100644 index 000000000..0dd582ba3 Binary files /dev/null and b/wger/trophies/static/trophies/count/4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d.png differ diff --git a/wger/trophies/static/trophies/count/9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60.png b/wger/trophies/static/trophies/count/9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60.png new file mode 100644 index 000000000..48cab531e Binary files /dev/null and b/wger/trophies/static/trophies/count/9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60.png differ diff --git a/wger/trophies/static/trophies/count/a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c.png b/wger/trophies/static/trophies/count/a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c.png new file mode 100644 index 000000000..4ac773995 Binary files /dev/null and b/wger/trophies/static/trophies/count/a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c.png differ diff --git a/wger/trophies/static/trophies/count/d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b.png b/wger/trophies/static/trophies/count/d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b.png new file mode 100644 index 000000000..82e3d0e2b Binary files /dev/null and b/wger/trophies/static/trophies/count/d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b.png differ diff --git a/wger/trophies/static/trophies/count/e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a.png b/wger/trophies/static/trophies/count/e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a.png new file mode 100644 index 000000000..263f44b3d Binary files /dev/null and b/wger/trophies/static/trophies/count/e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a.png differ diff --git a/wger/trophies/static/trophies/count/f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b.png b/wger/trophies/static/trophies/count/f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b.png new file mode 100644 index 000000000..ed0a873c3 Binary files /dev/null and b/wger/trophies/static/trophies/count/f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b.png differ diff --git a/wger/trophies/static/trophies/date/31a71d9a-bf26-4f18-b82f-afefe6f50df2.png b/wger/trophies/static/trophies/date/31a71d9a-bf26-4f18-b82f-afefe6f50df2.png new file mode 100644 index 000000000..738bcb6b3 Binary files /dev/null and b/wger/trophies/static/trophies/date/31a71d9a-bf26-4f18-b82f-afefe6f50df2.png differ diff --git a/wger/trophies/static/trophies/other/32bb12da-b25f-4e18-81e4-b695eb65283e.png b/wger/trophies/static/trophies/other/32bb12da-b25f-4e18-81e4-b695eb65283e.png new file mode 100644 index 000000000..2fd9d3d45 Binary files /dev/null and b/wger/trophies/static/trophies/other/32bb12da-b25f-4e18-81e4-b695eb65283e.png differ diff --git a/wger/trophies/static/trophies/pr/d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e.png b/wger/trophies/static/trophies/pr/d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e.png new file mode 100644 index 000000000..7b3f2c7d0 Binary files /dev/null and b/wger/trophies/static/trophies/pr/d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e.png differ diff --git a/wger/trophies/static/trophies/promt.md b/wger/trophies/static/trophies/promt.md new file mode 100644 index 000000000..073f310b8 --- /dev/null +++ b/wger/trophies/static/trophies/promt.md @@ -0,0 +1,66 @@ +# Promt for generating trophy icons + +(these are the promts used to generate the trophy icons. As with everything AI, this can change +at any time in the future, so it's best to also just update one of the ones we already have so that +the design remains somewhat consistent) + +Available background shapes: + +* Circle (for basic trophies) +* Squircle (for special trophies) +* Shield (for milestone trophies) +* Star (for other trophies) +* Diamond (for other trophies) + + +## Promt + +You are an expert graphic designer specializing in creating trophy icons for fitness applications. +Your task is to design a set of visually appealing and easily recognizable trophy icons that +represent various fitness achievements. + +The icons should be modern, minimalist, and easily recognizable, even at smaller sizes. + +The icons should be consistent in style and color to create a cohesive set. + +Base shape (container): We're using solid, geometric shapes as the background, but not a hexagon, as it's already used in the app. + +Aesthetics: Flat design. No gradients, shadows, or textures. Clean edges, but friendly. + +Iconography: The icons inside are simplified, bold, and use clear metaphors (chains, weights, watches, etc.). + +Typography: Text within the icons should be avoided, numbers (e.g. "5000 kg") are ok though + +Color palette: Background shape: A fresh blue #2A4C7D. Text: white. +Other colors can be used for the icons inside to make them stand out and visually appealing. + +The following is a list of trophies we want: + +Group "number of workouts": +name: "Beginner", description: "Complete your first workout", type: "count", shape: "circle" +name: "Consistent", description: "Complete 10 workouts", type: "count", shape: "circle" +name: "Dedicated", description: "Complete 50 workouts", type: "count", shape: "circle" +name: "Obsessed", description: "Complete 100 workouts", type: "count", shape: "Squircle" +name: "Legend", description: "Complete 200 workouts", type: "count", shape: "Squircle" +name: "Veteran", description: "Complete 500 workouts", type: "count", shape: "Shield" +name: "Legend", description: "Complete 1000 workouts", type: "count", shape: "Shield" + +Group "workout streaks": +name: "Unstoppable", description: "Maintain a 30-day workout streak", type: "sequence", shape: "circle" + +Group "others": +name: "Weekend Warrior", description: "Work out on Saturday and Sunday for 4 consecutive weekends", type: "sequence", shape: "circle" +name: "Early Bird", description: "Complete a workout before 6:00 AM", type: "time", shape: "Diamond" +name: "Night Owl", description: "Complete a workout after 9:00 PM", type: "time", shape: "Diamond" +name: "New Year, New Me", description: "Work out on January 1st", type: "date", shape: "Star" +name: "Phoenix", description: "Return to training after being inactive for 30 days", type: "other", shape: "Star" +name: "Personal Record", description: "Repeatable Personal Record (PR) trophy", type: "pr", shape: "circle" + +Group "cumulative weight lifted": +name: "Elephant lifter", description: "Lift a cumulative total of 5.000 kg", type: "volume", shape: "circle" +name: "Bus lifter", description: "Lift a cumulative total of 20.000 kg", type: "volume", shape: "circle" +name: "Plane lifter", description: "Lift a cumulative total of 50.000 kg", type: "volume", shape: "Squircle" +name: "Blue whale lifter", description: "Lift a cumulative total of 150.000 kg", type: "volume", shape: "Squircle" +name: "Space Station lifter", description: "Lift a cumulative total of 450.000 kg", type: "volume", shape: "Shield" +name: "Millionaire", description: "Lift a cumulative total of 1.000.000 kg (that's a fully loaded space shuttle!)", type: "volume", shape: "Shield" +name: "Atlas", description: "Lift a cumulative total of 10.000.000 kg", type: "volume", shape: "Shield" diff --git a/wger/trophies/static/trophies/sequence/b605b6a1-953d-41fb-87c9-a2f88b5f5907.png b/wger/trophies/static/trophies/sequence/b605b6a1-953d-41fb-87c9-a2f88b5f5907.png new file mode 100644 index 000000000..b37ddc20e Binary files /dev/null and b/wger/trophies/static/trophies/sequence/b605b6a1-953d-41fb-87c9-a2f88b5f5907.png differ diff --git a/wger/trophies/static/trophies/sequence/bf60e051-a9a5-4bf5-ac4b-1aa713febca7.png b/wger/trophies/static/trophies/sequence/bf60e051-a9a5-4bf5-ac4b-1aa713febca7.png new file mode 100644 index 000000000..3bd63e7e7 Binary files /dev/null and b/wger/trophies/static/trophies/sequence/bf60e051-a9a5-4bf5-ac4b-1aa713febca7.png differ diff --git a/wger/trophies/static/trophies/time/2b00ff1e-69f8-47f0-b8df-976a4127a425.png b/wger/trophies/static/trophies/time/2b00ff1e-69f8-47f0-b8df-976a4127a425.png new file mode 100644 index 000000000..94cb3bf3c Binary files /dev/null and b/wger/trophies/static/trophies/time/2b00ff1e-69f8-47f0-b8df-976a4127a425.png differ diff --git a/wger/trophies/static/trophies/time/cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c.png b/wger/trophies/static/trophies/time/cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c.png new file mode 100644 index 000000000..2f45eca5f Binary files /dev/null and b/wger/trophies/static/trophies/time/cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c.png differ diff --git a/wger/trophies/static/trophies/volume/2c770528-3528-4f0a-9d1a-342d96935bdf.png b/wger/trophies/static/trophies/volume/2c770528-3528-4f0a-9d1a-342d96935bdf.png new file mode 100644 index 000000000..efdd67277 Binary files /dev/null and b/wger/trophies/static/trophies/volume/2c770528-3528-4f0a-9d1a-342d96935bdf.png differ diff --git a/wger/trophies/static/trophies/volume/3b4521ee-14bc-4a31-a3d8-e6859e183a35.png b/wger/trophies/static/trophies/volume/3b4521ee-14bc-4a31-a3d8-e6859e183a35.png new file mode 100644 index 000000000..31ebb4221 Binary files /dev/null and b/wger/trophies/static/trophies/volume/3b4521ee-14bc-4a31-a3d8-e6859e183a35.png differ diff --git a/wger/trophies/static/trophies/volume/3c53887b-feba-4d73-8022-e446f46395c8.png b/wger/trophies/static/trophies/volume/3c53887b-feba-4d73-8022-e446f46395c8.png new file mode 100644 index 000000000..b3c19f20f Binary files /dev/null and b/wger/trophies/static/trophies/volume/3c53887b-feba-4d73-8022-e446f46395c8.png differ diff --git a/wger/trophies/static/trophies/volume/5353989b-adc0-481b-a9bc-64365a9179e8.png b/wger/trophies/static/trophies/volume/5353989b-adc0-481b-a9bc-64365a9179e8.png new file mode 100644 index 000000000..2ec9b119e Binary files /dev/null and b/wger/trophies/static/trophies/volume/5353989b-adc0-481b-a9bc-64365a9179e8.png differ diff --git a/wger/trophies/static/trophies/volume/70ee1605-20b8-4c8d-87a1-3787b9b3939d.png b/wger/trophies/static/trophies/volume/70ee1605-20b8-4c8d-87a1-3787b9b3939d.png new file mode 100644 index 000000000..505752965 Binary files /dev/null and b/wger/trophies/static/trophies/volume/70ee1605-20b8-4c8d-87a1-3787b9b3939d.png differ diff --git a/wger/trophies/static/trophies/volume/e414c29d-5828-4ca3-83b5-4837a71ed48f.png b/wger/trophies/static/trophies/volume/e414c29d-5828-4ca3-83b5-4837a71ed48f.png new file mode 100644 index 000000000..09a16d63d Binary files /dev/null and b/wger/trophies/static/trophies/volume/e414c29d-5828-4ca3-83b5-4837a71ed48f.png differ diff --git a/wger/trophies/static/trophies/volume/f0a5fd12-2508-4654-89aa-3d6dbb29c7e3.png b/wger/trophies/static/trophies/volume/f0a5fd12-2508-4654-89aa-3d6dbb29c7e3.png new file mode 100644 index 000000000..22dfdb70d Binary files /dev/null and b/wger/trophies/static/trophies/volume/f0a5fd12-2508-4654-89aa-3d6dbb29c7e3.png differ diff --git a/wger/trophies/static/trophies/xn_convert.bat b/wger/trophies/static/trophies/xn_convert.bat new file mode 100644 index 000000000..d19d72cc6 --- /dev/null +++ b/wger/trophies/static/trophies/xn_convert.bat @@ -0,0 +1 @@ +nconvert -ratio -rtype lanczos -resize 800 800 -dither -colors 64 -out png -clevel 9 \ No newline at end of file diff --git a/wger/trophies/templates/trophies/overview.html b/wger/trophies/templates/trophies/overview.html new file mode 100644 index 000000000..be92f4601 --- /dev/null +++ b/wger/trophies/templates/trophies/overview.html @@ -0,0 +1,53 @@ +{% extends "base_wide.html" %} +{% load i18n static wger_extras %} + +{# #} +{# Title #} +{# #} +{% block title %}{% translate "Trophies" %}{% endblock %} + + +{# #} +{# Content #} +{# #} +{% block content %} +

    All trophies currently in the system

    + +
    +{% for trophy in trophy_list %} +
    +
    + ... +
    +
    + {% if not trophy.is_active %}{% endif %} + {{ trophy.name }} + {% if not trophy.is_active %}{% endif %} +
    +

    + {% if not trophy.is_active %}{% endif %} + {{ trophy.description }} + {% if not trophy.is_active %}{% endif %} +

    +
    +
      +
    • Type: {{ trophy.trophy_type }}
    • +
    • Hidden: {{ trophy.is_hidden }}
    • +
    • Progressive: {{ trophy.is_progressive }}
    • +
    + + +
    +
    +{% endfor %} +
    +{% endblock %} + + +{# #} +{# Options #} +{# #} +{% block options %} +{% endblock %} diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index d02f3fb0a..12bd7f1df 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -21,13 +21,17 @@ from django.contrib.auth.models import User # wger from wger.core.tests.base_testcase import WgerTestCase -from wger.trophies.checkers.count_based import CountBasedChecker +from wger.exercises.models.base import Exercise +from wger.exercises.models.category import ExerciseCategory +from wger.manager.models.log import WorkoutLog from wger.trophies.checkers.date_based import DateBasedChecker from wger.trophies.checkers.inactivity_return import InactivityReturnChecker +from wger.trophies.checkers.personal_record import PersonalRecordChecker from wger.trophies.checkers.streak import StreakChecker from wger.trophies.checkers.time_based import TimeBasedChecker from wger.trophies.checkers.volume import VolumeChecker from wger.trophies.checkers.weekend_warrior import WeekendWarriorChecker +from wger.trophies.checkers.workout_count_based import WorkoutCountBasedChecker from wger.trophies.models import ( Trophy, UserStatistics, @@ -55,7 +59,7 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 5 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertFalse(checker.check()) def test_check_achieved(self): @@ -63,7 +67,7 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 10 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertTrue(checker.check()) def test_check_exceeded(self): @@ -71,7 +75,7 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 15 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertTrue(checker.check()) def test_progress_calculation(self): @@ -79,7 +83,7 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 5 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertEqual(checker.get_progress(), 50.0) def test_progress_capped_at_100(self): @@ -87,7 +91,7 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 15 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertEqual(checker.get_progress(), 100.0) def test_get_current_value(self): @@ -95,12 +99,12 @@ class CountBasedCheckerTestCase(WgerTestCase): self.stats.total_workouts = 7 self.stats.save() - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertEqual(checker.get_current_value(), 7) def test_get_target_value(self): """Test getting target workout count""" - checker = CountBasedChecker(self.user, self.trophy, {'count': 10}) + checker = WorkoutCountBasedChecker(self.user, self.trophy, {'count': 10}) self.assertEqual(checker.get_target_value(), 10) @@ -485,3 +489,112 @@ class InactivityReturnCheckerTestCase(WgerTestCase): checker = InactivityReturnChecker(self.user, self.trophy, {'inactive_days': 30}) self.assertEqual(checker.get_progress(), 100.0) + + +class PersonalRecordCheckerTestCase(WgerTestCase): + def setUp(self): + super().setUp() + + self.user = User.objects.get(username='admin') + self.exercise = Exercise.objects.create(category=ExerciseCategory.objects.create(name='c3')) + + self.trophy, _ = Trophy.objects.get_or_create( + name='Personal Record', + defaults={ + 'trophy_type': Trophy.TYPE_OTHER, + 'checker_class': 'personal_record', + 'checker_params': {}, + 'is_active': True, + 'is_repeatable': True, + }, + ) + + def test_check_returns_false_with_no_logs(self): + checker = PersonalRecordChecker(self.user, self.trophy, {}) + self.assertFalse(checker.check()) + + def test_first_log_counts_as_pr(self): + log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) + + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + + self.assertTrue(checker.check()) + context = checker.get_context_data() + self.assertIsNotNone(context) + + def test_improvement_detected_and_context_values(self): + log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) + checker1 = PersonalRecordChecker(self.user, self.trophy, {'log': log1}) + self.assertTrue(checker1.check()) + + log2 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=110) + checker2 = PersonalRecordChecker(self.user, self.trophy, {'log': log2}) + self.assertTrue(checker2.check()) + + context = checker2.get_context_data() + self.assertIsNotNone(context) + + def no_award_if_not_an_improvement(self): + log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) + checker1 = PersonalRecordChecker(self.user, self.trophy, {'log': log1}) + self.assertTrue(checker1.check()) + + # lower weight + log2 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=90) + checker2 = PersonalRecordChecker(self.user, self.trophy, {'log': log2}) + self.assertFalse(checker2.check()) + + # same weight + log3 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) + checker3 = PersonalRecordChecker(self.user, self.trophy, {'log': log3}) + self.assertFalse(checker3.check()) + + # better weight but lower repetitions + log4 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=3, weight=110) + checker4 = PersonalRecordChecker(self.user, self.trophy, {'log': log4}) + self.assertFalse(checker4.check()) + + def test_estimate_1rm(self): + log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) + one_rm = round(100 * (36.0 / (37 - 10)), 2) + + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + estimate = checker._estimate_one_rep_max() + self.assertEqual(estimate, one_rm) + self.assertEqual(checker.get_context_data().get('one_rep_max_estimate'), one_rm) + + def test_estimate_1rm_with_rir(self): + log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100, rir=2) + one_rm = round(100 * (36.0 / (37 - 12)), 2) + + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + estimate = checker._estimate_one_rep_max() + self.assertEqual(estimate, one_rm) + self.assertEqual(checker.get_context_data().get('one_rep_max_estimate'), one_rm) + + def test_estimate_1rm_raises_on_missing_values(self): + # No log + checker = PersonalRecordChecker(self.user, self.trophy, {}) + with self.assertRaises(ValueError): + checker._estimate_one_rep_max() + + # Missing weight + log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10) + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + with self.assertRaises(ValueError): + checker._estimate_one_rep_max() + + # Missing repetitions + log = WorkoutLog(user=self.user, exercise=self.exercise, weight=100) + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + with self.assertRaises(ValueError): + checker._estimate_one_rep_max() + + context = checker.get_context_data() + self.assertIsNone(context.get('one_rep_max_estimate')) + + def test_estimate_1rm_raises_on_repetitions_37(self): + log = WorkoutLog(user=self.user, exercise=self.exercise, weight=100, repetitions=37) + checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) + with self.assertRaises(ValueError): + checker._estimate_one_rep_max() diff --git a/wger/trophies/tests/test_integration.py b/wger/trophies/tests/test_integration.py index 40ba8ebc6..1e1fbf91d 100644 --- a/wger/trophies/tests/test_integration.py +++ b/wger/trophies/tests/test_integration.py @@ -21,6 +21,8 @@ from django.contrib.auth.models import User # wger from wger.core.tests.base_testcase import WgerTestCase +from wger.exercises.models.base import Exercise +from wger.exercises.models.category import ExerciseCategory from wger.manager.models import ( WorkoutLog, WorkoutSession, @@ -61,7 +63,7 @@ class TrophyIntegrationTestCase(WgerTestCase): self.beginner_trophy = Trophy.objects.create( name='Beginner', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 1}, is_active=True, ) @@ -84,6 +86,15 @@ class TrophyIntegrationTestCase(WgerTestCase): is_progressive=True, ) + self.personal_record_trophy = Trophy.objects.create( + name='Personal Record', + trophy_type=Trophy.TYPE_OTHER, + checker_class='personal_record', + checker_params={}, + is_active=True, + is_repeatable=True, + ) + def test_first_workout_earns_beginner_trophy(self): """Test that completing first workout earns Beginner trophy""" # Create user statistics @@ -105,6 +116,49 @@ class TrophyIntegrationTestCase(WgerTestCase): self.assertEqual(len(awarded), 1) self.assertEqual(awarded[0].trophy, self.beginner_trophy) + def test_personal_record_not_awarded_if_no_pr(self): + """Only awards the Personal Record trophy if the log is a PR""" + UserTrophy.objects.filter(user=self.user).delete() + exercise = Exercise.objects.create(category=ExerciseCategory.objects.create(name='pr_cat')) + + # first log = PR + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=10, weight=100) + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 1) + + # not a PR + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=10, weight=100) + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 1) + + # not a PR + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=10, weight=90) + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 1) + + # not a PR + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=5, weight=101) + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 1) + + # PR + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=11, weight=100) + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 2) + + def test_personal_record_awarded_on_log_creation(self): + """Creating a new WorkoutLog which is a PR awards the Personal Record trophy""" + UserTrophy.objects.filter(user=self.user).delete() + + exercise = Exercise.objects.create(category=ExerciseCategory.objects.create(name='pr_cat')) + WorkoutLog.objects.create(user=self.user, exercise=exercise, repetitions=10, weight=100) + + pr_trophies = UserTrophy.objects.filter(user=self.user, trophy=self.personal_record_trophy) + self.assertEqual(pr_trophies.count(), 1) + + context = pr_trophies.first().context_data + self.assertIsNotNone(context) + def test_lifting_5000kg_earns_lifter_trophy(self): """Test that lifting 5000kg total earns Lifter trophy""" # Create user statistics @@ -252,7 +306,7 @@ class TrophyIntegrationTestCase(WgerTestCase): hidden_trophy = Trophy.objects.create( name='Secret Achievement', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 100}, is_active=True, is_hidden=True, diff --git a/wger/trophies/tests/test_models.py b/wger/trophies/tests/test_models.py index 23f24a614..5e752e649 100644 --- a/wger/trophies/tests/test_models.py +++ b/wger/trophies/tests/test_models.py @@ -63,6 +63,16 @@ class TrophyModelTestCase(WgerTestCase): self.assertEqual(trophy.order, 0) self.assertEqual(trophy.description, '') + def test_is_repeatable_defaults_to_false(self): + """Test the is_repeatable field defaults to False""" + trophy = Trophy.objects.create( + name='Repeatable Test Trophy', + trophy_type=Trophy.TYPE_OTHER, + checker_class='personal_record', + ) + + self.assertFalse(trophy.is_repeatable) + def test_trophy_str(self): """Test trophy string representation""" trophy = Trophy.objects.create( @@ -162,6 +172,9 @@ class UserTrophyModelTestCase(WgerTestCase): def setUp(self): super().setUp() self.user = User.objects.get(username='admin') + + UserTrophy.objects.filter(user=self.user).delete() + self.trophy = Trophy.objects.create( name='Test Trophy', trophy_type=Trophy.TYPE_COUNT, @@ -193,6 +206,48 @@ class UserTrophyModelTestCase(WgerTestCase): trophy=self.trophy, ) + def test_repeatable_trophy_earned_twice(self): + """Test a user can earn the same repeatable trophy twice""" + repeatable_trophy = Trophy.objects.create( + name='Repeatable Test', + trophy_type=Trophy.TYPE_OTHER, + checker_class='personal_record', + is_repeatable=True, + ) + + user_trophy_1 = UserTrophy.objects.create( + user=self.user, trophy=repeatable_trophy, context_data={'weight': 100, 'unit': 'kg'} + ) + + user_trophy_2 = UserTrophy.objects.create( + user=self.user, trophy=repeatable_trophy, context_data={'weight': 110, 'unit': 'kg'} + ) + + self.assertNotEqual(user_trophy_1, user_trophy_2) + self.assertEqual(UserTrophy.objects.filter(trophy=repeatable_trophy).count(), 2) + + def test_context_data_default_should_be_none(self): + """Test context_data default is None""" + user_trophy = UserTrophy.objects.create( + user=self.user, + trophy=self.trophy, + ) + + self.assertIsNone(user_trophy.context_data) + + def test_context_data(self): + """JSON data should be stored and retrieved correctly""" + data = {'pr_weight': 200, 'units': 'kg'} + user_trophy2 = UserTrophy.objects.create( + user=self.user, + trophy=Trophy.objects.create( + name='PR Test', trophy_type=Trophy.TYPE_OTHER, checker_class='personal_record' + ), + context_data=data, + ) + + self.assertEqual(user_trophy2.context_data, data) + def test_progress_field(self): """Test progress field for progressive trophies""" user_trophy = UserTrophy.objects.create( @@ -236,11 +291,11 @@ class UserTrophyModelTestCase(WgerTestCase): checker_class='volume', ) - user_trophy1 = UserTrophy.objects.create( + UserTrophy.objects.create( user=self.user, trophy=self.trophy, ) - user_trophy2 = UserTrophy.objects.create( + UserTrophy.objects.create( user=self.user, trophy=trophy2, ) diff --git a/wger/trophies/tests/test_overview.py b/wger/trophies/tests/test_overview.py new file mode 100644 index 000000000..f8dbab7b4 --- /dev/null +++ b/wger/trophies/tests/test_overview.py @@ -0,0 +1,45 @@ +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License + +# Standard Library +import logging + +# wger +from wger.core.tests.base_testcase import WgerAccessTestCase + + +logger = logging.getLogger(__name__) + + +class TrophiesOverviewTestCase(WgerAccessTestCase): + """ + Test case for the trophies overview page + """ + + url = 'trophies:admin-overview' + anonymous_fail = True + user_success = 'admin' + user_fail = ( + 'manager1', + 'manager2', + 'general_manager1', + 'manager3', + 'manager4', + 'test', + 'member1', + 'member2', + 'member3', + 'member4', + 'member5', + ) diff --git a/wger/trophies/tests/test_services.py b/wger/trophies/tests/test_services.py index 5f3e3b2e3..038ef06a5 100644 --- a/wger/trophies/tests/test_services.py +++ b/wger/trophies/tests/test_services.py @@ -129,7 +129,7 @@ class TrophyServiceTestCase(WgerTestCase): self.trophy = Trophy.objects.create( name='Test Trophy', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 1}, is_active=True, ) @@ -270,7 +270,7 @@ class TrophyServiceTestCase(WgerTestCase): hidden_trophy = Trophy.objects.create( name='Hidden', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 10}, is_hidden=True, is_active=True, @@ -287,7 +287,7 @@ class TrophyServiceTestCase(WgerTestCase): hidden_trophy = Trophy.objects.create( name='Hidden', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 1}, is_hidden=True, is_active=True, @@ -302,6 +302,23 @@ class TrophyServiceTestCase(WgerTestCase): hidden_in_list = any(p['trophy'].id == hidden_trophy.id for p in progress_list) self.assertTrue(hidden_in_list) + def test_award_pr_trophy_multiple_times(self): + """PR trophies can be awarded multiple times via TrophyService""" + pr_trophy, _ = Trophy.objects.get_or_create( + name='Personal Record', + defaults={'is_repeatable': True, 'is_active': True}, + ) + + ut1 = TrophyService.award_trophy( + self.user, pr_trophy, progress=100.0, context_data={'log_id': 1} + ) + ut2 = TrophyService.award_trophy( + self.user, pr_trophy, progress=100.0, context_data={'log_id': 2} + ) + + self.assertEqual(UserTrophy.objects.filter(user=self.user, trophy=pr_trophy).count(), 2) + self.assertNotEqual(ut1, ut2) + def test_should_skip_user_inactive(self): """Test skipping inactive users""" # Set user's last login to over 30 days ago @@ -362,7 +379,7 @@ class TrophyServiceTestCase(WgerTestCase): trophy2 = Trophy.objects.create( name='Trophy 2', trophy_type=Trophy.TYPE_COUNT, - checker_class='count_based', + checker_class='workout_count_based', checker_params={'count': 5}, is_active=True, ) diff --git a/wger/trophies/urls.py b/wger/trophies/urls.py new file mode 100644 index 000000000..bfd7a4f6c --- /dev/null +++ b/wger/trophies/urls.py @@ -0,0 +1,37 @@ +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License +# along with Workout Manager. If not, see . + +# Django +from django.urls import path + +# wger +from wger.core.views.react import ReactView + +# Local +from .views import TrophiesOverview + + +urlpatterns = [ + path( + '', + ReactView.as_view(), + name='overview', + ), + path( + 'admin', + TrophiesOverview.as_view(), + name='admin-overview', + ), +] diff --git a/wger/trophies/views.py b/wger/trophies/views.py new file mode 100644 index 000000000..09a17779c --- /dev/null +++ b/wger/trophies/views.py @@ -0,0 +1,48 @@ +# This file is part of wger Workout Manager. +# +# wger Workout Manager is free software: you can redistribute it and/or modify +# it under the terms of the GNU Affero General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# wger Workout Manager is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU Affero General Public License + +# Standard Library +import logging + +# Django +from django.contrib.auth.mixins import ( + LoginRequiredMixin, + PermissionRequiredMixin, +) +from django.views.generic import ListView + +# wger +from wger.trophies.models import Trophy + + +logger = logging.getLogger(__name__) + + +class TrophiesOverview(LoginRequiredMixin, PermissionRequiredMixin, ListView): + """ + All available trophies (even hidden ones). + + This is mainly to check that the descriptions, images, etc. are correct without having + to earn them. + """ + + model = Trophy + template_name = 'trophies/overview.html' + permission_required = 'trophies.change_trophy' + + def get_queryset(self): + """ + Return only the weight entries for the current user + """ + return Trophy.objects.all() diff --git a/wger/urls.py b/wger/urls.py index 9ef62fa50..de407d824 100644 --- a/wger/urls.py +++ b/wger/urls.py @@ -48,7 +48,7 @@ from wger.gallery.api import views as gallery_api_views from wger.manager.api import views as manager_api_views from wger.measurements.api import views as measurements_api_views from wger.nutrition.api import views as nutrition_api_views -# from wger.trophies.api import views as trophies_api_views +from wger.trophies.api import views as trophies_api_views from wger.utils.generic_views import TextTemplateView from wger.weight.api import views as weight_api_views @@ -251,13 +251,13 @@ router.register( ) # Trophies app -# router.register(r'trophy', trophies_api_views.TrophyViewSet, basename='trophy') -# router.register(r'user-trophy', trophies_api_views.UserTrophyViewSet, basename='user-trophy') -# router.register( -# r'user-statistics', -# trophies_api_views.UserStatisticsViewSet, -# basename='user-statistics', -# ) +router.register(r'trophy', trophies_api_views.TrophyViewSet, basename='trophy') +router.register(r'user-trophy', trophies_api_views.UserTrophyViewSet, basename='user-trophy') +router.register( + r'user-statistics', + trophies_api_views.UserStatisticsViewSet, + basename='user-statistics', +) # # Sitemaps @@ -279,6 +279,7 @@ urlpatterns = i18n_patterns( path('config/', include(('wger.config.urls', 'config'), namespace='config')), path('gym/', include(('wger.gym.urls', 'gym'), namespace='gym')), path('gallery/', include(('wger.gallery.urls', 'gallery'), namespace='gallery')), + path('trophies/', include(('wger.trophies.urls', 'trophies'), namespace='trophies')), path( 'measurement/', include(('wger.measurements.urls', 'measurements'), namespace='measurements'), diff --git a/wger/utils/tests/test_middleware.py b/wger/utils/tests/test_middleware.py index 2498c45a1..0ad6555f8 100644 --- a/wger/utils/tests/test_middleware.py +++ b/wger/utils/tests/test_middleware.py @@ -35,9 +35,6 @@ class RobotsExclusionMiddlewareTestCase(WgerTestCase): response = self.client.get(reverse('manager:routine:overview')) self.assertFalse(response.get('X-Robots-Tag')) - response = self.client.get(reverse('core:feedback')) - self.assertFalse(response.get('X-Robots-Tag')) - response = self.client.get(reverse('core:imprint')) self.assertFalse(response.get('X-Robots-Tag')) diff --git a/wger/version.py b/wger/version.py index b3079b8c1..9cf41d2db 100644 --- a/wger/version.py +++ b/wger/version.py @@ -25,7 +25,7 @@ logger = logging.getLogger(__name__) # For more details and possibilities, see: # https://packaging.python.org/en/latest/specifications/version-specifiers/ -MIN_APP_VERSION = Version('1.8.0') +MIN_APP_VERSION = Version('1.9.0') """ Minimum version of the mobile app required to access this server. @@ -35,7 +35,7 @@ Always use versions in the x.y.z format, without any suffixes like "beta1" or su MIN_SERVER_VERSION = Version('2.4.0-alpha2') """Minimum version of the server required to run sync commands on this server""" -VERSION = Version('2.4.0-alpha2') +VERSION = Version('2.5.0-alpha1') """Current version of the app""" diff --git a/wger/weight/models.py b/wger/weight/models.py index 04bccabc7..b160455e5 100644 --- a/wger/weight/models.py +++ b/wger/weight/models.py @@ -24,7 +24,6 @@ from django.core.validators import ( MinValueValidator, ) from django.db import models -from django.utils.translation import gettext_lazy as _ class WeightEntry(models.Model): @@ -32,16 +31,16 @@ class WeightEntry(models.Model): Model for a weight point """ - date = models.DateTimeField(verbose_name=_('Date')) + date = models.DateTimeField(verbose_name='Date') weight = models.DecimalField( - verbose_name=_('Weight'), + verbose_name='Weight', max_digits=5, decimal_places=2, validators=[MinValueValidator(Decimal(30)), MaxValueValidator(Decimal(600))], ) user = models.ForeignKey( User, - verbose_name=_('User'), + verbose_name='User', on_delete=models.CASCADE, ) """ @@ -59,7 +58,7 @@ class WeightEntry(models.Model): Metaclass to set some other properties """ - verbose_name = _('Weight entry') + verbose_name = 'Weight entry' ordering = [ 'date', ] diff --git a/wger/wsgi.py b/wger/wsgi.py index 66e7a914f..ee8e05834 100644 --- a/wger/wsgi.py +++ b/wger/wsgi.py @@ -21,7 +21,7 @@ import os from django.core.wsgi import get_wsgi_application -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.main') # This application object is used by any WSGI server configured to use this # file. This includes Django's development server, if the WSGI_APPLICATION