From b9699eed1cd78c3dd716dfd8aad9ce917b6d663f Mon Sep 17 00:00:00 2001 From: Justin Date: Tue, 16 Dec 2025 13:40:19 +0100 Subject: [PATCH 01/53] Revert "(Temporarily) deactivate the trophies app" This reverts commit 6ddf3c01c1766a86cf9eac2ee38d4e2cefbb503c. --- ... 0020_add_trophies_enabled_to_userprofile.py} | 0 wger/core/models/profile.py | 12 ++++++------ wger/settings_global.py | 2 +- wger/trophies/__init__.py | 0 wger/trophies/apps.py | 2 +- wger/urls.py | 16 ++++++++-------- 6 files changed, 16 insertions(+), 16 deletions(-) rename wger/core/migrations/{0020_add_trophies_enabled_to_userprofile.py.txt => 0020_add_trophies_enabled_to_userprofile.py} (100%) create mode 100644 wger/trophies/__init__.py 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 100% 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 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/settings_global.py b/wger/settings_global.py index e42391fb1..2414af271 100644 --- a/wger/settings_global.py +++ b/wger/settings_global.py @@ -65,7 +65,7 @@ INSTALLED_APPS = [ 'wger.weight', 'wger.gallery', 'wger.measurements', - # 'wger.trophies', + 'wger.trophies', # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', diff --git a/wger/trophies/__init__.py b/wger/trophies/__init__.py new file mode 100644 index 000000000..e69de29bb 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/urls.py b/wger/urls.py index badaaadd0..3eb8b99ee 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 From cd3b7b0960fdbb5a17d44ec8b953947f9ae06b7d Mon Sep 17 00:00:00 2001 From: Justin Date: Tue, 16 Dec 2025 18:24:00 +0100 Subject: [PATCH 02/53] Add repeatable trophies and context data to user trophies --- wger/trophies/README.md | 2 + wger/trophies/migrations/0001_initial.py | 3 +- ...y_is_repeatable_usertrophy_context_data.py | 23 ++++++++ wger/trophies/models/trophy.py | 7 +++ wger/trophies/models/user_trophy.py | 20 ++++++- wger/trophies/services/trophy.py | 18 +++--- wger/trophies/tests/test_models.py | 57 +++++++++++++++++++ 7 files changed, 119 insertions(+), 11 deletions(-) create mode 100644 wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py diff --git a/wger/trophies/README.md b/wger/trophies/README.md index f86b42b13..2d8b7dbac 100644 --- a/wger/trophies/README.md +++ b/wger/trophies/README.md @@ -54,6 +54,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 +67,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 diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 8388d0ee9..e4c99b050 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -293,8 +293,7 @@ class Migration(migrations.Migration): options={ 'verbose_name': 'User trophy', 'verbose_name_plural': 'User trophies', - 'ordering': ['-earned_at'], - 'unique_together': {('user', 'trophy')}, + 'ordering': ['-earned_at'] }, ), ] diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py new file mode 100644 index 000000000..1ab30018a --- /dev/null +++ b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py @@ -0,0 +1,23 @@ +# Generated by Django 5.2.9 on 2025-12-16 16:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('trophies', '0003_load_initial_trophies'), + ] + + operations = [ + migrations.AddField( + model_name='trophy', + name='is_repeatable', + field=models.BooleanField(default=False, help_text='If true, this trophy can be earned multiple times', verbose_name='Repeatable'), + ), + migrations.AddField( + model_name='usertrophy', + name='context_data', + field=models.JSONField(blank=True, default=None, help_text='Additional information concerning this trophy', null=True, verbose_name='Context data'), + ), + ] diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index a7463ab92..c12d5c91a 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -126,6 +126,13 @@ class Trophy(models.Model): ) """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'), diff --git a/wger/trophies/models/user_trophy.py b/wger/trophies/models/user_trophy.py index 3a8a4e353..53001b53e 100644 --- a/wger/trophies/models/user_trophy.py +++ b/wger/trophies/models/user_trophy.py @@ -20,7 +20,7 @@ from django.core.validators import ( MaxValueValidator, MinValueValidator, ) -from django.db import models +from django.db import IntegrityError, models from django.utils.translation import gettext_lazy as _ # Local @@ -70,11 +70,19 @@ class UserTrophy(models.Model): ) """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']] def __str__(self): return f'{self.user.username} - {self.trophy.name}' @@ -84,3 +92,11 @@ 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) \ No newline at end of file diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 69d220c99..91242733b 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -61,6 +61,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 @@ -73,7 +74,7 @@ class TrophyService: # 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( + unevaluated_trophies = Trophy.objects.filter(is_active=True, is_repeatable=False).exclude( id__in=earned_trophy_ids ) @@ -104,7 +105,7 @@ 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 @@ -138,11 +139,14 @@ class TrophyService: Returns: The created UserTrophy instance """ - user_trophy, created = UserTrophy.objects.get_or_create( - user=user, - trophy=trophy, - defaults={'progress': progress}, - ) + if trophy.is_repeatable: + user_trophy, created = UserTrophy.objects.create(user=user, trophy=trophy, progress=progress) + else: + user_trophy, created = UserTrophy.objects.get_or_create( + user=user, + trophy=trophy, + defaults={'progress': progress}, + ) if created: logger.info(f'Awarded trophy "{trophy.name}" to user {user.username}') diff --git a/wger/trophies/tests/test_models.py b/wger/trophies/tests/test_models.py index 23f24a614..d62a7d69e 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( @@ -193,6 +203,53 @@ 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.assertNotEquals(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( From d3d14f6ab7f73bbde3de3cf336f9f804f6e8ff9d Mon Sep 17 00:00:00 2001 From: Justin Date: Wed, 17 Dec 2025 20:56:58 +0100 Subject: [PATCH 03/53] Add Personal Record trophy awarded every time a PR is beaten and test cases --- wger/trophies/checkers/base.py | 11 ++ wger/trophies/checkers/personal_record.py | 143 ++++++++++++++++++ wger/trophies/checkers/registry.py | 5 +- .../management/commands/load_trophies.py | 11 ++ ...y_is_repeatable_usertrophy_context_data.py | 24 +++ wger/trophies/services/trophy.py | 26 ++-- wger/trophies/signals.py | 15 +- wger/trophies/tests/test_checkers.py | 118 +++++++++++++++ wger/trophies/tests/test_integration.py | 54 +++++++ wger/trophies/tests/test_models.py | 7 +- wger/trophies/tests/test_services.py | 13 ++ 11 files changed, 413 insertions(+), 14 deletions(-) create mode 100644 wger/trophies/checkers/personal_record.py diff --git a/wger/trophies/checkers/base.py b/wger/trophies/checkers/base.py index 613b9850f..d36a6e65e 100644 --- a/wger/trophies/checkers/base.py +++ b/wger/trophies/checkers/base.py @@ -124,5 +124,16 @@ 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 + def __repr__(self) -> str: return f'<{self.__class__.__name__}(user={self.user.username}, trophy={self.trophy.name})>' diff --git a/wger/trophies/checkers/personal_record.py b/wger/trophies/checkers/personal_record.py new file mode 100644 index 000000000..caf5f84ac --- /dev/null +++ b/wger/trophies/checkers/personal_record.py @@ -0,0 +1,143 @@ +# 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 . + +from typing import Optional + +from wger.trophies.models.trophy import Trophy +from wger.trophies.models.user_trophy import UserTrophy +from .base import BaseTrophyChecker + + +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): + """ + Brzycki's formula: 1RM = weight * (36 / (37 - repetitions)) + """ + log = self.params.get('log', None) + + if not log: raise ValueError("Log should not be None") + + weight = getattr(log, 'weight', None) + repetitions = getattr(log, 'repetitions', None) + + if weight is None: + raise ValueError("Weight should not be None") + if repetitions is None: + raise ValueError("Repetitions should not be None") + + try: + reps = int(repetitions) + except (TypeError, ValueError): + raise ValueError("Repetitions must be an integer") + + if reps == 37: + raise ValueError("In Brzycki's formula, repetitions cannot be equal to 37.") + + try: + w = float(weight) + except (TypeError, ValueError): + raise ValueError("Weight must be a number") + + return round(w * (36.0 / float(37 - reps)), 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 = self.params.get('log', None) + + if not log: + return None + + session = getattr(log, 'session', None) + exercise = getattr(log, 'exercise', None) + repetitions_unit = getattr(log, 'repetitions_unit', None) + weight_unit = getattr(log, 'weight_unit', None) + repetitions = getattr(log, 'repetitions', None) + weight = getattr(log, 'weight', None) + + try: + one_rm_estimate = self._estimate_one_rep_max() + except Exception as e: + print(f"PR estimation failed : {e}") + one_rm_estimate = None + + return { + 'log_id': getattr(log, 'id', None), + 'date': getattr(log, 'date', None).isoformat(), + 'session_id': getattr(session, 'id', None) if session else None, + 'exercise_id': getattr(exercise, 'id', None) if exercise else None, + 'repetitions_unit_id': getattr(repetitions_unit, 'id', None) if repetitions_unit else None, + 'repetitions': float(repetitions) if repetitions else None, + 'weight_unit_id': getattr(weight_unit, 'id', None) if weight_unit else None, + 'weight': float(weight) if weight else None, + 'iteration': getattr(log, 'iteration', None), + 'one_rep_max_estimate': one_rm_estimate + } + + def get_target_value(self) -> int: + return 'N/A' + + def get_current_value(self) -> int: + 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..bc96161bc 100644 --- a/wger/trophies/checkers/registry.py +++ b/wger/trophies/checkers/registry.py @@ -24,6 +24,7 @@ from typing import ( # Django from django.contrib.auth.models import User +from wger.trophies.models.trophy import Trophy # Local from .base import BaseTrophyChecker @@ -34,6 +35,7 @@ from .streak import StreakChecker from .time_based import TimeBasedChecker from .volume import VolumeChecker from .weekend_warrior import WeekendWarriorChecker +from .personal_record import PersonalRecordChecker logger = logging.getLogger(__name__) @@ -57,6 +59,7 @@ class CheckerRegistry: 'time_based': TimeBasedChecker, 'date_based': DateBasedChecker, 'inactivity_return': InactivityReturnChecker, + 'personal_record': PersonalRecordChecker, } @classmethod @@ -109,7 +112,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. diff --git a/wger/trophies/management/commands/load_trophies.py b/wger/trophies/management/commands/load_trophies.py index fee11214b..dcbd6a4f1 100644 --- a/wger/trophies/management/commands/load_trophies.py +++ b/wger/trophies/management/commands/load_trophies.py @@ -140,6 +140,17 @@ class Command(BaseCommand): 'is_progressive': False, 'order': 9, }, + { + 'name': _('Personal Record'), + 'description': _('Repeatable Personal Record (PR) trophy'), + 'trophy_type': Trophy.TYPE_OTHER, + 'checker_class': 'personal_record', + 'checker_params': {}, + 'is_hidden': True, + 'is_progressive': False, + 'is_repeatable': True, + 'order': 10, + }, ] created_count = 0 diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py index 1ab30018a..d1af1e7ab 100644 --- a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py +++ b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py @@ -9,6 +9,29 @@ class Migration(migrations.Migration): ('trophies', '0003_load_initial_trophies'), ] + def create_personal_record_trophy(apps, schema_editor): + Trophy = apps.get_model('trophies', 'Trophy') + + if not Trophy.objects.filter(name='Personal Record').exists(): + Trophy.objects.create( + name='Personal Record', + description='Repeatable Personal Record (PR) trophy', + trophy_type='other', + checker_class='personal_record', + checker_params={}, + is_hidden=True, + is_progressive=False, + is_repeatable=True, + order=10, + ) + + print(f'Trophy migration: Created trophy \'Personal Record\'') + + + def remove_personal_record_trophy(apps, schema_editor): + Trophy = apps.get_model('trophies', 'Trophy') + Trophy.objects.filter(name='Personal Record').delete() + operations = [ migrations.AddField( model_name='trophy', @@ -20,4 +43,5 @@ class Migration(migrations.Migration): name='context_data', field=models.JSONField(blank=True, default=None, help_text='Additional information concerning this trophy', null=True, verbose_name='Context data'), ), + migrations.RunPython(create_personal_record_trophy, remove_personal_record_trophy), ] diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 91242733b..3f52d91a8 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -72,14 +72,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, is_repeatable=False).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) @@ -116,7 +114,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 @@ -125,7 +124,7 @@ 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. @@ -135,17 +134,24 @@ 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 """ if trophy.is_repeatable: - user_trophy, created = UserTrophy.objects.create(user=user, trophy=trophy, progress=progress) + 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}, + defaults={'progress': progress, 'context_data': context_data}, ) if created: diff --git a/wger/trophies/signals.py b/wger/trophies/signals.py index 0cf54e134..068d4a510 100644 --- a/wger/trophies/signals.py +++ b/wger/trophies/signals.py @@ -36,7 +36,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 @@ -87,6 +91,16 @@ 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) @@ -96,7 +110,6 @@ def workout_log_saved(sender, instance, created, **kwargs): except Exception as e: logger.error(f'Error updating statistics for user {instance.user_id}: {e}', exc_info=True) - @receiver(post_delete, sender=WorkoutLog) def workout_log_deleted(sender, instance, **kwargs): """ diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index d02f3fb0a..81ddbb952 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -21,6 +21,9 @@ 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.log import WorkoutLog from wger.trophies.checkers.count_based import CountBasedChecker from wger.trophies.checkers.date_based import DateBasedChecker from wger.trophies.checkers.inactivity_return import InactivityReturnChecker @@ -485,3 +488,118 @@ 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): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + checker = PersonalRecordChecker(self.user, self.trophy, {}) + self.assertFalse(checker.check()) + + def test_first_log_counts_as_pr(self): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + 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): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + 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): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + 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): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + 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.assertEquals(estimate, one_rm) + self.assertEquals(checker.get_context_data().get("one_rep_max_estimate"), one_rm) + + def test_estimate_1rm_raises_on_missing_values(self): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + # 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): + from wger.trophies.checkers.personal_record import PersonalRecordChecker + + 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() + + \ No newline at end of file diff --git a/wger/trophies/tests/test_integration.py b/wger/trophies/tests/test_integration.py index 40ba8ebc6..c5a3833c4 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, @@ -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 diff --git a/wger/trophies/tests/test_models.py b/wger/trophies/tests/test_models.py index d62a7d69e..5a99aa845 100644 --- a/wger/trophies/tests/test_models.py +++ b/wger/trophies/tests/test_models.py @@ -172,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, @@ -293,11 +296,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_services.py b/wger/trophies/tests/test_services.py index 5f3e3b2e3..b8b87007d 100644 --- a/wger/trophies/tests/test_services.py +++ b/wger/trophies/tests/test_services.py @@ -302,6 +302,19 @@ 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.assertNotEquals(ut1, ut2) + def test_should_skip_user_inactive(self): """Test skipping inactive users""" # Set user's last login to over 30 days ago From 889c575a58abf7e2384d79d36ec168e3aabd8016 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 18 Dec 2025 18:45:20 +0100 Subject: [PATCH 04/53] Reformat code using ruff --- ...020_add_trophies_enabled_to_userprofile.py | 7 +++- wger/trophies/checkers/personal_record.py | 42 ++++++++++--------- wger/trophies/migrations/0001_initial.py | 2 +- ...y_is_repeatable_usertrophy_context_data.py | 18 +++++--- wger/trophies/models/user_trophy.py | 11 +++-- wger/trophies/services/trophy.py | 20 +++++---- wger/trophies/signals.py | 9 +++- wger/trophies/tests/test_checkers.py | 17 ++++---- wger/trophies/tests/test_integration.py | 2 +- wger/trophies/tests/test_models.py | 17 +++----- wger/trophies/tests/test_services.py | 10 +++-- 11 files changed, 91 insertions(+), 64 deletions(-) diff --git a/wger/core/migrations/0020_add_trophies_enabled_to_userprofile.py b/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 +++ 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/trophies/checkers/personal_record.py b/wger/trophies/checkers/personal_record.py index caf5f84ac..6b772b67a 100644 --- a/wger/trophies/checkers/personal_record.py +++ b/wger/trophies/checkers/personal_record.py @@ -27,7 +27,7 @@ class PersonalRecordChecker(BaseTrophyChecker): Used to detect when PRs are beaten and award trophies accordingly. - params: + params: log (WorkoutLog): workout log used to check if a PR was beaten. """ @@ -38,20 +38,21 @@ class PersonalRecordChecker(BaseTrophyChecker): """ log = self.params.get('log', None) - if not log: raise ValueError("Log should not be None") + if not log: + raise ValueError('Log should not be None') weight = getattr(log, 'weight', None) repetitions = getattr(log, 'repetitions', None) if weight is None: - raise ValueError("Weight should not be None") + raise ValueError('Weight should not be None') if repetitions is None: - raise ValueError("Repetitions should not be None") + raise ValueError('Repetitions should not be None') try: reps = int(repetitions) except (TypeError, ValueError): - raise ValueError("Repetitions must be an integer") + raise ValueError('Repetitions must be an integer') if reps == 37: raise ValueError("In Brzycki's formula, repetitions cannot be equal to 37.") @@ -59,29 +60,32 @@ class PersonalRecordChecker(BaseTrophyChecker): try: w = float(weight) except (TypeError, ValueError): - raise ValueError("Weight must be a number") + raise ValueError('Weight must be a number') return round(w * (36.0 / float(37 - reps)), 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") + 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() + 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') @@ -94,7 +98,6 @@ class PersonalRecordChecker(BaseTrophyChecker): return False return True - def get_progress(self) -> float: """Get progress as percentage.""" @@ -116,7 +119,7 @@ class PersonalRecordChecker(BaseTrophyChecker): try: one_rm_estimate = self._estimate_one_rep_max() except Exception as e: - print(f"PR estimation failed : {e}") + print(f'PR estimation failed : {e}') one_rm_estimate = None return { @@ -124,12 +127,14 @@ class PersonalRecordChecker(BaseTrophyChecker): 'date': getattr(log, 'date', None).isoformat(), 'session_id': getattr(session, 'id', None) if session else None, 'exercise_id': getattr(exercise, 'id', None) if exercise else None, - 'repetitions_unit_id': getattr(repetitions_unit, 'id', None) if repetitions_unit else None, + 'repetitions_unit_id': getattr(repetitions_unit, 'id', None) + if repetitions_unit + else None, 'repetitions': float(repetitions) if repetitions else None, 'weight_unit_id': getattr(weight_unit, 'id', None) if weight_unit else None, 'weight': float(weight) if weight else None, 'iteration': getattr(log, 'iteration', None), - 'one_rep_max_estimate': one_rm_estimate + 'one_rep_max_estimate': one_rm_estimate, } def get_target_value(self) -> int: @@ -140,4 +145,3 @@ class PersonalRecordChecker(BaseTrophyChecker): def get_progress_display(self) -> str: return 'N/A' - diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index e4c99b050..8670de75a 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -293,7 +293,7 @@ class Migration(migrations.Migration): options={ 'verbose_name': 'User trophy', 'verbose_name_plural': 'User trophies', - 'ordering': ['-earned_at'] + 'ordering': ['-earned_at'], }, ), ] diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py index d1af1e7ab..5710500ce 100644 --- a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py +++ b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py @@ -4,7 +4,6 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ ('trophies', '0003_load_initial_trophies'), ] @@ -25,8 +24,7 @@ class Migration(migrations.Migration): order=10, ) - print(f'Trophy migration: Created trophy \'Personal Record\'') - + print(f"Trophy migration: Created trophy 'Personal Record'") def remove_personal_record_trophy(apps, schema_editor): Trophy = apps.get_model('trophies', 'Trophy') @@ -36,12 +34,22 @@ class Migration(migrations.Migration): migrations.AddField( model_name='trophy', name='is_repeatable', - field=models.BooleanField(default=False, help_text='If true, this trophy can be earned multiple times', verbose_name='Repeatable'), + field=models.BooleanField( + default=False, + help_text='If true, this trophy can be earned multiple times', + verbose_name='Repeatable', + ), ), migrations.AddField( model_name='usertrophy', name='context_data', - field=models.JSONField(blank=True, default=None, help_text='Additional information concerning this trophy', null=True, verbose_name='Context data'), + field=models.JSONField( + blank=True, + default=None, + help_text='Additional information concerning this trophy', + null=True, + verbose_name='Context data', + ), ), migrations.RunPython(create_personal_record_trophy, remove_personal_record_trophy), ] diff --git a/wger/trophies/models/user_trophy.py b/wger/trophies/models/user_trophy.py index 53001b53e..02df3b548 100644 --- a/wger/trophies/models/user_trophy.py +++ b/wger/trophies/models/user_trophy.py @@ -95,8 +95,11 @@ class UserTrophy(models.Model): 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(): + 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) \ No newline at end of file + super().save(*args, **kwargs) diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 3f52d91a8..32790bc68 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -72,7 +72,7 @@ class TrophyService: if cls.should_skip_user(user): return [] - # Evaluate all active trophies. evaluate_trophy() will skip non-repeatable trophies + # 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') @@ -103,7 +103,10 @@ class TrophyService: return None # Check if already earned - if not trophy.is_repeatable and 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 @@ -124,7 +127,13 @@ class TrophyService: return None @classmethod - def award_trophy(cls, user: User, trophy: Trophy, progress: float = 100.0, context_data: Optional[dict]=None) -> 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. @@ -142,10 +151,7 @@ class TrophyService: if trophy.is_repeatable: created = True user_trophy = UserTrophy.objects.create( - user=user, - trophy=trophy, - progress=progress, - context_data=context_data + user=user, trophy=trophy, progress=progress, context_data=context_data ) else: user_trophy, created = UserTrophy.objects.get_or_create( diff --git a/wger/trophies/signals.py b/wger/trophies/signals.py index 068d4a510..a9e2dc891 100644 --- a/wger/trophies/signals.py +++ b/wger/trophies/signals.py @@ -96,10 +96,14 @@ def workout_log_saved(sender, instance, created, **kwargs): 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() + 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) + TrophyService.award_trophy( + instance.user, trophy, progress=100.0, context_data=context + ) else: # Edited log - full recalculation for accuracy @@ -110,6 +114,7 @@ def workout_log_saved(sender, instance, created, **kwargs): except Exception as e: logger.error(f'Error updating statistics for user {instance.user_id}: {e}', exc_info=True) + @receiver(post_delete, sender=WorkoutLog) def workout_log_deleted(sender, instance, **kwargs): """ diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index 81ddbb952..52ff8c8ea 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -489,6 +489,7 @@ 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() @@ -504,7 +505,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): 'checker_params': {}, 'is_active': True, 'is_repeatable': True, - } + }, ) def test_check_returns_false_with_no_logs(self): @@ -519,7 +520,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): 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) @@ -530,7 +531,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): 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()) @@ -544,7 +545,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): 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}) @@ -562,14 +563,14 @@ class PersonalRecordCheckerTestCase(WgerTestCase): def test_estimate_1rm(self): from wger.trophies.checkers.personal_record import PersonalRecordChecker - + 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.assertEquals(estimate, one_rm) - self.assertEquals(checker.get_context_data().get("one_rep_max_estimate"), one_rm) + self.assertEquals(checker.get_context_data().get('one_rep_max_estimate'), one_rm) def test_estimate_1rm_raises_on_missing_values(self): from wger.trophies.checkers.personal_record import PersonalRecordChecker @@ -592,7 +593,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): checker._estimate_one_rep_max() context = checker.get_context_data() - self.assertIsNone(context.get("one_rep_max_estimate")) + self.assertIsNone(context.get('one_rep_max_estimate')) def test_estimate_1rm_raises_on_repetitions_37(self): from wger.trophies.checkers.personal_record import PersonalRecordChecker @@ -601,5 +602,3 @@ class PersonalRecordCheckerTestCase(WgerTestCase): checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) with self.assertRaises(ValueError): checker._estimate_one_rep_max() - - \ No newline at end of file diff --git a/wger/trophies/tests/test_integration.py b/wger/trophies/tests/test_integration.py index c5a3833c4..dc5a4b258 100644 --- a/wger/trophies/tests/test_integration.py +++ b/wger/trophies/tests/test_integration.py @@ -120,7 +120,7 @@ class TrophyIntegrationTestCase(WgerTestCase): """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) diff --git a/wger/trophies/tests/test_models.py b/wger/trophies/tests/test_models.py index 5a99aa845..4708983da 100644 --- a/wger/trophies/tests/test_models.py +++ b/wger/trophies/tests/test_models.py @@ -209,28 +209,23 @@ class UserTrophyModelTestCase(WgerTestCase): 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, + name='Repeatable Test', + trophy_type=Trophy.TYPE_OTHER, checker_class='personal_record', - is_repeatable=True + is_repeatable=True, ) - + user_trophy_1 = UserTrophy.objects.create( - user=self.user, - trophy=repeatable_trophy, - context_data={"weight":100, "unit":"kg"} + 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"} + user=self.user, trophy=repeatable_trophy, context_data={'weight': 110, 'unit': 'kg'} ) self.assertNotEquals(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( diff --git a/wger/trophies/tests/test_services.py b/wger/trophies/tests/test_services.py index b8b87007d..9ce59e307 100644 --- a/wger/trophies/tests/test_services.py +++ b/wger/trophies/tests/test_services.py @@ -305,12 +305,16 @@ class TrophyServiceTestCase(WgerTestCase): 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", + 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}) + 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.assertNotEquals(ut1, ut2) From 4ad37773991817bcff8d04852d4c6fc590667890 Mon Sep 17 00:00:00 2001 From: Justin Date: Thu, 18 Dec 2025 20:11:56 +0100 Subject: [PATCH 05/53] update documentation --- wger/trophies/README.md | 9 ++++++++- .../0004_trophy_is_repeatable_usertrophy_context_data.py | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/wger/trophies/README.md b/wger/trophies/README.md index 2d8b7dbac..9b3c00382 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 @@ -120,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 @@ -533,7 +539,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 @@ -546,6 +552,7 @@ 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` diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py index 5710500ce..f4e709477 100644 --- a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py +++ b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): if not Trophy.objects.filter(name='Personal Record').exists(): Trophy.objects.create( name='Personal Record', - description='Repeatable Personal Record (PR) trophy', + description='Achieve a new Personal Record on any exercise', trophy_type='other', checker_class='personal_record', checker_params={}, From 64fc067c62c226585a709f0095ab1cf4415dc263 Mon Sep 17 00:00:00 2001 From: Justin Date: Fri, 19 Dec 2025 11:32:38 +0100 Subject: [PATCH 06/53] fix: resolve failing CI tests --- wger/trophies/tests/test_checkers.py | 4 ++-- wger/trophies/tests/test_models.py | 2 +- wger/trophies/tests/test_services.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index 52ff8c8ea..f083b91b1 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -569,8 +569,8 @@ class PersonalRecordCheckerTestCase(WgerTestCase): checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) estimate = checker._estimate_one_rep_max() - self.assertEquals(estimate, one_rm) - self.assertEquals(checker.get_context_data().get('one_rep_max_estimate'), one_rm) + 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): from wger.trophies.checkers.personal_record import PersonalRecordChecker diff --git a/wger/trophies/tests/test_models.py b/wger/trophies/tests/test_models.py index 4708983da..5e752e649 100644 --- a/wger/trophies/tests/test_models.py +++ b/wger/trophies/tests/test_models.py @@ -223,7 +223,7 @@ class UserTrophyModelTestCase(WgerTestCase): user=self.user, trophy=repeatable_trophy, context_data={'weight': 110, 'unit': 'kg'} ) - self.assertNotEquals(user_trophy_1, user_trophy_2) + 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): diff --git a/wger/trophies/tests/test_services.py b/wger/trophies/tests/test_services.py index 9ce59e307..64d69849e 100644 --- a/wger/trophies/tests/test_services.py +++ b/wger/trophies/tests/test_services.py @@ -317,7 +317,7 @@ class TrophyServiceTestCase(WgerTestCase): ) self.assertEqual(UserTrophy.objects.filter(user=self.user, trophy=pr_trophy).count(), 2) - self.assertNotEquals(ut1, ut2) + self.assertNotEqual(ut1, ut2) def test_should_skip_user_inactive(self): """Test skipping inactive users""" From 853ca50bfcc9f279798b946d67cc3c02b3f188aa Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 19 Dec 2025 13:29:10 +0100 Subject: [PATCH 07/53] Remove uploadable image path The images can simply be referenced by the trophy UUID. For the time being (and probably also in the future) there will be no admin UI for this, so adding or editing trophies will be done by hand. This also forces us to provide images for all the trophies. --- wger/trophies/api/serializers.py | 22 +++++++ wger/trophies/fixtures/initial_trophies.json | 63 ++++++++++++++++--- wger/trophies/migrations/0001_initial.py | 14 +---- .../migrations/0003_load_initial_trophies.py | 17 +++-- ...y_is_repeatable_usertrophy_context_data.py | 47 +++++++------- wger/trophies/models/trophy.py | 29 ++++----- 6 files changed, 128 insertions(+), 64 deletions(-) diff --git a/wger/trophies/api/serializers.py b/wger/trophies/api/serializers.py index 6bd3a0033..f94e62ddf 100644 --- a/wger/trophies/api/serializers.py +++ b/wger/trophies/api/serializers.py @@ -14,6 +14,12 @@ # 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 + # Third Party from rest_framework import serializers @@ -24,6 +30,8 @@ from wger.trophies.models import ( UserTrophy, ) +logger = logging.getLogger(__name__) + class TrophySerializer(serializers.ModelSerializer): """ @@ -32,6 +40,8 @@ class TrophySerializer(serializers.ModelSerializer): Shows trophy information for listing active trophies. """ + image = serializers.SerializerMethodField() + class Meta: model = Trophy fields = ( @@ -47,6 +57,18 @@ class TrophySerializer(serializers.ModelSerializer): ) read_only_fields = fields + def get_image(self, obj: Trophy): + """Build absolute URL to trophy image, if possible.""" + + static_url = static(obj.image_rel_path) + request = self.context.get('request') + if request is not None: + return request.build_absolute_uri(static_url) + + # no host available + logger.info('Cannot build absolute URL for trophy image without request context') + return None + class UserTrophySerializer(serializers.ModelSerializer): """ diff --git a/wger/trophies/fixtures/initial_trophies.json b/wger/trophies/fixtures/initial_trophies.json index cbeef12ff..1cb61b93c 100644 --- a/wger/trophies/fixtures/initial_trophies.json +++ b/wger/trophies/fixtures/initial_trophies.json @@ -3,6 +3,7 @@ "model": "trophies.trophy", "pk": 1, "fields": { + "uuid": "5362e55b-eaf1-4e34-9ef8-661538a3bdd9", "name": "Beginner", "description": "Complete your first workout", "trophy_type": "count", @@ -11,13 +12,16 @@ "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": "b605b6a1-953d-41fb-87c9-a2f88b5f5907", "name": "Unstoppable", "description": "Maintain a 30-day workout streak", "trophy_type": "sequence", @@ -26,13 +30,16 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 2 + "order": 2, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 3, "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,13 +48,16 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 3 + "order": 3, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 4, "fields": { + "uuid": "5353989b-adc0-481b-a9bc-64365a9179e8", "name": "Lifter", "description": "Lift a cumulative total of 5,000 kg", "trophy_type": "volume", @@ -56,13 +66,16 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 4 + "order": 4, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 5, "fields": { + "uuid": "3c53887b-feba-4d73-8022-e446f46395c8", "name": "Atlas", "description": "Lift a cumulative total of 100,000 kg", "trophy_type": "volume", @@ -71,13 +84,16 @@ "is_hidden": false, "is_progressive": true, "is_active": true, - "order": 5 + "order": 5, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 6, "fields": { + "uuid": "cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c", "name": "Early Bird", "description": "Complete a workout before 6:00 AM", "trophy_type": "time", @@ -86,13 +102,16 @@ "is_hidden": false, "is_progressive": false, "is_active": true, - "order": 6 + "order": 6, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 7, "fields": { + "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", "name": "Night Owl", "description": "Complete a workout after 9:00 PM", "trophy_type": "time", @@ -101,13 +120,16 @@ "is_hidden": false, "is_progressive": false, "is_active": true, - "order": 7 + "order": 7, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 8, "fields": { + "uuid": "31a71d9a-bf26-4f18-b82f-afefe6f50df2", "name": "New Year, New Me", "description": "Work out on January 1st", "trophy_type": "date", @@ -116,13 +138,16 @@ "is_hidden": false, "is_progressive": false, "is_active": true, - "order": 8 + "order": 8, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } }, { "model": "trophies.trophy", "pk": 9, "fields": { + "uuid": "32bb12da-b25f-4e18-81e4-b695eb65283e", "name": "Phoenix", "description": "Return to training after being inactive for 30 days", "trophy_type": "other", @@ -131,7 +156,27 @@ "is_hidden": true, "is_progressive": false, "is_active": true, - "order": 9 + "order": 9, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 10, + "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": 10, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" } } ] diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 8670de75a..5f10ceca3 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', diff --git a/wger/trophies/migrations/0003_load_initial_trophies.py b/wger/trophies/migrations/0003_load_initial_trophies.py index 67be18aa0..5b02d67fc 100644 --- a/wger/trophies/migrations/0003_load_initial_trophies.py +++ b/wger/trophies/migrations/0003_load_initial_trophies.py @@ -1,9 +1,11 @@ # 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 -def load_initial_trophies(apps, schema_editor): +def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): """ Load the initial set of 9 trophies. @@ -15,6 +17,7 @@ def load_initial_trophies(apps, schema_editor): # Define the initial trophies (same as in load_trophies management command) trophies_data = [ { + 'uuid': '5362e55b-eaf1-4e34-9ef8-661538a3bdd9', 'name': 'Beginner', 'description': 'Complete your first workout', 'trophy_type': 'count', @@ -25,6 +28,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 1, }, { + 'uuid': 'b605b6a1-953d-41fb-87c9-a2f88b5f5907', 'name': 'Unstoppable', 'description': 'Maintain a 30-day workout streak', 'trophy_type': 'sequence', @@ -35,6 +39,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 2, }, { + 'uuid': 'bf60e051-a9a5-4bf5-ac4b-1aa713febca7', 'name': 'Weekend Warrior', 'description': 'Work out on Saturday and Sunday for 4 consecutive weekends', 'trophy_type': 'sequence', @@ -45,6 +50,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 3, }, { + 'uuid': '5353989b-adc0-481b-a9bc-64365a9179e8', 'name': 'Lifter', 'description': 'Lift a cumulative total of 5,000 kg', 'trophy_type': 'volume', @@ -55,6 +61,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 4, }, { + 'uuid': '3c53887b-feba-4d73-8022-e446f46395c8', 'name': 'Atlas', 'description': 'Lift a cumulative total of 100,000 kg', 'trophy_type': 'volume', @@ -65,6 +72,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 5, }, { + 'uuid': 'cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c', 'name': 'Early Bird', 'description': 'Complete a workout before 6:00 AM', 'trophy_type': 'time', @@ -75,6 +83,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 6, }, { + 'uuid': '2b00ff1e-69f8-47f0-b8df-976a4127a425', 'name': 'Night Owl', 'description': 'Complete a workout after 9:00 PM', 'trophy_type': 'time', @@ -85,6 +94,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 7, }, { + 'uuid': '31a71d9a-bf26-4f18-b82f-afefe6f50df2', 'name': 'New Year, New Me', 'description': 'Work out on January 1st', 'trophy_type': 'date', @@ -95,6 +105,7 @@ def load_initial_trophies(apps, schema_editor): 'order': 8, }, { + 'uuid': '32bb12da-b25f-4e18-81e4-b695eb65283e', 'name': 'Phoenix', 'description': 'Return to training after being inactive for 30 days', 'trophy_type': 'other', @@ -117,11 +128,9 @@ def load_initial_trophies(apps, schema_editor): 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): +def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): """ Reverse migration - delete the initial trophies. diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py index f4e709477..cab623678 100644 --- a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py +++ b/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py @@ -1,6 +1,31 @@ # Generated by Django 5.2.9 on 2025-12-16 16:14 from django.db import migrations, models +from django.db.backends.base.schema import BaseDatabaseSchemaEditor +from django.db.migrations.state import StateApps + + +def create_personal_record_trophy(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + Trophy = apps.get_model('trophies', 'Trophy') + + if not Trophy.objects.filter(name='Personal Record').exists(): + Trophy.objects.create( + 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=10, + ) + + +def remove_personal_record_trophy(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): + Trophy = apps.get_model('trophies', 'Trophy') + Trophy.objects.filter(name='Personal Record').delete() class Migration(migrations.Migration): @@ -8,28 +33,6 @@ class Migration(migrations.Migration): ('trophies', '0003_load_initial_trophies'), ] - def create_personal_record_trophy(apps, schema_editor): - Trophy = apps.get_model('trophies', 'Trophy') - - if not Trophy.objects.filter(name='Personal Record').exists(): - Trophy.objects.create( - name='Personal Record', - description='Achieve a new Personal Record on any exercise', - trophy_type='other', - checker_class='personal_record', - checker_params={}, - is_hidden=True, - is_progressive=False, - is_repeatable=True, - order=10, - ) - - print(f"Trophy migration: Created trophy 'Personal Record'") - - def remove_personal_record_trophy(apps, schema_editor): - Trophy = apps.get_model('trophies', 'Trophy') - Trophy.objects.filter(name='Personal Record').delete() - operations = [ migrations.AddField( model_name='trophy', diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index c12d5c91a..d19acc901 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -22,14 +22,6 @@ 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): """ Model representing a trophy/achievement that users can earn @@ -40,6 +32,7 @@ class Trophy(models.Model): TYPE_COUNT = 'count' TYPE_SEQUENCE = 'sequence' TYPE_DATE = 'date' + TYPE_PR = 'pr' TYPE_OTHER = 'other' TROPHY_TYPES = ( @@ -48,6 +41,7 @@ class Trophy(models.Model): (TYPE_COUNT, _('Count-based')), (TYPE_SEQUENCE, _('Sequence-based')), (TYPE_DATE, _('Date-based')), + (TYPE_PR, _('Personal Record')), (TYPE_OTHER, _('Other')), ) @@ -56,14 +50,14 @@ 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'), ) - """The name of the trophy""" + """The user-facing name of the trophy""" description = models.TextField( verbose_name=_('Description'), @@ -73,14 +67,6 @@ class Trophy(models.Model): ) """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, @@ -165,3 +151,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 path to the trophy image + """ + return f'trophies/{self.trophy_type}/{self.uuid}.png' From a9d10db5ef96b24ec1e2dad93c05de844c33db6b Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 19 Dec 2025 15:10:14 +0100 Subject: [PATCH 08/53] Formatting --- wger/trophies/checkers/personal_record.py | 4 ++++ wger/trophies/checkers/registry.py | 4 +++- wger/trophies/models/user_trophy.py | 5 ++++- wger/trophies/services/trophy.py | 1 - wger/trophies/tests/test_checkers.py | 7 +++++++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/wger/trophies/checkers/personal_record.py b/wger/trophies/checkers/personal_record.py index 6b772b67a..6fc09f63c 100644 --- a/wger/trophies/checkers/personal_record.py +++ b/wger/trophies/checkers/personal_record.py @@ -14,10 +14,14 @@ # 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 Optional +# wger from wger.trophies.models.trophy import Trophy from wger.trophies.models.user_trophy import UserTrophy + +# Local from .base import BaseTrophyChecker diff --git a/wger/trophies/checkers/registry.py b/wger/trophies/checkers/registry.py index bc96161bc..426fc0382 100644 --- a/wger/trophies/checkers/registry.py +++ b/wger/trophies/checkers/registry.py @@ -24,6 +24,8 @@ from typing import ( # Django from django.contrib.auth.models import User + +# wger from wger.trophies.models.trophy import Trophy # Local @@ -31,11 +33,11 @@ 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 .personal_record import PersonalRecordChecker logger = logging.getLogger(__name__) diff --git a/wger/trophies/models/user_trophy.py b/wger/trophies/models/user_trophy.py index 02df3b548..f6687e577 100644 --- a/wger/trophies/models/user_trophy.py +++ b/wger/trophies/models/user_trophy.py @@ -20,7 +20,10 @@ from django.core.validators import ( MaxValueValidator, MinValueValidator, ) -from django.db import IntegrityError, models +from django.db import ( + IntegrityError, + models, +) from django.utils.translation import gettext_lazy as _ # Local diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 32790bc68..999f92e8c 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 diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index f083b91b1..032d07a74 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -509,12 +509,14 @@ class PersonalRecordCheckerTestCase(WgerTestCase): ) def test_check_returns_false_with_no_logs(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker checker = PersonalRecordChecker(self.user, self.trophy, {}) self.assertFalse(checker.check()) def test_first_log_counts_as_pr(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) @@ -526,6 +528,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNotNone(context) def test_improvement_detected_and_context_values(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) @@ -540,6 +543,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNotNone(context) def no_award_if_not_an_improvement(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) @@ -562,6 +566,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertFalse(checker4.check()) def test_estimate_1rm(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) @@ -573,6 +578,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertEqual(checker.get_context_data().get('one_rep_max_estimate'), one_rm) def test_estimate_1rm_raises_on_missing_values(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker # No log @@ -596,6 +602,7 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNone(context.get('one_rep_max_estimate')) def test_estimate_1rm_raises_on_repetitions_37(self): + # wger from wger.trophies.checkers.personal_record import PersonalRecordChecker log = WorkoutLog(user=self.user, exercise=self.exercise, weight=100, repetitions=37) From 0d99062ed96cf4cdac20f077996c584c9e0bf33d Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 19 Dec 2025 15:11:55 +0100 Subject: [PATCH 09/53] Remove command to load trophies We don't need to reinvent the wheel and can just use django's loaddata for the time being, even if it can potentially overwrite local entries. --- wger/trophies/README.md | 14 +- .../management/commands/load_trophies.py | 201 ------------------ 2 files changed, 4 insertions(+), 211 deletions(-) delete mode 100644 wger/trophies/management/commands/load_trophies.py diff --git a/wger/trophies/README.md b/wger/trophies/README.md index 9b3c00382..336882202 100644 --- a/wger/trophies/README.md +++ b/wger/trophies/README.md @@ -123,7 +123,7 @@ Trophy checkers are Python classes that determine if a user has earned a trophy. - Example: "Return to training after 30 days inactive" 8. **personal_record**: Check for new PRs - - Params: ``{'log': WorkoutLog}` + - Params: `{'log': WorkoutLog}` - Example: "Beats PR on exercise 'Bench Press Dumbells' by logging 100kg for 10 reps." ## Management Commands @@ -133,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 @@ -554,7 +548,7 @@ The system includes 10 initial trophies. 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/management/commands/load_trophies.py b/wger/trophies/management/commands/load_trophies.py deleted file mode 100644 index dcbd6a4f1..000000000 --- a/wger/trophies/management/commands/load_trophies.py +++ /dev/null @@ -1,201 +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, - }, - { - 'name': _('Personal Record'), - 'description': _('Repeatable Personal Record (PR) trophy'), - 'trophy_type': Trophy.TYPE_OTHER, - 'checker_class': 'personal_record', - 'checker_params': {}, - 'is_hidden': True, - 'is_progressive': False, - 'is_repeatable': True, - 'order': 10, - }, - ] - - 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)}' - ) - ) From dbb10ba92fcc4a33a5b127217fc90f83836b9c64 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 19 Dec 2025 22:11:42 +0100 Subject: [PATCH 10/53] Add urls for trophy overview --- wger/trophies/urls.py | 28 ++++++++++++++++++++++++++++ wger/urls.py | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 wger/trophies/urls.py diff --git a/wger/trophies/urls.py b/wger/trophies/urls.py new file mode 100644 index 000000000..35434a0ff --- /dev/null +++ b/wger/trophies/urls.py @@ -0,0 +1,28 @@ +# 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 re_path + +# wger +from wger.core.views.react import ReactView + +urlpatterns = [ + re_path( + '', + ReactView.as_view(), + name='overview', + ), +] diff --git a/wger/urls.py b/wger/urls.py index 3eb8b99ee..fefe77d5a 100644 --- a/wger/urls.py +++ b/wger/urls.py @@ -52,7 +52,6 @@ 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 - # # REST API # @@ -279,6 +278,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'), From 3baf23b62b1c233f629ebdb07d763ec44b8d9e0a Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 19 Dec 2025 22:12:38 +0100 Subject: [PATCH 11/53] Pass the request to the serializer Otherwise, the url path for the images can't be constructed --- wger/trophies/api/serializers.py | 3 +-- wger/trophies/api/views.py | 8 +++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/wger/trophies/api/serializers.py b/wger/trophies/api/serializers.py index f94e62ddf..bab681a46 100644 --- a/wger/trophies/api/serializers.py +++ b/wger/trophies/api/serializers.py @@ -60,10 +60,9 @@ class TrophySerializer(serializers.ModelSerializer): def get_image(self, obj: Trophy): """Build absolute URL to trophy image, if possible.""" - static_url = static(obj.image_rel_path) request = self.context.get('request') if request is not None: - return request.build_absolute_uri(static_url) + 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') diff --git a/wger/trophies/api/views.py b/wger/trophies/api/views.py index d46e7834e..c3e9723aa 100644 --- a/wger/trophies/api/views.py +++ b/wger/trophies/api/views.py @@ -126,7 +126,13 @@ class TrophyViewSet(viewsets.ReadOnlyModelViewSet): include_hidden=include_hidden, ) - 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) From 635ac0241d6bc09f9187742c243a2829c79f0705 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 20 Dec 2025 20:05:46 +0100 Subject: [PATCH 12/53] Use the celery setting to control how to perform the calculations --- wger/trophies/signals.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/wger/trophies/signals.py b/wger/trophies/signals.py index a9e2dc891..749281e85 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, @@ -43,7 +44,6 @@ from wger.trophies.services import UserStatisticsService from wger.trophies.services.trophy import TrophyService from wger.trophies.tasks import evaluate_user_trophies_task - logger = logging.getLogger(__name__) @@ -53,10 +53,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 @@ -73,7 +73,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. @@ -116,7 +116,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. @@ -135,7 +135,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. @@ -167,7 +167,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. From 99352beaf47b9542341e79ad2cd2f480a97ef2f2 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 21 Dec 2025 14:17:54 +0100 Subject: [PATCH 13/53] Don't translate the trophy model info This is not shown in the UI so it's not necessary. However, we extract the names and descriptions and translate that over the API so that there's only one place where these need to be translated. --- wger/core/management/commands/extract-i18n.py | 8 +++ wger/trophies/api/serializers.py | 12 ++++ wger/trophies/models/trophy.py | 59 +++++++++---------- wger/trophies/models/user_statistics.py | 53 ++++++++--------- wger/trophies/models/user_trophy.py | 25 ++++---- wger/trophies/services/statistics.py | 1 - 6 files changed, 87 insertions(+), 71 deletions(-) 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/trophies/api/serializers.py b/wger/trophies/api/serializers.py index bab681a46..120947fa3 100644 --- a/wger/trophies/api/serializers.py +++ b/wger/trophies/api/serializers.py @@ -19,6 +19,7 @@ import logging # Django from django.templatetags.static import static +from django.utils.translation import gettext as _ # Third Party from rest_framework import serializers @@ -30,6 +31,7 @@ from wger.trophies.models import ( UserTrophy, ) + logger = logging.getLogger(__name__) @@ -41,6 +43,8 @@ class TrophySerializer(serializers.ModelSerializer): """ image = serializers.SerializerMethodField() + name = serializers.SerializerMethodField() + description = serializers.SerializerMethodField() class Meta: model = Trophy @@ -57,6 +61,14 @@ class TrophySerializer(serializers.ModelSerializer): ) 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.""" diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index d19acc901..8882b8850 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -19,7 +19,6 @@ import uuid # Django from django.db import models -from django.utils.translation import gettext_lazy as _ class Trophy(models.Model): @@ -36,13 +35,13 @@ class Trophy(models.Model): 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_PR, _('Personal Record')), - (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( @@ -54,14 +53,14 @@ class Trophy(models.Model): 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 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='', ) @@ -71,58 +70,58 @@ class Trophy(models.Model): 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'), + 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""" @@ -140,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 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 f6687e577..5131707fa 100644 --- a/wger/trophies/models/user_trophy.py +++ b/wger/trophies/models/user_trophy.py @@ -24,7 +24,6 @@ from django.db import ( IntegrityError, models, ) -from django.utils.translation import gettext_lazy as _ # Local from .trophy import Trophy @@ -39,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""" @@ -47,29 +46,29 @@ 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)""" @@ -77,15 +76,15 @@ class UserTrophy(models.Model): blank=True, null=True, default=None, - verbose_name=_('Context data'), - help_text=_('Additional information concerning this trophy'), + 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') + verbose_name = 'User trophy' + verbose_name_plural = 'User trophies' def __str__(self): return f'{self.user.username} - {self.trophy.name}' 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 From 33064146fe3ea25877357aa0463d564a98d903a4 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 21 Dec 2025 14:22:37 +0100 Subject: [PATCH 14/53] Commit placeholder image --- wger/trophies/models/trophy.py | 3 ++- wger/trophies/static/trophies/placeholder.png | Bin 0 -> 42147 bytes 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 wger/trophies/static/trophies/placeholder.png diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index 8882b8850..693b01cd9 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -156,4 +156,5 @@ class Trophy(models.Model): """ Returns the relative path to the trophy image """ - return f'trophies/{self.trophy_type}/{self.uuid}.png' + return 'trophies/placeholder.png' + # return f'trophies/{self.trophy_type}/{self.uuid}.png' diff --git a/wger/trophies/static/trophies/placeholder.png b/wger/trophies/static/trophies/placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..c7ff8a4cb819e2bae1885f30bcb13accb9998b37 GIT binary patch literal 42147 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ཌmAhV5@O1{MTm{bb60#fiI$ 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 literal 0 HcmV?d00001 From 69436eb98c0b2c4596c3268b5a9318b14913cded Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 21 Dec 2025 14:38:52 +0100 Subject: [PATCH 15/53] Consolidate migrations --- wger/trophies/migrations/0001_initial.py | 9 ++++++++ .../0002_add_last_complete_weekend_date.py | 22 ------------------- ...phies.py => 0002_load_initial_trophies.py} | 21 ++++++------------ ...ontext_data.py => 0004_add_pr_trophies.py} | 2 +- 4 files changed, 17 insertions(+), 37 deletions(-) delete mode 100644 wger/trophies/migrations/0002_add_last_complete_weekend_date.py rename wger/trophies/migrations/{0003_load_initial_trophies.py => 0002_load_initial_trophies.py} (91%) rename wger/trophies/migrations/{0004_trophy_is_repeatable_usertrophy_context_data.py => 0004_add_pr_trophies.py} (97%) diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 5f10ceca3..e183baea3 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -220,6 +220,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', 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/0003_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py similarity index 91% rename from wger/trophies/migrations/0003_load_initial_trophies.py rename to wger/trophies/migrations/0002_load_initial_trophies.py index 5b02d67fc..992c1efc8 100644 --- a/wger/trophies/migrations/0003_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -9,8 +9,8 @@ def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit """ Load the initial set of 9 trophies. - This migration is idempotent - it will skip trophies that already exist - based on the trophy name. + This migration almost idempotent - it will update trophies that already exist + based on the trophy UUID. """ Trophy = apps.get_model('trophies', 'Trophy') @@ -117,18 +117,11 @@ def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit }, ] - 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 - - + Trophy.objects.update_or_create( + name=trophy_data['uuid'], + defaults=trophy_data + ) def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): """ @@ -158,7 +151,7 @@ def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit class Migration(migrations.Migration): dependencies = [ - ('trophies', '0002_add_last_complete_weekend_date'), + ('trophies', '0001_initial'), ] operations = [ diff --git a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py b/wger/trophies/migrations/0004_add_pr_trophies.py similarity index 97% rename from wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py rename to wger/trophies/migrations/0004_add_pr_trophies.py index cab623678..2f0601f43 100644 --- a/wger/trophies/migrations/0004_trophy_is_repeatable_usertrophy_context_data.py +++ b/wger/trophies/migrations/0004_add_pr_trophies.py @@ -30,7 +30,7 @@ def remove_personal_record_trophy(apps: StateApps, schema_editor: BaseDatabaseSc class Migration(migrations.Migration): dependencies = [ - ('trophies', '0003_load_initial_trophies'), + ('trophies', '0002_load_initial_trophies'), ] operations = [ From 939ff94cd4e7d6b6092b206c7be2d68f3ef4e623 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Mon, 22 Dec 2025 13:55:13 +0100 Subject: [PATCH 16/53] Add some filtersets --- wger/trophies/api/filtersets.py | 7 ++++++- wger/trophies/api/serializers.py | 2 ++ wger/trophies/api/views.py | 7 ++++--- wger/trophies/services/trophy.py | 15 ++++++++++++--- 4 files changed, 24 insertions(+), 7 deletions(-) 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 120947fa3..bf5e073e2 100644 --- a/wger/trophies/api/serializers.py +++ b/wger/trophies/api/serializers.py @@ -57,6 +57,7 @@ class TrophySerializer(serializers.ModelSerializer): 'trophy_type', 'is_hidden', 'is_progressive', + 'is_repeatable', 'order', ) read_only_fields = fields @@ -98,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 c3e9723aa..675b79fcb 100644 --- a/wger/trophies/api/views.py +++ b/wger/trophies/api/views.py @@ -121,17 +121,18 @@ 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, - # Important: provide request in context for image URL building - context={'request': request} + context={'request': request}, ) return Response(serializer.data) @@ -151,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/services/trophy.py b/wger/trophies/services/trophy.py index 999f92e8c..5cbc229cd 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -35,7 +35,6 @@ from wger.trophies.models import ( UserTrophy, ) - logger = logging.getLogger(__name__) # Trophy settings from WGER_SETTINGS (defined in settings_global.py) @@ -180,7 +179,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. @@ -190,6 +194,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 @@ -201,7 +206,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: From c0a379ab542f66ccaaa6175e38ebabe9e4336b49 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Mon, 22 Dec 2025 14:46:52 +0100 Subject: [PATCH 17/53] Fold migration files --- wger/trophies/migrations/0001_initial.py | 36 +++++++++--- .../migrations/0002_load_initial_trophies.py | 19 ++++-- .../migrations/0004_add_pr_trophies.py | 58 ------------------- 3 files changed, 42 insertions(+), 71 deletions(-) delete mode 100644 wger/trophies/migrations/0004_add_pr_trophies.py diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index e183baea3..437630179 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -100,6 +100,14 @@ class Migration(migrations.Migration): verbose_name='Active', ), ), + ( + 'is_repeatable', + models.BooleanField( + default=True, + help_text='If true, this trophy can be earned multiple times', + verbose_name='Repeatable', + ), + ), ( 'order', models.PositiveIntegerField( @@ -227,8 +235,8 @@ class Migration(migrations.Migration): 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', @@ -244,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( @@ -282,13 +299,14 @@ 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', + ) ), ], options={ diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py index 992c1efc8..0c11d0d1d 100644 --- a/wger/trophies/migrations/0002_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -115,13 +115,23 @@ def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit 'is_progressive': False, 'order': 9, }, + { + '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': 9, + }, ] for trophy_data in trophies_data: - Trophy.objects.update_or_create( - name=trophy_data['uuid'], - defaults=trophy_data - ) + Trophy.objects.update_or_create(uuid=trophy_data['uuid'], defaults=trophy_data) + def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): """ @@ -142,6 +152,7 @@ def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit 'Night Owl', 'New Year, New Me', 'Phoenix', + 'Personal Record', ] deleted_count = Trophy.objects.filter(name__in=trophy_names).delete()[0] diff --git a/wger/trophies/migrations/0004_add_pr_trophies.py b/wger/trophies/migrations/0004_add_pr_trophies.py deleted file mode 100644 index 2f0601f43..000000000 --- a/wger/trophies/migrations/0004_add_pr_trophies.py +++ /dev/null @@ -1,58 +0,0 @@ -# Generated by Django 5.2.9 on 2025-12-16 16:14 - -from django.db import migrations, models -from django.db.backends.base.schema import BaseDatabaseSchemaEditor -from django.db.migrations.state import StateApps - - -def create_personal_record_trophy(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): - Trophy = apps.get_model('trophies', 'Trophy') - - if not Trophy.objects.filter(name='Personal Record').exists(): - Trophy.objects.create( - 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=10, - ) - - -def remove_personal_record_trophy(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): - Trophy = apps.get_model('trophies', 'Trophy') - Trophy.objects.filter(name='Personal Record').delete() - - -class Migration(migrations.Migration): - dependencies = [ - ('trophies', '0002_load_initial_trophies'), - ] - - operations = [ - migrations.AddField( - model_name='trophy', - name='is_repeatable', - field=models.BooleanField( - default=False, - help_text='If true, this trophy can be earned multiple times', - verbose_name='Repeatable', - ), - ), - migrations.AddField( - model_name='usertrophy', - name='context_data', - field=models.JSONField( - blank=True, - default=None, - help_text='Additional information concerning this trophy', - null=True, - verbose_name='Context data', - ), - ), - migrations.RunPython(create_personal_record_trophy, remove_personal_record_trophy), - ] From 4dfa712b91d171432cbe03b51e0280e84b3d224e Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Mon, 22 Dec 2025 16:43:09 +0100 Subject: [PATCH 18/53] Start refining the trophy values --- wger/trophies/fixtures/initial_trophies.json | 164 +++++++--- wger/trophies/migrations/0001_initial.py | 2 +- .../migrations/0002_load_initial_trophies.py | 289 ++++++++++-------- 3 files changed, 290 insertions(+), 165 deletions(-) diff --git a/wger/trophies/fixtures/initial_trophies.json b/wger/trophies/fixtures/initial_trophies.json index 1cb61b93c..e3c2d880a 100644 --- a/wger/trophies/fixtures/initial_trophies.json +++ b/wger/trophies/fixtures/initial_trophies.json @@ -58,8 +58,8 @@ "pk": 4, "fields": { "uuid": "5353989b-adc0-481b-a9bc-64365a9179e8", - "name": "Lifter", - "description": "Lift a cumulative total of 5,000 kg", + "name": "Elephant lifter", + "description": "Lift a cumulative total of 5.000 kg", "trophy_type": "volume", "checker_class": "volume", "checker_params": {"kg": 5000}, @@ -76,11 +76,11 @@ "pk": 5, "fields": { "uuid": "3c53887b-feba-4d73-8022-e446f46395c8", - "name": "Atlas", - "description": "Lift a cumulative total of 100,000 kg", + "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, @@ -93,14 +93,14 @@ "model": "trophies.trophy", "pk": 6, "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_progressive": false, + "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": 6, "created": "2025-12-19T00:00:00Z", @@ -111,14 +111,14 @@ "model": "trophies.trophy", "pk": 7, "fields": { - "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", - "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, + "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": 7, "created": "2025-12-19T00:00:00Z", @@ -129,14 +129,14 @@ "model": "trophies.trophy", "pk": 8, "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_progressive": false, + "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": 8, "created": "2025-12-19T00:00:00Z", @@ -147,14 +147,14 @@ "model": "trophies.trophy", "pk": 9, "fields": { - "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}, + "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": false, + "is_progressive": true, "is_active": true, "order": 9, "created": "2025-12-19T00:00:00Z", @@ -164,6 +164,96 @@ { "model": "trophies.trophy", "pk": 10, + "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": 10, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 11, + "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_progressive": false, + "is_active": true, + "order": 11, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 12, + "fields": { + "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", + "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, + "is_active": true, + "order": 12, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 13, + "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": true, + "is_progressive": false, + "is_active": true, + "order": 13, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 14, + "fields": { + "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, + "is_active": true, + "order": 14, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 15, "fields": { "uuid": "d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e", "name": "Personal Record", @@ -174,7 +264,7 @@ "is_hidden": true, "is_progressive": false, "is_repeatable": true, - "order": 10, + "order": 15, "created": "2025-12-19T00:00:00Z", "updated": "2025-12-19T00:00:00Z" } diff --git a/wger/trophies/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 437630179..157f16909 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -103,7 +103,7 @@ class Migration(migrations.Migration): ( 'is_repeatable', models.BooleanField( - default=True, + default=False, help_text='If true, this trophy can be earned multiple times', verbose_name='Repeatable', ), diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py index 0c11d0d1d..b66d89bee 100644 --- a/wger/trophies/migrations/0002_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -4,6 +4,167 @@ 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, +} + +# Define the initial trophies (same as in load_trophies management command) +trophies_data = [ + { + 'uuid': '5362e55b-eaf1-4e34-9ef8-661538a3bdd9', + '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, + }, + { + '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_hidden': False, + 'is_progressive': True, + 'order': 2, + }, + { + '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_hidden': False, + 'is_progressive': True, + 'order': 3, + }, + { + **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': 4, + }, + { + **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': 5, + }, + { + **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': 6, + }, + { + **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}, + 'order': 7, + 'is_hidden':True, + }, + { + **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}, + 'order': 8, + 'is_hidden':True, + }, + { + **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}, + 'order': 9, + 'is_hidden':True, + }, + { + **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}, + 'order': 10, + 'is_hidden':True, + }, + { + '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_progressive': False, + 'order': 11, + }, + { + 'uuid': '2b00ff1e-69f8-47f0-b8df-976a4127a425', + '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': 12, + }, + { + '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': 13, + }, + { + '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': 14, + }, + { + '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': 15, + }, +] + def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEditor): """ @@ -14,121 +175,6 @@ def load_initial_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit """ Trophy = apps.get_model('trophies', 'Trophy') - # Define the initial trophies (same as in load_trophies management command) - trophies_data = [ - { - 'uuid': '5362e55b-eaf1-4e34-9ef8-661538a3bdd9', - '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, - }, - { - '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_hidden': False, - 'is_progressive': True, - 'order': 2, - }, - { - '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_hidden': False, - 'is_progressive': True, - 'order': 3, - }, - { - 'uuid': '5353989b-adc0-481b-a9bc-64365a9179e8', - '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, - }, - { - 'uuid': '3c53887b-feba-4d73-8022-e446f46395c8', - '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, - }, - { - '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_progressive': False, - 'order': 6, - }, - { - 'uuid': '2b00ff1e-69f8-47f0-b8df-976a4127a425', - '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, - }, - { - '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_progressive': False, - 'order': 8, - }, - { - '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': 9, - }, - { - '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': 9, - }, - ] - for trophy_data in trophies_data: Trophy.objects.update_or_create(uuid=trophy_data['uuid'], defaults=trophy_data) @@ -142,18 +188,7 @@ def reverse_load_trophies(apps: StateApps, schema_editor: BaseDatabaseSchemaEdit """ Trophy = apps.get_model('trophies', 'Trophy') - trophy_names = [ - 'Beginner', - 'Unstoppable', - 'Weekend Warrior', - 'Lifter', - 'Atlas', - 'Early Bird', - 'Night Owl', - 'New Year, New Me', - 'Phoenix', - 'Personal Record', - ] + trophy_names = [t['name'] for t in trophies_data] deleted_count = Trophy.objects.filter(name__in=trophy_names).delete()[0] if deleted_count > 0: From 6a97d8b1a73b2b614b94e09e044d517ae6f823e6 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Mon, 22 Dec 2025 20:03:51 +0100 Subject: [PATCH 19/53] Rename checker class and configure more trophies --- wger/trophies/checkers/__init__.py | 4 +- wger/trophies/checkers/registry.py | 7 +- ...{count_based.py => workout_count_based.py} | 7 +- wger/trophies/fixtures/initial_trophies.json | 298 ++++++++++++------ .../migrations/0002_load_initial_trophies.py | 100 ++++-- wger/trophies/models/trophy.py | 2 +- wger/trophies/tests/test_checkers.py | 16 +- wger/trophies/tests/test_integration.py | 4 +- wger/trophies/tests/test_services.py | 8 +- 9 files changed, 305 insertions(+), 141 deletions(-) rename wger/trophies/checkers/{count_based.py => workout_count_based.py} (95%) 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/registry.py b/wger/trophies/checkers/registry.py index 426fc0382..17f2d93e7 100644 --- a/wger/trophies/checkers/registry.py +++ b/wger/trophies/checkers/registry.py @@ -30,7 +30,6 @@ 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 @@ -38,7 +37,7 @@ 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__) @@ -54,7 +53,7 @@ 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, @@ -130,7 +129,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/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 e3c2d880a..f8986a99d 100644 --- a/wger/trophies/fixtures/initial_trophies.json +++ b/wger/trophies/fixtures/initial_trophies.json @@ -3,11 +3,11 @@ "model": "trophies.trophy", "pk": 1, "fields": { - "uuid": "5362e55b-eaf1-4e34-9ef8-661538a3bdd9", + "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, @@ -21,14 +21,14 @@ "model": "trophies.trophy", "pk": 2, "fields": { - "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}, + "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": true, + "is_progressive": false, "is_active": true, "order": 2, "created": "2025-12-19T00:00:00Z", @@ -39,14 +39,14 @@ "model": "trophies.trophy", "pk": 3, "fields": { - "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}, + "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": true, + "is_progressive": false, "is_active": true, "order": 3, "created": "2025-12-19T00:00:00Z", @@ -57,14 +57,14 @@ "model": "trophies.trophy", "pk": 4, "fields": { - "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}, + "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": true, + "is_progressive": false, "is_active": true, "order": 4, "created": "2025-12-19T00:00:00Z", @@ -75,14 +75,14 @@ "model": "trophies.trophy", "pk": 5, "fields": { - "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": 20000}, + "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": true, + "is_progressive": false, "is_active": true, "order": 5, "created": "2025-12-19T00:00:00Z", @@ -93,14 +93,14 @@ "model": "trophies.trophy", "pk": 6, "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, + "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", @@ -111,14 +111,14 @@ "model": "trophies.trophy", "pk": 7, "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, + "uuid": "a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c", + "name": "Legend", + "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", @@ -129,13 +129,13 @@ "model": "trophies.trophy", "pk": 8, "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, + "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_hidden": false, "is_progressive": true, "is_active": true, "order": 8, @@ -147,13 +147,13 @@ "model": "trophies.trophy", "pk": 9, "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, + "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_hidden": false, "is_progressive": true, "is_active": true, "order": 9, @@ -165,13 +165,13 @@ "model": "trophies.trophy", "pk": 10, "fields": { - "uuid": "e414c29d-5828-4ca3-83b5-4837a71ed48f", - "name": "Atlas", - "description": "Lift a cumulative total of 10.000.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": 10000000}, - "is_hidden": true, + "checker_params": {"kg": 5000}, + "is_hidden": false, "is_progressive": true, "is_active": true, "order": 10, @@ -183,14 +183,14 @@ "model": "trophies.trophy", "pk": 11, "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"}, + "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": 20000}, "is_hidden": false, - "is_progressive": false, + "is_progressive": true, "is_active": true, "order": 11, "created": "2025-12-19T00:00:00Z", @@ -201,14 +201,14 @@ "model": "trophies.trophy", "pk": 12, "fields": { - "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", - "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, + "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", @@ -219,14 +219,14 @@ "model": "trophies.trophy", "pk": 13, "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}, + "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": false, + "is_progressive": true, "is_active": true, "order": 13, "created": "2025-12-19T00:00:00Z", @@ -237,14 +237,14 @@ "model": "trophies.trophy", "pk": 14, "fields": { - "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}, + "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": false, + "is_progressive": true, "is_active": true, "order": 14, "created": "2025-12-19T00:00:00Z", @@ -254,6 +254,114 @@ { "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_progressive": false, + "is_active": true, + "order": 17, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 18, + "fields": { + "uuid": "2b00ff1e-69f8-47f0-b8df-976a4127a425", + "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, + "is_active": true, + "order": 18, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "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": true, + "is_progressive": false, + "is_active": true, + "order": 19, + "created": "2025-12-19T00:00:00Z", + "updated": "2025-12-19T00:00:00Z" + } + }, + { + "model": "trophies.trophy", + "pk": 20, + "fields": { + "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, + "is_active": true, + "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", @@ -264,7 +372,7 @@ "is_hidden": true, "is_progressive": false, "is_repeatable": true, - "order": 15, + "order": 21, "created": "2025-12-19T00:00:00Z", "updated": "2025-12-19T00:00:00Z" } diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py index b66d89bee..015020ce1 100644 --- a/wger/trophies/migrations/0002_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -12,19 +12,77 @@ volume_trophy_data = { '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 = [ { - 'uuid': '5362e55b-eaf1-4e34-9ef8-661538a3bdd9', + **workout_count_trophy_data, + 'uuid': '9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60', '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, }, + { + **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': 'Legend', + 'description': 'Complete 1000 workouts', + 'checker_params': {'count': 1000}, + 'is_hidden': True, + 'order': 7, + }, { 'uuid': 'b605b6a1-953d-41fb-87c9-a2f88b5f5907', 'name': 'Unstoppable', @@ -32,9 +90,9 @@ trophies_data = [ 'trophy_type': 'sequence', 'checker_class': 'streak', 'checker_params': {'days': 30}, - 'is_hidden': False, 'is_progressive': True, - 'order': 2, + 'is_hidden': False, + 'order': 8, }, { 'uuid': 'bf60e051-a9a5-4bf5-ac4b-1aa713febca7', @@ -43,9 +101,9 @@ trophies_data = [ 'trophy_type': 'sequence', 'checker_class': 'weekend_warrior', 'checker_params': {'weekends': 4}, - 'is_hidden': False, 'is_progressive': True, - 'order': 3, + 'is_hidden': False, + 'order': 9, }, { **volume_trophy_data, @@ -53,7 +111,7 @@ trophies_data = [ 'name': 'Elephant lifter', 'description': 'Lift a cumulative total of 5.000 kg', 'checker_params': {'kg': 5_000}, - 'order': 4, + 'order': 10, }, { **volume_trophy_data, @@ -61,7 +119,7 @@ trophies_data = [ 'name': 'Bus lifter', 'description': 'Lift a cumulative total of 20.000 kg', 'checker_params': {'kg': 20_000}, - 'order': 5, + 'order': 11, }, { **volume_trophy_data, @@ -69,7 +127,7 @@ trophies_data = [ 'name': 'Plane lifter', 'description': 'Lift a cumulative total of 50.000 kg', 'checker_params': {'kg': 50_000}, - 'order': 6, + 'order': 12, }, { **volume_trophy_data, @@ -77,8 +135,8 @@ trophies_data = [ 'name': 'Blue whale lifter', 'description': 'Lift a cumulative total of 150.000 kg', 'checker_params': {'kg': 150_000}, - 'order': 7, 'is_hidden':True, + 'order': 13, }, { **volume_trophy_data, @@ -86,8 +144,8 @@ trophies_data = [ 'name': 'Space Station lifter', 'description': 'Lift a cumulative total of 450.000 kg', 'checker_params': {'kg': 450_000}, - 'order': 8, 'is_hidden':True, + 'order': 14, }, { **volume_trophy_data, @@ -95,8 +153,8 @@ trophies_data = [ 'name': 'Millionaire', 'description': 'Lift a cumulative total of 1.000.000 kg', 'checker_params': {'kg': 1_000_000}, - 'order': 9, 'is_hidden':True, + 'order': 15, }, { **volume_trophy_data, @@ -104,8 +162,8 @@ trophies_data = [ 'name': 'Atlas', 'description': 'Lift a cumulative total of 10.000.000 kg', 'checker_params': {'kg': 10_000_000}, - 'order': 10, 'is_hidden':True, + 'order': 16, }, { 'uuid': 'cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c', @@ -116,7 +174,7 @@ trophies_data = [ 'checker_params': {'before': '06:00'}, 'is_hidden': False, 'is_progressive': False, - 'order': 11, + 'order': 17, }, { 'uuid': '2b00ff1e-69f8-47f0-b8df-976a4127a425', @@ -127,7 +185,7 @@ trophies_data = [ 'checker_params': {'after': '21:00'}, 'is_hidden': False, 'is_progressive': False, - 'order': 12, + 'order': 18, }, { 'uuid': '31a71d9a-bf26-4f18-b82f-afefe6f50df2', @@ -138,7 +196,7 @@ trophies_data = [ 'checker_params': {'month': 1, 'day': 1}, 'is_hidden': True, 'is_progressive': False, - 'order': 13, + 'order': 19, }, { 'uuid': '32bb12da-b25f-4e18-81e4-b695eb65283e', @@ -149,7 +207,7 @@ trophies_data = [ 'checker_params': {'inactive_days': 30}, 'is_hidden': True, 'is_progressive': False, - 'order': 14, + 'order': 20, }, { 'uuid': 'd4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e', @@ -161,7 +219,7 @@ trophies_data = [ 'is_hidden': True, 'is_progressive': False, 'is_repeatable': True, - 'order': 15, + 'order': 21, }, ] diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index 693b01cd9..fc41a7dd0 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -154,7 +154,7 @@ class Trophy(models.Model): @property def image_rel_path(self): """ - Returns the relative path to the trophy image + Returns the relative (to the static folder) path to the trophy image """ return 'trophies/placeholder.png' # return f'trophies/{self.trophy_type}/{self.uuid}.png' diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index 032d07a74..d896f12b2 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -24,13 +24,13 @@ 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.log import WorkoutLog -from wger.trophies.checkers.count_based import CountBasedChecker from wger.trophies.checkers.date_based import DateBasedChecker from wger.trophies.checkers.inactivity_return import InactivityReturnChecker 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, @@ -58,7 +58,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): @@ -66,7 +66,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): @@ -74,7 +74,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): @@ -82,7 +82,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): @@ -90,7 +90,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): @@ -98,12 +98,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) diff --git a/wger/trophies/tests/test_integration.py b/wger/trophies/tests/test_integration.py index dc5a4b258..1e1fbf91d 100644 --- a/wger/trophies/tests/test_integration.py +++ b/wger/trophies/tests/test_integration.py @@ -63,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, ) @@ -306,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_services.py b/wger/trophies/tests/test_services.py index 64d69849e..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, @@ -379,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, ) From a8ba6fe2d6665736afd41cdcae1a93c9904c261e Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Tue, 23 Dec 2025 22:23:03 +0100 Subject: [PATCH 20/53] Refactor the way the settings are handled. Instead of a "create-settings" command, which didn't contain all the options and was a bit awkward, we now have specific settings used for different things. --- .github/workflows/ci.yml | 16 +- .gitignore | 2 +- extras/docker/demo/Dockerfile | 14 +- extras/docker/production/Dockerfile | 3 +- manage.py | 16 +- package-lock.json | 127 ++++++++----- package.json | 2 +- pyproject.toml | 2 +- settings/README.md | 15 ++ settings/__init__.py | 0 wger/settings.tpl => settings/ci.py | 71 ++++---- settings/local_dev.py | 124 +++++++++++++ settings/main.py | 247 ++++++++++++++++++++++++++ {wger => settings}/settings_global.py | 21 ++- wger/celery_configuration.py | 2 +- wger/tasks.py | 185 +++---------------- wger/version.py | 2 +- wger/wsgi.py | 2 +- 18 files changed, 575 insertions(+), 276 deletions(-) create mode 100644 settings/README.md create mode 100644 settings/__init__.py rename wger/settings.tpl => settings/ci.py (60%) create mode 100644 settings/local_dev.py create mode 100644 settings/main.py rename {wger => settings}/settings_global.py (97%) 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/.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/extras/docker/demo/Dockerfile b/extras/docker/demo/Dockerfile index 5ee073fbb..7859f744a 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 @@ -111,9 +114,8 @@ RUN --mount=type=bind,from=builder,source=/wheels,target=/wheels . /home/wger/v && 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 \ + && sed -i "/^MEDIA_ROOT/c\MEDIA_ROOT='\/home\/wger\/media'" settings/production.py \ + && echo STATIC_ROOT=\'/home/wger/static\' >> settings/production.py \ && 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..4c056d45e 100644 --- a/extras/docker/production/Dockerfile +++ b/extras/docker/production/Dockerfile @@ -79,6 +79,7 @@ ARG BUILD_DATE ENV PATH="/home/wger/.local/bin:$PATH" ENV APP_BUILD_COMMIT=$BUILD_COMMIT ENV APP_BUILD_DATE=$BUILD_DATE +ENV DJANGO_SETTINGS_MODULE='settings.main' WORKDIR /home/wger/src EXPOSE 8000 @@ -88,8 +89,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/manage.py b/manage.py index 873291be6..720ca5c44 100755 --- a/manage.py +++ b/manage.py @@ -1,24 +1,12 @@ #!/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 9cfec63cc..7d8141e2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wger", - "version": "2.4.alpha1", + "version": "2.4.alpha3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wger", - "version": "2.4.alpha1", + "version": "2.4.alpha3", "license": "AGPL-3.0", "dependencies": { "@popperjs/core": "^2.11.8", @@ -52,7 +52,6 @@ "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/code-frame": "^7.27.1", "@babel/generator": "^7.28.5", @@ -385,7 +384,6 @@ "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -432,7 +430,6 @@ "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.18.3", "@emotion/babel-plugin": "^11.13.5", @@ -495,6 +492,7 @@ "os": [ "aix" ], + "peer": true, "engines": { "node": ">=18" } @@ -512,6 +510,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -529,6 +528,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -546,6 +546,7 @@ "os": [ "android" ], + "peer": true, "engines": { "node": ">=18" } @@ -563,6 +564,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -580,6 +582,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": ">=18" } @@ -597,6 +600,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -614,6 +618,7 @@ "os": [ "freebsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -631,6 +636,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -648,6 +654,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -665,6 +672,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -682,6 +690,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -699,6 +708,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -716,6 +726,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -733,6 +744,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -750,6 +762,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -767,6 +780,7 @@ "os": [ "linux" ], + "peer": true, "engines": { "node": ">=18" } @@ -784,6 +798,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -801,6 +816,7 @@ "os": [ "netbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -818,6 +834,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -835,6 +852,7 @@ "os": [ "openbsd" ], + "peer": true, "engines": { "node": ">=18" } @@ -852,6 +870,7 @@ "os": [ "openharmony" ], + "peer": true, "engines": { "node": ">=18" } @@ -869,6 +888,7 @@ "os": [ "sunos" ], + "peer": true, "engines": { "node": ">=18" } @@ -886,6 +906,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -903,6 +924,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -920,6 +942,7 @@ "os": [ "win32" ], + "peer": true, "engines": { "node": ">=18" } @@ -1081,7 +1104,6 @@ "integrity": "sha512-R4DaYF3dgCQCUAkr4wW1w26GHXcf5rCmBRHVBuuvJvaGLmZdD8EjatP80Nz5JCw0KxORAzwftnHzXVnjR8HnFw==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/core-downloads-tracker": "^7.3.6", @@ -1195,7 +1217,6 @@ "integrity": "sha512-8fehAazkHNP1imMrdD2m2hbA9sl7Ur6jfuNweh5o4l9YPty4iaZzRXqYvBCWQNwFaSHmMEj2KPbyXGp7Bt73Rg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4", "@mui/private-theming": "^7.3.6", @@ -1437,7 +1458,6 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -1500,7 +1520,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-android-arm64": { "version": "4.53.3", @@ -1514,7 +1535,8 @@ "optional": true, "os": [ "android" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-arm64": { "version": "4.53.3", @@ -1528,7 +1550,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-darwin-x64": { "version": "4.53.3", @@ -1542,7 +1565,8 @@ "optional": true, "os": [ "darwin" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-arm64": { "version": "4.53.3", @@ -1556,7 +1580,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-freebsd-x64": { "version": "4.53.3", @@ -1570,7 +1595,8 @@ "optional": true, "os": [ "freebsd" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { "version": "4.53.3", @@ -1584,7 +1610,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { "version": "4.53.3", @@ -1598,7 +1625,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-gnu": { "version": "4.53.3", @@ -1612,7 +1640,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-arm64-musl": { "version": "4.53.3", @@ -1626,7 +1655,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-loong64-gnu": { "version": "4.53.3", @@ -1640,7 +1670,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { "version": "4.53.3", @@ -1654,7 +1685,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { "version": "4.53.3", @@ -1668,7 +1700,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-riscv64-musl": { "version": "4.53.3", @@ -1682,7 +1715,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-s390x-gnu": { "version": "4.53.3", @@ -1696,7 +1730,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.53.3", @@ -1710,7 +1745,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-linux-x64-musl": { "version": "4.53.3", @@ -1724,7 +1760,8 @@ "optional": true, "os": [ "linux" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-openharmony-arm64": { "version": "4.53.3", @@ -1738,7 +1775,8 @@ "optional": true, "os": [ "openharmony" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-arm64-msvc": { "version": "4.53.3", @@ -1752,7 +1790,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-ia32-msvc": { "version": "4.53.3", @@ -1766,7 +1805,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-gnu": { "version": "4.53.3", @@ -1780,7 +1820,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@rollup/rollup-win32-x64-msvc": { "version": "4.53.3", @@ -1794,7 +1835,8 @@ "optional": true, "os": [ "win32" - ] + ], + "peer": true }, "node_modules/@standard-schema/spec": { "version": "1.0.0", @@ -1960,7 +2002,8 @@ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true, - "license": "MIT" + "license": "MIT", + "peer": true }, "node_modules/@types/hoist-non-react-statics": { "version": "3.3.7", @@ -2163,7 +2206,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -2649,6 +2691,7 @@ "dev": true, "hasInstallScript": true, "license": "MIT", + "peer": true, "bin": { "esbuild": "bin/esbuild" }, @@ -2733,6 +2776,7 @@ "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12.0.0" }, @@ -2836,6 +2880,7 @@ "os": [ "darwin" ], + "peer": true, "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -3037,7 +3082,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "@babel/runtime": "^7.28.4" }, @@ -3135,8 +3179,7 @@ "version": "3.7.1", "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", @@ -3228,7 +3271,6 @@ "integrity": "sha512-vtEhXh/gNjI9Yg1u4jX/0YVPMvxzHuGgCm6tC5kZyb08yjGWGnqAjGJvcXbqQR2P3MyMEFnRbpcdFS6PBcLqew==", "dev": true, "license": "MIT", - "peer": true, "engines": { "node": ">=12" } @@ -3305,6 +3347,7 @@ } ], "license": "MIT", + "peer": true, "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -3451,6 +3494,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -3516,7 +3560,6 @@ "integrity": "sha512-ibrK8llX2a4eOskq1mXKu/TGZj9qzomO+sNfO98M6d9zIPOEhlBkMkBUBLd1vgS0gQsLDBzA+8jJBVXDnfHmJg==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "scheduler": "^0.27.0" }, @@ -3598,8 +3641,7 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-19.2.1.tgz", "integrity": "sha512-L7BnWgRbMwzMAubQcS7sXdPdNLmKlucPlopgAzx7FtYbksWZgEWiuYM5x9T6UqS2Ne0rsgQTq5kY2SGqpzUkYA==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/react-redux": { "version": "9.2.0", @@ -3771,8 +3813,7 @@ "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", "dev": true, - "license": "MIT", - "peer": true + "license": "MIT" }, "node_modules/redux-thunk": { "version": "3.1.0", @@ -3835,6 +3876,7 @@ "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -3928,6 +3970,7 @@ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "license": "BSD-3-Clause", + "peer": true, "engines": { "node": ">=0.10.0" } @@ -3979,6 +4022,7 @@ "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" @@ -4051,7 +4095,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" diff --git a/package.json b/package.json index 30f7586e9..0663b07ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wger", - "version": "2.4.alpha1", + "version": "2.4.alpha3", "description": "Self hosted FLOSS fitness/workout and weight tracker", "repository": "github:wger-project/wger", "author": "wger team ", diff --git a/pyproject.toml b/pyproject.toml index 95d58ee9e..51f5f1684 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -165,7 +165,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 60% rename from wger/settings.tpl rename to settings/ci.py index b57ffa858..64f552ef2 100644 --- a/wger/settings.tpl +++ b/settings/ci.py @@ -1,9 +1,26 @@ -#!/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 @@ -16,16 +33,16 @@ 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..4e42693e2 --- /dev/null +++ b/settings/local_dev.py @@ -0,0 +1,124 @@ +"""Local development settings for wger""" + +# ruff: noqa: F405 + +# wger +from .settings_global import * # noqa: F403 + +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 * # noqa: F403 +except ImportError: + pass diff --git a/settings/main.py b/settings/main.py new file mode 100644 index 000000000..b7b647530 --- /dev/null +++ b/settings/main.py @@ -0,0 +1,247 @@ +# 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.""" + +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"), + '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/wger/settings_global.py b/settings/settings_global.py similarity index 97% rename from wger/settings_global.py rename to settings/settings_global.py index e42391fb1..cae1ab5cc 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 / 'media' +STATIC_ROOT = BASE_DIR / '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', @@ -437,7 +445,7 @@ else: STATIC_URL = '/static/' # -# Django compressor +# Django compressor for CSS and JS files # # The default is not DEBUG, override if needed @@ -620,3 +628,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/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/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/version.py b/wger/version.py index b3079b8c1..a3e6583ad 100644 --- a/wger/version.py +++ b/wger/version.py @@ -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.4.0-alpha3') """Current version of the app""" 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 From 8810cc501617877122db5d8798f7b2567a4f5f76 Mon Sep 17 00:00:00 2001 From: MR Date: Wed, 31 Dec 2025 22:34:36 +0100 Subject: [PATCH 21/53] Translated using Weblate (Arabic (Saudi Arabia)) Currently translated at 11.4% (69 of 603 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/ar_SA/ --- wger/locale/ar_SA/LC_MESSAGES/django.po | 49 ++++++++++++++++--------- 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index bc8f1cb27..75c1d2fb0 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ 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" +"PO-Revision-Date: 2025-12-31 21:36+0000\n" +"Last-Translator: MR \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_SA\n" @@ -19,7 +19,7 @@ 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.15.1\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -148,6 +148,8 @@ msgstr "الرمز غير صحيح" #: core/forms.py:271 core/forms.py:346 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 @@ -182,10 +184,8 @@ msgid "Language full name" 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" @@ -196,6 +196,8 @@ 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" @@ -207,7 +209,7 @@ msgstr "الرابط" #: core/models/license.py:46 msgid "Link to license text or other information" -msgstr "" +msgstr "رابط لنص الترخيص أو معلومات أخرى" #: core/models/profile.py:57 #, python-format @@ -248,7 +250,7 @@ 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" @@ -261,28 +263,39 @@ 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" +"\n" +"من قبل وزارة الزراعة الأمريكية. إنه كامل للغاية ، مع حول\n" +"\n" +"7000 إدخالات، ولكن يمكن أن تكون ساحقة إلى حد ما وجعل البحث صعبا." #: 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 "" +"المدة الافتراضية للتدريبات\n" +"Arabic (Sudish)" #: core/models/profile.py:161 msgid "" @@ -302,32 +315,32 @@ msgstr "" #: core/models/profile.py:214 gym/views/export.py:64 msgid "Age" -msgstr "" +msgstr "العمر" #: core/models/profile.py:230 nutrition/forms.py:117 msgid "Height (cm)" -msgstr "" +msgstr "الطول (سنتيمتر)" #: core/models/profile.py:247 msgid "Hours of sleep" -msgstr "" +msgstr "ساعات النMم" #: 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 From 95c94df7a57a641370757a281c946c7cc1b7359c Mon Sep 17 00:00:00 2001 From: Gevorg Danielyan Date: Fri, 2 Jan 2026 23:12:31 +0100 Subject: [PATCH 22/53] Translated using Weblate (Russian) Currently translated at 97.8% (590 of 603 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/ru/ --- wger/locale/ru/LC_MESSAGES/django.po | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wger/locale/ru/LC_MESSAGES/django.po b/wger/locale/ru/LC_MESSAGES/django.po index f608689c3..cc9f9871b 100644 --- a/wger/locale/ru/LC_MESSAGES/django.po +++ b/wger/locale/ru/LC_MESSAGES/django.po @@ -15,8 +15,8 @@ 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" +"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" @@ -1911,7 +1911,7 @@ msgstr "Повторений" #: i18n.tpl:31 msgid "Resistance band" -msgstr "" +msgstr "Эластичная лента" #: i18n.tpl:32 msgid "SZ-Bar" From b04e7b34cdc1723fba3afbe67791a7c9d0be56eb Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 9 Jan 2026 13:40:15 +0100 Subject: [PATCH 23/53] Add django compressor's COMPRESS_OFFLINE option for offline compression --- settings/main.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/settings/main.py b/settings/main.py index b7b647530..9db0935d9 100644 --- a/settings/main.py +++ b/settings/main.py @@ -164,9 +164,14 @@ if os.environ.get("DJANGO_CACHE_BACKEND"): if CONNECTION_POOL_KWARGS: CACHES["default"]["OPTIONS"]["CONNECTION_POOL_KWARGS"] = CONNECTION_POOL_KWARGS -# Folder for compressed CSS and JS files +# +# 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 From 2b03ac7864b714299d24d98a9d4f085b2510cf53 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 9 Jan 2026 14:28:34 +0100 Subject: [PATCH 24/53] Delete settings.py file from docker folder, this is not needed anymore --- extras/docker/production/settings.py | 229 --------------------------- 1 file changed, 229 deletions(-) delete mode 100644 extras/docker/production/settings.py 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, - }, - } -} From 1c276ed3d7e3f2fef148cca07bfbea7e7a6c05c7 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 9 Jan 2026 16:03:50 +0100 Subject: [PATCH 25/53] Set PYTHONPATH --- extras/docker/demo/Dockerfile | 16 +++++++++++----- extras/docker/production/Dockerfile | 3 ++- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/extras/docker/demo/Dockerfile b/extras/docker/demo/Dockerfile index 7859f744a..5318cd224 100644 --- a/extras/docker/demo/Dockerfile +++ b/extras/docker/demo/Dockerfile @@ -104,18 +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 COMPRESS_OFFLINE=True + +# 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 . \ - && sed -i "/^MEDIA_ROOT/c\MEDIA_ROOT='\/home\/wger\/media'" settings/production.py \ - && echo STATIC_ROOT=\'/home/wger/static\' >> settings/production.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 4c056d45e..52a2b76b3 100644 --- a/extras/docker/production/Dockerfile +++ b/extras/docker/production/Dockerfile @@ -79,7 +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 DJANGO_SETTINGS_MODULE='settings.main' +ENV PYTHONPATH=/home/wger/src +ENV DJANGO_SETTINGS_MODULE=settings.main WORKDIR /home/wger/src EXPOSE 8000 From 10bec7544c80eb521f74be7bb205d4fe2f6d651f Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 9 Jan 2026 16:03:59 +0100 Subject: [PATCH 26/53] Cleanup --- extras/docker/demo/Dockerfile | 2 +- extras/docker/production/entrypoint.sh | 5 +++-- settings/local_dev.py | 5 +++-- settings/main.py | 13 +++++++++---- settings/settings_global.py | 1 - 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/extras/docker/demo/Dockerfile b/extras/docker/demo/Dockerfile index 5318cd224..5410006c5 100644 --- a/extras/docker/demo/Dockerfile +++ b/extras/docker/demo/Dockerfile @@ -110,7 +110,7 @@ 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 COMPRESS_OFFLINE=True +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 \ 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/settings/local_dev.py b/settings/local_dev.py index 4e42693e2..d5c86eec9 100644 --- a/settings/local_dev.py +++ b/settings/local_dev.py @@ -1,9 +1,10 @@ """Local development settings for wger""" # ruff: noqa: F405 +# ruff: noqa: F403 # wger -from .settings_global import * # noqa: F403 +from .settings_global import * DEBUG = True @@ -119,6 +120,6 @@ DATABASES = { # Import other local settings that are not in version control try: - from .local_dev_extra import * # noqa: F403 + from .local_dev_extra import * except ImportError: pass diff --git a/settings/main.py b/settings/main.py index 9db0935d9..2154e1412 100644 --- a/settings/main.py +++ b/settings/main.py @@ -20,7 +20,12 @@ import environ # wger from .settings_global import * # noqa: F403 -"""Main settings file for a production deployment of wger.""" +""" +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 @@ -136,10 +141,10 @@ 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"), + 'LOCATION': env.str("DJANGO_CACHE_LOCATION", ''), + 'TIMEOUT': env.int("DJANGO_CACHE_TIMEOUT", 300), 'OPTIONS': { - 'CLIENT_CLASS': env.str("DJANGO_CACHE_CLIENT_CLASS") + 'CLIENT_CLASS': env.str("DJANGO_CACHE_CLIENT_CLASS", '') } } } diff --git a/settings/settings_global.py b/settings/settings_global.py index cae1ab5cc..37846b769 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -406,7 +406,6 @@ THUMBNAIL_ALIASES = { }, } -STATIC_ROOT = '' USE_S3 = os.getenv('USE_S3') == 'TRUE' if USE_S3: From ec9e8149abf2a665ab0cb3cd1998cf4bb5ea3234 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Fri, 9 Jan 2026 13:30:19 +0100 Subject: [PATCH 27/53] Add general formatting helper to base trophy checker --- uv.lock | 2 +- wger/trophies/checkers/base.py | 14 ++++++++++++++ wger/trophies/checkers/date_based.py | 3 --- wger/trophies/checkers/inactivity_return.py | 1 - wger/trophies/checkers/personal_record.py | 3 ++- wger/trophies/checkers/registry.py | 1 + wger/trophies/checkers/streak.py | 3 --- wger/trophies/checkers/volume.py | 17 +---------------- wger/trophies/checkers/weekend_warrior.py | 3 --- wger/trophies/migrations/0001_initial.py | 2 +- .../migrations/0002_load_initial_trophies.py | 8 ++++---- wger/trophies/services/trophy.py | 3 ++- wger/trophies/signals.py | 1 + wger/trophies/urls.py | 1 + wger/urls.py | 1 + 15 files changed, 29 insertions(+), 34 deletions(-) diff --git a/uv.lock b/uv.lock index e4c68f6ef..ccf065398 100644 --- a/uv.lock +++ b/uv.lock @@ -2245,7 +2245,7 @@ dev = [ { name = "tblib", specifier = "~=3.2.0" }, { name = "wheel", specifier = "==0.45.1" }, ] -docker = [{ name = "gunicorn", specifier = "==23.0.0" }] +docker = [{ name = "gunicorn", specifier = "~=23.0.0" }] [[package]] name = "wheel" diff --git a/wger/trophies/checkers/base.py b/wger/trophies/checkers/base.py index d36a6e65e..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): @@ -135,5 +140,14 @@ class BaseTrophyChecker(ABC): """ 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 index 6fc09f63c..80993db14 100644 --- a/wger/trophies/checkers/personal_record.py +++ b/wger/trophies/checkers/personal_record.py @@ -18,6 +18,7 @@ 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 @@ -40,7 +41,7 @@ class PersonalRecordChecker(BaseTrophyChecker): """ Brzycki's formula: 1RM = weight * (36 / (37 - repetitions)) """ - log = self.params.get('log', None) + log: WorkoutLog | None = self.params.get('log', None) if not log: raise ValueError('Log should not be None') diff --git a/wger/trophies/checkers/registry.py b/wger/trophies/checkers/registry.py index 17f2d93e7..df7a619d9 100644 --- a/wger/trophies/checkers/registry.py +++ b/wger/trophies/checkers/registry.py @@ -39,6 +39,7 @@ from .volume import VolumeChecker from .weekend_warrior import WeekendWarriorChecker from .workout_count_based import WorkoutCountBasedChecker + logger = logging.getLogger(__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/migrations/0001_initial.py b/wger/trophies/migrations/0001_initial.py index 157f16909..b9973c59b 100644 --- a/wger/trophies/migrations/0001_initial.py +++ b/wger/trophies/migrations/0001_initial.py @@ -306,7 +306,7 @@ class Migration(migrations.Migration): help_text='Additional information concerning this trophy', null=True, verbose_name='Context data', - ) + ), ), ], options={ diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py index 015020ce1..59dc066b0 100644 --- a/wger/trophies/migrations/0002_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -135,7 +135,7 @@ trophies_data = [ 'name': 'Blue whale lifter', 'description': 'Lift a cumulative total of 150.000 kg', 'checker_params': {'kg': 150_000}, - 'is_hidden':True, + 'is_hidden': True, 'order': 13, }, { @@ -144,7 +144,7 @@ trophies_data = [ 'name': 'Space Station lifter', 'description': 'Lift a cumulative total of 450.000 kg', 'checker_params': {'kg': 450_000}, - 'is_hidden':True, + 'is_hidden': True, 'order': 14, }, { @@ -153,7 +153,7 @@ trophies_data = [ 'name': 'Millionaire', 'description': 'Lift a cumulative total of 1.000.000 kg', 'checker_params': {'kg': 1_000_000}, - 'is_hidden':True, + 'is_hidden': True, 'order': 15, }, { @@ -162,7 +162,7 @@ trophies_data = [ 'name': 'Atlas', 'description': 'Lift a cumulative total of 10.000.000 kg', 'checker_params': {'kg': 10_000_000}, - 'is_hidden':True, + 'is_hidden': True, 'order': 16, }, { diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 5cbc229cd..53d33dfe1 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -244,7 +244,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 749281e85..55aafe330 100644 --- a/wger/trophies/signals.py +++ b/wger/trophies/signals.py @@ -44,6 +44,7 @@ from wger.trophies.services import UserStatisticsService from wger.trophies.services.trophy import TrophyService from wger.trophies.tasks import evaluate_user_trophies_task + logger = logging.getLogger(__name__) diff --git a/wger/trophies/urls.py b/wger/trophies/urls.py index 35434a0ff..59d698c52 100644 --- a/wger/trophies/urls.py +++ b/wger/trophies/urls.py @@ -19,6 +19,7 @@ from django.urls import re_path # wger from wger.core.views.react import ReactView + urlpatterns = [ re_path( '', diff --git a/wger/urls.py b/wger/urls.py index fefe77d5a..f47ec6672 100644 --- a/wger/urls.py +++ b/wger/urls.py @@ -52,6 +52,7 @@ 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 + # # REST API # From dd2ecbd32e6d15d00189a54bf989b8a6a173cebd Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 10 Jan 2026 12:08:29 +0100 Subject: [PATCH 28/53] Add admin trophy overview. This is mainly to check that the descriptions, images, etc. are correct without having to earn them. Adding this as an API endpoint would be a bit more work, specially for things like the times a trophy has been earned. --- wger/core/fixtures/groups.json | 15 ++++++ wger/core/templates/navigation.html | 10 ++++ .../trophies/templates/trophies/overview.html | 53 +++++++++++++++++++ wger/trophies/tests/test_overview.py | 45 ++++++++++++++++ wger/trophies/urls.py | 7 +++ wger/trophies/views.py | 47 ++++++++++++++++ 6 files changed, 177 insertions(+) create mode 100644 wger/trophies/templates/trophies/overview.html create mode 100644 wger/trophies/tests/test_overview.py create mode 100644 wger/trophies/views.py 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/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/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_overview.py b/wger/trophies/tests/test_overview.py new file mode 100644 index 000000000..5d57d08b9 --- /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/urls.py b/wger/trophies/urls.py index 59d698c52..5b5b8de40 100644 --- a/wger/trophies/urls.py +++ b/wger/trophies/urls.py @@ -19,6 +19,8 @@ from django.urls import re_path # wger from wger.core.views.react import ReactView +# Local +from .views import TrophiesOverview urlpatterns = [ re_path( @@ -26,4 +28,9 @@ urlpatterns = [ ReactView.as_view(), name='overview', ), + re_path( + 'admin/overview/', + TrophiesOverview.as_view(), + name='admin-overview', + ), ] diff --git a/wger/trophies/views.py b/wger/trophies/views.py new file mode 100644 index 000000000..a559930fe --- /dev/null +++ b/wger/trophies/views.py @@ -0,0 +1,47 @@ +# 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() From db362bf94dd10e65431967c69018d0ac2d532cb6 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 10 Jan 2026 12:20:00 +0100 Subject: [PATCH 29/53] Commit trophy icons --- wger/trophies/fixtures/initial_trophies.json | 8 +-- .../migrations/0002_load_initial_trophies.py | 8 +-- wger/trophies/models/trophy.py | 3 +- .../0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f.png | Bin 0 -> 79621 bytes .../4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d.png | Bin 0 -> 102271 bytes .../9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60.png | Bin 0 -> 102389 bytes .../a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c.png | Bin 0 -> 102996 bytes .../d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b.png | Bin 0 -> 86047 bytes .../e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a.png | Bin 0 -> 69521 bytes .../f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b.png | Bin 0 -> 97709 bytes .../31a71d9a-bf26-4f18-b82f-afefe6f50df2.png | Bin 0 -> 41539 bytes .../32bb12da-b25f-4e18-81e4-b695eb65283e.png | Bin 0 -> 64857 bytes wger/trophies/static/trophies/placeholder.png | Bin 42147 -> 0 bytes .../d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e.png | Bin 0 -> 38326 bytes wger/trophies/static/trophies/promt.md | 66 ++++++++++++++++++ .../b605b6a1-953d-41fb-87c9-a2f88b5f5907.png | Bin 0 -> 111508 bytes .../bf60e051-a9a5-4bf5-ac4b-1aa713febca7.png | Bin 0 -> 121204 bytes .../2b00ff1e-69f8-47f0-b8df-976a4127a425.png | Bin 0 -> 101977 bytes .../cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c.png | Bin 0 -> 59293 bytes .../2c770528-3528-4f0a-9d1a-342d96935bdf.png | Bin 0 -> 50009 bytes .../3b4521ee-14bc-4a31-a3d8-e6859e183a35.png | Bin 0 -> 133289 bytes .../3c53887b-feba-4d73-8022-e446f46395c8.png | Bin 0 -> 97117 bytes .../5353989b-adc0-481b-a9bc-64365a9179e8.png | Bin 0 -> 42542 bytes .../70ee1605-20b8-4c8d-87a1-3787b9b3939d.png | Bin 0 -> 48797 bytes .../e414c29d-5828-4ca3-83b5-4837a71ed48f.png | Bin 0 -> 86187 bytes .../f0a5fd12-2508-4654-89aa-3d6dbb29c7e3.png | Bin 0 -> 57270 bytes wger/trophies/static/trophies/xn_convert.bat | 1 + 27 files changed, 76 insertions(+), 10 deletions(-) create mode 100644 wger/trophies/static/trophies/count/0d2e3f4a-5b6c-47d8-9e0f-1a2b3c4d5e6f.png create mode 100644 wger/trophies/static/trophies/count/4b6f9c2d-3e1a-4f5b-8c7d-2e3f4a5b6c7d.png create mode 100644 wger/trophies/static/trophies/count/9f1c7c7e-3b2a-4b6f-9b5f-1c3e2d4f5a60.png create mode 100644 wger/trophies/static/trophies/count/a5b6c7d8-e9f0-41a2-9b3c-4d5e6f7a8b9c.png create mode 100644 wger/trophies/static/trophies/count/d2c3b4a5-6f7e-48d9-8c0b-2a3c4d5e6f7b.png create mode 100644 wger/trophies/static/trophies/count/e3f4a5b6-c7d8-49e0-9f1a-2b3c4d5e6f7a.png create mode 100644 wger/trophies/static/trophies/count/f4a5b6c7-d8e9-40f1-9a2b-3c4d5e6f7a8b.png create mode 100644 wger/trophies/static/trophies/date/31a71d9a-bf26-4f18-b82f-afefe6f50df2.png create mode 100644 wger/trophies/static/trophies/other/32bb12da-b25f-4e18-81e4-b695eb65283e.png delete mode 100644 wger/trophies/static/trophies/placeholder.png create mode 100644 wger/trophies/static/trophies/pr/d4a5dbe7-7e15-4f7c-8560-a19f5f27eb2e.png create mode 100644 wger/trophies/static/trophies/promt.md create mode 100644 wger/trophies/static/trophies/sequence/b605b6a1-953d-41fb-87c9-a2f88b5f5907.png create mode 100644 wger/trophies/static/trophies/sequence/bf60e051-a9a5-4bf5-ac4b-1aa713febca7.png create mode 100644 wger/trophies/static/trophies/time/2b00ff1e-69f8-47f0-b8df-976a4127a425.png create mode 100644 wger/trophies/static/trophies/time/cc833c0b-1fd9-4cde-baa5-3bff9cd97d0c.png create mode 100644 wger/trophies/static/trophies/volume/2c770528-3528-4f0a-9d1a-342d96935bdf.png create mode 100644 wger/trophies/static/trophies/volume/3b4521ee-14bc-4a31-a3d8-e6859e183a35.png create mode 100644 wger/trophies/static/trophies/volume/3c53887b-feba-4d73-8022-e446f46395c8.png create mode 100644 wger/trophies/static/trophies/volume/5353989b-adc0-481b-a9bc-64365a9179e8.png create mode 100644 wger/trophies/static/trophies/volume/70ee1605-20b8-4c8d-87a1-3787b9b3939d.png create mode 100644 wger/trophies/static/trophies/volume/e414c29d-5828-4ca3-83b5-4837a71ed48f.png create mode 100644 wger/trophies/static/trophies/volume/f0a5fd12-2508-4654-89aa-3d6dbb29c7e3.png create mode 100644 wger/trophies/static/trophies/xn_convert.bat diff --git a/wger/trophies/fixtures/initial_trophies.json b/wger/trophies/fixtures/initial_trophies.json index f8986a99d..b1e0fe1a1 100644 --- a/wger/trophies/fixtures/initial_trophies.json +++ b/wger/trophies/fixtures/initial_trophies.json @@ -297,7 +297,7 @@ "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": 17, @@ -311,11 +311,11 @@ "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": 18, diff --git a/wger/trophies/migrations/0002_load_initial_trophies.py b/wger/trophies/migrations/0002_load_initial_trophies.py index 59dc066b0..f663d31d3 100644 --- a/wger/trophies/migrations/0002_load_initial_trophies.py +++ b/wger/trophies/migrations/0002_load_initial_trophies.py @@ -172,18 +172,18 @@ trophies_data = [ 'trophy_type': 'time', 'checker_class': 'time_based', 'checker_params': {'before': '06:00'}, - 'is_hidden': False, + 'is_hidden': True, 'is_progressive': False, 'order': 17, }, { '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, 'order': 18, }, diff --git a/wger/trophies/models/trophy.py b/wger/trophies/models/trophy.py index fc41a7dd0..1014f4d24 100644 --- a/wger/trophies/models/trophy.py +++ b/wger/trophies/models/trophy.py @@ -156,5 +156,4 @@ class Trophy(models.Model): """ Returns the relative (to the static folder) path to the trophy image """ - return 'trophies/placeholder.png' - # return f'trophies/{self.trophy_type}/{self.uuid}.png' + return f'trophies/{self.trophy_type}/{self.uuid}.png' 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 0000000000000000000000000000000000000000..546fe139df0e65973cf5f0b518989fddf4808abc GIT binary patch literal 79621 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%0AQv{}yuU?Zf+diqwb#WaS0qgz8f6g4$ulkt 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 UGg3ta1ONa407*qoM6N<$f`SH^{{R30 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..0dd582ba3e82f3848a9212a4330618054fd2b0a9 GIT binary patch literal 102271 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
    JU1Ur7^f$EVx0@Hucw>o0iRlh) z!gSJ97K{}&;)blyw+O{SZ?DYb>Z{naG-FCW^ZVIy>ap^}exv^g-PK4_F--)<;XS6? zG2P#3mJCemsw{6xk>-5VTk3dQ^5)Iz)q;fwjBSjtkkM4G5PFXa^>saQFo4H3NQ@dhH%-SAIhxfqG)4pp&NVjX3QO^lLGhAw(i6L8LPB*hZHi=03+)lvGy(($gLy=X^2(GFbc$-HH+vS=-XnxHsG zX$P*2mYUB}l@05YjKr4FfR@rkWG*qf51-@MCLKZU(0l8IEIjRj-auL!Bv`G&`4~5nk`)TMB$i3ZLn2)@*ub8|` zp&CN*5V=n!^kMHa<*+H?-9{e17c~uQ!c_5%>;Ejt8oj1--ulf~q>wkOza~QKopQ1@ z$0!+ugokom7^`Qk!{foMG|U5VqBxcVW3_R%A7;F+)?y9&lA=bE5wx36jpT$wglwLjqvz6{_~~p_ zyy4xDw^3p9rxIzSWS8Jr=BwGj@#x=aO7{B2au0NQmE?ylg(z0Ex2@ZeHQ{jqpyYdd z3o@i2(SXniE?A=D!maYi?}{g(I4`Y$Pn#4;4QcT)Z18mVVeoEr52Ax|35KTeE(gYF zAq*Emh>3i!dDp>VoXl)TBkECTG`gpZ7}mLWS=&-aO2@kez*qkI6TDnh0xF&D&3cABWfS_ha@mhFdxr147sg)S0l!~ef?HC1WD6{VWyt%o(x!Q*Cm=~yu!@L=x ziYiIBv^k`I=QT&EBiES~R_2XYw+pVa$j>VJB})JxtNta|$eqkeCjz&ifoq{uMcu2) zlv_<~pflP-P~BBTs)ab-$RaOi#HJ18$Vwx{Olxh>uPtSwMQ{3idHLomo>EO6a)?qC z>YZiUDey%I=)mpRx%W(}`D2MVLa|%@lSi>6Ps77UcsSuBJdQ@+!>j`VNs2F1Qsk&Z z;~a{@it%xIZsM*9WN{+%01jX&Ru_rgsqtpUWjf;$E$pIk-im`ITGQ!52Kgan5XMCz zn|c2~m1biC%59Pjh9KTX3>tOmH1HXNeO34#^a*5_{R!1)+-Gev^K79B8H~aeSr>Ky z$6~f>?d<8u@um0uSOV#<>j9RM3ZTCDIkf5b^HV>-ys(1omJv`)+Ve(IT|_TJ_a858 z(S_Fgdu-Erv`8UBQgaw?_sY~xr~@JTXJ~FjP!R-VrIVGkDKiRL2BD;1Keu8{x?#Nd zN^*V$zc@(&83uI*bDRXhf|h0P5=h4N`IJQ=tFh?i$Q{>OmA2_*$lD;&wLiYw6C-5w zaC@!Yra=umcb|6;XT;!LF@c1>ykRbdYAGr!l0?Y&sQo7K;UJ5m3o$}cQA7=Bqiftz zGtdc4aE+9Er;sKpR+u`TK7+i=3&(M16J(W3N*3AdbCDoo@ot2hCkSL!guzSbUh6hm;)plc}vJ;+? zSW5Wh1M?QdT)G_FwwORJUp(o(%%l*h5|yAvVf0g>7^$EJ(gn80PP`({Q(E$JQ-2d7 zj)f`Kub+vki3AcS5ema(LIYQdEbuFh=C!bL#7Eb-)5M85j*1TnAH?QHdR_31(__D5Fls_ z^5!dA_08tPL@H#-BAgP4G-65!M;F;8TGDGPM$<_1rHYnw6`em>eX$?W<^@+MKJATJ zs$$(Wl5e^C3ZfnjI8jv~#%sW*7knG{`~A>?yt(|!pHn7<_%k2Io@j9p4;S){+Qadk ztscKFLgqI!)e&X}$OQLM_`G>}gv@&ht+dHO_Ha?-#FGqPG~+$KO=l^@XlY9Zv<-k< zRctB1t#LFKRhy5f+3ZVn4_=*5Yiu^z=7T6lpJu9L^B|Zo< zZcDv6WTT$7N(7go4#sc%D`zNSf--#>SqLglR(EXuPIU6D0^VRj-o z;VR{}g!LAc<{t1;t%zY-0LOyLb#`)S(Lb$w% z1ZTyAUqMlXWeOB773*=pDO&51S#!Z*%A0r^E-@ii`bDoCVI8H}$XD+54fQ_ZM1T}n zy>j zXGK*}7^sP=B)Bz5EcxCuOU*uv5kq2v{Iu_AHrGCQ@6zGLCxR_N|Swu*Vp`r1bgp!w(3P-WeXKKNby zfA{D;#ssEwDSt#rS=si1eS^MXfV|n=zTGo&y38gdN9@BOM=1A1ttp(e(!Z)qmPphq zvWy@KxA_e6&J5bT-1IrY=acQG5l8{ti-fbE@aurpGTdyA)^J8DPaIzL+3c^sTz;z` zQD%;{^g325=PX4@6UzJCdW((z-KH*woZKed1+3Q1fX7vgda{ItjFT@JBIK<4>i%h} z5{I}WkbR(p6w+mBi+=e{QpjH^g>alY9ZBusj+Y&ap?oBxh0&ULX97AmFc$zgO7D}N z3y?JvHOUY*j2ucy{s>`#38~@?{$5iqF)oAR2b&x+$o1Qs-PadaM<%`5oRRT>?%-Bd z>gMBF2Y670?|lQ68g;UA@zGoJ%+B}#cm0Eh{GrfvFjZNKx#_SiAzu}}42M+!I`qcS zR+@zrsuM#@wul%oEYaIH`xPo#VUh6o+92s6ixVqVJ2m&4(mJD8f+RvA zA_r806>As=dDdBYkPCOF43C1oQg zCU5)}^*HyN-J5Ut#D4y59p<2_+@mKPI2psb6Rf7whxsWdIF?u2+2Gx#mePJr7shT=fE+wp=mz38FAGsB_Yezef`eirO?w0uJ7*5fsGNSJq^$EGcvjI^M z!!!;wC(0URwBnMxA6EVLD0Q(OE7GJhAfgo99sY9yI1=F20(p?DV$rzajP)#HS+5s= zU5!6qIBgD&{^jYfu zXawH5`1trV4U&!uEOzp`qY~Et{{hD|bSQWqh!*$L3zK7GuT zB3h%aZ&E<44_!!3rMF7~(h~2r`dbyZF@?|tw?W=0OmA=nOw$nTjF>+zQhDjcV|797U`AmW`X@X}SjG2G3BD@Gc&ddC{8kB{}Ihb+~$e(}#p zUXnrA;K&nBo0@?NID|;geLc!>`nWn=@KaAh=Sqi)!WO+IV@M%NJ-be1JUkAM?iC<> zhpuP@s%2&i((!dWN8;3HO7b3k+H8JwTJLmJN*2r&I9{3r!Vpvs%`~ty+pW>|BenBX z9g+BYq#EnjT!8$KHt9?WJ2mSS!zd%%UC0w@us+}%V3R4|(&tRR3wHhEpPSujthEz$ z{%SC%>`%cmBoO8X>zC#&4UaCKVYgQBgz|1Wd)k%@AxFdA49kxsy9iYk-4`~Tqt$~W zpC0b#Be`k&x8E` znY_MTohsK*kHiH{Aw&RZNFmKK%w6eG9r1&W1&i_}e|Na$uU0fh<}^CCH%@24UFu0_ z)PEEO6hD$c0-4I8Bd4>Q?Z>&G+V&5>Iy`#kIwF^Gnr!cZq?XKdfOH^j!Q9LD7 zE{ESeDdg?vNi>D!(A7$33k?IJwVJL#gkTV_posE1-9i|q=N9)M*$na-Iyph|Wu|=S@3KZ%ZuWu5?76MWI@c4&3 zb$ERC@Y`PG!~s`^_(<=k$b^?@7bRS>VokanVb!PP=AwW4rGNJS-oF2^7|e9y#B!pw zXkZZvZz8B1GKVIvfRrJQYHSd9Fi7G8rEUuXl=KuJKU{!62;X%`al6Cw8Vsvp4VWU7 zX>zkELIuHJaY;P?F?+1Z`uf$wYIjzyuTSnm+F=*cG#O|uH)f+xz6NS29jRN+4o^?B z!9aa;bMy4n^{-Kmz0?xcYb>!;3K5l{=}mlw&%x!X*{tgyezQ4zfT!*ddn(|OiB5F` z6c$CPQzf%PB~d2rH<)4dH(MVhyVdQhpBIxL7HufbgI}wLwy*|>=^E{$axywb<310_ zi!eiF>Oj^~_k$E5o^uNj!wTUa7@5&WmrRpUA*({4E#aa-^oe1;V}$2=AKLrL;_a8s zYFA!Xor`*Jsb*l<7W&qi->Xc?p-U7CuaV1rcl?~nDXR}#NZ|H`bKlV0T@itZFobHB zq9}4%;?U{4UruV?V;&=#Jvtc1&x`Hs8<8F(=}->%UfTOXcnr zR`rv^9jr69utK7=(%R(7eK>lhk8Ua;otTtC%)49$`SpV0-7}(FC=QWx-b8mS!{v^E zik_WnQC&sD{MZh4R*zVG--pO$nGALAAS-zxwEecQDQi1(16*>`%R57v7OmK#Wk}n2(}GMH zQc$o}%Z5_P={a}dG4+zW4Nn8H#%i!hP_%SQa=PiAn*rc5JWah~X%m;6L%kQfk2nV4 zvR)1Ux;k&h+n&87tdChy9DZ1br|s?QK0J)I!_RZ=>W^eEYc!qs#IrJiee=Gc5`-*0ae(RuV(=$o;e7L-1-TKS8Q*AO#e;O`JR~dPK4!Sjui^Ep#4we)1Q9IsdNvQOVkoN-giIRHNXK&H#BT3})^6JOy z$$l`>J3LQxI6A`*cC9Vt&c0K`+DBNrMeN5!?Kpy|1|`1>wbV!c~m z*jx)hKWuo-B#!9Zr@N*!^0=w2goDBW!mor+IsqVym16p0CjED@50UFbD{^`H^{kMH zGilR4#K(rp=&7|5aH1j^SLHkSK~S_22IWw2HK|)yc)Qa98Gr1c2Co#a+ENfSh%{lJ zn<(zQ=Nd{iya;Aei}2Wd`LNheC{f8p$1vu#;Tm6Sq!q0Z-K2BG5y0^RihLg%fW6?l z(y$;<@;-Pk{`Z&*kUQf8#Ae*qs+|4=Luyf_Zo^4m_(fJ6`b%eZGUzA4!ol4=d%eGY z{eF9S2~}48lI40^Cz-`I!rq%@5~zyVqXphZCum67W85r>OB#R%Rhkhe??9D=f0}W- zo5pYPmn47`G)CmV8fLP{I-!o%UqrJw{B^n*M&`SJIfTdR_Vx9C?`?{QIwdwBYyVHn ziVw;(oB-S~PObKECebLJoQH=&c!^J2vaWx5Q@Lfhf-- zg(&m)(R`?hZs9#)rMO-`tNgm|yx{zSNAr+DJ%mU+8NQuZr$ABWbU zSxS3A@j`4FQh61usg`0RuF{)CJzt;%$Jw!;9>8+2p&yjx55CJM|F3n%+|w8?Sx+rQhy{d4AT&- zm$#GsKGi|iol8p~gEo~Q(5R=fegY(kiW*%q8X{s}4RKe8D;vx@QXUvU_yEO9W8TOA zUC`Eh_=NWyDK!BDcq-tFu8F+KHn7DUvdly{LLkb~aL{BlweG*cd$aDhB0WH>{wlYS zHW^O2-^&J?YALE#;2CoF4Lq1lL2s)eC!S>v-o2zTSc8A$>4FV3H(4q=0tW+$(2|=7z<8iPRLy%c9YBl!q=;u%VF}nHc09<96XcIW!g_RY;;6f`!(!jzrOx- z6(Ni@Pa~(*SRp>54ph6$PNljcg*%r`8nP-Ue`Aw?O-MwE1e>V_|GR-VAIv+K6pW&n zG6N~OpvuE;M6n$qQNp4y-g+!J3jev=-hNt4f`keEVFQcK8niSH17H8gWO(J8t4*if zNsK4%y~Aba3`m%g1wIiLIYh`Gxd6HA!B~F!#^M!>;!ykD8o`GGc|}9WAOKUOP9hQ; zz)D3uTr2AoC{BRI?bhGEik?$1@6(6yXuYXx*d8dUe?Bhv%#J)1S!Hc(4oPfix6ttX z#G80r2&xo~iZw9dUur2nArFpBo)G@l5Gbtr^x)`ugI7OZuZPy$K}(`)N6Zz&Km0$f z(QFEoF6K3gf5ageLi=KAwkJIBc$oGQl3p>yy!(8teV3hLJ^p^76MTemZjI)a>HM<- zat9IiG2t^ET5=y5lNehDS|ws=Lcb;M{usWKhWNAh*<`(V`{im^haSCt0V1nSW!7+U z(o#f~l%w*h4iStSel=_bzNC9QGRkc{#+P*J&9YhYFoD2}J3zKmVaY50yBSqbX#wUw zWYja4uQdsnzWG>8bn?`IBjIZ)Ytrwb2hrRB(4fT(v5he}17)T*NlIa#p}%um^Avj) zp;#n9{jY1y93PB2DtVo7qwB2$m*>&Ho@9M8h zA#o2f;NB7FmqB42OD7Gs0z8E@d>=>yf;Q9*gZ?%+=E8Le)n=qYNLPrg#v-mg#EY<% zDBg1bS%=qdZr=a2SW~|MD510;U3vVh39k+zvSzk})|3dTMyR11a6@Ch>xMbq80t;q zh5_cHddy{zyIxx{mQ4g#2n&i_xW*!g5zYN7bFZmTyepJ&6KRbIH|@axVAy8DtlXe` zw(XP1;`OZ~9KOuKBD5c2nANth&``^)@Ow@ks1pIuK!_+32a3;@yt_@q7J6)%PTorm zm@7pVCJL96O)9GRTo+g9Lx)bK+}jLH@#Jssp*MfM7?evaRM?~n2r&{yNo1KefR~0p zC*j!n20r}U*9fy(1CkxbSb+7TH@Kz@tB|VtMS2!$@_09~Y`(_)K@q%5-hgQ`81Szp z@!W$_jL9lEWE>oDOPK&E)XmUMKl%{4{&c$;WOvVnL)33#7m`pXiSeosZGu|pZ9bc* z23iW)NXTwQ0YQrQA{^nUX#36HDFRIz8exr`v7ua6iwIu#4JkGnb$&JC|JvF$=+0d?6nYP zBoV-Dt7yU0e-PXgk`n9jmy58%!J3D6AwqKjDna3G0C^^Tb4*B_{)(WFS8>tqI7G9d z!}DVh--uW{SuB2fzqvd+IzpfBcIi)P%t^q5-PpFU&9V*ojxG7&mS&<#G~)4>r`f0k9H?F zB*`ABD7WO~B!q0j9<5{l3WHOVS#e_%PYNwEfJH_+%^;8eUKj{7*7}e!8#*;^f za41Im5PJwdXeur(l4e5y03ZNKL_t&)o2+WDTkbUgw2u$KP?D6p$N=ucKRL&?z(%Mx}$Jgytrg@{E)Lk=>LHlbI1BV(wc z!zQIf9|9;Y)v!qwl0VcDNA!d>IVPMWx3Ig_)u-#v$zjc=ddLKD`k*hFAUNi^ZyVXyO1)GP~8+Aw24n` zl@J3%`XSrBhbf1zv4V=Fp7bH|v$yC>5>hr? z`Jqe-DJ1qI)}$gLb}KqW(a`hSREDHxRBOT1_2zeDb`&-=Z$C? zV+#4e8tyH{0VTZnN)v>zG#x&nwU|>UPObfM>-3*p8e$d!*?4`6&V*J zuUQ*XO9_W12!cZOu9jttR=GH8_$r)EoSJ2!#LAD#c+o~o4H~w3S6Ef?f{oT!A&Z7~ zqdsM6-iOEK=6xWX$6G6P;&Hqirbd?Li`d1dsjrELB>v=0d_2z{2|cM57quo{8_;v0 zcczijb;kY;6&B4PcY7;DrnxPMF$Q&hG@D=%i4p^nM{>Yx3s2{a7mTXX2F*7JB4Xw)I(Dw9CuY)nC_>{XVHF)1^kF z)sh4f2E4xL@`GLqcW0bcO=|S`pY+8c8Lf?xUN+2Jft#77&&r+5-%9~<_xSH;Iz^*? z9mcRx9LGUs)qJ`56-|c*x(lNj+ZLJiI^lP$$L&O50;1jQK&M(NvSka1X9wB@qQtTaK8nmAZv;ZNG^SF>+?6e z&6n$i4-cQmdv>`cPH8#}utEtC+Yv)Ug&w+C9uR?2U#eSfeYTE=l9JfjsHjSsQc*~Y zO^5qW{15bkq#5LgHCu!jCXR|NcBX~M3c1HeT8HdG2Xx?N62Abw*L-BH$<|26xrZ5; z1U|Eb4yM^xzPO85O3#&@{A6|TCM#Ik^s z*b^v>aTuAEJAmr>=cCw&K#&NB+u^Ae;>P8GIh3-y)%y>VMGOxcReXHMI9y&@LpFiX zNWVd0ku4B>b5Ay5T9}Y)lwp)ARwgTsO)hdi#DW0%b)D9Dn&T?D!MS8c8b%2gR#cj2 znv9zj!Co@?uK;Ybe#c}9zb5R8Y?%6*{o2)8e3BIzBQ>wH!Up+?nR_atu8?ztE|)}Q zI#o&@Ot0O69PPe}r*n=*z=>r{#s|7u*K+*EUYGEWq5^x&cn{o?&`};V}#y?4oEe?s>>p!?KH|)3h)fu>qlgM%sJF6%XJEr z9Qc)-`4t9P8Psti(i}eX$$ql`vA5p2JP9`;-N6&)#EDd^aVyMDUisZpu$UyvuMzCO zu_13qK9QZKUrnFfs3np}NF0wlXjk8!fw?Yx#KN)Os^H#JPMFT6C#L znyHdv3*E>aI--7ykK55XZbMXu7iOdWcQ z5rSPhSZlNbCA9=Ly8;3T-G(&0E^6}51QPPqg+!9sifiXM*YFG+RVrqUSq(wMC^cL&zWmabO7{H?}nc3cl~YCT6kt z>-HodJgGS1M&wPq4BBdWci3D{-O;%g&Xdw?y!d@IKpubbTu92jU`@C&MES7F?JnrvViLbUj2(q)qv#UK z?BWf`of;F3i6jIDzgKZj>%>n!FJ8aDssA5&U&0y{l-ejhrI9s_ zzPO$&(|}a;|NmF7t16dsBC}eHWe>~~#=GQRGBUQa?49r*gb2Ad2GP5p_2h?HRq?C} z%+aTSR{aE2x#w08>xLpIsDrnPLGyX zP4eLMR?%O$3CSCBU(`Hwx3TUU9ed0i>b(@M==Qr{pU!vYp%hH@On97n^x@at+x-FZ zeHS5rVEo|?oWvKRr)mCVa3ob%gkts_mW^OK>dA=_Hcvdk%GZ(4YJF<4#gU$%+AWX% zb$hqj{VVD~@(eUwz$}6=Q}y(g*92X%V~x0iqR6so-a=2dRCv3k%IPKu+}kSYUu$=}4JUs|@KNLCz|c+w`5 z3~r0~>*3P7>Xxr>_h9e157~eUPTZ--5~W@i^>dWHl~rnQSA_*gTfpNTD?4I4LSMWu z|MA|=)m)l18~jyd5cc;P@P0TQ^sXW)$}H;$`Vilm{Epy?jg<&FrBL@E2pzJk1W$kx zxV*hDF|nmHhX)32$RPUWjsO|Dba|F7&}$|=bm5cT0vh0Cb?ypWOLDYlp+vCt#Rw6w zTu9KXv?>GwOMH=(#9=(>I_TB2(|y`m2ZUR^J_(K?8KUK~Yf}o59#3dL$HYK7VarOO z?X1LuyKiGMXYEtjfV3+>(VPH5>^`iSgAczf;{~dQ%VZ>(Gbl0ne-x5w^sO{WCbg)d zEU*L7V#`+KBD+L4!dYX0d~-*D3|+cTW31#rYPJ-Gfv6l-3`H4m@2Sizj7W(jbx6Hb z1)r=Qkkk1!OUkYu1hgbNGmhV$X?OPT+q=@oK}sQ;;60Tk)m%2Cz2o>Itk(+l=GqIB z(F`|tJ`{S3fVVlOUs+nZa~lL=f{x3*6vPg`J-XVxis8mF5}e*#V_8Hrj^}-?l&Yw# zu{nB0A_R;R7?Mc&qKpt6Bgcz0@qC9Tb@l810J&KIH32KVdS25A`LBDxqtkDDLA5WU zC;AG*UBDw+ytS@o?mBkw_~L2a7piAyT%1oNFq&SSXS0NpeOV;lts67WN+p(?7gIZ(l*nhw&9F{3PR`+q!#-`RT#CWhc4B3N=;(%_2dN zP$do(t5{0GR9QHS^&a5bG9y?kB}d5@A|iI}D3djF9P&i4V)OM~8RYw`m_bmdAyibT zSmn`ES5SMx_8BF^)`0l&=ZASCBK2lpeU>ySwI7rRydEGYV}u-i`{6DHw1XTWn@mED z?d;g*PR`C|S7Eh(>>#);+iNBdwskyJF)?%Zs=9i%84dY^F#_QdxVND3cc)jHODtk_ z12|Bl1TT_lE0vR!_oacIij^l6M9JH|fw2tmh2xYry9)k7!}0jz;;sPsp%YbW?(A`% zoBMOZVig*tgd3y23G1zKB6mnQWyuiXf)&y*kS0yGaJK?1k(8Rk%tdth`-i=uaR3n# zY3du=i)`0p1hq^}M;SI>U#TSB+>% zS?!`(w~^ee-Tc0|+WANYPpPIhh$3}#DH@Gfl4QHg{6`aRY%BI)=fg7u2n)N{0%X^v ztKx7Xd=d1_m9e)Dd+$R*^phPubz*dVXszmv)h~B2B857zln|B-@T?9FVNyKaeOK>) z``0~WIcvo5o3;|O1=tY41 zJc+87Izss@AEHf<^`gp`O38|+=7OEvz03*WfxwpOD|kCE*rSMLi$x*$?w5bx9T^oF z2hg=1Obl1tiS&D{3SD6_1sKJaz$dt137S>?JRzj4*!sPF(WXMKeNg_`_2|pABlI-p zO>bnA52bqV?Hg$}+eX+!X4>_tyI`+WYvMpXWV+mwvBN;6K)B#bJ{FXTFz5Mp}Ug-nYAtkDB z{#YKU;J%bFhE%5Fsbu`-{9&V6S6sQe>k* zItXK3@sOb-U5sSJ&kcP^ry(Ibd}7;{Ty0-SA+XZiltI+Ly(@!Utbd&{2rOdK#O;u0 zY10Edl&U<5Nnp7WWR%RIpzH%Q{l(29Xf0GV4pAULbNUaS^`jntTovBW19v(^X&bVE zX;%C%Tj})W0=s1t7N`d~u$^ivp0{-m(Z14oM^0~60^XgEN{?P-kgvBxBpEn5 zLkNL|epn;<79!WQ5applp(AV-DqF@(65j+g@qv#i6+&ht#0;_(|L42gR}To0Yr1S< z-fO^%6_e%(Vi zKky-iP$+Ynp**&a^1P1i}FlrOSpF;p*jw z+Xq~lRJ$Re+q6>Q9p{cLF3aM>`sHi@`DD1W><`07$I zgER$%Ta1XNmY9#io3?^u#eF~{)dO8Mq#+H4Lo$)_$?MF zuuE58j0UnWqqp^5$qZ{mr0_@ps4jSz#P);WCxz)coVkebt{ zY;8)AI^q}m1yD zjh++@2qY1bRY3^6A$~?NxZ+_}CjbdI>L6)pUBG0a)~bbP=~o`0CO@t3&LIDDvHtm) z74S;K05SYlQz>jw=UJHl1g+-%A;|_6@TegDddrYO9yb*3u5bhP00s8g5GRXRyXW3>G z72eGxt{l4>4>n?vq&ShvR>*`q8$Cd`p{e8W#r{=DT!~ar&@+1X@yow&55l{C|1c@& zcQo1&|NY&q+HO~Ep{BcN;&I7Ju{yog*ppBIXRijA15cXYOHfHa`3;uH(Q|E zGTI`)UFw1UOvdLJN;GZunxw9#JY+ju2Dq!HPi z%vD+AV!e>3a%^!^(qxHLlGWo;Td0a6*$=~lufCay4YII3x!?S1`2M^1Td~f=ilagy zJvRn}Ltn53dK?HWRF>xe$t7HGlw~tU04xcV6>Iada-08Ij~)K_-_U|w+$V#)-Ks^C z8NDs5gn9_tFGYU_(#C>#5?fZXRvs@`1zAy)Q4Jmr+B${SKRUckn(x1VcksaI*aKaR zW^Ggch?67dvW#M~lPV@t4jG2d=+5;Z{Loj{92-Z!HT=rC3{9*TgmH*9qi;Xofb25J zZ@+Bwq@(8HM0yS7l}?H^hh$SA<*L0#Au_^S+=WsreY zNYP*Gqp$!p(Czt5RUCRYR=~lzLUzk#Y3fbwfd+>C!?uGtgZ%r* z`-+c6jS}en3@))INo%bL!%V6$8n2WYL^GGtB~}U+)gcdnF$ne7`(==e^*6z*LFo$# zEk2vE*!`LdtNoyTUq4On4{_eknVH)?CQRFaPiDj7RhxA(NOP z^$>9>M2u@@1YxzcL05}l!F`Cq2G&rZdM?>|Nr-0 zlTDgBS|Zp1i6I<#lIX#%)?A20tQfyF#aVBJ$>a`MHX(ZN?UixrE-{D`uRnm`C|FAH~Svr$;o}~aZG@GciI_|a;adEE_YyCg#w}&cw>5-l-;j;gr z8DsehQY#@Xy`Qr)sd)JEZb-cc1RQ(|A~Vr->mPOLDp~hv9hXgO{*ns0zs{cUJIJ;iLa=_ zoAIuo=#NJ&tfDatIYp8KQSyXN8AUw`q)tu90gU+XZb$%{RV%Y{Zb^ezm#l0Z=!~{Z zDqL~t)dT0e-?s=v)Vzx;_t1OHWsWjF_Rq2oxJm!_FO6r!su3&8S9ezuY%3DFc+VCS zQnD_`scK_|fU1%w9Y}}p!W~H(nbo>0b@bPJ2FS1pQC}znSBFZm1=)%eO?`Ov4x^*< zmIhunTNt@inqQ~cRjQ!6v@FkCbJ(IMAW#i!;{EphziA7yuLG&uP@VKA^S#Js>P1=y zWWj9F+!8R$%_zm==CR+WsOT_MHuIC+%|pY(lvue1kpiWmzKoF?$&^oZIHOAxAp&AJ|Fxb?Nj#s$Vj6 z@Fbf;%_MH$U9zj4Z#^ExjVdO+-~GN6LlKn>Ns_vJD4WsR)vk!$qzN<5eF?7fbMxie zNI-0lWbsWgg$+g4&(#j39v~Ng`sfoPMvwt72pnyf=I_{so0%}RN?{U4_hLqyS_2R2j^S#kpOqc@v5y;X=)-*{DU(amDVptz;$A%sc$LVwG3vVaM7uqBM37`< z(!FC}*CsSOOs|5xZ>FX@Gu3s5I0EIEBZZV9#5OZx?KxiVLhhd2^?VNw4!&&~9>IFU ze-i@$vWY9A=&K5)z|ex+J3zkn4XMOgxgWd9 z3MnA~03ZNKL_t*1v<`&v)!Fjjw_+1z@(|PKvVuj}KY(2YcxZW}fg0kR8r(yrQX7f3Ca$Hf7pwJk6@uVfA@gQPVC6=`)>zC#Mx}}ZriO-7EE?n`a|p9Eug`=Ks z4*--vYroGTn}R8_v1^jZ%mwKZ0QtHCb7E}`Sw1fFc-wKPYsDBg=Ak@Ac#M*9zrF7O z#UvF-`gkfk@!o=|y;XXyC@<7(4JrvlaCjzFDR!=3rl!vf?-J*3HP z*7zaZ@TFqq&b8%HX@3v@44Xdmi z8b?mg43G*R-HUOBHh_Br!i-~GP&7%-(Mnp@FlTOl`EdK{X+FYnyw0bSfP!3XW%glk zf?j3Y!#102wkt6DjOAJCU^bhgA&0_lL#{Ya5+1wT;Jeoi`rXs&HQwx5P0gxnf(U7s zq%VEp+T5_B?WnPNm_b7%`%t^Bd{>v$;EN1c^lfnkxw$~ggEg*)%p?l1|sofQ`y5{qy7}dRd$y8?X0OF$%RpQIY`Q_ zh{6&hqp66O-BmzaQtfkzc~RJ`dE*@JNl>crdK&FMW{1490rGb1m5Avqk7b-7_^0H6 zvbFotSx`b<~8q6@X;ES)D=u|L;1=u>Z95O|ZmdqI}(zq@^G2QokMOBo=K*wEX$>!~wGIN88E@0fy~K&EHeK zrFm@?(|dB*ks4a0ko*(Rlp#-8S>K?#N+%W9J}m4HE6eIRUywTjWc_BU%{=)CAo$#~ z$6^65FdC5FKKF`6s4tbdw`R@A7g3T(R`wiD%X8(b44RPJgI7=b!SmkKr*EKT-<)i! z;#$MU5C+H}+^nV)l&m~9*>ZQYp+pgwz?)2p%GsmtruAS-$an9STS;SoQxsR^M6l}U z1W~y}|Fb)=C@x!wo{3d_59)*sp7pNWxnm(#7!#y}xC@Z)*ALAg>z_0`O%+;1rQP)5G8_>wtCHN*=kik?`Hb)T(s z*|eZA^D8tO7`5HS^U@S+X>^-Pa@+b$s+yyB1jyjUR+WOYcL8%@e9fN0W){*bAp!Y< z$edo}!#ayOYhdMctRC#yOz$58q**>cxPOK5pe#}XKkys;zd4x~fq;#8GDpymZ6c0d6o*IN@FEc{-u-HqFM;RM|ny(n)q8CWJK z9-}4+#_66GWHvx9{+N71Xo4*@-6GPjuz92;IVJm{t~50@YVpDzz5wIrSjqCLJ|W;0 zX=zFOB-$YOqtovmQ;gp?jci6oDyW0Xrh0QyEHhs1!{TmOmK~iwC`5`we)9P62%mcU zuVGE7gaQ(Z63`%{H(b*`0{q#Om3%AHr~=;ydIM1fZh9nLPCs5)uGA2!d?9)mS{K!4 z->e@VAnPB44T7kjS(caLDc;PgZ4nj;|DEOAvd_vCJ1~;7s@9tJF&kS!jn_?rFnv&VF{Z=vLcf< z?XQmskngV&+el$Z;Vt!}0h$U;wycPQr!N7BL(#$=n$cWk{^F6DdXO=rwj*^Upr|!2 zK%2|2>Zj&OV&oe84CoZFQrg_1009%R4b@WglQgxm;Zc2VC$H`b5)&NbADg2=(NB(sPkxd=Z{zT91x0k`2kVcOl$ZWLGjvO|m zd8MI#P=F_yS-Bqh1&`a*t)=SH0Tm!*_3#IwdB}A8}vBdf;A!5WG;!pmS z3$Tz|&b$y=x}J29HS)vC1K z&ik?PFsqXZV#cwg5PZJwC6D+wZq*B}3NAx(Gc&FVe|zYuIe1JvVk|kv@2(5}AM7$x zX4!xXwW+ww`0C^n_kec{vThegT{5>d9yF2}on(1u*l~)*L;iD%ErBx3Y}>)xOhiZw zkV-Sn)>Je|VE;l%f;b~F_3io*Q>^v+>rOL>ImLWe#kU)CPH$jalGQ>J{V##1GA9;p z5s|{dS5U9oy4)FDm#IF*$f52s$k>EDAVdxx6C@|Eu1|1L0fXOU=$3NFE|Bdx zyS8VZTg12nNJYWRmieOOxK>F)st0N;qia>Vj10ssLmx` zltNo*XSNEi#A+$KH1$z0GZWL&k29ViPeZAi*O)g}(H@sJez5L*Oa|H2SjuXJ9?P4| z7!#hv^3@HOzxu+kG@+(S#}tjkk_NOJbGA}r7FliT*kTCh7DE&A`|TG9kMZMQ)RRL> zxDK4%>&V{Sz^-FMvtIn2hXu!;1;;%f{x4k?@=hUQHIWwpikZ9I|}*+Y^SzomX^B2-iR!iIvtAD}5LQ zUvDDdYW$mn`ql;~y7vu^lTXGdPJj3I+oNtux`G;&hPji5BkH|Xr~!;MT$IIh($s0j zu?#FSC0jQW+a!aFI;oaAtOBItDcnE9+7}=fLyhG%cmE3GG+$^@`>-6Bvgt}`wv)W& z&J7#wy2EESsi{!!*~Al>9tt}b&yK&Wb&QW^Odxu7`LBmI=m(#8+%ookgRAifj88GJ z3yc&Ese75CWj;6#Ud^@|Cyxt`ut&MQS#~4jH4Jd2oG&tFh$V3m@*C+o0=%DWP25R= zeuySGsr-^)hW;n4+_<%@|?(%`I{x^d!$5q z-k~Rw6G&JQ`6dn}psDeIO%y7qEVmbhOwfl2#cU0;iVB+YG_pU{m z*cruBwJ`t5<0uzv;HKFweJ8ikLvY#4Tq{4jGSQjLZ_lC^7PY=a;#)j6@cHr&=g_s$A`0!LBKxM$kC#@c&dTP2}EJ< zEru2$sg9RY1)6N55nH4MBHW7emfF@BSW`3VyRR$r+xupa^{<`gl##CMSSBgI5NsTn zIweAn#LFHe7E)kd)&67BPL^b~NcwORXP=fJkMBX&>mRSWvBVP29%-|ehu>sDV8E5Ezov?E!< zQj$+0%IbjxY{@__CRrwfh<0Z;C%3O2=QH(WA7A<(e@w)joE|k@*b{2S>>w*3=VXz) zfD}1}icJ>h=%fOdnAu1B=%|Dn!BQx0Mp2%ulmpDTv1>xY zoR=tVWW*g^y%N1SlBFb<9EI?iFJx?`>dVIxYS_va3o#4fwOCf5j6d6bji1+_79bac zNbj@MCEzGRJ-f8$E=UP=tN1qvn9O^N2s)7rhAzAxS+Clcs;)x1W@a(MJ;>SfdfX z#exE_Cnu1Pi`KpRFA9&(R+aT`aW-xWBeq+KQyya?veCmI$DLsIsn=XVe$` zw%Jl}UKFR?3V%V2Exj+BJaBuY3^EKY_44&`+isq)t^GSj*nT$QJvZqqcXK+;v4Ti} zFIXR;nU`{+bI6F@n~13z3Q2qTlRI9{0&0>z_66 zD{;j~J znzQ#e3XX&Q;W7K`gL-i6{@=KMadR2)?keI@$iwFborhOI*M=%9?k{AZX+~}^)XGGnUlDP`2-1THN$~j*gR3Xu(V+tw6G+>h`~#B0eFNv<)3Z+{ z|C|f~GNh1%hf?%c!_~#A^%@A?Dy_RPIeVm>)i3;<1#?r)fdKVEE}%KhX9~fb+>E{zwMuRq2(TqLe1Dq zSuvh=}Gifb$)7#)a^wRya*YQvs~23a5BP^3((_ zeO3Ur`+Q-plxVknaWf>4<6VtqWavPq z4AMTiJnw%tNS+)NcH(yN(H@Uoh^nx;n$XfB@uAe`w@yOaZfQWpEQ|2AroUzCD8MST zG|)(kg(66(s~H}`;l({Fth-CB!78NGDfWf7s^_s>Qg##;ghzxYwH=jR2Nq_@E>-T#pIlc}yTf6Y>P8@{{13K3W)j>2Lt@V006C0tM?-VYOp~>{7^)Y7)w! z@_->wxfoFDT1k@E&uCNod8gwF*#wRw+KGXx9beN4{Wy_Wzga&;iM0!|zdFHeVlyBE(HFuO)!*hlgr4-=JByVm5hVMl{+5VkmtJ;;?*9*3_n$DP14SK{1jx4 z7btBYSbOV9Stu=J@hC6Z>rnHd_cNk65fB-#*UtOx+x3%Vkc;&X6S)Mpa%#lcG6oB7 zjS+6>SuD(#D+=p0kt#Sv0~}aPGVG20N1&;z;5Ww}eds{k@hSz#$)mEx3Jq_PIqhWS zeDWXZ)HiN5^RZclq;m4mn(SoNj!ufhsCVo_lE`Zo3@8y6xl90&4_0R~8;|n0K`*f` zLhCJ`P*H`sPuoBSO20-Jtt$A{LEyw@U6i!H8PugEFjMo; z5L$TSifX$J2L0qI*7D`zINJX`pb3E@3e!b3N;Y4tbI6|>jBxjUY*x`==j2{D!K+t8 z3o`!i`sYVYfx62)aKZhQCNqSrJR$(YqEJ9#Ihm^k1T}IJvVyj9-WL*@J_F=4oqft` zzWMd(0_3OB!7=(|i?3*gB*~tPGU-rB6bdKArx^|)mSDn72~hu87r@>`fI0C-Cw^Rm zbVsj;`~d;7_q+tzkrWm=GU_qXk3q6|0Dk>R!s8^lsrTf)o_=P6r)ou2e&Nm7feaOv z>#skaHyP8L)izSirKqB&ux5uGW2`qpwO6bo6V>yF!kV2#9a6lu1s$o$LNIRbr|0m; zed?=w2FS&q9z6a~V2E)v7{N#qR9+F9U6A5#1NZ7_gr|AR zP1drZOFx+pj1&v)>H!~vFX!g7QZ&l)Dx|J55*$QIa%o?UX4DWXCnseSHvBgR$P^#0 zzqxFZVm$EH0cY2W`e=*Ss%ADlo5udk4$OL(|A6H$W>_k68$f6+EwYGMWzc z*NN>^RxyL@{)PTuFSc+OA=-!e=<2~NCyUP%t8C_*7WIgj@e6@lV6~DdLJ{v`46rB| z1LCqdym-n0`Jo%4f4d10{9V4;CA)34ITh__?}SvBy&%rrT2rFeTdPt2+oc# z7Q=-&B?cG9SeP!x^WrA2^7su-mP?Tlq9otS`7e&2^W_#In>Gec@{q1Fg=IE(mRD_hIp@_1zs;F5MdURGdglYz$8pdqL z+@v)3SEyTZxD^D5iHrW@9VqvQ1;_w;kLvf9(E|K=NWbt%6?Z%&G|>fxE33gSqzRYT zk{zm}SYCn2#=aES9|ii(U-$784Jl;28*>pAPEtHRZTMw6SuS=Tj+>C(U+M8;9zW^i z&Jycs23wn8sqTs{1j{ST9U+MGvrC^Gz1q_)Fh$n*RfjGlZDDz+=snL^)f>E#2WAfX za*q%tt7UEEO^v?*U=mZ6rJTM@U(dk7@fdesub(i3TnwQ1tbcC}xIAH?kh-Ce@$xHc z_KaB=NtjXKL43^PA1HYdGkFJ19V^S!=H;TtqTGcRboep;Y&;XK3j@w^V-k;1?9*L} z5(l+c>H>yCwu`P!Js_R{c8edO3|gh8VvLZ!USg$caSDyrrTPs{Uh>l`E zR5*;3UKo>Wr`PY-Pnki6Nw0cUU$Zy`^IDJNS`GeD*(Y11CU(LOxTsbkiZp%o2+(2y zESLa_6uQ6=z2`5k7rhOTJm7KWj-6?9Y0m5HjCU0hOj{1KKEon?GX-!;aSpa2efh{L zJv{VS@FZLKvwmu7`pxz8%Z8M9%U%R6pHdRY6Q-KqtnC$j=`~o$$XdjAMGDPY`Gj@) zxUcy0?b8Ox#ro~GQ(|6dHn*~SoeuGuxfqfx?M)W&`E_VWlh>oOmz8kw1)3y1jzh7? zm>40=kU)BFV^iPS=0b@M&C1<9)-9`s^ZHwsG_rOh$;&5Dy z9sh_O=oc@}8^DsnOew1WDT%=;I=Cpq@G4g=7w&xd`_fJcR)YqLq#RA4E;Yu7eskXf z>)sh;{f(*ueWlb*Fxdcou=Dx`G^Bk23CYI3RyBhJ?UChN$WDqF=757AQQL=%d7EQ7FGH@~G;Q4Ms zk<||=WGhMEB=_VDe=x-`E2l}tUoBse5_aWMh+9`2D6OZ6f=eMqAL%u#H1|&+_YRP+ zA%k#jpWte&qFynBGFq(AhWUmzdsfj}v$Z<$3yfxK2D+Dw{tu z!YXCB2{|m!jFcJ!)x{eM#rwh;T@8)b8)mBheE$S;?*JK;-X;5-2z9@?ENrN}v?c^J zn*vKiOh~|FS5!br$Wer^cyfQM$mDxmfiy1{F@f}}fbHv3&k%3owCRX3GaZyR&UV^j z;TBKV#=+<1Fu6}@^%(i;lX%w0nVE~j-eQ#1+hpP>f5c}QQ=Xk-j{}GioVn@y{&`rZ zCr=ENf)(2v#HuU1P>zi$S@sdjLtu`jRuRiXQ{$_EexqzAMMkRLurfc&aR z+rt4v3f-yaz(K9%)&q&=&9wf=%Ocx9DL!&&!9wKV@hwTQh(8GjylvxT*>>HtNyR~KZ1Y%wpKH;6 z?c%>5QV4-Wu^B;9xbd|~p(5&0&aJ}gk*-vV^F|m7ra@-6ER6hOE>g4JfLy#m zr&B2wb1;A=A|M}kYEaVm&5Y^Jv^6#3U}B+oi(TNkE`Bu4*_c2o4Xn$}sf#^GyGjS8 zt$`CAl_V4*FdCb3$x|%}(Tn@dFCW z4Tbbr2@Tib$_-nBo_o`@Bcq^bX{cL8J@qSY)t%u`JuM&P#LTIoENY>Oa+OpP!y!cj zheSJ@eRe&FbJy>i1|)!r_8AT{sq5w*Kp3JY2FPkCQq0+DyUWjcm6cd#DX}YsT z?~3V8Pot<%Xd%`jR2%I~#o|m6k|Qeb=lWb_J;5%0l&{)2XI3|D2`h0`EItjr;>spf zRqe`Vo-up$rMke-KWs^VY$Rl;Nz^?kpITBV(@RwR8f$O^x?3Bas_PhEQud$1qBwlj?d4-n`PuL!1` zf&-o*5MJQ9g?nW)&avF}%PEBb{Z@H_?a9wIuXlkQmp8iBc@@Aa-uQsqS}U(v)O%h5 z@bK zkU&m**UujBTxPY@(6&?8&Ru$HG)0**ICZ+L|i4T zaf)4p`U;-lG#?)fb)u5BT6d0uF%FhgrSsS!imw~l942viORb1Oq0oLv;qpWdBU605 zc~}B@P=H+gp#to97S=(r_wc(NI>i^FlKJ7QHBZsPgIzrOPbgd@Ah?yj#Ms{`S6EX5 ziFaW?6%H9%f?PY^CiAk;nc42RiYTD7c5~+v5BH$RBX_nX2L-&u5jT+jsYnJ};iTGO zZ3WMnfHp8FZfQO0Xd6GK5bz68lFleSaIuh3q=A^Jym4&y)oTX9$9wU40%Z4Pf9fV{w_=Yk8IBLkKSB!vt%(V{9f(at+6Td|G^(oDNdt8fWyh`%kzHl&?e;IRfOaAc2#2| z63Z}nSQbU&(pAtF>7`av_G1c3o@}(wD}N-&L?w7?m4vXV^z@sD)MKi}tr)#Wv=zmD z*h4#zhh>mK>V5J}ulhAJ?h*>GDT1cmp!!ZKHwBrx0ZlfW2M2<45J5^nYe_dn2QaTV zOGq_Vb9vmm%4#noU|l)zoKt6Tyg_j}JaDt_^5{4Ibh9ra4(=5mCsZpXtW0Q<5_1X% zQI3;ES^SkPdrOlrm;bf#my6S*tE;KPvZl_2udvsDMWwpje3>1uR-FsIH_YGC5|*_b zCy=7tpNjst09pTZ<+JN8Fq{;D$YT!B1nO;)OQ*!s9hV{mbvwrYO9BDKW~6soOfQSlP3Lj31V?V-kA|f0{44yFBowXL~3QJ-}sr_`T;{7 zB>p7VScBie_8q`Vy(Zq8i`XLtwK;pf=8`BBmslDZE(!p0r7o z>thng12f1jg`mO_&T_#n%~sbEYQw9rWVtN zE4h@e&a+aLDR6xHHMvR*LQx&ra_#F(6Yj$hKMMQ6^bq73Yj0y+W`{V`-w9~P)0-TC%bA+{p%M+q{tPm9A-L`)ZxiEyno|l4wqemn zLv1ycD?<2D3oDat5xYrR*dF&FgWBlvAXgn&+s-WfTx|!Kk5W4eOj+T?s4bZ5;-TpXnz+~9&N8Ff8AU(|#BF8splkcsHmJ;SH zp9~9g(~{tv7T>wT=o8?L(4ca+gC;l&w;!L{LP;Egyw`6aHhBn8B}gx z+}u7yVf6OH>DkB?hS+d!W_;VPtc0~gs99U71@}&-=}RP0qnnSh3&~R>>n`ZY``lXL zfGt`h2Hlv&-|U(th;mpV2M-3fI1im>rqfON>=7NvBQnU4LSort97~ueoLdLb-R1$d z8W9JRnW5vt@{(MoMM*0Q*GL*dWJ(~^f;hhZXHQF2)Wpn?+9JkW1#O;6tzCTdr$Z{y}_{dS$bjpd-X7%Rg>?$_tvo4%w zlDicvWg-a}l*V#N6Xs~zX&yeJ19?n#9SWc2zVk z24e17z+zgdKS7tAF;>W8&lC0dg@6 zvixMygV-y8MiDd_*59a_m9^%4PBaxCVDNBLQ{SqYVQG4ig2F~jAdBNDsL9ZaRVH&6 zy-2^e@UV!#0yYlOg}9cXLwAdhM@`o(-+%aUmx;*mi`(08UpD939KF7A2@_Kro8>39 zfhT~Q(8?9y>MNa9nq2g&0*vNH^~K}C)>Bln*o@ILM1R_HS8gQZ>RP&;NCk{?i1N@K zqTD^v3#Sq!@}#;y9uppq$sm&sX=Y>KrZcS4jTIa6aE+L*W>>o;&fN(rWWjS*s|5oD z53i3Dr)Df$_+rlSRY$o{wr=qb*C~ro~rj<0=a5bo8`-|ZgU@U zfRGc2l9LbL{xU4(n&sKe@gyQ#1M$MY($AsBpj(IN?dKZ(QUk0F;$fp$>0s;GO`H&B z+m_3Z={?)ljnKjKP^hVuP7LshBQKA7)qAw0PDW(Zt?T!XN+6F3kU`3NL}cYg*?6PW zOiN9U=)`+g0XO|iX3D@nB3Td!G~kul2k8|aueYNY`Cz$X;oX*_DNZJ?dJ=oSg569w z7#!dv5xRK498sIw?w4;r7(iCBO#krV-BHtw%g*KNp;Vl7c(b%nUtjfC@ByyKZ>=I$t>|mQ`Yjz$k(L( zYEuJ1)%4{pK@RUH*qM%%L$Zil8To`2sA`2d>8`uITPhzy0uh zImXBCJ{?j>J1I-M%I>nR5ez+go27_K6{E@=t|#C?(4HJ6u0yOZPLI3>`h#$LY%V)u zK4mAqilLIPf_m*iL+93PJfa>QWMG0ioTRJo*Iz6^CN~7pTw{^JRu#uw!1t|jMBx|( z2t~udMEz<-*>K?RN7ik#d=U$*0$-IitX8hIBj3LC+2~W|a5Ejrs^ItGy*)~&?<$jJ zGnK{KbTrI5C@@*KA5NFs3G_6ikkerr*QRK4Lh$D%y zS06mtyaBOWk3k6=zN+}Y7~vB*Lh4z>(<~GZiKK`wpjo>%kBoKXfqcOXvR)r*PCl$E0^M*Zt}_`b90!ob^zD54`-j_HTpe%{Ir#U>K?!$4&8iM5u*`*7KNM~_V)k1Mg(-wzK(Dbe|oEXIa|N+Vm%<{znS5)ubP0a%tgLUFMC zC+f)-VGO!va$GYq1b|w1HO(tmX?Kh6!y%@ttuSB>J~s5WV*;60&|?5E-+#ERJK!GN ze)V#fKQu!2hc0AoujW_;})Il_8$23fy(=Cj&+ocCHGEKqsF zQcRIupCt0xz7UMovo>O9^E65^jeGxka*ioM#<;`^)mr_!niYv0mOxD^Ewz+(P50XVDXKu6Csq zUSEu>sCc9OVQggD5!8EqdbBm_>qTE$s5%&Hn4)Jvj73Jcdh7X-|3O97X2HvJYTkFR z^0P-LkjDnd4_yKTmP&RO+gun#@#_LG8lQo`_-E>IJOMlVj4WZiN&uQ{&tFVxqrq?t z^GF*MdEE?{wO<*LpuT8~9Ri;0coc8#7=}Y*y9_Ych!op4FaLcz6<9Gw#*FgayUX)! z_*+vGa<$y0kmEd#TN%+2SDV{b#|~{l{~*28Rf*wuE1Pcz)&O=PBs0^9lys-kvLodH zEqn9M7`>A4iRW>sf>RO4Y3~z9BD=o`<*2K*!n{N(mwj9Qn8zB-bjY z5D^3rdVsn&l63(Mr?3=*)5PPbtkavqBSh?SAuWp4>b7-{PauyBkc;)#YQe~)@(nIq zB%CU!c^BoqP>|aI8a;Y80+i#AjsSiQA$Uk@m(<#`8(esbPzF2DUQS6K(U407<@??=rxD;I@1RyU|awytO( z+#V5p%7JaIdTn$DDiZ|^Yr)CvB=(W2qIT?!dtGX|GlhmFjg_BP_qTH2F3^!r5gzRS@Ol~dwV+Dy*SfZ44W z+|p{_x~YA2DtqBkU%yG9PU=DLWy=9=(Kp2T?v0LEJgYm zU~jF&O6RE^#14)cKkCnfZ*dT~J^KB-gS;;M@NxNPO3TDT)<)cwf^!MB#>{(tgd1VQ7~EnooKv)J*^ybYX{5mWG>{%LnVb+942ct%z56^ zt>5zZU;|KfT62X%Q(sEM-`#p-EPB5=0{TmrhmIiW3JzucoWRMa%TGYHUHy{`%vQ53jlRpajV9DKo*z@*_ByFLvq{%nOx< zXI~x!Sp;aXpBTZr-~99KCnS(Z2gt?x;&9SMQ1Nz`TJ!l#koGKLtf)(&G@G)4m6=hw zyrgaEq(&5)yzyop5{QEW%dvD~ixBRX)jfcPdr!02dnt^B1QG-#Qim}<W;tt27h>EMRPfU&i;YJ#PMM9jXs(bvd%S(Ytl}LYD|7SAD`iI5`EDouT`kFsb?$tFvN8nV! zFc+h$6M6v@3Nwg2G%-pA{w{&sEQ(pJV+?PRSXTRnzLg){y~AcoAig0JJJ3LDn)gG5 z+JP`+y@=iFU=+2Ps@u|4f^&@P(`DmhsV#F8 zCbY%KBTmIU=~>7WCsCaclb_b1e^P*4tpAF5e*^(|0B_cWCp?pg zg&gJ7j>KsqkrHSeW#!jfb7vx{16lOrEmw+Owd4Vku13=|*n+-KIi)YHcjhA{)j^AJ zlqC6OC}?#|=-v;v-wsC03NxR`2$)3LhQY%g7QKn-zR)(|sYD$)pXT0e^rUOa2O=ks z-M8yu7b2`hZ8l?>-{x6HGcS38K$=({5h=m}Bgx?}<_oxb5!x4mw)=Ix{!f%x6Sr{M z!_a)%d;++%N?-6gkxz^Jax`ui1F zt2sG2XXK>E4kS6mg8q2Sdd)6EetUO5{H1_!g4Zid>~xBI8qH;}m@B|1dxpLRTaqM( z+t`_-R8UJIr7?wkT>7}LL0Lc6lueWmT8HI2LcNHoy9mU}(T1@Abh?yb5*AOce*To` z_{0Di)ZR7O2PRWsE2WyG_l$`gKS}TuM!ib>%gUb;xA=iFk{lAotHXy8R!AYPR26M` z)VqH%Q2E#ZaIs$WQwit#sRIF5%IsVhrX5}Lf10jIz7ZZLfuY$O7{m*=SAjjPZ8mo_ zN=)@~HL86{lEfEjd~vUDhUXP0BQ+|J9oj04GeJ=;0Y~a%9vY1qF*FaGu-x(wx6Gek zuh;*%0J-?1Gs8Ra6(lci0qqbEOT_a==W-j&i6wz-F-!{ z*P-NZ3mr(IIk$1wFV5qG&SMGC-M8Fo;A-7ac>jhP5%au_Fy+{hthw z-N(;Y8u#M`4p~@<5=P(I(OOJ9!8*pKxKggPQgNEx6%zJ!&^YMpy1Q+bLT_WQu!oS& zrHZ?M6Jo+KcOZE%1?o>RvW*^bx?SPyHRq=b*Vi6tU-LDn=sFZskDAhnGkYRLCZ{%J zDl@NNE;TPbt%9Pdwbbmugp}u$%8^8UV+Ig`^0GEgk|^}aEo0ZAU;IZ)tX-cjomx$A zB!i(e3F!7P`ApFrm0mH?qV@1*?j^KGpBB`9Sg7@Jgte)ZKW=5(Qr2|Hdxg#ZwSp;K-&%#z7F^4%SchSP0rdbyg)M&bOkTOnU7sKUvHOFc=e*LsSO!`D zbd@<62CImdMvQ7t1HeLuBn$eIC!-R|hTRr~CC4VU>Soxd&EQ0Un%*MH)z!^D?wKv- zwu-^*c9%f5TeCh#k>emg4tf-ts15*Qo_r{erW8^PvMM8j7A3$6A9agwH)AdA)7$FC zC}I|0ETLG8K;J{eVJ^Pd5*GM>Uyqn?hU(+;z0*aBfDu-px1juocQX!nPJ9Zt?nP za<5du_b+a{*@#vO|MYyUr7{6a(+Xv?LsZyQkNVBwOX;U~=${@SyFNV{eblT9J8D6A zw(SvsC13>Y3tRfE*$&KfQC|@MqvP73vQ~+Xu=}c+Rfg-culrVh!eV3`clFn2=Z(}N zM0oq7rsER8-=!H%GY+!)jp>~FIyv5Vd>%b?Vo6=gvi zz{V%f6V)jLOE23+XXW|+>tYK zOAL~;{z06?T%QNKgYNA3*xd=AYAdBXcNUN)HgiGK@1^EWhBNN^_0hQjC@M?dr9JAD zGc^2ENIh~2fA5>K#bSKG8{^i~*QFy|soiBw=iH3!QBCXK_91ReAsT#^NrRM3j%bAr zBU#Tk9l!Nb8D=S+0U7ae!#e}e#dyG4N>Z#;htxZfwL+wwAWv)Y6+ndCv4rFV<7qpegk2;iKRCp=*H0KW|A_|t0=GjVt2Fju-W z80GpqzR12EYP*Y&myt;YLn_*}1DNFGfzN;QLH{r@|lu2tt}*?%TIdP+&btfL#3C1$i#o z6GOADAUS~!2b!(s#4{!s$5XI(MR7P0#wBP@Ad7MN>zqj+=ojUJQs63kLEmpKbr-1I zWkaTbnjdx`TQkp1$0b1nG%0-H|EMA6flT~++=Yz&xQjvVPys9h2BNNuD}=5I5a3K? zR4s+t0(sC5O1)=6?n~2TDwn}c^4iM;H&kloDR2#E(!gd!U|fYjSxvwl{S+z1rw@>+ z$P$C-%=l$3fSppap!0@biCX~8vb-?rM%AF0TgMUB@$n!Z<=o8vuVwuKSF^J1_9bC`u5J%sweJ_NFSp*86&B4L$nZo{D?*g~EVR_@Qi$1mn0mD2buFB`iOBt)tjVhj_+JXsNiPj8N1FZxxXXoA100NRs4Jr$S0 z9d4_^V7VeKH0x8QcH;OB%}}E}?VQe3mzj1#S0%hYyIaz~ z{W}H7`VSKz1+`2K$AcVlP%;#;odTJ3W}=1h7m)7b2+N`VU~Q<|(vZhhU{*Eo?w+=z zpHm0v``70Ur&u$+Hn2@G@H0iRdk-ljR&oX@)7H$gT#dqIbL+j(%+BVSQ5@VwXK3Zs z2aPWcBwG|W-?_Xhf~8Ah4IR0mXW&H)H;snRKdt{(I%mr1001BWNklfRm`%px-MmE$?YvG6Zm)zbSYE=<+a5n5*1fdM~ z&=4SL7oyl=b&Mn`cHk8wb>xnSw^~>ph2aseS71F=fUJM)JXhG5HtYZbYg1HJ zvY;$uRaHWKsbCGo=P<&WGDwiADL}RfZs%5|Wr(Zijeb5+^!owku77^iWDPNEsG$~@ zI--kAgF>s2;5e{6TO0=^yh@o>_?5VtB1=EJ334mz-0O-YGRjqslEcG)$NlLtY2r!2 z_X$@(M@dAm^UV0nF8)UbnHh+% zq8R{|Kxw}=it2?Py<2{~aS$J7ui;8ik+Vl>UKOOD6#}w)AW*Pfzg+SV1DVEJp^l*d zjF`qGjm`(W@*>KRrnwy3Bf9yeU%y8r$n9OFfaab{hJ|B%UtD87xB*kpUEdOt0aK&8Z04K}g|wNC^n!8%kY(!6Lvf zFNYn-aTMWjbDE&W(6gdmVCPkRC97=0x85q~Wa?}G{IcmF`}^!Kha}>9gATZ(+^&av zVtF~57P>SUD7Z}3_KVfLdO~W}eX~kO#ORnlUO;U~A>%q7h=nD4G)vxqM_4Q}#3OLk zOg5!vu~8W7#yNBMBp8z?4v_U<3VnLX1R&{ZEpHFdoJ2)mU``;z&`4!xB-5xp*iJo2 zSP(dO*N(aFhy#LybGvjD1LEh$*0_5Uw8?DK~w?K-gBtq)jtb!s%XRo9Xhj>03riTqt z*Bw0%Bdqamb8e=Jw$~)yr?usIZyI;_iFMWiy2+|{Ljp-!CVBMFu9IZ-rW_=d znJ525Nxe6!hdp6|^@IU3T6+r5Fp`jJS!-5mP$N>wV({vXjGTIY0mp?=w>(`OPj8nC zmfkhHRvusgT$BaGe^sM^sSngo@uU~vzo>T1zc#CWwq#1Ujo>%8Q9R-4afSfr8 zw5ArvQ0>YlmDvqWYof`mDxfX$-*PcN+HeyMAJ^|2pVSwyYe0BmCsvRIP^~dMIw}1? zYNM{?G6j6IHy3};07)`gh!7Faj?jgdis9%AlK6er`}XL=My|H7EZGIfsF!U$^h(+(sg{#9tv z+X|@2*~3A{n&5qv-FlTNg_`T>3%JFL<+)h0Hk^EctdQ>oaB$?al?5(_+hC-l~5J#a?8}m)9@P(;(8UbHVIhpsi$2J+xZyq~NpD4PgQ$ z3B`T0{<~(7^$!EXQo!~>q^gRC210;V6q0y=w4+?GXRCCi7mQQ(voV1T`D5CoM_cjQ za-f~<+8r0+X3@UMR8#0rdNUpx&(0wDan!`wg*N~SB!lGNv0bZ(0l>!|WGE_$uKDUC$W_Wt_$2wNtL$&OhX^dgYFLqzDB0Z&&@ zNz8x-xengHSwHQ^Q)ZC$HxnmRP(sfDObk*JI4+1uVh__)XNhgkS!Sr45=a=%w^=ze zCyDkBCAf`CLUSpD+(WFe#^@U!!{U8X8-?|6f?on)~q3%*1AC660*PPuP_qj+8z3apb zars`YM#-k8L|6=gOUc5`{NQ*OA2*lFCTma=CP_?-3fN>6l|xM!NU&p}qRrHWv@91{ z=a~cRh48w zY|)>*z8Wp5Td)bcXXlv-jBGBN~QIIfA2DU*R*^d*6`c&my13d1Efm8FdSK?wfNC*URm_Tm_N{PS{kBF5+97@$!4F6>5}`k1{F+Nx(h}xI|~@RWiAD zfPLvJ)Zs$dCjfF5yN{bif3tfXh8H8?%(y3sUAbG~%L>naNFl+0lt7n8qudwF1+n&( z9(0hn2{q_n(E0gm{kIR0i}m;86V8Re-1?*37|xlbgD{R(wS>ms+a3*mAR8D}PGvv@ z_Bz*E0Q@GxLB`lv+`N1K`uEe1FJHbsK8_($Rm3sd!oC!)-nhv`yb0SYL6rgCYfzV= z#VWNNhNcO+PV4m73s)-mm-`5KepWt31ma}_*4wIFvw~HMhh;_-8ty5`|HKx`Sa6{?_Zu> z9xZntN0&Fp@m6;B#+^Z86%ESZ`Fz=BlUmdlR5UcTh<8AvjItgSP~fc=1ojcTLl6Gy5}YH1T9s4PY5Qd!G<+7*T_!Rn$t{;`!Opa(wpP z_%iI`f)y-e4;I9X8g$SACGk<>5F&a+TeR-sYqzjp_sb-^ZaN$7F*dSZ;@`fJRKs0P=77ONNweYHCR8i=;H`WErlrSI8{D! z#B{iYRuUqe`ue~QQr)GHaLJcc***tMpF<I`n&p^xwqhv_5TP5tX-ldbVId)(*9&u|o2cL|KXK=z$o#A$mD0phRT ze1`h!vt*F<`X?|e7nWeyz4(S*jKf>YH7i>@)1IXl)*qc-r|8%~oi%NIkB1&~XftkJ z?*ilf*)C;__oZ+A))U=NM9v+QjVu*}hC^w;@c9n+*V40P3RSn+0 ze|~x1RGdmeao^~!@ao16<>>6}{Vq_3lyb8;9%LhW9t&@VdTm!+D%Q){yg>_^HNrC4 z&lwTSg=yv#^vjU zqcLypM6m0q@k89W0~tG2%pk`5IE`$q6&;kFJPKtIcps(mb`{|Z@J_cBj=UL+N~j!0 zyRN$bc(k?BkJUJtJ{swo-8Hj&S*Lwy`LaJvHe$m5o-){;?tVR*pB{n~Yk2mZls3R-9iWU_ zm`V`ey?OU;*F)~U?b`3t(d62Sh$hlCaNWsQj5%FvV^c4ia?ec7@-+p}e`|lrL41qD^jB!{Q zsAwrIgm*Z8hv&iD1F`#x%lEq)JD;ky+#bv-X$84zFx^EHUs#_DH?1gdE{0ENRTe=8 zN(P=-?<&H;Eg`Z}gYHPWp})C2Z<2O=?ZSZQ(8;Ycu)hQ0Z};D>soS;k=evaR;^XP* z@9*9;2+iao$&<>i(Fn^uCsmZV2*XnAa6(c1u>PlIkoCozd?81HZlcwS6v#yjL8&g4 z4Qwq`ZGZmRoDYQ*45m74EcSnRUmS^UyF9&i{RRi8E!r9~%xU8imwhPoh7QCV%g*$O z)c{oie5u~E`w-6Y2*VZeTjRrRE<+cxu`G`)%3#a~lZ|P=c)#2t)!=>~X;9lm+n;gd zHFopo=i76SuFSCJ6qe>Fwj5MZsm0k4Z6Y48!>gax|GWTMf8F@xUGD2hD-=cy6;yrHVou)08IN)a@8$ZZFTy;;<%zguWj?WE05UXE#Ss+LxHcIg5lLfxK*RDrAd90%n;Je;$bDN~;rJIWY>i{HRuu z5VdIw1k@-OmFzHq>^|O|O{CzWmSL7>B|d1@1`Y*?w^HaPEUVN{-~}iqH1%Ah$q3Am zEZdu3-tE`x^*=E{hJB&`Q`vvf6HHO8ZMGupiYDmZ+6yN{t7LyJEu1K5=cJ4QN{RqY zmd*x3(%_YO^!nPlO*T@h!Nsi;+R&l@KCBhkam)1ErqW_#OZJS&>qX@hBB=)%Qpio; zZzz&82h6&^y97}@zJ7nyG%$z8yGMM{nm|dwOjuzci6+?&c+ezM?%9n@q~PGEF;^x1mCHpy4e0mM?h}Ht}e0ILHps|KAyZ$(2yG`mp z@seschge!*x?wszv|aK>Q<~E<^a}B)hmv}b$hPE8jXk)SY&yNN z+ozQo{lWpV3+rF6wh~2!S-*jzq|m@pCS8g>?u89-rlg85Ob&^#Q?se+1P^Vf5yr~p z{NuHA09kZ1w4}T;><7~6mfQ|tN~HxJPb*&E1@wsh8d;}zVw(()v`0*>EBTPj`EvbW zSddk_N)NBjxOrzaS*2cHqrqm3cu@ohkgsGq1Y0ZhBA)Vwdd?+=jvY|PpK(L@B{Il* z{f!3j26^kGBN^^*C0TPTdWBkhRZ}K0WvilZa!rBX6Ns*}j!&_pABHiP3FoxRM0Hp9 z!tE#EMj#CF(5$!`h2^OUTO%_UcM6X#y#UE=qB%>GUY8Tz%B@N#gFtz7*YB52o@|#U zX@Wa&^`!!}q=W$%mB6QR{F7dsS%l%_O6^-#NE*b4+`L`?gEPpOME;8Av-pa{MMfuO zSq^|z6qm!UKCj7OA+2^`TG-B;+731iKFtsEbrnjN<;%q)QNAZac8ZaHwJJDC{YW_l zqO^F1#~|snI^AU}jY?u6lljCq8W)=>g9OU(Bs$?%B|dTYH?Ds_I%=jhs+Req%b|%0 zHaFEk6;x^$H4~uN9BW2Q4xYLezEt9^#&aG(H~RhhA08m%M%@F}&F8Tt^YaZOp!D4G zFw8ZlEqp;Oy#3ICxGb?iBqZL9U6N6WZQyn}6j{y@(cRe+%cVVtn{;nb?TbMaM&-(= zSQo<2)>Nbv2#GJsc~m`08xV&ob~$+@V}`S(RBhqR?IFILw8gQmS}&;#r!I&86jh#CW9Kwr#dVs9o9s&xmlX3UzXH5|VYip=BYd)#!OCc$P=~3@1uH8`i z=CEm`!R}^c>&dtc8OT#@o60NlrE9J7VAHFwTo&F|YQ{Id z85DqUkn2dFn@J$M_!ymilINx+IP;CI-2Mc?h{78y`Z^2f{(vKxdT&7#B4%o19OMgN zo&d-8=k@x(AcF)4T#cQ2elrAox~!lHgoY%Y2ND7)d^FUYuu9I5ve25|i_W9n?9@q78>jrHiZi8SakV_4A{17-@=>&3HjK_6+4WwTU4B*qb2zm0|PWyA|ouJNmg1 z?K(P_X<(|LF*HMOBq<)_!bzTSNmy5ST!{CRx2kefY~=?bYTGh_olW=V;`8T^FOWe7 z%t<0fiiqjg@+)VRd+iT02SHF@nF*=)1qhDqs12eeHAOJBpUQI(z$G8Ditzc+fkc?1 zkNYr%zKXJ+^-RHI3R6Ao!3^Al@LXdGana){^-8W(?%u2>=c_cp3O7{8FK`DaL-oe! zL+SXdWs+y(3SV;KBH2L-85cpQota$;RIa;cdw8+_Z^$4MM;*v@Tp9V&#|~9VQ4-zQ zdKFy<#zt2e1oJFW?H$}O94SBEu3Mho1a&P(D+OaRFz9P7UPp3wrsDfbY3&hoX*dtw zs(M&cK5wszaAcaZn?=Hx;A4!xnXMUimEcj6th0S($Sc0EbB8%&hLI^#BE2D)8;&u^ z5m?P;?@Jhv^#jPJ8NT`YGj9mLT!5remIPUAPcSK3--YDKi9c#EQv-QSDJkkq~MkzUfE4sES^xV6}`{CS~vA^cJLCrz&wUMe8o=iN<5-Y41 zqJBsree`4t9=|R*;KmHH2`UX+EMn0L(iT}_W(=D7UAoFA_ zs}7vj$(U!g%6jiiGtBA-N6TFhE80>j7gv?FM|tIz06)Idr6?1}OSL;25cF=i>EcLkrf5fL%#)_L=y|Kr6M=60rrW;+s0h5)5iQ#S)O;B{XD zEhy5zsQlwyW7%wZGIzGm8~}BODHq$2XWy*&z^Y@IE*Gy*X)F^{He85QO*yP?p zK5hANRO)4!Zb#yGlPGFKLo*U@toLxhWmNLMvG9~^9Hn#5#(KB%pq>o-go3uGW{bJ5s#cWxCvO)Gmzp~x=X?B5pJekghahr=_oJy==!h6(+ zXRVb&Tcp^?;8m}H>`_}C6JHvn{)C)xigyN;6Ili+X&Qw6?H^w-KE7Ol4C@fD3G}Jt z4pC|!36k%O)R;1=jp?W+QnXUl5V(;Jn$km3ALTuFDP(zy^umB~BAR-C{bEQUo}jUr zN2K#*y|6uix5!PiQRkxy-PA5Z#$AZZ?mwvaKE=$i>(4U0BJ9dA|B=OKG;dSmLQkQ0 z&`Kd?!Eme)XQmZ|Y4kYuABLcM_$A}x%LT~AV9yp{y_NdEShPy2w57_;vFvV&i_RDN zN}k<6AqY5Ngi9ZptZH_5^U)+eWodhn2(n5EL~<>z_8)^oNZv0GaF^D>2mW5MDZ=XXMGrnS>6toN? z7kaQ+`>za;0sDTH1gYkXha_n@XtoTN87*h2tj{}+4$n|v@5wN)=uL|4V}w}h=;aiV zC7ZkxiHC70?OzPwCJ)dJUti3K9pzTS-P_)k&ZoUE!t8ArfDT(tmsGK=%X7c#f4`g( zh%YoyJs)tH>4+GKYjvzBDXA~~x;?oUivg?J%Mdsx0U6nRz5Z_vkc;(S&!!BmVo?7? zqEhScX(}vJQ>j_jYF#D3vx}E6rG+?fx(sccaCy61ZmEr=y;V*i-mGxc>gvwj z(}|jE0m&uFo+^{r@C0~e*Nwm!vNlIQ(h*FV#h4P&vo?Gd1H-~POHs~^eew(dOAPKz zd@-nENI&b!vEWSC{ILFS4UhpC@blGV(57Y|RWfSQJxrr;smkzanqR3sg<5%2q=a@T zmO+{sNlC^*N37HHQ5a!^mdMFuY1e@qHF?)7g>H#f#|X4T*UD_mDj6`cz>{e22(Da4 zXK06Jv|%gK4}-RRCl@PuVs_NySdI9QK&xftxK00OY}Cvgcg{mbBEfSQ@P5C(`0vdi z7wd~RSD8{Ra04Z#Hj4o$iJy!wW|xfVmARSlE_N2oQ`1(WcUY-f>*()m7)%X}iv^~T zU<}&2lt5BVrrA=g4vQ(0gOpxuo>Z=-77LxjDF6T<07*naR5CE?s*LkMr&P2g0S096~jFV?1NE5@gm;0^y5E2 zK>lZZI)8Li4w2e!uNYz(pEmJTl#dzubX2RE<0Lg{ARB6+?3v_hc7MEWNWd`2y$2Dt z#f!|eRo>tGVz6e%Q&K>9ZRVhh_)x^SC#xha>(SPejLp-u&5fH(^`tmoU7Sm0S)=xs z*;kDUE#YdcNFc03AcX>rx1`D_Lp->wU6`Wevq#CZFPg6|)^86xuWaUMNSGaB-ccT^ zST|!~rIocpMPr8%@5OFR%5o$7)Q@Puz9)~jY253^qt|rkuu&{o>dSsA+W%jBSHj!I zk);`o8v(U4*7=+a*850AumnAA&`=6Q27zQ){Qv)I`>c9bQBKBV^XMMOWBHIMcE5Vp zcW4eOn8LL?sZ~PRvdv0^T?%>gCKp&aNCph=@9)P=%`BtA@o3O7nO;Qe`hq1@YhmaL~_Aespq8%pV5RhP-;;o zOX~qvaK|G2IgL<0{Q85@z@1rCZ+rN75v1{@pTXrhP`f=q^%#t6f?C;fBwO8Jc7`^F zg*{a4UqhS3Qjy3f5q4~ypbN2}LcI@HWvkb)hZDDPs2WlX!r^u9Zrk?k1Ef0wuAb#) z7I1>1>Op3wbSxPiTtMz6+`zFw8>APBUVp$x2c+lpC zdalNrYUkMXYG&tgf|ZTUT=Gm3OYeWqriK3}DY$?9?~iG%Z6B0zO+3ZY16`JTB-urp z;t*__84#j@mRhU2=Dv`KIPpunX)hpywC%@1h@G?2iJiu)F)7)(hIn?87v2-9GiKr| z!C7QE(6RtZ4)29|G~Ekj*@gP3AkuXpiHj7m4FHNTk!*$WU^QtEOP{EpXS~TE_THrs z`yz(|>z8$|7ju`+bO_+7ak^$qZCyJ63fN8oo|kG3A*?=K*`Rmv(YBWnAnnIA$%_fy zkMfAC)09o)u1%oDkcWlk48pQG=-A@|T*K+11RN>-_?uQR93!OXflL|1V!m0UxNT&X zNvmO~*Hi`rNf_2zEcE{Ow{Lua{PFwyge3LsD^z!)2tch{2-c+jKn@TJTorsW5$dpX zNuf(Hx%IqkE+s&E!Nrtj&K{G7h>}zcH|kJ!^jKC4Q&NW>rUz7u%oMkkTTFo9vbdbd z+aG@UWK9v?y!q56kUSmY;{3t^(bfaJqt^lQ6nu+V(yXvaKXmZ1?qM;1S}=ZBUDgA6yNIzyvgG}7C1?Q?>o5wcD@=xbb})HtAJS z&KCB-aM6PJ!q{rXBkl(%mO&J_#eP-&>mVgp0;EqM2}VFl zvK*FW+CTRxWM0<{KmYO5k13mUuzaK75R0Hl)lPG6NeL)fA~3unB!bK&_0NQGvlMRa ziNqY%SDUjfvBv9hKcD)=yH(kNSUqpoS=a}d4NcV&@Qm!1>ugeaTA7SG$9yOI1d-nV z@=4~9&u@EtQ*pq6u8mZsud8#TlEr@C5eyq<)tm-eg?siy7=pMtt!!4`t^fF*0kUZy=bhEW+OuO1orN{! z)_`MGnQjvjG;Z2gZ4?44G+sED!~H4UYdHLu2#`;|CUJc0s-E3564@N+j}ukh8uGW* z6lE!h17_Z*_oCY)d1d(V`Ry;gngq{`wRveI#bV5)FXrk?yLw%xLCXw4`()O%d>ca4v4Ut*Q-_AzD0a&dBF+NK*dB{}Bh!eWC12#LDJdSN=a92{(wDI{`m zR)QL0cOWD&?wY%+^{w3cpCj^!0?~*fv6(|LXF3hob^OAU~r51Fi@8HUJhk1-o2s69~@jDcVWAJP?+flH*CNdku0w;`X0 zF8I&B{ausb^#mAlvEf1GnX-;-D*7$uF{Ljy00+}h0#SnzFP^}x8Nq;Sg z7|g51WOJjKDFh>|jQk(yHq_fT{4jPQU5~UU8RTWa3qc5+i!_(T?G#W!D;NRPk zo$kuz#M`W>rgw6{U%j&f-Oc5cSW|@9!bD5%8+$y_2s@?s(l)Xq8R;XAeMf^s#Xl9b z-eF$V>-B#6^yc&DA%VL>Br24@@kI|4s=nG62f6(U~3Kv4*46T^du!=gj$ythvEP@R0&%qpID}<`BjKLjL`bzE!c!=w#CUwrvryiG;;2n3kZ-+&kwNo>r6t*5K7bV%tey}3nRCaV) zn41xriJ`irE(`S_QXKE8pJe^;sW&q7d|LLXE;~Tu8V9!$sD_1F451XtF$o4@>iLgv zdzFTDXh#o436wxuOYEZvGon!e^1eY%gCm5yWlli@7qdg>_m7Ta2#~(6+>T@hp(tm& z3pnl+$U>z})?o6BYd9*Eeg-NJs~Xyl&24u;cSY83|MT-YxfjZjHzHo0PSr2_UX)(8 zY8f<1S^xIiFYos(bQ;)DF!X7}hQJl*Vg*2b+d|074W;)-5>tlx&cWW#>Du45$8jA& z2H6Y|!r7V}){T#>1%QOisS#>*B?8qAyG=D~(XDEn6giK)4}u_9ElIb zUw{v06OT6WpD~GsxPM9O4=3)nyrE{ONe*QpWw2;@|toMUulg;G1cHxHR-aL@A^Ck%} zu4tve!>~Yd+1kZNyJQe`U5{#69Idd}@oilF%Yo$xMJlgyv}$UFK@|8v=c~?n3|0P` zjDCdnA`8F)UkWOz{xKpcojHFLKvveePb|bF#E=%oauZ&zB!J==1rjT8<@sFR*%K1V zE9O{vQPT|iyPG9IbPl;o3i@oNHuQd~2v&LXS9O$m{W-Gz3X3ze_87yel0s2ExCTr| z@${Px$u$n*zP|kGKY21uh!O*yw}vB8CG#yJO;8SaTfzmctR_4!*d9N+16N4MLWCCz zm!hD~LEK!m?UF&@RWN+ggT*>CQKZ0#+EgjYCmKR~4bII55obsu%Bntq zuMBu2ycGO8Gt&!aHBwNPSb{q@oRv>*#Viy$khaqRUU#=RCgN+=YRKtTv)gXkB|zdb z>uNvt2V4vaiA}f5ypSnL8=(FjMS!EB^)Tf<9U9A{S)hJe_1${y2m#f{H)AT2WH?}FvNJIz z*4%Cw2(X>p64g9t2|)FYgPUmur7i5IHz39QR(>CO(Gv-fej)OZTVTLU<2fF1I)t?s zvYe^5MrO+#y5sLAgPCH_o8nBYfRLS61)bkfm>PrsQZpW$4r^!pn{p(lvJq9;1CE7` zib+n^C0IIaNcW8{{LK%r+JAsEvePcXmPg>{ET zmF?|Lx@yrQ=^q-h;b7mIIqW3m`B25BHhZj=oLSNs&=_G7hC=b9!j)dgFQ+o_j-Zqiq z!M8#Vuob>|d;%nhsKH*-5g=S(R2sfmtz1G%d*bSbFne4@!khAj(RSygN)* zmw=r7J3rFkTU6#+P=zKW(>t^|7p)RFPkW~d%lIk48F;F#A=DZ@&?pJ#yy8#Pz6iz# z6tYL+=Dt0`>(~OMS6$rqgRD{S#NlI^YE%VO#0H?{p*8jtjuQ^=w~$@Jl=~D4e#o>o z)(BSUAxaHfC0HFytPpa9*k~$uoKK z0n>;KvfZ>xfPC3?)$9h~DFbd*>;c)aBnNcDf$~SF8?K|m0@Mx}mh|A1HbKs4&nSHe z+H1fMfphBf6Rc5PQP+U#1zLbqwD2z$XSM-D1T}#VT|2kK48+l_MXC5A@_d$WAK2%c zB|yF~jXX@qETt{O20v1BouGKlivU057RRU=t&-E*MUcIGWoJ}XH5xOpCnTa^h0-c&c<_JSx=_heKEj(=&EJt=2#2Z#1%oJ7(?Q#T z_#L{<$11IG97QHT`u2RY1jt{^As_doeO3I-2?u~l>Qn>AL8At`31(wql%7!M0HScJ zgJYM-a<`3Tj4Afu)$K##aX|HsvWOUBm$5f2>D6FCh>Qtdesh{ivoDEju0an9;-cxk zd$@1gC4>A8+{rH2sdEX#6rW~M3eikMd+&^5uU6tPqy?z`3RfOPm<2lJGWgO z!4Ziv-gJJ6=A6`BDH05Db6Zok1qvraj5I(5>o+)eQ00yk_s&V2VY39t--(fz2~ETd zij--hRyvYtV8f~+G7u5BDuKt)TYx!hGEilRMZxA#dpp2a^iGeB0`Qdw+JqEdgf7bn zIvw&qBN(EiCWooooz zQN#ld(=x{h6>tnZ5w9syE(dw{1H@jL!5St;kils-Mj}Rf)CIxdgJ!+TZr=^6OX1hl zWOvOZiyg5*nnO;m?pSTF+9g2#{&oMv!_qLbl0cE6QDqbfbGUo88ik0EwZ^c5YhYhG9fNiKvT2t9`6`V_!wtA7F9wDDTy};yaO|PFLj#Dz<~Sle zXugM%<_~7B&UP>n)-b8GP941F< z!{zPA?dCMX<3s{v)0J5}=9P{RRDmDz*)ksN6c8(*tX(KNXHD}Xr>d4o7z%@EMs5WV z8_>N`2Mkz=1VmlE!v7*2o+&7Du1iSp10}~0ei*TMCrVTfQW@K zK4HHzxV+}Z*-BeQyjkROzX^S8TH1b$gh9`R+ykChB8P8X4w<~YG5YCm{HU$j5#+;fPD3p zVUJ#XCf5NtFsYxSf~uH65B}8=0L$)x^PoJSHW&Lm;{d{v4oK_-6_#mwJaVu>ZIEo& z-`+r~62-oT6e}tO-1uy{IVUHr<6gu>w2{Nt|(w3!etbY1*~F@e}2U>T@OY* zv=BjqjRRvKhhPT|n!bY$?A!D|j`SOlR~H5?p!CKpg}ym3Scoac!ga)3f=FKNG!9G; z_a_w|rxhTZ_Nw86fVVU?Q{ba+5`EyHl)>SsfYKHzB7M|UgFW+m5~xE=rbh)+5@Y#6 zK1TeOBMd3S2SN2sF)Kr573E(a7iE?*Ebl6;_4=+owQF@+FL(2jWWz@htb?p-8$~-s z99qNox4y~y!UoVRpTO!8;W`6xH^OGAhe)yEkhVkw@Q`~PvjwS`ox9x(D3*cKkyM08 zfynxiEinp{BKhv=sy(s%acTk5y}LJiDT@n#j;dCfwZo0}z^(AD0pYs}%@%Y%B-3xF z+7n$ZqflX2*`lp#v}K|4aOInp`f^+*i_NEsB_Zsx-7^RDSe>$`9kPHE_0Zi-+b$X8 zKaV_l+4U@u5#y_Ml@%L-s~9{FsO8$$02XruwLX-yp%5WhS)5nLL;-fZCPrGY`mzlP z)D2bRLVC;)JiPOubT>|7=4SY8b>wZGR&_{g99wbD}v}UMdKzUhm$xn}37kIzKu%{7+cSVvX zz{l69fB`y6t}iNJMGK1eEeG6|Gg=jj3N2E!)YVzhp2>$8KR-^lZV8ZY6D2o$DZ=JT zau};hCG`&o~2?2Y7x{+%31puPDO*P+#Y_uX;1fBo#xB# z$63#;tS?{-Coa4V1PH+CA#u&YsCf&30?h|h#BieEU`IOT0Pc4vOVkl88ZI)O@D1P$ zN=!O5wt{e743Te(C`42`@m?(lKNrBfJGtH9IRwZs&bsA!#tzw9Yi);!`>N+pkn|1$ z0{E1CWEE)1(DJxgmOBt^wLhl{bKSAKO4vaH5K%OyA{7)E%nhKV!W=~(0nteTpN&Y8 zE*wi^K0!h=?? z!;mWkdbd)5RSVEfLEFd%iXs9_h|DpT=2n+MiZdu-6HkvSY9*r-%`n_O?euZl8D#XM zV(zct8@4!9-G-^7_&{Kr-Vn&Hm`UG=*OX%^#EZ-I+WEV z0$^e2{`8vaM6JI`6nhqW4?}OUX>b6+K)A60`EZQTs3EiB^bhY5pL}zEMgh`87_QfS zSa2={*d3+DX%K9UnZ+re@*};DnrS5Kz2XhvKcYd!C60jWnY?gb$v9I-j zG%Ve8)dqN96Y;9;(i6&9VwaV2ay5_M?cO)CR}^JIlpV$ zB|wfYNN##%pgu+hYeSZXAVuOlJCJLaFlCC9g0+QNAT$W&8Qg+zR%v*pfOFoKx-Buw zes)qrk+MR_rFS)v@7dv%i>$4JwlNT#sNu)@cGE5aa)ddgZSS6kXNSQN8`qQA9b+W< z4}t-ha@QbN>WiYy;K7+*aU8YKu}JtQk*6!cO|k`KAAufT-8_d-BmKg!hM1sdyTrTg z*nDi306D@KxxZeoNVgrZHk-z6CP*LVVdO|F8lm>CTU;R2JUJL7$t>s9qJ}9}QuVsM z$|eT^LfGdWr~cwStC*srBI_g3Zac!-&nG_4CP1dUa{n+q)m-oxifeah@h!`kRG%w3 z_a&G=3(RgRJn{f-!uFXD`h2#kL^hE@ZSDN-&?sivzz8i7NA z0_2_O*0)N8SJ2BRT@mepq{{0g(?&Y1NTt=ZVvdKwB=Q0M1=ORp=C}c+9U2Jt2IA`x z6H!^-;q@4;hu(DU871;=@nSoykp-t~=$vK_RsA)ZQaI+!Z-@%*a>k*awB zTtZEKo+y&Db2{@iojZ!~9@f|m(q|e0I2j%m39kT?+yOnyY*UA?vFt-z z^P+_#C)T!wRt%w{I!A~6r4T5q!`iKT^J#LrCR%th?9jOIH77lvY5BoVH)k3i=N2IE z@~`fDg}D)RJeSEBjo$OhM$659uQx>`Ev&g)@ zLg2eBELp*JVVK0g$aSwE+npmIV|n#a+vqBZDZea14X&aX_lO3{azF(jR!W2;iJ(ZO z=tMFDI;Wk!;0*H9-R6A5<6Hw|4v~JVP`15e6T;Ivot@$)SC!3CYsTT#QKV2?2x#*A z_Na<7%a72Vefah$&>PX-nzK!zb$gQh56xh&?(vazcBk!mA0Fo%A7>jN)6DlJ>x)lP z8x%^9vPc|~*otuFV7Gu3{{<%`uhcmMn7rh%yrv0Z$cj+5jR<_!V0d5N5hcJq+gCP+ z$0W+o6<22-9%mgOQ;6(mA+rpIN5*4?t$MWkgY6fBt{eedv9@mWIRx;_k6>QR&Uk~! zBL%F#rp8mM3d~~`Rj4GdWjDq~_u&v8XC5Et9Uw!HTs^FrgmJ;NLS(1c#$^R>BtSwn z9m~qI+MnLHh83~}#`mT?g>1FF4y^2)7jv+)3?mv;6JZSIXX50@jF0C0v&TgQNOwK< z?fNkFo#yr>MX-WyOiuy3_QHuv1(sy^GO>o}*{(R}ptf2U;wC@}MHNDk(}FFGM$(aF zu_X5MhYd5NlPm}u!a)X^#Ehq>UtFlm2nsy*`hb=*5 z=;_w)T*)Gn`YPrSlU$tY8{}u zLUnNsZr)@l`f>Xx}X3V zuB+RQ%K;V-w>sYuAUTS3XP_=6^xNQ7+L2qF z3Ct9P2S>a71C2TqRfEI?*KY@vxR=}a2b|#R9>Ed0?b^CYYY~MlIUi)^vcY|jOCZ4l)9q+9@G3CS%AaI_d=7wi ze!jlHu<*E;0C|^V#8a1v>~^ zb#aAqB6f&M$05idq|Him+Ub8@4@>h43y(|6ASFaz63;?$!|@2A$rx!9s!f8CWT-(# zKowR9iYgImx^S-d_7+YD_*H?q2PwxaXrFeE&?;S48lgGFyXGRp*6lh~@sr~X2$tpH7EBtOM+uNM)hQG^X@X9Nbe6?w5&9&@;9t9;nmQ26Q+i>?H!bnHxZ zLVcul4>O7|uy@R8_U?^Y?Z(dh64S?p2FQ4;A8((TrI|MZUS4$I!x}&NR@mA2#f0@k z+CK=ml_e2+mXtU-dx5Y6j>11CuO;9#%OC zN+)t!4>p9|^Yzt*$Hrx65INMk>Cy-n?+@1pz=sEg=1k6SDkykxK*7fjz6@?kj%ld? zk_&*IoxVhaD3ySesI?Yr=>Ks2@TjJ`@0I|$?5pe8SB&i6Cbj${U0Vbw5>W71n;=Nz zfAC6dPE8SNHy_kSSqYEGlBo0-ZD7)e03|9J-zlP)o9m12%a;I&^2p}qAqfWs<$S0* zR|(eg(g(1MYrDySVh?gS%hjhn+$IuH91umj{~1wbq9RvUdBi=Wl0g}OsEQJ|pKuUhRFoA1JvLkZ=zTU~ZlGVgR2Yh*ouIL_od>y$iA6SY0h*V` zB{Y@*IS?b)PkHiduK?C=*Wr-@irHLXsI!d20-VyX7|cTNU{q8lkQo`v>@xdaDGN^N zG%c_0+kTn$PeM4?mH4V=v>QcJ2rEK&nw#6l`{mXz0rD5FK1O&_W|VEZ&^du$o%?3I zC|&D0FDws(0wYD|=LxTJDka(3j{e?V5h!vD8&dfc)h=a`Vva(v0$z zm5JAR20~*dl!e}Y_!sL!Tx7NNhDS=t(?3?wHd8SsC-FWdjaf@^mK0qN(SaSWpRTWL zAGTaefP8VB+`K&RR@^;HOq^7p2#}TE>8Tz<)7hPU8tm>-@nf^~I0b_NP$Z~ry{>{` zLmwQw-ShTtBG4{@u>{E9j*-XPr`<|zNaXlelwTqwASKpFw#2gng6HOH@gTwag>cCV zJZrU~p?pm;HhA>&7$EHH)oQnEUM7_85*$l_{2TMGeyFp#x_j8~c03yL=-?SSq2*J#L*>|a9X*-qx`Fib0*N|LYKXqOE z4z(4DoCJ$Ayo{joAc~~{b;a<|yU!X7iiJRmMPUsBFfKcq?e*hmmbR2uOMrZxG_u)@ z%Yplk*W2gG(v6y&9-N}55k^pkvp^&;=hFoI&cg)IT!f`E3Fd5FZiZJ4n*R0f``{Q- z$7b1gECKR$^T<@J-#^}Mo3((TsLIN0+@(B%6`J#L;al|v6~8KIuCAOuPu6pOAvg!e zoHyPrH+2b+|4g~n_asmI;bd-n6(f7(VXnI#eznFZ5kfZ492`G6FWi!sG<|CToiNP_ zgmdZ`etx>WxnDBI5+L6$M*388{nYSOzx3tH^dH9m*Jt~>csju{biHGn$R!Qngt7t4 zOcxqf(;%T&L)Ub@zO%_TNi%~g5!449n~c{1@qY!zsw ze4%jl(ZzB+H8>OWSt>E@cI*B2<>qP$izPt5Yckn%spR2#&8uBM2p+CgS(vQ!htuIc zdX-FGK6*bd)+td)u&`e?pL+O^n0KqyYPW74?v}){1jw-zT$`&dN*e5TE8ellA8;uo z8^INYc`~95;n28bi}1H57E2eVY5(*x#l~i{tO1t*`Tij?J%^k2{_5s>`-FZ`oe7C{ ztLS|^prk+*JBw;b1cd@vRNm;h4~8tbus+pVd2dbquN{Fo=Wn+0061jq?xld*^I1Lb!6)I3v4U7&F4 z17mGiQ;BKa?@T60{0NZm{@4HL|8^G_iHAWzO8cgHc)0G0sb#gX1juRj?4{BXkMQRH zf_^07ckeiFE0;W&}^T!Pvh17di(J5a(jDy*9XMoRTmOVSFr@haxK>q zAj`E}OMoobS88OIYYC7g6!b4Q;a^!|W(knxTGGf8Aj`E}OMoobaxDR}T+6it$Z{>$ y5+KX9T+6it$Z{>$5+KX9TuXo~*K&Qk>;D0ZP09|rCFYg@0000^uDauPA!Q;UL001N@Nl|400D}0R9TwvA%0=CS_U8#eQC3w9 zlT9Nx-R5G((cMvDBbQRb*l)5UKtMuxqRp8}LVaX$`&To2Pm}Ld48h*jor!niQLk=v zm~KU`CAq9SqoA~rvCMF-t(2nJ)8!z&oae=S?A?%PR=nZc$J?)3w$i%q>h|H+`whdB zi&43?6&<5qv4#6%LHrud8C9Kaqw^a>E}fMQx4T6PduN-+7kB~|HnvLs-s(0XnOEcb zvNn+vLMG~(Vym4NZ_m^BvsMfJfp@(^twk2}%APB=>g38kpVj&Q+y7_a|C#|Ovs=)o zGMuBNmJ0xYfd0=8HoxWn_SrzNtyDE#HRWV^OdRYOjZ7Vk%@{rH9RCHyE8yv9WMX6H zN^ERqVP(%p`n&r(DY2C)AE^er97xVl#LUu4(%acg#amw0#M{P%+muv*pP1K^=hJ|l znX3`8r=6|63y&us>A&pqe3t*Y%tT83FA-N8K2l9NMPd;LXES1UMs`LJ>8G}{sX33b zsQABiKhO9`EnQt5d6<|yJUkdZSQ#ChEtr_Oxw)A@EKDpc44)DVE?)MoMxG4zE@c11 zf~c8`iL;fXtCfR2@jn)gj2+xu`A9#J|K*aIr`3PiwRib+d{_E{k@&rkh-d-7@6QK?3o{QJI}bY>9SFn&0+AB` zPxw5dpYpCowki&8&L(E!R<>rUUXEt}0XA`G{Ez4MW*#mk4yI-*@zBU3YCk56BSB^(?q zY|V&;q)3VXOY9%MK1Dx|pRxJBr;6z_yqNwSU;h;U6R7;e#Kiv<>}K|#Ry;mKS#C-^ z8vq~%NQnxmdahsSA^2cO%(z+2yE+NLC|Uv;!y*zh`!TRVLovUipa1?n-^iB9iNX4`ynna0+tK9gipkP=El7yh&+qFCz@hU1bCx06(WjSe^7MPTJ@x#% zbk!6S&Dd2NjR#s-Tb0|Go?%M(gnuxh)R-!kP-!V&`L&$RD4?4-{D2Y)Q)e zK{T{e#NvmwEKEe#ycVSG|Ll8rdmnLKiQ^&Uj6=-X6zTjux7YvA0~h3|tVhw@lEjvg z{j2xHho#YOk?qrX!X4OP0P0{VLh4b*LCL}j(UpE=H=wg90j1u6@RA8-(`)HtZkf=z zw9rY;8xj50{YI|}<;#Jo!{5uCR}Z6qAkLls-ktub=Bu?cq^?a3?vZTz{=y?Ai4LC% z(eUz@KJ$n_ynaxYdg4?9DPZ>FJ?E2MYLx8Wt@rkCL|5xi-GJwtgl0w#_nZ%1cM0vH zXcUiQs~gjV*7JZ>PKXj=!`0PmR3^c3()XD&gXW06J*Wq}ZYDrR)oamR(DsI(+uiX6 zqx2Q{p#=LEBKe)s)zkPMu>#w~4qgBa$}F!@g74q((?4S4_|jnlV+EV|U7ELWVqhp4 zu;?48Dt-tF<*(m;?#@crwgh;Pl$>$sKOg0n-lxHnxUzh=FCFJ7rh-}XN%ECK&k(t! zFnYJAN_rXGzPy#Ff{lxVs9(t)jm_bSrm1Q^4%`YhT$7AIyj{913qQ7IB$)J4H%G?x z0(HHV?vJ0arp+&FkTR8X%{z7*zO~kOxK^~z64|OEmtD%#TwOeVSEGf5rm0BvDf##^ z{~Q7Iq>;WTXbHeSimB;~bwT^($Q0pPsZn5%zt!vg>0;Sg2@3Mo%sD}SDj~Ec_+B1t zmE%0KIabSeW=7>e^T?~fl6RPZ3%}jfKoX+%0JaYUKg-pbZ5*Gv9g>a=t1mxW-`;MK z;rb8~s|TyLd#u;{s`jUvdTS@P>Wn#sywPw_f!p8%9_PS#e_xLhVN&pwKVSksj#Km~xJzlGjmxV!z1U5taWet_T*Ak9E>pYqC?poR1bRv3i`5@rE`Ku< zdYaNelH7sBpM|Ss2`<{%cy*734g|zG%v=pBp|Boy`ucq2#t0Rzz)g)EUES0cMAQfs zTffgu{)P6uDm=;HK&Bz*T{cVLFK_yx+^DOuzcZECv-iPaT1feOV*x)K_+<|vN>f8% z9wvgZz4ofA_SK{QQV+V*a^>d5(%{P}+ufD7ap7qaD(0K@@15CwHDH2wMbWH8L<}N2 z5H$x5l3x$5XxArm)-CkAc(VUI%p$Fjexu;UWUcw*Q{8$OLL$Ph8q;G&*S%bXL@1jh z;);o+Vs+qnmIrtL82C#z0^dvZCT3ZI@ijo06N*MS)Sc{*C>EZEJZ7C=yaoO)4VAoW zEx;#3@-s?#8J_3tXB2)FGgOh==JAZLb0g72q;@=R(2 z&zFEjOm5PPq{|;P8e@};jo{;8@JD89AqAE|T16UCGf&Iu}gDfO@l04lc)PaUNs1ms01pztZ z4fJ`A-us1EK=9GPrjCY!6XKuRt$%Na{)tn`tgqM({Evuq8{fm%nwwm{#+D_=Ukdje zf~g>8rc#04A!x#dzhG_mE5IE%jfkEh{kHI2pV)^`$r=%MI7Q>v7}qKav}LHS$(y<| zK4cV(hV2Zn?d;U=I>FZ>7Zuv=M=QE?4>GJb-7z+?RHFa0*}jF`6D@`v?D#s?HyBPX zobT=Ubb3-0bo({YU!X5cDYdI?L#vyYzc(hK8vvKkT(V_eo)XGL&6J4pM*3x#$WwL% zhldykd<>opBPmzc+pyP>+${cjXt?w1%ORHYl%}<&y@pK~ie)#kh#v`oh0Ws=@~hux z&%AYT?}YP3+v?QfkOya=Ym_)1S_K=FlolU7$ER!oX4XAh0TP2_Xm@bI6e}ASBx~D) ztx~pu&43?ImlVg(sj0yi2FJY^~?AyovIfqY*1>5z7nx*Jse%<{0n2;TN9Y^>+Qn3 zxJ?Rmm;IqpCUq1CG3v2<5T|9ZfBMc$h4HWWQljw55eMO2BW{?nP*kcuGHOg#=pk=r z=sM;8NnTauC5zv%BVLo*GwwSdT`bijOnE|AL=1V?6K+SfB9(X^i1?9}Anb(Z3}V6G4Ij#v;5LytvBDMg1ILJMI9w1X)WKR9Kpo)Nh=@I{xI! zN6CgC5s_jUWnUiT_~xJa%cw(;FC)(uBDejXf1xSmzg2r+XorsjMVX zhr7DwCm?Xqm9%zs^WKekTivf-z)%sRDw`5EPxl!UB}=Z0TypT<%)?izQTRz$l2#WDw@sf4uzD zfr=1)s)}MzRJc_*)xub?NQj^K!P@+CMgr{HPM1d_O*-anjh8uiea zfYJleREtr;w43CH=X}UOztq+Jp^}0ncPaHY( z|DBHzBs0ipKCdWYZa5TI5tuR))ZnbNHqQCtGIle!Yp|#OkpsGI|gM~=GMNR1; zB#Q6{L?clLkBAEiI#?y8YCdU}FwcfkmMg1xYFn2ybc4lBcsrCGLf{}rX4p#kCe+$| zv|&Ic>YoPS{uM!3N8`XsR#^-_$dxNNf`LRc^2Yb$ycWpm^#hRKg*BoM*)BJ)gF&vm z#1&P*i=(KfEOM1`7XkB1Iw2j=XO#Z6cKdX3f|4}CgigHm_`Fwp&WQoZi&K@+ zLQ@WlD-&u8Q$j5_oVd+Tb`D;qMPmuTwSwyg{T62UR@%Fg>gMo7XPQ*NE9kv@J~YST zdc>eZuPDq5n`$ox=^0G}G0=VkbRsN4&8&B2o`c>7QqRvEIEFqI0C45dkLJke>K(Ha zOVuk$9B}?t#6a5BZTG$$`1ZXP>_l6Zso%yhSR4FO+NVX4KjY#O8=7dKG{ z1$<1$(tLhqA2ffC^WF9u7vFDWV!#Gs3QXUiQ~H;dgpsZf;KS&Q?`#wB5$5Y4hJYQP zU0sa>W0#8}Zv3G)3bkm=uv^`BsG|qTnr|b4-?#!=@+IGNVy3)K24C@g^Go4dF4%1m zjJuX6b=#hJ1_1@J7nx=fHS{HA1;P+GM7!xM6#RTS?_85|Yk^`#q9?QjrXX*Z$R!6gv*EBIiFl%;Y#1hqJ(9Z?B$?AH?lt&EB24?6fAj+~$my&xj-P z#6NL@ZKRHGQzTrkJqpi~@eANu)c1UVL_qm(ksBY{+8S4@E@ zWQg4_+y)^mEyn7!s1Q@&G% zNBfK+n|EVpb@zE!5ad^+_yloamkj9NXHi3=@kldWulJ2BWD{hPWw+rE+ej^|(yzrb zP`#2O*A6G{EQG6rQJS6@Kq`t-POM z=gxiSJ!|+q#RupNdjJ!O8qTmA#>%Orf=2X=H#iA0-RhKRj*S=^jMiQ;Cd&(;8YBLW zo~OXrif*2%+LrHosz`W3ve%A5#UNFRut3M~FvGJjSJ9IF?FZ@9O+*3I&AS!lSxnz^ zLn+<&AO~mP>nI=#U7}|jsO0b3f?Xtt-HhBc1vMW=awc{%hsIs18uyte?out#E7`EP z3CEEwxzaD&D&A9~f`(5(Zj6U0t>Y-77wk#4_uVR-R6s1y^=RqcZ>t(=W4IIi*)42* zYG~FiaI%7A9NP!gWK+@^M#LPvzdh)>mpj}>Hg(5q7l)sWX!BQ+IX+3Gr%JfVs#C5Y zOA3)HPF-{9OZ3P21J|{>snh4Y*&O7#`SZ35HXm2MVe!;4tLi%aU3@cvb(q-BvgOnI^tElx@DvL*+XfjIk6AbNZya2Bu={s-Aw zcwGu7;9QhIH&^= zKP1x?52>~eb1OW=>f3X_hEo`u$zUSNZ!!e2OXCA-mP1gL6<3Fi1o6k?94f}J5ixcskk-=6aD*}F>NMXa$W{e_&1nnidK`>RM|x%0 zCqt$G+$mFcn@fy-8bLGHP`x$Q{c1@XD+WHZ8|IS$M}bY5yWv5~m*)NVf>F?)-uqsB zs;3L-LbCHO4NzN2faa@?1m{XI9ew8%rp?k9K^w^`Cz2z-qhbjHY8DiwQs^Paqlg*v z$N&X6Bv?EbN%e&g8@IVK>R8t&5H#uQwjs4ZA-ec`gC0**Gud_UP~Yafga_z%LQUO+ zPS+HvA``k(&)=^Ydjuhd`--6HN;M;=5pir)Sm79Y5j&vq)X}v8Vz;SZb&#v>SUK>> z;-=ZDlvu6ujF=*Yohn+f?(f6JV-(lf#~7`Z4NC)7+M5)Oac-`3KxZ$VXa43bVv}b~ zmxQjAXQFpBfs^aWB0fE86%4y~i48!-#Kt!cJ?we?w7xX3`51oON777U}U z7(i`;C8xbB?mv#ND&88<9C z1nI51`gmDc7?FOnQSutZElcfoc**Q-fe8n?#M?UA*{%lv`4K}t{`NXRi@+w%aNioG z3YS4*O;jmfX*JHts=4+j=rFh6`f*7^ArIw45vVMpOKTZzB{WH2xgLe;(07kbm#7#n zJ%)4Xzt{xXYuvh)s&Ms=+&f#b2P)Q)> zr-YS8?<|Xc-6@X)x+m@|V7Pt*6g56rB&w^qatZ-qNwL__3`BXZKv5qys&jAG>yA5_jv#AV-6g1>V_-Jo zm$Y3AXh&hn#Uu!oNF;0|qpXd}NnBkHFbHr_xa!7IUZt87yNBVkv`c;7ei=e_R?Z)v z8J#eFW=n$R;jWRF9Dyq8;B)+mI6@ySiYHlwdVemDp4{llvP1%wzapYD-O60P$`h$ zFq;%7Ni0b2__8w{`mbh%Sm44`5UL`mgs_2RAt}RG{ET$;xe3Cup9^vNPyq?n%T-7{*^tSG}lvtbe4k1X+H4cLR4KE(@{l5 zm#qc*KsJeO9EYTw5{L@7Cp4gsC~VX;I%UDAxR{dTYIsCWiIM=Xl@zb#Wr^u?K(Klu z#ff~=`-4~mm(cGea-1;>*)nb5>qI0xXfl@)1}3qng(;HQo@e*lsA`WJmsVnJH4^l- zrhyM~4-_Q}E%me&%Q_2*N|sS6Vl^v}J{daF3X-Z~lVsqFl5DGwHx9AJ^Jx~vbfk7> z9t9^`TMwdTn!~w8^7j^h+Pqo1l42d*#Ydw(t>m-&z{tTk(otccX?JAWStzys{9ZF# zqL(FAa_?RgsaECjP(0qaZjBCTLA`n9oc=CM{jsW5dn>$W+LD?H zC%2wt?WgUbNl*)1e`ff;DSrLo^lIkXH)z5fs52nIw}$?lSbyFZC(?t?ztfNmT8$g7O)xdP<1t@{5Zj z5sK(YIxB3e{&zXqN$_0J!uda|<>sHA@JRIL2EwBealU*6!xtGr_?`!=hJcHg5gQS8 z&{WlAbDx2hOox*Q=b`Bb1>sP(I2;^)fL^f85*?VZCG28|>6-$D7m)O^6T=UpSDV4Z1u4*kQRUg0ZwM34_EZILhejYUekLJ0%GsD@IvOR*Nmz3zCUWAQYw zMjbH47-C*4gIKJ%+%IvlJ#`At71UDG zo~3P`kJ}U#?4_W!dY0t>fc00oqM9NX_6%Urmb1$>%tPWq84JoUl+GkZlSe(Ga+`et zKj}-f1*r8YXiwLS;30^u?6laDTu^~2@Q9DG<&0AYxmbNO-2K|1*qTAYR(M(b^6)1v zAz`Cb%7EZ;#wtPYY|{`2GlL>;tXX-chRvLn*TeSNx!lWCRf0G2Jh~$_FaKk>0 zT6*M{L#WO?>N*y(x8R9TAll!~urq8M+7?E6-D^xcBPrSMv< z;J%4%tr#6tV!ap3x$GpXNLA78Zzcn%6B^G-@K}))5opN5uD8s|pOe;7P!8N6rYj89 zkjQ)v7-b?rEp=h+%_>tz??^b(B+pFW`0Nru&kCHrt3P=83ftWo*LP;QJcXQyVqo5N zZ@;)F;D68YMiHSXN5Pfux(Jq$oh+gpOTO)E>w-8Zk(6g{-t=Q2J)TGKK%j6qQO*c7 z3CC(r4xNf4!*BNClNr1-Uzwbh4VBkY>tq+%OJy!?cRx9c)a<*~qqb=p8El?oSnj5O6;NQ+!@dn_i)`6;yJ- z=@qxpMF!8)wpdm7Unn^=1(APIqo?K)!XA9H-wosdM=C&sjq`{t!IetpPYWZhLg?(Z z;H}={T*?g)_kPf~U47p>t`fCp(Q<0snYX)NQ|;WVQJ20eGyw?iGBelqMLW`q1~Xn- zOItJQF|i9fZE^Sk+om9sN30xWZ+7x-HmOC~Xi;D{SzKgu(}!SfN7}%^hDUU*id+?7 zM{;z{w^jk2-&Ie2Wn{HS^>iy?wQvdHqG;_HC8o)U7;A4yV+g%5r74JnpRYL7YNkc& zZY&GaWr5kL%?VL{s7au7q93}JWP4Bt;-^ckPd}fx^kIMGRFr6Mn*N&0h@)H+@n_El zGGzjCsNWxaYfh`uHC>2{8J-g%!513ICCUY$<=fl2?#rpIIMY0Yz$}7kAoelI z+?XfY_oIvBqeOg7V>gfS%BG<|+e;FgfP97|S!DslI~Nh9Y|1y;bxXdo1`b-db(7tushF5K)nSyT%SkfzIC3@Wn=^cQF`LKY?E>PeR@I(nWC>?+QYd1vgTs}q zRs+B#8bi3|5rvk+m2^gt&shBE02>mMj)e(&Qt=kw?l(Syd$i(_n{(3m`WU=b&gNk9N-<9_43q9Edn4r#w6v zH`L1Z;*tFf{4rdZ-N^AB1#L?w-?!5WBMCoE2%G7O$-<5)j)gdN2jXJ+XI=;dhidy= ze`pmA`=4=S)pa;Gv@ei*8m&15=$jjD|UIsaoV0P3+kX_QpV zcDchuoE30rK2ZpEYFWcRNx$3IPsDkA{}`^k&+XFdH^Pc``M1bMYwoBFE$A2z$S-4P zdVdo_BIz6{9FBTqv(kP^ukD$Lu2j1e63((&6uQDm{*DjCZ5NH(I35^RX<8x=>QeaEAT}H--^D*#HbmqTfKKIlmx7OqI)j>%tYs z3>}Z4eHpRArT!W`H^OCU#F06vQYvE4M<8*KGCW#QHN*tdmU1AqQpIF13E!!OYwE9YolE*T`w@oD&tPWOY_z#UkS% z3)!&L&!5!PjdJLTaXMY3Vu0NHb;(vXtctRY-rRAyqSv@rhE%WmW2mTxiqjT(o+5FE zb(W#AJl|2Mh?J5@P)R|NB3}eMn;RC_CJIun7G`NEB4z~xsls>r8t%GcLDRV6zUaJ66bi?KZUa1!0)GsVo1?q$zGSBjfJt+RJ2&7pJ1sdq9(qXue8ePm7FnkOhM#3nlAxL zmvkqT>6~RSUcI)jX(6L79uZ2Ee2Re5BtwikC(9;=$7oidR9smY24bs{7`%}j2|c2# zcjo9R1RmDWTFB`+R3@0l0Vo`Q4Wf#ssHj?`{E{_Ern*6`x*meH`76|W{f`w73U$w1 zXvdW_4ee>7M7>KX*L>(vqlS1i=cS&CTar6f$yDkjhhE%2XcnIsYxKu zJcusLM5UyJtJYoIfzbG85IN3w^ktfiR0>3tWh8s-nt5`w3gmBKM$|PN_oY@=q5ztZ z%!w@*SBUj;=|%9yBi%^MregOOj{@|b`)8idFX$gmi-l3mLL7nMo##?WJfb;VZAZ3| zn0vBK#K=314HNXcHS6>WNAjQFz~;H|u_4)=td%P3mD%B3CqBnuZ9?%RX>)^B!+YEp zsUh;t1c)tUoQYqs+twj7ao^R?$z8 zYy>K00oEy71K6Yc?B@~4qW0tD@0uHLM#(O4u@fJp0IO8hLk`K_M=O)76;hM525NdO z#%Z$g-^pQePCIm53Z3Y|s3`zzy1A>_lR1;X#Wn`X`F14kg!}Ryb5ybx1e`clq31oa zAtD0em>IloQ)@K(V(|L-dIo+6@Ons5eCxuMda@aHd745QRwPvg>2cQ4XlQ&6b}3&G zQ&k}&c~ zj^Fb&9nAQCnz-vI|FB#ed?6~GlBg4un7haPAY6&z)}O+{kIq6_YDzpacCR9&wTp%r z%8=)F6v5yYx8#f2Y#brp%?<6IThy`}nEb;>uJ&5_q z7c@q#%z-p_j=R$lV0W=)qF-Oz{gC7<7Xwjb%jrWWd4<L&LMqI$2^0TP(Qe7T6WNR+r_b314Z-qIjJDzp;Il1P z*WjdNofsTGT%V3g3`pqPdHez+Pl1*A%@WZZQ0&yRIvWB5Yf4xWRaZlIQB#&GJg5#M zSSuf(8K_EiwsHfNcb;_yM>$%GfMS%mAILxSHj z5@riQ!o62UM`km>$UnHo`~^mIyqzdlsIRwU$A`-MbHYX`uD3o8pzqd}!%CuXbCSk2 zl4FeBtCds%U!LKCJe0+{%lHGP8Rd*9w#BZB$pP-+p{Z_Qwl%m|DuLf<-ctT2y*6$) zP{QulE9#u~JMovR{RpV>{gJgMb`D-`h@J!jo^ZVhw5|0N7ElmnCe~6^)3zZjEF=n~ z4QFkpqq5I$Fo85kdUN=`mPxJ=vo-LIblNp|gWOGXvSXdPr#rA{6vK)frr6|mXz(&z zc4Tn&zCaw6?Qs2w*O&FzM51%+`6HBEZuclS1|B^lWU_mq%`ZzC(2}ky{FbYfY>_?p zeR98l(3@Z)@7zRxLz&?e8n?#T-QrWEPfwp8kpfb`3?O0ZHlDc$5UU$e^KFh1uVL`L z^;J~)Y#2I!pdLuAYXwo-H%&{80R7_^wIphZ$=E%>*Rbt;bauXWA%Y*px8 z4$cb0@VnA<^p=O$jyXzw{n6Y&9&HZV78MUa_PmsKBOQzhMDVE;{!QJOV~S9%Pa{I! zEQ-6_s_1xL!@lTTK=f_s-teg)ipkj05>kFdWAOC1fq)!p(a6$M25p~V8VYQC_5?_; z;RLY^Oi{k|NyokHulG~}j3M-0Pp7wIKP?htdyXH<_A-l_q8E-DASVNe4+hF>xFVZG z4raJX!Vv3BuBg7ZF}euQnKR>kXWK~c>PR`xNZn$A)W`jMWMT|WR>)IuCf~7ygy$bA z^fTqC?Mb^RhTg~a?`-t2ua(*8_v!8W38(wJGZd~Wfzn|f5vuxDId7WEASGNERm_eYUq zlICAb4b$oG?KZjr(@2g%!N7eL*O~xMoGaByj{mD(vvHnYC#rPiKZY(k)iSZ_d%^T8{e@r6_$pKw^ z+cL*(s6?cxjs)4Z0W7~GGeBB+VwdY`cA9E*3y(zJuqq>pmS8<_ zxr&Rwei-B-wHLZn3|iQiZ}v$AblYA^G0#QiJL`?iiH+}j>m>d{P9)s1^Yhsbmcpxy zj1x{>LUbkJ_=cZQoo%^_th8^sZ-|s4Ki19}Xr#k~9-uRSXoJ@$4u3o9ACk6SgRj< zyAu*wt;C2d^xPvuCS3X7N}nzT!f^pVdf?(7Mkl+z`5E}6vA>esBt0Bhs;85#U7eeM zLAtI5d$wHNilZzgBo0Bs5p_y2B|v_vW`DRp#UwF|xI_Z|k%J*MQPQ!w=|iB2tYi7s zqK|oO&oc}Y+Hvp8Ouo6*L__SBSek+YL5kR`eJv^kltHwWNK5Wu9ryy_^rLXxg4Ai6 zPGqmArA^|Pr@DrS8Rog62kPm0X z2}^FmD(=_N{u^5OHy|`#&>x&My$W<3l@nCuapDIF+nl7_8JZu;mQZ*}q>)Fl+%TYD zb-Ci1^<;wHNsfp~#ygPYKQc|HBdi1I0I1&gM{5eXLi(-hyg+(9*Wyi~9tfd{Y^pLSDxAv1x+pS(v)l{QZhVJC7B!5*hCE{=Q^3n!%3O^*9Ss z=Uh%UO(!=;Wd{8$F$;J@EGFY{n=BGn+|%m4?KMQ#OAdoI4ZIDF7#mYYeTzWftNoI= z=OJ&^>S69Nws7&ENcNh3d&a{>GDyx&=&2>pifmF`h1B^%v4o|-$(~5jGW${g(E%`X z2+_vvjgMi9h>U#i|BOiE3Nl``(+(Xsb)qvpMpjo~8dhC_OVBO#3?-el#b+3|G>h3Gx zIc|{^;dBDFzt5tHFbp^cl5}JA=+lQJZQzNHk%LlU_wK~8^D7;`L5=1Fy2cOxKs~!% zlN1{T{baV4r%tx3q52{mha8z`_Xn}jV!wsVBAb{Pd0}MJ0+CHxGLCRrgEh13-f6Ho zOC5&%xl|9=s6=Vw`Ig-~PuC!@Cy&7{#GW{F$kO>D3yUcJt{|Mg3eo(0$X2ilf}Bol z5Ft`u57vG@64(UH9#%%8$ndnrfKA+Q53~$o>*(`nhr~o&N-oF-rbV7hYcr%hU69^{ z2;j%@EjcM-0ADZk7+S@Q5g_(BGy8LxAHL+i;vl087i|X__W1ESamxhQ`u_rBS|BTg zuAgH1g*R2bGdJ1m=1%Y4QV-h@}l3Zv}h(S?MM zW=$gQlw_}oF5`=`Q~>8eO{RHHMmPVf2r`ZJ#4h!v4L}dz-u|FL;gsRF8Dvx2-@$Uu zcCs7+4Mw3c57l08v(Y*e$RX-argrIGJN2JScCB>t^)co?c7Y$p-9I{EYnDyN-ww*f z5fY}v-ngJ>$02~f2`&b|qY#CuI;FOpf5Wd*`E}>DDTi3vCqZ3+ z&7-pz>x(#w+nF*WOav~7P%i;frm zFh^|m!hmn;7q4U^Y4aM`XQfVDJlKUZ`ZyisgEES?@{N)YbYS=y0zX4iB07pV%w2?j zRUqvqoz^!HjZcE--&x<8m|X~~XA~AobmNV6Z?9M;knO4cLg0K<&0nCa6X@&XwEp`0 z<(^2s7_&e_(y zFgFIF#P>4p?)L$^VO1Cc$bm>CkO7hfq1chhq@vKZh)(~tOY{`qzZ#4q5qLuqGA!1$ z5x4l|arBV1M3u6*6H4JPcsP{M^HQ8FNZ`{Wa4`N9 zI^57`Q{v?Ci5A3jY@k{KK%ZPEZ?qB|?wt8usidq?(5<$MUg;3XAV|=`9X`Ird~Sxm zqz&>1IbF~sSgy5jGDK|kFK1atTj@yB+z8-kqZ6?TPJg0x$tB8S4xIwg3L5c_evjvt z%1fzN=6l5G|HttfyB zc6I2G@f2STs8CJ{$7%p^&T0Mh#1q;2hNaBaj2$QCW!mYYz<z!W(Nw}zV16C?*U>cyJx4aF$F~mLK9adq z^2d@cHm$f~r#Hb+%A71b48_5G={<<-v-i_;RrsN7(cU-w@?hM!niuw=8}1TV7aKPZ zB^Z>h7Qo)xaM3(3x5xJg?M{8GAH|bZ|yxPZA#qW z;b{j)mmu_p6l+hj>}6Lx@gXEfxzz=3|NvTLEgp61V+ z!fx0sy*<1ks+HN&@0T7^t;zxU8k+roAdUDH1Ecr3TTqrD=w6juQ+{xw&qostmv_THAW=8K|+)gc^oj4Q7T4I zbg9G8+Yk1B1p%L^Y|!#YMXAU1Aeb{W4^V0qa5Pf*>w;=LNAFIwd5eh^T(wZZd-9Mk z-AeG9A{FCA!FROE%P!U6{#c<$lm(?W^nd<}Q2C8?DD178nm+ssMcYYMjvy~VbW3;> zqEeV)fA9yrIm__@gr=*Zwwn5Yh5)sx!54YUPRABBB_qS^Zxlbv+14M={6clpq~9mm z&xqVDl)k7v1oqqzn+^$LB|KwFgXd7%oU~5nc-%_J@tnUECS%EzaWvf8|H`?zv`(+3rEL6kGpq)LQoK^$4en6{vc&-0F$#6ykbJ@HC5^Z z+59WSuS%y0#xPVbQkpu=S33{-Kwo%Y>A9*hi0rMRT7SRo*<#-)c*UJ+{QOpI8N#A2 z0a}uVCaDz32>4mfGDLVTVyFuT6)2^lk?V?eI#p-|u2;Sh*=T5CJ*0+y7X ziK`f-T(T?v?z4a{=9O!}GNQ-tZH-!tgzSgAE+Oe-20v77H!m!uaq7*Gxhgij>v@S9jHRO#e z_&S2cF16_r9A!dLyKWpxHJvAI=%~Ugv)@dHxN>g_ixVM!h8x4s^|qgSSt6&Izewxn zi_bc)6PIp;4tM43gn+xjXQvSV!Kvh)k1&nT?yTH=E{I}WA6k+W#T;2-6Ft>6Es;h_ z9$2)lPWuLZs>S4(+aOOhuM}vj6m;IZ`K{9YO={ol8)Fw8!{zrQ&Gf1bL3xNS-CsuF zdv^EE1bc(PTtd$XrGqOK$tAKGB2{Hr3MVv4mkcfexdHrnVa~d;Q|jM8 zO%Z1yyT!hvc0w(8(G(&N3cZ{sG;3K{lTxPx+OZL*5EgTp-%Gle$ zgcz|C8nRcaI2R?b-m1}+(IMM|%y@QvTYjhu##%yIG9iPI*GyM5yM4o2?$v`_r-W=z zGOHNOU&euP@LHi97A+R_qy=aW!ibf9YmaoR*#O%uy+cQXrSu$@Vz&+W0i5lQ(OD`D zu=n|sOHCZwQ$G3o>Ts$~`8Sx8BAw)bo29Vm11yx+{WwECt2ESt#VeDX1vR#*-r{gg zaZC=*pAdv2$;f9+sC#bORrKg8DU4^gBB-ZsXzb+h=qegA8obU^8_&mDy2e+NAqFGs z24|5{?yc_Wy2vy)cCcG_XtaVGIBgdTqWEj!%_}rHBqY=_Oz>H>5K&A#aa}rz^!#u| zL9-1h^hxpP9^)F5(5Xr1dX=v&ibcDqO|azR#nCTrVjjXrM0whG>8YAvD+@~}@TyZs zv~#GC!s>76h%k+1Gf;CxP))|=K(7}l>{Z(e(9xMO)7RblhrX6z7>DS;Cu24xJ^ zd&=|)%yZBOubwDeZy{? z*dh+!xv4Q;oi|7@y*OJ+G z6?_u?+!Px=8)8H?vHLF$Tx+}>+tU5d1az!0pZbHSqzS~YV@c`h8RMOdDeu93wQFoQ zN?m+PFMCnEM%>V@#0rLQ*a`8U>q7LLWBNMq7?+LPiSDxTOx5~hQ%TU|iXwwanj&(K zd8k^~jWOF`Qd(TKf`1-!R9(MD;*k?=abY940VZGQ>1wL_=~>c%91(>gbt%` zxM%7QrN{}N73s&5AOp3@Xi+0IRr1FO8Qz;Zu=vIsr(c=%HW1+Ywg0R}ddlYZagl14 ztPykUPk>g75TT?M13A`WGdyICyue4T{OHB+E;0!SZd;PK!Vl>Qtz!`)i52fh ztc#8~3oG)cNpq3swf+swMiRXn@3o>~luKtU_JJ4u322@H8o%`*KrMwT3Z>{)XbxIh z#|oiZ5su5K=yAV-zzJZvSYB?*NkY($sbzA+&t`R!Qg=)o9AmgKUgAhIF4NqgD3;$z z`8DeSp=xsdwTB}{=oUzp0${yRq)%BeR0Md@q0#ld`MRdve<2v;9x?vlKF%hq7*4eE~7C=GH|QUw!&@KP%Zm-^-!S} zH+i*`8&Cs~O}V}iF|n;4VihZCZ}NDZlL?Tay6;kt2E=&dtCcYSm{O>E<-Sp@h?~yl zO%;}LE2kitjTT>@mQR3P&~`}~#AV%If3nfYXli) zpcH8wn7Ux#nm8v?RP_ZZ`4xa(KsDRHydvw#rI%RWUcA++RZyi~rFKE5NHOF#_9GAU zAQ(_94IqmOvgoL-0|9X+GPn*Ckf$mHHqK0WgP6Z#(5>JIXBM`K5O%5|;TS`-*>V#u z?{MiC-Wc(EqRy)Kujnh97k4VI1{&=q((zjlM~Aei%dr z3=NV}y{=0*9L_P*amA4#1Ti3sR+Sp*B1wo4|7vR+2BYx{ks(EzEC2u?07*naR0XZO z=jU>1i_CpD3JC;(%J~dgZ$)ZDL!_=oh23B|sgZzC#-#~h z*(5$Ox_`Kz-2)m3#vNs$6@BteSRBRp_Z1C4a&k*$C)cQyYQTFn?o~^BbxnFIL5;4- z!&tjwBF5kdoR<7=pf_8z>Z!#|%pf0@EgIk}a?0e*Z}zZ#6~l@Q%K`?n?2l|wj;hpT zFjQnz zJ@)nv4-X$d{`m3Z@BTmgc>MV5*TciTz5Y!OW(Qi^cUR$qxj)*y;dVS}sCzN@o-hMV ziWWf>7z+>CJuevE5yzE)X8c(Qr9E3PrAczvlU|s`6$Tr0wW{&xPvU($ODIUB?1E^f&roUBUM!R_!o^(O6 z?jNi5v(>Zi$NJf`{(tx5*{b`C?niiZ@pJO--@pEQ{^{}8!@cI9(dhOlV_0hk9EfI3 zxnL*)TMhkTD&r$Eo$b)D3CLcP-(66y=E|u5Uf3D7b`1v@GAO0bu9vsK@X`Y0tnm&e zHMS`5WyqB41V9Mhiue`;U*&TcyzldtX02fB(mc z4GmX9`Ty73g~mF)Z}_8)lRw@+{Jkr=e3XO?7Bey`s9vF-=(;O?SpwWk3Xs><0n0EpJ49AVaf*@W$y_*9 z0AGQlhk?cBR+5Jm5>T=u%83L_yUkd5cz3rTay0%rOGxd}MKgd{_e(f9VZ@|+_sjx07Ko+~&*y7jJQFBdsB`Ay$ z>GXtW69oQG!7wm*jR8fbAUER5O@>S@G$e=6a4V+O0!X1}`#OPf?U7@S^}YDv5x>2-iS9BituL*_I-ZrDACS2r1Ug&V3srKc8b-5AjKH)oCg(-- zS!>}P0%cK6XsmP=qHD-V*et0G<+KNM-{Py*W1xT7;Q09PzklC#ZTOYO2Cvcj#$@&9 zf1e)j?Hx2|hw{BG8Der385^2U-1-)`CD6%(p@x%??3xJrDj_Gj=#sFk?og#99(k>H zafDq1mwABHEzq!F9-LyJtnh^!Jo#-W7{ z&=fBa;0-(ENxUEwYPsE1!R*k_VxnmW#t>D36=iJlIQ;nh?{^lcnsn=5Y6=N3*Lr>L z-TQ|0Ov@RVcl~RniX{sjo*eF)DXCYRr@cLcDB zJ>mdlVpOuaM;aYS5|Rl3d+N!{#J=FwCPg-dZ{A7Wj z^;EYuD&x217e)NH1}cR$LkmpmA_%oanxW*Re78tekz2_@nPD{7_WQqdkLEt^qT}9! z&FUPt{uXb)W>GTm;rfx{zyE!5vqTSTDVKDC4V0LHLM&OR_XtWtE68fC%u$RX_a<3y zph#X#l^NN%h!B_zuGa`U5iiAw4TvcHNutHK7c8(YrAc4x0{As8hHp+1;a2;PfQ~2v z={p3cDsRX}U{&g(k-bb<8cGXK7LbW6$V}ea$Pm3JSwMsO*O<_8?X+X>@o!z*v06R5 z%%8ka?&wjvT zE!1#pn?}}8|NZUp;X#9G!ml8rDZ#)L4V@&IDuxB*CCrPnw2T3mArm#YD;)B4hKC^W zfycXAgE1D`D*LB?2ygVgQGHeGzSM?KmFC^j`7lJyK}zYDru}M zZI1oXlehkQ{&-I-$`6Z|buc+h4n~-tddzZf>f7RecG{q`ycAzOBa>a|C?tvn6d8Q^ zV1R&JMVn@oZJ;9CPJ!a^*uMPH8Dz2RRJH)X>mA6rPw4G-F?@rL?h0w)88i$kku`(a zVgyyFu;TL^n83;q-Ba<=>VtM5ZYt=89e|OFcyMs=_|gB?t1HR}>r06<#|yr9^62B< zL7NzjG4K4I@Cech#n3Zcq`_Hh82>BQ*cd+n81zJ8hq9{fX*TlOuZD`CZg519x z^hL*omykh@W>)5ySUyZqn|_z58PWP1gNr9dgLZxoREW7$;)nEAVLy|i8btCORMb)| zO()VQdZ^!Gbq5EBpZ>l_@!a*b6;TtJTkF`s3m|{_Ck(dkw0Seae%~GG*x8-Z*`g|2}~*| z(EYT(OCG=%aGj9_dP=* zi7H;cDX|oQiU&boSf!;`Ru;JT_~D;j@>sdXeB(4uo2x9Cw*Ju78Oi$I-w(r#y=S0c ze2&s@1oe`s2@SK*B3l{h+cv4>HA=kd=rErRlu?mAZgIJ%Q5=N^79J#zINoM^d?6(3 zLIHBteN8PHZl=Ls+&JSGGdgpeuvjnbFePp|Nqm-F0>cD5NCQI<$kkW^yn-Y_S7wFI zg2)7F3#z7h{M*TTolq+;0o+_+c&yL!cI$!}?@PgZ?|yr{*DQM~W9ZD0bRJ68MeG$p zm1HNRtJj)@NKz0*ibG_36KL-*&a_BW_TnjZ0d?Vp7wGJFT~O;dBS>ga(XBH~)=iw- zT4TUug#dJ25}A@yt~1miCQe|`z$;|TaWB3cti0*+8qFkuxt$I6;qm<4nzZIYCA)2m zh-dc_6U(~#Syrpn`rV^0L=e5*o#%~Wh?Ww=f)S)IEGAaM-t2@l3Qw>mloul@N7B-3 zR7svzwx)u+Q#gLsPG{V@8iIwrM3%fK50VmEoTR%5e2slj03SHk`0Li*QfPBC< zGAi1VMrs_Z{WKST<=j1(ksZQXuQG3<6n! z1uA>761f*CgIk(QmeoKLZaF8|n^H}pf{t4*GkI0ya_O2Z7X|%qdJiqYy{?b!PwDo3`r?93`u!$pBB1mW_4<}% z1>^ADxJ4u5O+ijWRIKv`hdj0PC;X%`%E^l9ogt;!VtxDu1UEeysG*IZQIma6^cVFoiN&%enw)gN`6~>6*NhS)1xVhsJXcL(Ul>r!&>2 zO$R|F13K%mj0dV5-fD=B2Fe59NGwGxg9q3(kv%~|&}HE?fYZU_YRat?8bc9b?H5-iwT{ETo@8s(#$0& zmuTzE+>*bP4S%ilXer=IEL-d7_RTq{yyq^l7O&b&d&8+s-l7%LYR>ShQK}Szfv|M7 zbP$!F5nU^i5Gq_~o#h{TqXj^x3y-gl?yXiEI%wNWhhbNjGx;MQdUK8fYg)$ItWF+% zJqV}U6eAB*5)VC8x5@omi|q5TmNQ}cVeL1c_%g)~R0jFJ6mOs!y%|FSoSd)kLe9CF zZFbHM-DwLdJzTWNA-<4l^9-T&BNrjpdP2xDjfOxEBf=~bOml7JvN6A z-$hc%W>S?jFjTkyusZ*cV{^XhY$S87$#DJOhkHGFI!M?uG~5t22rp%HKE*CuggE%h z7!V4IgRjO@{9tZlBYaoZxGS$esnH%Cgj6|$xa zWawPJ{B?n0@#RC&(V=1RftD~q&4*XP#;2>U-ak$8VX@Y*j$n{ovLXD%4gKxt#G{A@ z@{|2oLnYd}cwh2mP8q|mR!`qQ?&~Z?aQmR20WwVoCg#_92GIq@%@RK2A~i`6!Re~P zh#ZQ8K@LdaEFck1l!JOdyf_Dtb*=#Ejj&t;LengFT?mpWbc8rJ)>JXGO7TJY>k%JFm} zmdMVa0}70HP*zk{b=yu@X-l3xysYV=CTM=9DvF?y)E6<3)#39IJnD#Lx;kdl25|QLWFXfTcA6_09aUVp;c*12vCAM z;quiMS?i(R#WiG**IHX4io8A+qD;WM+X7}hc>X=h90o|WEN~@r)`RGheuZjq>9^)T zd%ljlIlJ!T)4P-UHN2^TN*n1|4vq<92!s~Ha!NKK5;mLgi{qMX26D*SrGU+O`}mlE zHYfjnI%tT`oH(IUqPMZm02F!=A~kB}gG4Rq+qKF(H!B24$P4je-UW$8+u!JKuA{_S zylUI@4Qr8=Zy^r|0eCe6DO5rQX1Cv7 zxgKP(e+2NuyovIE??xaI{D+1Gb;^DJ5xTFnnSyCPQmcrz_xNh#_Y=2@&edN{#d&h0pxas(;{cb zSKWi0DUFHA59F*B$`?;C0LTGdT?3{Nq$eZRs=9c(KwKP#V`@xZVc8%#*n57m@;L5> zH`3ddP6VJz>Bwe{|GS)rkCJtT+kP1#^5{@E+U_|t%9ui=p|cl6S8_O6^g*=G!1Fs$ z7H+}Vg`okvtmXnXG)t$lzt)#$S6pHp>vZOIZ3@Emd#Hx3F;wonm$|kn2@w=z>4-UP zSJ$QeI&~m6eSH1<-imTMHrW7tn>IVVo& z0qU+Slqcsy^UGVcTHW7n7P4i4d~Q{%vh9G7FAe~D&v)23)8s&wU~PH5h83e zZ`DP3sDr~tc4Kqdfp0FLRqEgGN`r&O$mO~E% z$o0xSSab04@AZRmx%kuxVC=`QBRWD;GC#-cWw`8GcfI<@{v|WUQ|Qd-Gpr?iH>~*Z z6T@Q76~u5$fGm_F@jA^Hs*^(bi@bkjCDykW`!m)Afs)v=h5uA3n$0(T(9wk{mbbaZ zAp+e8svMrA$JIg;qC`BKS3mn0tfeiUI)S;CSYZ@q4NC5*%q&ilZxog&yxK%PrAHF|X32gOE zM&ivavDhSi#et-qYmbh+BiYoVcQeYcXL8)9kGe9eU%KA=%b9STb!D(#mIsv60Fkti zh(lvJ32G8}a?cupt3)kIL$4h6&*?2v$W|HTTQ5X!8HQHN9ceGHDLs_5S5HEe=>{JW zlZit>B&)F)KqVX1WTPvcf5H87ggYkwcTNyI0y8;(Zgd}WKAgX-(r+2%E48PB}pdXIR_pF%c!h*)%0&$y?<3b$f;JX z8CWDB^;qT1M*z3!Dz4(AK!N>cp<~jJXw3O4{EZEd?)5u(cybc2+078~a1t|i^Uwd? zfXB{;XSdbV+A5pVuWci8^69{K z5u=SW+ozvS1+uouAm0`*_BFJ66xb`40O_I@B#TaTc7as1ml?U)q){!3@a`~<74)Nf zzn$D$4N*llLyGWCMufV)zGG)P_`9BrzNK$`&6CJ)dn)X{4h6DSf+~~U?zTtAv^Fdq zjA)dW*`4L4sgqd!?T#cgebfy%T+AR%KGH;6Y<$`Ny13AstE#Zh= zdNyt$i${_hzA5#H(u{`DB%I+LHiwVas{vx-BqewRhp)e~+8ItGbS?FI6j>+=v&i*& z@bvxRfg);Lc?<#)+Uk19thk^EB`8@mQ3vfc>$!6)_@Zs6Rl9a8rvSHcIN2gVUg?2_ z8f7_D8d3vM=cbE7vwR4yd$zRK$qmmZfLLOc5#ug3C=D44P8HPnt5D98-M|gco4tqcR&@$hTF|-K3{G=T5&!@o07*naRERoX5 z^PR2I&CYpyl%2V#KOd+Ug~nz5;N7FWJ>}NX6ddZBQvhZcKd?ctk)$Dm9Fkg8GN(Ia zG!K(el3XX%LOTh_T5MBdz0y9#RtW1=O9ZL<;pD~w(WP^ApxQ7}P8qUNMB=AqfTW*J z+K<*WhyUH%)Td<|;x}6M?1cPxaa4E5>jrz}VE))~TEm@-)@`vF8SK+Xpy1WL|D3fP z8B|E8wNyhjnU{3JVL^aAAqSx*6YW5y{m_ag65tz^T!4JJ>>k9juvl(rh9aYs;n%!z zvHneioGF8pH#5W>dnTjuTpb*~zqhJ8>uw}iM_|JKbJ587XZmAjO9f)4-<^+ES?lpC z>#su{Z0}*x3L*z#r9J?Xp$90k{8M&vr%kKqN}CM@3~gAT5G@k>%q~DodwQvJkSEsa z$CX%mpoxO48mi18!apK#@;`Ia1D$;W(y$OWAwdF?i9dCyJ$(am@b%BtYBMta;M$O9 zmlz(~MMfSc)1zZ&Jd12c&U*LP*JPUo(}?GauV_mL*)H3i7=V;@B19Rvoe&y*@9^aCEzZMMJ;3c*|9Q4 zOwB3tsRb9GS&sK29JE?7JG$&ydhqVw$Cl|CSG|lVG-&DwL1oGy8rBKrj{Y`2u;0*Y zFbfR?I&;PhtN~)J-j42^^0p>Z0_59^V{1oQU-3&pih&)RAc$E|j;~tV2gI!ugVh73 z21G&v$%WFz$7+)ARV{(6w#**Wi>jS^xVYf3E?Rk<>+uuh=8V#kJX^N^q|ChwPo{Bi;kW1 z)>iWibnanvc%I@aJq_JwH?%bA7-%UBBv@%vnWQoPpZaAKK!AR+y;)O`M_!yFo1}f*|Y?S8ks|)bPd`3UAsGDwJMJ zS^PW-WIdUdK|T=OzLr3xoLLD<+Wo{5Er8@%Jw$9ytFUay!I8->x&YQ^x);L2q4R!pulH zxx^bq89$I2y~M7}IA`kTJbx6;`KsV8Zq5bm#@sOtofv9+qpoUwSHF3A6Y57 z>LO&XYd{Q|Ton#^zmUD)z=K7VE0hcwvU6G_<>O-PJ<}`}yPw*l7vpWn zloD&HF*lbeFkQL*;48U6M9V><%a1;IPl)x+b`CIy#_TcZ%z-7Ek_+Ya&&y3 z50q!~fqHFfjLgd_YuE&jvU~d+f(Xh)eNYu#pC^>QvNB-@jn4^4xb*>E z!=f?Hj-0LLrkK6Y#ygOg#kNja<}$3Z<Q79G2CPn_#mjTf$w!#U46BB zFd)PpS;aK9y4qn)!`v4{^U?NWsEqnPB?Zl6*i40G6d}dawr_T?T*e4OU z-5Y_HOCYke*ziO!^U*5#oltTW?;+5BHV5$=^vh?AgcqY!fKysVcPiSKmqImprE3kC zfa}Q{7i*iIOf^WD6w}ZiPn(oe)zU0kX~;})2q)25TXr) z+oGK4c&;hMG2$$xEZIK2{W8usnT>WJR%u&Dax<>Y)@FxAbd>yGV+`Mr6F_cMqx+=7 ze2~kd##FSd&RS1QA3O4mP6ipZG?HbK`FH-t^U2M72+L_%WM>N_ZuXR|pS^qfNn`)I zSbu8{+Up7@3&vdjfOY%XeyK2kH`yMAw7vud3T&=Jp$^yGm)^d<1ekY!204KY3MCgy zoHcfBzJ!a18$iv<+mKSzF%=1ww;^Sl&c?3p!-BE#u^|rV5;?I-=KE*c)?=Q2%xmGX zlSjsP`rdO^p-sv{^Awi$-KTdV>mfL+oE5G8#PDMmAz&kX#fx`eW0-Tp$3l<<_jgQvvl+ZsnZEvNTar~;PnDa(>(q++pIRd z3Hj$-;W7E~okhn^Y$p=F`~9ELiEKyI>K{{*$Y!eSHhZ?#C;xtJ63Gofys$Vy75E}S zEt{o5HXX>;RC+~r-=RZBTEa?g*9e=fjP26((M3zF#jb8!ko{K})}*IkvoNG$F50*} z!62CpqCkd+l8MzfD~;2CY{qvEu8NHsJ69GSyufm3?|j-!a5zF3INbr~j;RqPjoBBeYD-6h54gxc=N(+`b_^i? zEq`N_k`u5T)?aFS4_DcMaAF4e=i<=SFqPLGc_#g+aS&Z=zEcBx=c71)g9>)GM6>b{ z;i}>W^r?%G7V`F?Q?rEm%XJ$5om>mD@4|mV$U7VAP zwfGVcifAN>5QJbLcG%K_kP4SwBr?`KB`5fn6sj0?@Obrrtw`RarD}C6+VS|<*@CM+ z|7UcH5rSY&nuqNMjq_0|<3HoW^_{JI5F0oDK0b(Oui-wry zo>Z$kMUh>qD5Wzy8W`sE&W2lbg5dQ|D+o4w5Qq%~KOaHp0mC%1G7^l+4f#qcFr-CZ z+_jxp$(z+rXrS!ya;j0n)q0 z0rj6i_vs90hUMsYhD;QzbV^EeDZGMW3v_9MEN$q7Bth4E|E)HZZ0CPG5X`PNTW}M1 zMvmcDjWs8;N9^f)R-9Gedmg!4Vj-8lt|@ia&Oqw$PnU3=tSpq3=7oAR!-E>NLW3X@ z$xlGTlq0|g&fH}(L5Lk#9nC(|vLmugvYBe`41e-_qs&B8YiU8AF67za5KG%(VJtf-=1K*L zQk-Ey+6Ty&^99Iji%yUujfp6h4D3bbdxc!$I~OgC%VoG63h7zdvnaZH1Ux1W2VeiU z%1edKNO3jVo=-V|q~;%E;nv%h3AmSMYt5&G2WJV7bRs)jPk096ItI~VnLcpa;!qYI+gu)6GV z#FPO9tC#YF=n7%f{i6#Jz4y0gC~h`K9vJM2`4^ZK2J$M+pkB0Ho- zmyZ07NPe7;)^i0KJT*dA!X~p+;Z`c+X6fYCt4p}d-BkTUcMbXj zww^N@wQp!H*=)fsnGEdC*_}=;;J(Xcm3Yo~=46WUJskM&qOr+bh>h<hsr9Ni{9c503A&U}D* z@_ihV^4vu`{+QPauT)gk3>_xPt9HgzR1>`9HfdM<>g3@;EkY!X1KS9urPmoM+Z6I; z0R#+dkQ^?|dwj@hk)VO?O7a2Hdp$rt>t&noB0vyKss}ozW{6HUFjMElL*CA51`3u= z)qQ+C_7)~-1?OfXNo`plx>a|+Bb~}Q3zA7{r|!*NFwCX4J(0I|1WNGy|5^JI#d4$nx|&HtKX)NLWG$YXXhh$+L3-pdRslXAbR#n8gNUThuZv-((uUfTr6R9Dc3Q#V=E1gq_Dw02OGQ;O$DlE-hYj&zR{Cv| z&$+H)VtRNH_7KEEZ)`rInuCnp)ZQl^|6VX7`UhyC+_vb4kW4r;e?J_GW?fQDJ&M>?uX`h1bnhE-T{`q$ApsEZq%Q0yE zhCRl+d#c_68)Jz{e(uRC(JO0esO!ngr5cVuwwCG54D#3qGC+exRUH?1dy&!h>Wr?t z6?8r76wZylnK}^G{t_Se?_SgB7-&s3XlT_d<6|2f>k94aC7f*I%S0jYK=51FeW6Ve zVulqZAW@~Bo{wz^yH&9v0`$+q6}iR}ZiRQMBJf6#>r@r`?=|zBc7WWy_@b)YR|{&S zHV;9`5)`N(_Mp$K_KhVf1IjQ2ie7VhK_~Q2-=0WVDBhghXl=M^IcTnuW9JuoGp*RB z*i{qRXsx{_I_xz$q!A$lRgxoma<8A>x`O>i_o{EMI^>v&p%H;r=HB&90hB@oSP**0 z{20cUkg#Rp-IfgU>PX>;1%l;*KDmP?Tabmqo@*R4^-vH$CtnAFG?Pf8qKEzMH>U^E zcn~YjL6hPg{*LJ`<~D5tFdDlF^UF5qu{|k9PiQvB$XbMCXSP8joH4nR)Bk&h8+EP{ zM`pQRQgop$4G%3TMpzq~LT|?E=c4>_y0g;z-Nq8@?hSHVmOVDMT4*#9djuEr`h-fS zaWrc)&sYXteU97jW{#~A7Cc7E2mY4r2VJK}#3JwROH`e#>8M8&+lffn=^z-eiPw~S z=IUwh&=MCrJ^$|3c?9g`3?MI{B7lzvG@)B$BvhMF;Ce!!Yzx&B=d-oXqTO(O%z|TO zlRgUaBE8SVUT|=I&N(5?Q|x}D1%WnehT%+nv!9tbAdhZNWPbIaY|;n%OTMzaGCfJE zy6v{2wj#&8Fa+&Yr&*ozk^~ZaSYCTogqRJW6N=G#{`>t>HvxB<^>_;D8`m4#7AI|D z>Zm9X*7mO?!tNA|IR{RzRxR;{o!)}{;ph0^O-6McNb4<-%z%5HhA4;D!1Jy&?D0+r z%YfUz|8rTP6UxUxr!VAVo%xlyveV}Ei{WgJSdX>68hk}IEs@Nzgw(a&#LhMLb0cIx zFcgwQ{x26 z0Gk?lZLq=-B}klPfs7~DurFIQ9)N+|fsTVflMEJt*?N~yJCKTV3gN7kq-HI=vyK{*BqEB0WVVyT!COAU*$60BD^h`Tg; zA?#jl_euZl&F%;|QKSZNBxtQNd2g?~skdnPiVX?los0Iv*Ma)&r}Hpi3@)h?l@D$*aSsoDFc!}%uO}@zT4l+Zqt~wTL?=24dwD`f z1tn1?E@K%2*Hw}5$Z?EyeEi$y4D!?NIAxGflg1*7l|UfZLF2*7SS>8cVy)r}BHy)W zHbCbdUZ!b`Y`cGVJ`u3#Fc4q_f<`R=K71~2t%W}_3NJBc(9#Mm;u4Iv4vmATO?^jHP|++Lk6Og zq}z0zo;>rV#$u~YU!(-%CT#N8lFR}Q0rbux8AZoEm<82wN+H3&5*~$WfZV;AC)sj+sV>0% zqUeB@iNLw$OC*o~Q5G2U8~{R#rUbbB#WMd9FwcuF`zVZ3j_mJig*;plaKu5`Kg6{&6 zB1IABwV5xaw$C+)dvmt|tT-B@2WqONYbKKY9$K=)UIN!usgeaX69V9^3Wb}oDY{o> zg2wc?fBG7GS1=4OBTsc3^iAcIZD}oNM|i{Nb-lE@5|=`uC00SB98{$hvq4bqw3A(_;&saT!GOC^IEV^+#E!HbsQ|e8(ay`|7}!1fppX00??W zqpfFPSoAc$P#Zl97+z(Kvd*t0*kq^q+PcN^0B~#V8Axou=AlUSNt60HVFs2Zr+6}M zVO(aR(fhA&PHk3?{6*Roe2MAdcbh{bEVW}+Y;EF(4xH1Ywh|GUQw1)_bjixyq$ zC$rTqdZvclT#78nDa1F=Hq?GoqLQEjO;mLUjSnK=Ny1&XaSKnMw#>1QcR+~0CVDFNRvi_|8523@r69AZ|5P4Ig+ ze?F^{@A~?j^rK0m6BgHJP>|p9pmUo_zh$*X`0t2U_-!+TyxfJ7L7ZzVx zZ0DN|zCG9;PF*AstATX4V1ey+e#qgP46-akX33CtJx+XK6O(EHvL$SFAD~A7+R^V5 z$M}UhKla63_i_+NUg5{JG4Er~=3@<@8S5D+m=aH(VTle$oZbP|SO^EHQCimG1MZ)` z)nx?+qW-grFfrSS=gk>yY>~<%9rZ@u0dxv6yHbHkT8LePE>;UTf~f2^>Jq2eSs9++ zKHcYiIw;ZtPzV1(!QqvGjOzuxX39|V)Mqc3>)a2I*X5x8OsBUNi zf$&xpB1ExG5Hj_J9eN1pc1X=jLV`}vfJ;bmDz`2E~4)J9X@Tx5N^MW9}g8@vQ;lFQZM>5PbXCqR^- z>5k3|poK%@Flw@i+@>yZ{3}LdDJ9m&7ysS?A$Q^Mz%B>uDo9Qf`vPRk7y{V}Lcsh) zy;MvqDI|9wkN(++51kJ3R{bMB?k{DwGl?1bpw~ z^tAhtC|7G4zZmnic)SQ}xDLUG@m z8bZ8uo!*zgGX4FBJy=yPx`VBXhgwu+vjP%UrZK>>#mX~Bh;3&MK8~`CC(>&{qPA}D zH0p=VwmO#}y7_;%BWUr6HqK1vKg>?%E{LjUanci}MRlHXD$Q&?}2|+uN-#Gpn_=Ysr7Kt;))ZQmCa5XOWBwc>>B-FE1m?p|q82njS1` zxCWAS^G*)3(doy3wp-)FEJts(9WngS zMkd8$8Q7$2V@Lwwl4B|a#jcR!Z40i51IX$krP9N#Q)HbtTI`(v@776Tq0a{wa1jlT zciW`SPfK_#3o||-0=0Onv9VWOsDYle$-Zp&(~9iR%UuQXcC|wTe@PssT$`A%46<;- znE)n%Llv0>S8?!d49lhra{u*7k&S)062fa**~4~v<){J_*oxu;gj%CTq^p zp;$E|thFFkLshmTU6c0=3)ijUvyzP|j{L!Jl+1Vsv*^qoO} zQ2G#1HVCwBnO7Tvc*_Ii``s}Cn?!qk|CpSH+9l>wVV)PjwCuq3;n;)ZSwf&Q>Qrac z0E&f5Dq)tU5!SO04_wKe{mM@39)xCn1Qgpeax$=rP5ka^gUyIe76n$s^WoT@cv&8# zR_tuZpWDhOW|d#KvI)6#AtQBaju1+S2>C>)0#Sq&w4{#m4k$a3kgJreB)Yuk!wMXO zT8_`e+q-Uw_3Qq4On?zyz@)lroCo0no!{9PI(?q5g_aZ$)K!j1BO%TGiINjjp}E|D zcc!8~4SSp}#H1;Jr2%xUfNY?vo)<*(>N}ER$2N@(Y+W$ca&2u2W!k=NCD`PI%h+Z* zn&!^t(1x5mY^<>!Zob>Qqtb+coL#ZfJP(J{M5v>S=efe#Lkp7x7-qs+eW;p@q+|Bk z@)nEqDgpAtZqcs?=eXaT7j~n?g*OCZq6Q$-N+>8sSW;~6(6wu%{FL~59rs!(O*_I9 zmD?RulESGw!P+Ena3E-o6;YCEZo@W%DzG+c`GBKGGE=><-!UW0Sc*z9LYTB!bXmsl zD#6|@vd&vPK2L9-dcFzCON7uvu!E3x zJFZy`M_e<)DqbJ!S<}5su9(8ID-5Vu91*;8s!hEn2OK0lHBLXH(d*z}=iHnRb#dMj zr#W250Lc?pG!%;M>l^LEC)BLvt@9R}<{VHl$Cl;&PA$BwXne|u%~}}+`sg=59pE;Bx{Y1P}?PJM~tC z>$~&FS_>64WidCePJ2;~h{|drD!jubGOS>o*iGAV)vl_UtL9uJ1K+d=hKeu3sWHYH zQ^+3JtT#Y#p$7ry1~Cb+Dgs`b1)&lR9CpRrVL^j1mgF;L2duF8Ef0`i_mC}uK$*0H zHaTgwvO}B#@K9S~a^6^I048$frw< z6WBPfwAiuj;Vvzw@Yk}+lg2K<*se{mBHCeU%-(rR^SK0E6eHi=k0+{9xPud0XoXr0 zl#r^ms1z+C>TlG4gCYtcJ({0%x|2pJMZ%8~KE?QVb+{@%TIK{|k6>+^P8%DQS?o=EW2vrMiNo4M z1Kb{4jeOLa56dx=9L?A+vd$Z#W9mZQPc>G;RTiU4+6Q1t$o18g@kb<^8ob&bw zb1!DL4-Z_=olhOFDX^>tDX|-vw2=>M57OYqc8R=}?%_M)D6MUV-4N}THspd^O%+<O5h-`3Z<0*sg;BA$1rV;35vE5*0ymB}t+akOQHViTm&707B3 zhixWZMGnBf0+V%86&!Bsd6imJ|fALMsLrkk~b+&J$pN`L2T|^-#Ydw}1BGgk*TN`)mHS zo!T9`>B;0EJfX3@*_KjIHEA5inzpZV84p_(NyT#-He$1Q|K5!U^7V=xDEk)j*ECo5 z>BGRriKjo`qe(B>e38k&rp*9kb>iykEOic{XC7?8#2@hRm&|&@{FSH#DG8A8j}9+& zK=&vuWtD)^08_~W%!o?MBSLM`0xUU4rxHTZTofe3sYAd2`UcIbhHi;;}xP z-6qIx@j62g%A26`I@p~f#9FJ(k2$@H0l%!6@Ct`3Z9pA0oa4MqpYn=nrjWB-hbZRT z!_9a1iyuPu3kbdYTtS{pPP7HE9(0`s){ulMbRb-LfV->Xf$#S(kaWY2YVv|+YsITI zg`WatsgAWC^6n%oIOT;JQn-SEkTbB%yX)%>8MsLiS$RO__s^c39!P}r`jB3MWwvQF z#0{feVNYleYd3j8!K2BpRR_g-g%?{5lrmmh4u8~m>ybZIj~imTDvQg`cK&@#DP&UW zbtx%#KR3WEEDms7XR0L`SFj@l!%<5tprhg$tpZDDlNf~1xnGg8$&R=l1XZU2IG2!B zNT3413Ysz$wXEb?P9Z9Q3|#?upq-b5_g|m?$wkJS%}C?dd@!6+VJShou{gJOeNME6 z2^$-!%d*&*nrQwI4Lh=7Td#*~Y(HXqgbbRL%<1OqX`P-x6|`#f=%7H}A;{bVQlUM%%$PsLx4<;ug&DSM*}&FV zF(@`0xwP6EM8r~L2peUqz7@1MP%EnZdpSROwjWEZDSrf!G`JluAk8<0a}ktw1+uAg zRdzjKq{Dt@Da5W%9%{OA1v#jx_0)cOD-@T2X1E-w&7Q!uGsmd{FHTmOt#F zgi#}h%z(7y_)?_|Iu^SeoHquAAl2KUZ`C=V1d*P^0xoYXr5DcQ)Rha}7N#xQQEW$Z z^;lRatwjNMH#PQ^ud$v&PO7NP@(VfLyc;Ee5-fnK1PujE1&`I&<5ebINU(G!^Z_PV z36x=>U!}P(PGf*z&vaB`{pLM#!D3$>B$8KrhI7>B1kI(EZF-POlaSdlm04B(6@VdL z0BVbV`^^ne_UTE{*!2mP`5S!EI72*YM>J~JxD~^tXtOmBTir#utna@5xK$dZA+OR* zA-1zAq#rteGgAxaJ6dT&gaxP9D1xdD$TIO|iaF??MEDqZH5lgeluum&c)3~ILtOs#il(k-wcl ziZ7?t3wg|UGRPOLA@qheAV#Bg&?JJVR~+qix#yQR)8=lpfnOW*qFDdX(RFv$+k<2c zL>b`p`uF`*Vx@Azz$togpzZqb9m;j7J=f0x#<$81c-Bp*sRZNA!R5<)ZbmLmh@4{G zy?C`F;i2jc`!e5EymdVxjnrm4%?;D#VSCUvL#XzgN$RjP=&5Ku_PfUyjnjUDLhGI7+J|Hw+CgWyJew>HF5EDHcrv;_U8G2zWvWHAEH$SOoW<)>4@)c z>sey!(VJ386HEPY{&X9b8Y}l7%u&e;q#|e_L=a+dpedGC$#k@~X4)cQsZc5yvZ(7E zU#cb6S34josB}-?+Y)+}h(dg5 zB>|Qr5oafEMMABk(`|;Go29;rA720G<2X9``0>VQqXR4bqpYNOsi7h=U~Dxnrdwp0 zK3Z`gGK*nq(p@53Xzq!joc2N~?~Ol8kd*>Gx89K3kRtcMMx~4FRue4k^%1XW zEI{H4ATb_n1Bq++_B(dxsTN0utswKMwt8~&ZHCKzd>s!&%rUOU9pasvVt!x`L|VJG zLo~YPidltZ4RqX2fuiT{_LKNRa;QZ|rG_UGZslE|psL2~Xs@WlXT95*#GYqX2p|qj zK)Q74(}#Xj7KLBzjzFi%Oo-k~`E?;mxK?N+5v9OjwT}o>v9sk8^<7gIRHW zGgSRu8(tTUYayN;dH8ReWHki!AB17Z`NOkuTtBbnDD+fz>t0=rpb3@F!yr#=KX5S; zmhx(9MD`iA#F^+-aclX{Ld!so&^172%~4G`hzz9xI+8$M&V}bAUAy|d(%wthe$7~^ zQbU%d=mf)hblxDK+}RNl-Db011g(iD*fwg>Hh4`|%#EibK86QT7=Np`LhL%icK2I&}ExL}BK9emAM{&j07;=3WQ(ffIrYZDtbLeuRRa1;pbEP7-j#93ClS z@l(hOq=J+F#|~4a9PyRvNOOY|NJ`pHEq~PfL-xR8#0%JCV4ca*Cf$BI4XYaC%kO8U zLpPS72#xJ>gArnE3;f66h5Ar%5)2BN|GuC?n+k`?n`$bfW&E4x4o1m`B-)q7^Su ztmT=(pe07^9B*67Fk_>6^7;}U%%CEdSPVB$Mg&pP0nK`lleQ)vxKeQGn3nQyvskaz zhn#Mn?w0`BVyotzyzN2302cjSz*u?Qj#CuIJ`wE%+44`v&W|<-A4vxJ_~KU>CF2sf z7O4qj^+pWn2qvFU83pALVNq%sDTOCPbq_)K;E^|c|J`ZeYKkpE-fjXhtxb5R@QC`c zlcOvgB<%y5dzVXVe(B6VN*l@7>Jr6pWPW)?MO`Ht-Kn$nE#eiV@~XE0P6pyCJe+Eu zereMK(Rv50p9l)xT^Vs9G^@|IE7dPqLL?NBYvA*x@?T)Y^}69Z9>cFw`oL4HpLWMf z2B{(mz*)kjCUi*C5u0Fp@;y=_;9l_<8TI8n8G6Yi2ol;dW{_v`JP`sivWka0|9NTCkHE~+y;I~5yar+ys1D%XILLVhGO>#L|M9OXpKdv0KZ!lak2|QE zipory^O-!Z7CqfAlKkN{L=D}9fF$kH5XGP5kM91_Ye4}Su0bg_&dz+?)@yn+!mVQ? zd+iFOSR0JV(Eu9MCLN7=AI>+A_RKBB zt3u_TLaMOG6x(9cro$7$6qErfKmLH#9f6~$rr0{dvMR(q$REe!F#%3%0?!_h>S@Um z-u2mx!r~fxjsTK^1m4LoO1{qx3%J{VEeT{89{Ot#J%Jpw8Lw4OOY9IY)*ANmv}*b( z|BT`BpO3BZxMUDM${pJUlf%^5H4e+l>of;6gEm&hWZHJ0exUJD?W z#1?ee$+OR-Ku6FKB$UVFDRPp5$*ltuR>68)L_V$r$m1hm*=pWx2O?JGgb$oY5?0>$LQ*HZhAj7rz*S*U zbBUB>4~z$=;3}oURT4!W4Pp7X93a1qtx26?(HWMbD?GNxVLC&eEHk|1Gy-x2^=$YB z8t*pGfft~n-#>a@QU}*l+%m%I9vE{du7g%POwCFr@_=YD4QuysNde}=O+P%Q9>j{( zw~6^>s(eG!d~xVIitWWY5riyh*7Oir!`jsS=G{FUmn7oBX&@sfbO}^UFVHU4D_BQJ zR9z7q^6DYFQ-JI>XIRQ4ANMQcgZ%fHecxG8IDtgc;#OUyeHc8;tCT5q)>ghq6idNY2H~$3 zVcfHJQ2rj`27-twM?dx_cDTT5M2I2mk9MTHpuk-5AgOM;3v${kyP0f<>hfC}6L2f-7Q!HBn zyGA|w#^OkiE3@6Gr_R{IEtZl|*KZgex{%TQ_V)dvA$R2KY$$^#r0k3?&?Lsdo-_2Q zh)=lT13~-B3Tv*h#@DxqynkB)LtL}XgqK4p{MYRl~m*NrQ!M-338(qv1l z6jGqMdc(ffvP6!-G~IRjuwtElsjevz$~@}(d(*D3adkENL=7C6PJfpJL4XaactnCWDfmw5TdzyIey@d&H^D>)sm zB%+(E;7#$s5$J2Mtz|bjF9o-SM;`N9D<@@2pc@@W6;=1nrTM;UYG>NZLi)QnsWsLy zD`bJ96_=s4$QPC`=0qn8;_;<7zziu+mV0yG9)Q^^PjsWpo&77xApiAK>9u%rX!2dz zC<+93c-~`RMJ(Tt($XmSo^dB-Gg4cZY5sBl^*@*F(cKXajS5R75W_2R(+-lT`udqQ zT?JEJpQhUCm(9^Jmcg`1H+cOW(KleWEoa!1#cuYXU!h-PN%g)H|ILhZti@l0tk4n( zfJ6YfEsKM;uLvO4;P`ZbJTQC$}Q2hvdZMxl_KuiN{fd;Hih&Y3oTLIBM*rEb-b$Fm2 z#HwMtBGzDRZz^rKB}u$TH9e)?p_4ww4}ZF!N2SV1NXYsn>_NyPG!79kU?aNST_6CH zkfH4$h165w9$lhypQerUOO!!AzW8GiOa}@Mfod>VwRh&FWDq9ojA;zTT#onvgGL}h z(=#uuRG{`MV+OfYSOX@bf8LDO99qL(L+E>=ni6HXdaxvr+?Lkk#dU8qgU~-4oK`HJ zaW&w^adiTGphmcyYSl;~&3$bty{6At%tClwl#1M;E4H?P$VUki$I02L$0T6C9KcHO zbfq1N_cB$kgUZXB9_9ZaCD!A4Kt%8`UWhBew3;Z)B^*qi3~VXhJs?K}F~L%x@M_MP z^2ap8nt{AS2WGMaP+KZafhtP;1?w>4p*5@Ga4vnDIJO=)SBJ;A2Qe%snS=Pcab?6z zMp3M6iYo!b_Cl+ZURB9q{`;xMIxbTzAoe)(2@P3DAz&9}1-H)kX~9)aHgzI%j0InA z<4|0k7G>NzCK|VG-@mx~SjN1+y>UdgS~n=kBDqL(osI?o(>x##+f?R@SKecWh)eV# zwZ+TzGgeqb?LmfXnS`q?x=|K|3Y0^r>=?rNR!WnxGk@_JZ{OxAmac?YU$v=hugGz` zb}?Gx5VOuSLPef6mW2oHcX8q|GE6m=QemZ16OD%}z!D~b<2IUoNJi@>YE8CBOji80 zvbAACCb<>DwY>aUALs(rlhbqeMMLARel9_!DWRX-=Y0d##c7kj1FlPwB zvk%48wk!41Ytgl}vf&N8Oe-od&~VKk&ZwOa@1~vk`W}QYV&;TpwvTn~2B?|se$QqL zruQV&$!31Y+h_ZX#ZurD!DV;w`P?QU*$xd{E>;ub{Exs?t@G0d=D<+3f@W^jPZ`bo zang))9EI$8tOnq&h!hM1P&;eX!vr=d5UP@(SXX&DyPLWscmL=_oAWl9cO%Ngwnsp1 zpsZD3eWLiEQMZ@>Z`_%8GKgJ2|E95BUmhCmmJUR&aRer--=<5}?SN;FH@|zLJX-6k zB6b+??xQHXxhi4pgt2E4y@Bdw=&C9-;IUOe86y-r6@k3ZUCi-^l0oiXy!6gdD;|2^ zPdW+Ml+y(v6A6-Jh4fEDHEOH!Kbqr^7xh-e74}Tq#t+7gsF`4-!4ecmGDd#sjzLwQ4-Y?)?zS(zLTpS4<*{w#?Kw-h6i- zm=7mblFD4b+=^sP=Y-bjNQk8N4@*7>b%w_~?E1(V0uEWr$Ut z4Xqvsdw!ovk^=hWnI@_yV}oVDR^+txod>k=%;oLqZlA>y*Vn(o5ae)B+G-sxZr7(h zdEee(8!jvJ39dV8z}>z0YbBPIL+Iv2&NPmD+@OOUdl<78ErcbH6U8o;-_$7dE-&FF zAA}_)a&}1E@jO+T8;7W`Wdu~(@3E616sV%7wva#qR)Q8{B9ji!NC~;L>AO0_a#cP- zLk$8>L1KlEA;YAXDuLk?`*^^*4w76(=5Nyv;P%n$huVW&jZ?I(gS1TF3y0^vo>$(yg%uDY;)!*Q0g=+T>M8 z(^3*mIip;mfvP~Iga}@JSzah^CAhk>6XeI^SDtV*p*38@gFB7;WubNJF{nXe$f(!Ybtu`P!NTp;SYpUK5LD?Tv54VMC|c(I z#8UeNmw?JQV4+ZUs*|hyb0@r!fh}FaG69&)4g+zG+ShQ}|5lpxFYci(H&~&=T$mjI z*SqtCIf>-HP)h}&84>OE2QY}irEq)pnU?)5IJa#a_)yz~M$r?3g~@e*5vo z-|)s{e{kQhXidZ(Jm#P{_{wgbYyQ**#>k=FMtPH3Tn&XCeg41O%Yg~yl;@nVtg}OL z?5n*rlJhAEB-P}R0tK%tYSMs0vGgC*r2yxEMf3Cc-;zP{5UW5uD0J96mVf{#6B4K% zJzo9?4Nu8>BL-fRldKxwzn_p`93@N*Buwn~7QMCVkf*EK6)4eUcy5Zn)I)yv`FR9$ z($yCkw@hob&!0){QETWcARvmtu(4a`SoGI4*I3UlHC8CV63ibA$gCrm-^j@_yYJM! zU&4H=z=D8aqX1dXpwU%89+}f8>;ZwucR!5DV>kZVis~o;Ybd1Cl>lW?*gjUAE9!3& zc@GU!Iyv~Qf4uxWZohv1&n;@B-3kjWI&uwf7ejx|_?z4Lk zu?9DsT4=iC+pFYKr*TzmhSoeE*z8$YQ^zuLJU#zM!AoYS=NtCg3>?U{n>3n+7V2YyZY9|m=;I)QKYB|VcE|lhW*J_8x_A!4k{^#!~ zu!OQA$Jx?dq?-T$AOJ~3K~x$-aI{x(3E9}r7Jn2gS?saDEHo{{LMmr{I{$pTpPh6P zn({8tsLWX{>wx7>Plz{_$gaZ`2iw3J7Gl6rC%mZ&kmLc_a+!~dcYN}8uZrx?S37_b zMP4`V5dx%&Pn4(At}??0-9DO$0g2C|%&C;Z{{5e4_0%XEsaRzYQyxe4CDl0(vtCOp^jTJKJCWU0yJL+S-eda=fy7?}KmZ3V^ zq}f{xFVm_eRGJmymv<8p@nJd;^)zNRQpl<&Vd4MHPsv2!rl*=+LZ&AD%?=pi1L|^~ zcJ5j;0YpEzVLE39otMznA%=f>)KAkp^*A8o*=%|S}sJK7I@QB(e%=yPy z`c!6`hyI-z1kaunHAJ(v^V85UI__7IVUa%-+m-1Z7?2lF9M2EWf8QqnhcMpwUJMx~ z9terNbm+O*N~k1)ZUtYujU~+_hsldeoCKzpH3i6*Z%AC>0#4bJAqh&NusJZnB9&11BLPerHETir_=t8B^HNvkv+Hw zi@I}HJiX4@}!|l(P069M>hMkl$cL4Mlp9A&X!lR;?h zE~tVk&p6oCoNhCg@pZwHRf!f17$b6YOUwW4$*Jo(T+{&$E0$6gJKNH$nct+79%5&# z!zQmK)(jc*{*$bf zHL(3PQ`>4bBuIIy21*k3R0<e}!sj%7_umr6FL;kP)AI3;Rji@!M~ |4QV%=}b zo#qwcNCcG&&PiBR2x)1f6Kh7vVOd$ zW$yuim?VJ2M#VhLi}@D92hU4My!H+O?=hfOJ@hr?2M92Qk81}6-BfD}!sO474x&N0mla_K%k z{_^$^#}K-5iWQq?Ym5opH%gCI4tA9-e8fKtE&`^prs!?eK+9da^r^&}YOI7&P=I)S zwIi9DM&aLoRvQF&n4(SFI%`ke)bPTMPZ>(MQnI@z+l;PCgz#-<8XvA2;P z{c)C6Lj2`pBRt|##KhMd1Wy*qtw;q%C#}dPggJ@CN(NJAa$0a19#C^JW;#X)svJ|v zAUE%F{wOo4L}sAKZ4>JJCbhW{^^bdi)-XoLx8vL@>u@cWgWEGmSMuthYsxh?=tdhE zN6L*-8?;=0W+Q8(t_s_tOocafdU6Sn;~XNod0<@^;sH={V?xRb(CVuAbh5+Gk3XX{ZmL3W;hT~Oi@$P1$AGhRB8+aYLn2^ze{=O+FA>7PUK ze$Mutcuum?qjNwzYP;i#Ac&P1wr=s}#T6OEb~+#$0TBhg zIp|wZt9=Kpr#8|us||S{9vW^sRZV#md7n1vr8myPxJ-02I4AtdSflQx%8zgn4|K8U z0IK{+xv*2-QZ72uI|#@BUIOH&ql4X24T9<&=(xgywDzQOKz!l19^#=PxNT)+W*ar5l7%d(+VU$g8^wQ+N67NKyLo!QBoJy7fC`RWu{m}-CwYV$!CA*0jO5vZ3AKC^+fy3R4j zWKe*zz~SaXl4lQkA}Xx)P&H968RXKZ|N9akKkmZpiiK+$rjrYb2|5s7BxuS#C0-Or zN!}U;Kw{l0-+j!XM;M1#!>Vs*zemUFBX#&`RPdfQ*Ntq#suW}xi}lMq)qN7V0F|BR zq+6$01w&$yc_QW3M&ajfbPbm+CE8kpmBYwx?$SBC?fl)npL=w0T8)w~Qk`G~fOOhC z(dQ)ntODqO%Frz$Jft*2W31yo9A91nL&_dqNO zw4BXtl&X(^%3~_QQuc6&jZ+>4&X_IERUN(9r?bxr#f<lDKw|f9-SD433 zRoL2Tei+Qx1M#vKZyM^9F0`WyXoOf4WEJVfi^q)t^2a4W{x~kiqfT(pD_$5hM+Bhj zbYPJ9Wg-Wz8iaCABGea-vWvzj^zYxE=$Mz}jp4M`qc2^#X`9lTbwpNk*lN|QJeF$2 zSYehh8i;JlAb+-AQ^rb0^3oy=VbeJL%7j>vw^!8{%QxEsn+&Q`I&MU=A9Rfn?^uhW zD6|8SjjjgE#rzor&z5u~CDH8pep}mQ9QWz?)g?f_+J$snE`QI)w=zn=Ijt@vOLRVG zTjB@Qi5p6GOH3yTbG%#&PhT$ygeU^gbaLK0#1bl4(e!Kdjx$pvB2$sqVWc@gR4~K{ATM%Ym6=DSP);^Z_7yZhU{oL7z4+gpK{zDWFC7pFiXdq<>Pt^f#WQBu6%g1K zN5~7LGR1pcN~}jWZIz!*LoCC(SHoo*jCR1)cVl-jq&#dg^OQx(whZ$6nitVXHJz|% zw&=DMM7F?c){S%;;P;zH{+QAT0R)~viU~r|k<;{c5w}nC$)FF|R{)Bq3%0syEXoa` zET=C``s2IZi^sm1Wq^MIJXL8T1?8b$;1*8<`OE#fC%2(bJ5JW%J( zhI@`#wLQQB(BxyW15LrR2CE)e3uWoC#a8Cp^Nm6ChJ_T99criLD^Z78I|L>D2% z3d+$U$j_D190dx?Rg*_n%J4b-UO=lbzvN4-k|0fHNS~U=eoNvMc8> z@^)UqUC4SQ;@LnwuLcRHY%H-%vv{(SD{J&&wwy*UqpvMih4jhL7114I4G(e_Uoyz2 zd!NU=e)*@g580Cp+dh-J22h-MM9ctgy2gF{a{mHYbWN%nUcUN%+=BpwFLuAZIZm5& zwx}fS3-G08LNX;n-bw*%k(4A!Rf6+g9e48=8P_1#PxwJKUhA->_*seiHm&ROXY|t( z*ER@@YM3Kr?m<2Si)BTXgm;mf7V1$WugA5PCBG75`vKAcD=v50H@7}D=Dc#WR5o!- z8{svh18P`KPH-LtS6vd%khwy3WJ2>gAO5@hHC!^?5p67-qbj7}$gDtt^zyx+cSz88 z&MTgz4+u1=krg5&zK|Ke^0PlrWr{wCA9y7r-Zss|XnC;zVfVuximx;NYPi6mS-k5E^8p8%Y%o6PUyCMg*`ckdpG2f?z5P0#$GqD!h&|X1 zOsUoEr-(FmU$Lb-brNi5!v>kXx9LbTFs9GA5xEv3KPV3$wTg~9I zZOw7aBrkVAz(m+v9+qbb89XQ;^B~-ronuf%X2D6+NMTXX2FdJAb=XCseIBMgy1|q5 zmZ)VrKnzI%t@fiy8zBW!oH$l>NF`N1&Fap2PAi{1#cGCyQFT{3l&dx(xo2LuAwW*3 z1(AyH&mUbf$T1bLqHp@o)XjNm(b1q6nC*d=;vrt{AQ1fs_Hws3uju?GQ1&l(KTdrT zmflfw14<&`GzAkhN$?EH?@6t#2}jhani zvOHLzYK^t+6cGs~(h9!##7W;G&il4AUDh*PG`(-gb~1;`+BK@+;`l{Oa}ly4Ksub? z-A_HpF>g0mea@#e1l&!^a_%O}cM$j(dm(HXnuPK(gTN(&{CF&gn2h>D*g@w=cLCnX z;jC9c>PmRv7w8oHiWm=d{<5~EDXW`nyP*NK;}gI&1= zbQ}Wdi8mDK3KANcVKB>>TK2DYucoaDFhaU>UJ_@WkW=v}n#m4B0XKT#yW>TtMK!g2 z4k>UWUFxJrhd-R?Uc@%`goTb_vV_rOGqs5Z%_O>3eIRF3WLV&x>|02$PreUqxHvuk{imA(-yKwiFzuMRX3WbqgL`9uX!<)#Wsbd?@#G~kT{kTcgq649{An(+;K+{v zhgnq~A(SWqPqxoMooSeKp(ja$7FmH{#{=m@{3r+X)$R|Eh$bvNF%XL{XOdIoBM?hh zhq!nl-R@g^pE95uU(NlevykL{5a!RVHHbMNl!wubK{~=F8sM8V5;ZuXIrL&@=|Q%S zdF`gGVAfNaZT@YPpRhKSYitT}`p}IervNEU`tn;Y3ptF+!Z=*E>!9|^Vm$}!ctIVR zqW(T%XDb{hlTO1|yRR?`m)!N(DxFVbL6>&`{%Sqh%`2-#h3t+~iC=z9x8IzHj&C?|0vW1I>_Aa?rU*FsOU`T3zMn z^&sU@LC+}CJ7)o@+zN+u-6vhU(Qx))g;DIzca7Yx8!{y3O^DqZKh+@Nsvg8{=`5mI z|I)S@8D-R9^%{$B4YgJJ(7<3}Zpit=tt(ERP^nA`W*m5R0vzARp&Wc0jmN#9csxNU zod-RS`}Duv|CT1*qnZl6N(8e+=oS{hWpx3%wIPTHBL5#+N7DKC0`f`myIZ1no3a8T3(hSP^zpUM;qlq!UtMn6wi=jOxLAr62eH$0p4`n=nN`a~$s ziYTv=LFV#n3Xnob_lh1ivz?;k4^P_%1~qS#*FC7ocYQ%KNAUK2Et?xmsJ*Wcnra6)`tL0d1Zaz9|!qq0kkRF6$ z-Roff{O6cK7Ag`YY$UcP_hjms<6`O4Yqw7O5%6-`0MtW0yB{on3RSkcB2VD)?lF*| z8G)LEuxQ67&%$L2bIi%N1WamoX}^5SEf;k`OCEXl`b3JWmb#2tTZ6={sC2FCWdKAC z9BlC{cTH30sxhyAVy*VlC^@VnD;L*)7}|CO(aemh@Qy;{)X;f<{miGbfuoc=CN)BU zNT5-Ss%Zi+sy5~00*AvFgOJ5$A=E6g%zDQF@m!p!LT~}YCW#CwI9>uGk!lAy5h`3S zDDp01S)wiur!ac|njzi>9WUBpgKS&f$(lm>D^%MU+htQ6#2%5X*{($MTKScteDU&| zMLk6%o>PTELY_)Bx{dn!r?E;u<7J4Z|8su(e$F7=yTD2OpGU%kIc?OjS3RrMUIw`A zyB94?b;d1Up6x@X&m02;DB=;cMF{3j;UTnlLW7&Dw0Oq-o%}(vcMj-FP++nV{{8FI zz%?5No=pZdgV=fus7Y)*NY3C|m$7oua?!SVvz{sKQvZGPCf&-M6}JSt-7tweH0UB5 z3Ql7;VNFhA;5a0)3 zJF4shino-AL_b4d#u3}o=O?i~A5IUOp;)n)Ls@&!v>G~K-Y8jw?VXAqY1A0O=Kmlp z)?GJ)Aem6hTWMPlv>~Hj9FK-KA`%L3M2zqkZ?$p27SgS@!a6_QCm~-=-91RL?U_s` zPaUPJ2=p+5DhO1e8i6=?V$Ytb_r z0uN75)8tb|2N@JwmPUZkt59wL_%(@#w6=jMC#Te`;-YLriDccv9?;GmI3FpSBm6>#->+GT34V}HRMx?oa zL~S+z03ZNKL_t&pv7Z4jvAR{w=Ytjb0z2|nfGD4u27nk-UyO!lw|!crRRVJZT5(W* zTPGACAX;cK^!JqCjZPqN{%iq|Fl0DJb0P56VlSH=WdmA-j6mPf%9HKyvQoCL=FU+w zzKut5LSUE>?FshM1t&M@zKr-T8RXOvBr6}b9Vk{@q4zc05)JD+7g<*B(WAO&i+WLC z2~&3)#=OREhJPKDenOF-ivmJ#`J5MhdsdZ2YM>QmnZ;`3^CQ%xbCdf%=Ho07>z+_%8n?*&ovysx<&Ev5BtPj!RaWHzh#2+Hs{x ze|MjbwZ^K|60|Ipfec28pH%UTsz)6Z9bXWKEl+rX&UcYG*N!Rp0!2UKtmfq$OMvSM zETzyrJgx-uOHD!8j9?-e!O|QbJ(oZ0lZ3l#;8H6wQjB~`=DrPECWacx)&Ow>wtWee zs7wj2>_Lp()&@nTjWE)qSNWmXP6+95tqgKrnPg2FB#*IxVVLO97n_Cvn_mIm`HlG? zmCl_Gi9zaB2f((SfkLq|w{W+tVu0vjVFHN9DT?_yC^8RJz=5|nIKqk}v=Ubi>vf|Z zWaZ7S(m`TwpzTJ0x+O}4c*|URf>G2!Gde5}t-iL@4s)9>*6X+tIT$+w1}Z$gwD#7D zQMAQ<2zp#IRC+x~ZxM2ScU)WwLAfY_h~s#?L_?)k#!v;aqz?OhwDtP57Yw>P{Jt^`5WqQ%}`V2yjY4>F-QNKkt*wXN@qH&>S4&-HQ3J@6~=SzUp9z>CJ zCYV_QgR0pBD*7sjMqm#d;{BL|X8lYV+=V|><{bf#Mq)%98nnu|9CRxB25qr;yG>{jgs?Db>bE|^7F zG}|73E7GkgZMLlFn=Bb4%d2HefM`w0&7}t^9#cuT`=Bt`B`6kiT$l~bATe_p#$+e* zgPiUj(4LxSkNp2#-smAzj3*Kb4y68R{!gGU4GAg1)Li%Mzeviq&vO z&x5RP1~Hx5+BWAqN~c{>jWJj9ne}e1cA;D8S97?c#G3ckw%H9Z^K`uMvwACn|HdkK z0ejGsrV^>00O__MD1*!_5QS7OW~D$^a1#`_!d`_&7APLjB!@sql^arMAprq;bBP5G zFs_()=Uy8pRF5p+>W)YZi*ytoE1O;(o$!E8ngf;0bbQq5K~9@{kjOwHc7lNyJD12ADy zA_=lU8bhXEumwygGvHLfiqz0NGoEB2$EAhlM+M*zN~f#Zi(yt+IwxSuAx|&{$Be}q z{?Zi7DE)`1K4S0cv{pbI6=hB_c4|yhKSLKwNguI?s}x89Zk%WvsN=0~8xdJQiiSf$&+cb5uLoj5i+?o&~(hDwnIX0=Q?w(@r7G`&0( z+k>FUawzXS7XsIq^iH-1Ghu34q_R-)SzZxH}Z?ug(~bbao^2caGl(q&i= z5L=Z%V{O)zo$)#z&=Lj`h5#$54NEo+cp-1MPqAjWyVWbT#eKmd?v(BLLmwK(4D<`| zLaQ+nh&ms{3~Hu7@c@|_g$bE#WFiM3TTDDXDi`xK;swP4A*)QoUa73u=+sq^2>?c@ zgu=R-GRWg20NaQIlQ?m}Eqs70cL5c0;Lvuu)o{+KW+%*p4u4bcUw1d@g%8qJHHjQ+ z5fMNs$A+c51$Dqn10`zpOViNFelFY{&6lH~6mH!I9$LCA-9Puf0Zm!aY?xwQ!e->8 zC+^}2avOj&eIOSuW9<@>3m}#dc-gJdS4okTrY?PEgaFwR*4;c3ZD2m1KKp!t@HU{m zP%1SaX3~40G<1*_Tct~)&5Gw*T%!ikvu#k5K^1MV5_}XJOYuIu)!JrX&JdB2;3BQU z+nWyiRz@MQX>WiC=d~o#&$7*)tE0Kg+N>69B<96AbMkpS|ltU6Qjtc6Xgd%~bOQ-x&}pT+?B-=tH5m8-mBE$AK5aHnQBkl~OSq`R-+ zk?O1fjD85B%mR)$DFTb|?Ct4c3n8Shi?xa@S^b1X;LxJuV`{({Hr#4GyWo!YD9w7RsD-NY^oTtDo<0Un_E0 zNVMU!79jP`A05=92HG`x-Ayi0+Zml2Y^HwsSX_m~ZtOuKC3LKYa$I9X9_qfm&bo|M znyfaNaJeDO25nw#6>@%i3kA%p%KQjlD5Ta9KpDC6C<%bwWVvbQ@*J?B9mBF1fq;Cc zU=*+Z>Ig`6UJyKJ-(4A7)lvkUz$)?#!M=;-!$}(-<8PxpLvpu&p0|`(4e{y&6a6?G zbjFlXBEgE?00ko%OMtRwCahc1tk{NF`nD<7TeAvPL=8IIZrWa7VwKkzyQ@(GzZ}2w zw#{u1?|yzbf4GG@=B0!^V9SdzAJ9wF5f*st)Q3!2phg5&018qyfj28q{G~XIcWKhY z{(rkaj>)6ti<2)GWD;0n4vohYKLqW4W)Tfe%DEH3OHPZoPtFfpXgG&P2C;h7iqdv5QYS@(WblWr7Fhb5JjWXjrp<8JxxL}Q^VeHdzquE`)J>5qHD zCzk+$dCV(V<-}`qISXleKg|H#;F4p`;y|cM%PmeD>*Zda0a%aK3w_HgLcV6pR9$^ObM54tv(>HGNpmmPnQE?Du& zy%044agvG#XCmcO$m(kWt`~4BA>0nG>Gg4+b; zp$ejLe1Z4>I=3x_`)I}fqO6iSXtUbH>RGv06xb-bT?gYuG|7xlU>% zZIIm6CvjH$nwyX&$}H>r=^jW1sqW|a+RbqEsh3V@Es{_H<{jV9A$2TJ%ttC;55UoC z2(hM)mqfMyW3++x0Klah@isr@ewq|slyS=p7{N0(SN)r$EYVeA_qixc6Dj8YyYoX| z(4^~=ZdKp5lQkTeEs5;!ihGiJt=oo7*d=SdIB^><2>|dlnB3ykb-V zDGeI`L0_adg%wYv2|5337ZNNjhy&>!Q^`VsLKE}(rvjx6B{&!6ff6@pvjE_7%mvjF zXFBJvc0YPhyc0d{ffD-)3FI@^~P{y_} ztyaXE!c?@eVC8$NAaOfbk$_xsr(oNI+^8;Y8W;i^-6|@1?9X_tsB4g|0rK@dl57Cw z*d)gor}LsPjVRl?!4L$*v5VM40d@g#njzI2WMva#gn&AL@oT=^{ony1zq}JNai!o} zfF+3@XQKV+$-owv?G)g%FO?dJqvr^<38_?N_rITo$}5+#J~tL2ZN5ijr<*VZt0y`& zTDG>XJMcl0Pj4%#q@kj99cmSp>w43XyP$4JirUq`0i*DE~N(eYRc~r;j0lO3?Vmale?Z^Jd-47$s zcs`DB?4U(W&%Xs2WGdXa!h@$UBX@wPKT_gHJ4dqSp`4t z{yS!@W63L?0v4THb~9!9owzzL@JW;>p+z%AV!KPwX1jBi3MuOgU!LUt{o9l9I?!4Y zZO&`h`K1abMkWBx_Nc{|hCq?*t2s6*GdDJx>WwAVw5;btGuxSIk^8^A?no!lJTM4S zMzHcFII&=I8p5zcXl|A z#o7>sRg(YXDa)3e3W1X@_2fjQ^9HxnjD^zkOSK9Ou&U-rr2r`r! z%0J{M-&=&3_RL2kd}pQeGYHvFjEO46 zQHI!tS@C_&AV2NC7#HftgniJR+)I!QmN;rgaTuwuW6w%N00A6B#ab#+QXyHFkNO#F zGBk{CYf`rz0|dN}FzpVTOtlbe#3&1NeF4|TK+=zHrQF6<2r`~!6HCr$h`M`}RQAqH zE3z(~e^d7JGsu(MePx4y=X`56(k%1aL||9g>a0wrN{<~Jq9Hb{nddm#6W!|NiNXj{ z+<&qAZPbW3QtG_dI9R|cC5|u@BWa{w4QP?0fdq(5P?o!cvcezdyg#4$-eVyB$WrKb zbWP;g6MrNsfRU&_f=FTO$7>#nF+?mrXZ9~rZcXemIdsZ>Tm>#hEtG7Nlx(h)Y{*=y z^ZC>L6d(!sER3OOti(6lFxq@Lv*HDMv>D1Z`Z}-raFkm-m#xZC3@rgAHwHaY~r?@}wf$u<&=;%0Od-Ln=?(x#3qngJ{ zz z3=*4HVg{EhY}Z~rG2;OTn88pLR-G6*6^IPcyA{oA8l_s4Tt*Z7U5X_}IVd+QqTbuQ zatl%N%WYF$=}>(B`rc#0?KsBrAk1NkVmmqzQ*#ag_2@`H*uXGLT$s>L?ri&I)EgWI zV1=w(J@z1P?shM}KhDe*;^X1jqEO5Uz&S+ zeL9Mb0S^|geho1cb#8cYt<$+}7Bnmq&RChNpr;JVGEKbjxDndE7mnODsI+&7nd- zaAu{(GQw=l^ZyOyJy6A!DB=Gs-!&!= zMG8e@ldnfX)~zYITaC z^V=xOtOIE-J4W42TSBXRaum&VNovfBWRLlvo`+@3}X|GKdSP6x)%v9!9k-GfKeZ z(Nyhq$or8*O03(+t&2iFUp1?Q^eA7jKFK?9AtAE{gGYleqq0HPyro77fhV^Uh8!e% z&ujETA~D5SMZ^iPpw|Q0F*M~9Qtux21i9B}^; zH%<@CVWsn?1jX3h#k0?jExzrS3lwp!NzYSWdb@iCmLVjwJcC{_JXYPH2eHhPU~{CC zCEmsiG6u*GmkhE4(W4W^24q>NcpdPsPeTA05fO;=E*2#%cIgREHKx!y`und>`2rf$ zUHWMWk!FBISt;ei6%F1M$96twagof*p4*TCR?O14&tH7pm_e*geYXecdSW^gF3A=~ z7l9#h5L+{b*jW=AR$ZMGeb_NTzP|Sh+t$gJsKB)pq^Y#pqq4>gLA97|bodtem z7J)Hqq~pIY0rJy0#VRG1%FbXKrwE?K2*jW>qKHr_`y0&h#ZX4fwHiyT5%50bU2JXD zWgwVsp~dzCD*h-Jf_g_p!2sNE&EpOv5z(ytfJ>8p`{6v0W^Yh*8@gjG%MUggM@4$z z42cb+VU*CWgzgKMOE@Z(J!!bN_aIVH)Y1+5wwOPxao1JhlvvUS73KP}A!%~%D2`4= z!0E&7oIvPKkC#tedz0_bq(GEZ|LJ%)IVA1if*@XuyN~^^mjD^TSjP(b)vR)GPo6jv zT_zJ>S;PfY0$jX-01ABd(a=*7DF+ zsL9>N9)u0DR=RQ$xBSJ@Qp||ph-5^jeD`{fKCDc5=U?6V)9t=Wg(!1=&A@L#PF1T6 ztV;#FYymFT2)OY@Hd0}c+2ZwAn3jXTT>|9e<0I^fh_I(Fah{e>MSDdCaH2davRTX< z!a!&+(()iJnyDh3$EuSHn+(c(?J<^><%UsqfH+H-*7{tHuU=CxPHS$jH>#RM+g+Mf9~> zA+`q*p<{qNzPkj-2*x_{H9kdwRD+X5$Qp{qo5N|4N%LlI7woh9j^yAbUR^EPT;AQj zJ2%yS@cU=8mO*qvNYt|dYP6#;1f}9pv7Wg&mtMSvqZhQj7VfUCLZaEUKsTFK>>Vzz zsoRM!z#dk?MIzB)=#wb)7F((O^Q2ns z(a&qn2O~!4^zuwFKNHs;8m%b7h(N>mWROWY)FPewa!u&|qC;OqS}Q*Z6-Wc~HY?;HHC4)1pw6=}|e1iu!K9@jXR3s)`*N zmOiiBwkABa_=J}peZSb@c;3Y_$6BsSO7(5IKeTqLq&FcU=ViMQX>&F9Apf2MEa#&dvw&%9=8lI*(3h~0U zM@Mu5CX)vHdY_R&NEZ_EL@H{rnIT*qKCQuxNNnUn!=K!KwxY?y`Q5#r^%2#35(pU3 za~56+B40rrP$#8?D*>AR2rJ)GaCip}Gt&@8u;TH*Q-J(71xP#Fq2em(XqUE`zti3L3s^R{3C6z3Vu6+~Ue3j-*66Ju3}DvWXj|LYVW zcW-vb#8!E{!B%5NxLcuMN(+%VQARLc;)LQ52QJVF8^WR>ZN2v}!rQ;HfOrmnps zosx>9ZS*x@G`OKJS96t0Fl}5{RF0ir}};?%4zjob;omT{^It7APQCHdlgn74Nev?Klofi|)^!2IwV&xZkD#dGUDX zv5yI8EjsBxK+YIYBa(=IOLDb!NAWyO*HYdXmUI}Zvc0F+o3Ts(S*{9CTGeGXz_D5% z(1yH?F)&kEGh!>K%}&XmH#%$$l$xkk%($b$fUziqz@mKW&#AB$?}Kk{ z_eZry7YM7RWMUvKzCS1#K&TV~Yh;C{X?B>ZM?Zu-gN5VcyD>mMzW9EZ%@lQrOUwER zW+yek{dpo>EzpdfAyhS%+}a?*Z&Ja&+Ah8MW?MCuY4)&@-KwV1u1C3DG(01zq$&({ zznU;*8R09E#MWriV|NomRpGWkwIWH7Uv3T%M)^FCdvpM*APCY+xI}IM03ZNKL_t*K zgX}@XWXI?0cjgWP2zvv*tWMk`Hm|fw>S{EPwE%!mv~nbbtS(Gt-<1{W?3E7tM;ik~tFa8yYtW!bIsrGfr9mR2Aw@N; zqDps-EQ8!_nqt}3sLjv{5cSg*?Il}d1x*?+vQ!#5g3UC@QhjsurAObpMFp&I*?_Bk#$Ce>a9w&6~ec$2!&ADpv%X1f4mqo$lZ${cSo|7)Y$HclSC*@3hLq` zk>M7GH^TD8!wgGYIwB~BzNzj!fypvXSHyl=6{>mrw0VwY#1=&7NVINKjAt^fm4xA- z#s;@=Q;GFFR>$2aYaY|P_oH1^T*S>79%kEGXemP3n{g%s_dPhD-tPnKAyKDINqeGu z2bHBB%IXXqN?#laf!Pm81U<~8*!iMPl^rsbWV@FyCM?#AA9kJq$J)&eC~z@4N>0_X zH?P>)PoY#&p**VW3PTY>LcT*qImO+6qv-*h&ObNu%T^}&LYI44nt#g5q zgrXD2xEErbLNEH|ScO`G1y>H`*mLZDcriEWU+kc@gygm#5)@EX<{jO9ELTJ#AVyLk zCL|&RbK~wX^te`%et~2C>o3(QsoI&rXSozX|*sCfmmg~>w zk&pgn)JP2An2Cl{6xak43LsNbv-?MJ00C8cPT#X2*Qt;_bQ4kFf@uvh1;|I|xr-;( z=&CzMtgw=`8YfXxz`Jl9Wr=oLSo0*iV=YFC3yV0^I?cNx(tbx~xGr;}-;&A;QJZOzVN zL!V)3l+TCr&F?-;ZD-Jt7OvqNz}F^|58)*hg|JMaG+0UXq*6ys<>VEC(lj5-@k7UO z_hKINzWCqKB><^es*@G*Uxe&8GXIab;DAnD&lXqHj4roGFuw<=W@C-W)TKZBe`nc% zoVNL;f7$A0r7D)`>=I%d``1C0M16O$c@HASw2|&HGQ@Bt$8aAV+uW0D|ybM%_-7v@C+^i>pYfO%MfG**X7MN&QLu<@IlExg6`D>Gb#wL z&#SPe-^|U=``Mi}q|&m2hS1=DOiE_SF6)7=qS5RNO;i)cofFzEE9mB_@2ER^HC-V!%cNG7bR?a5wp2_=bz*ukP#1)uxS3Lc-nlEge|K|g?Pv!Q zD~H}3>%cY_rVZg$w{BP*J~DoV(NAhrika;`>8gLNVJmw{b7HUF9)zv~R_i)wMVU^x z|5BD%2Q`5VoDqG#`TBOMiV`A^vPB_idJSnFEtQJAjBgY2l9JCt^$3$>G=U>v-V}=8 z&d3It0_5Y1A9e)|>6n?PZ-_@Moqw8N-}o($e`IAP;DAM0F65~fb*(~83ANYCn~+Nr z^5OLP%XI8))7l}J4m45M#Wno}wCQ~AW}kF>;HJ%n-0fB^{jAcg*basuHmgO$*oEql zchiLN{QCE>PveD}D8rhe4;e@#)l(E|T+Em0beaNCk~p3gG4nNtR&#;49^}4w{>0r6 zWBW0cSpVG#FXuHU+IpI`on->WVX9_{8uQCKwSZ4Ta0=Wj1Dbuh{rN`as7VP@^_O@+ z9x^-#%t7h_QLvunUICGoWroF9qi3%b*tR{$^ENuMIl-dNga=_%(p`nnQj32Vwo_rP z#>n~nUqWSm&8X^PLuAz#6~{)QrUu$OQy05J+nl9L_^{wY)sg-Z|e-=)O* zI7(wBO$m;@{FHYa7{Z&D$rE7V6IX;9lf&+~ZXP_$FADmN%t!mK}|;8#(Dy2C>S1!Z3D9ocAQQ#0d{m z+hWkyx%B_1?p+w$D3Wkd)@jyEv^JZR^Jt6&cYzp^14eZj36K5U0> zVM3jy2aCA}1K;e-m?VR8~@u>r&^m?&KS={o6Q*sM5p%SKR@CSAg8Mp*<1%o1UbJQhk}gK za5TACj>isTD`K<=;3bZvy74Bq&!6l+PZiehr_?cGu|8dIf7oZNmVg$vCY%>UNjL3j zriEs#4-v9734_Cr50qkr5YHn}PLshaZ^J#}%|9+Gi>OW|k=?>7M7E?#^U4*=!hW-c zIH-E_%?vm99+calzM~-M{S4zVYM{EExeIX{O>FN43{9gm2V>hZfw-_GJQ{6CCv{;j zo;Qfok`NPy%GNF^z_KwuC{rXNjsv`K5MdZsEGDsfrH+1*#16|w3PUYyf7pf+>-6^B z9!Y@ZnPe^$zM~PAn;r*pn~?0;YhqTyuq%OQ>h@S5hu%{@xp{J-yYtRohScU*yUm

    FV0bSfXq!R^F-}GFj+RanDGOXC=n2n>*7>1n*nBV;r&mk3@d?8yqQBx6g7$0sTv;-E!A-aFmK z-^CK^^y`0GBw#>waj4r;Z)=>ZVUkK@BQ3U}WCLx|)g%FUsX$i}_qEjH)P%hH>re(kw8|?ux^iUKTaJwPFCg>@kA|ALX3`I})x#uZ!AC*-`LG}mdsXa@4ISE$;O zwN;Oxkm*DZL#$6@fSlswkCs4<*IJ!I3WuHKcV&n-BsF2+V>Qa*Ls7CJ*H{TMmKc)S zWqn8?A1*{s-id6ogvYw7LXDh0BoP*}VUc8?uHMapJy;dC5w+2JRg=v;*0|5oJ$*Et z5-q&!#&aCIsSR0=dAzL`LFYt(*DQFD0v3Wfk7Ti(eBc^eK?BB2^W%n%)Hb_NL5 z+rTu6)2}irLf0{V=V&=SM#BF0ZEn&(ZGYY)vs45-DujJP-q7cnTMQ3~uDSt>JZ8u| zo%2~%uGAVXW$1+uC}8va;=q!|j0$OIPkJ}w!oY1Tv670;n;hrVP>q7^w^>>zu7{dT znm-$jpPI)i%7Aw^o_Ay7FbzS9lxfY;$4aWySYe&s2+3o48TwdCk+j?3hdZ4fL>~c& zU|4^qyEZJ>#@~>oPG?CQwx?s({=8*-knJz+DM0qzWUwtP1my!rppd2_nFS0~j10EtTxY-F}d8HfajX{?)(+u;Uab}_4r;yA7 z?`~xV*`&1B*HThHrx`lWCft}gr`o)J)5G!4*SQlO+RR`g8Vwm>7 z=L-;f2^cUW7=sLzd@gvchB);z`%|N||8cubP?PQU*GcbPD;h%OaRV?Ei(%^k5me9W zsW5&JigF}rh)NVf$U|hn;;XNYdc@BE->quX-NtIxokVgJXWTBIdS})&eIAEJ=%DP; z*V-QhRg=xe0_;|4#A7&Vog-(Fu0rJToa$;i?^jp%Rvf)ORajF70gDGx0rjSI5ckXh zq>^?C;lMTJLJhUxC)H%vho%5yUo!*(AwFd#)+toJgp@%P7o?qAQm7vX8W3V{6DEZs z7KJI8f+QHu8K+3AT|mK1?`*i@LYwZU8ml)uUZ?T}H&=2+;nEk}!a5N#f5iwjS!I9F z^Vo8|+Ew<8I~>+pY<98-n;wjbqPM@+)&0rnrwZ$4iVw834)gAU(xfUvU!~p}Tl%5L zLY*r29K?sGiZrDb)1m#D^hX9y+o4DQlmle@^*&}0&;^#9QRTdchN=VTDJ_@oRrMYz z^szUQ2hvV!+!clztIJ(TP0hNJLc&5I`+xMNXJN0CjhkI4_GM2~OkCYP#=LKORuT3b zNLb%oIKI}2zY(*nUPXl4n6V+z`j1dy?Fq=Qc>^uBNRmX6)etad3*hP@ab?1;XA5Hv z!O@8~yZh6Z{eF7#Q-J&s+|sShHkg}qsN>35W=!s%;hzXFAxT=deCVL$(2S*4z+-i} zqOu$HuAV|fhu)Xa5@(%fSEb&S8N<+Gv;5W9VXSY= z`llf}@|bt~%NKrfDkNE1wKH{9@x3Z}hxnWq1n9(c?LnrWr$q9GD$d_LKa`D!fMTUT zy7^s*)8WzET!~&o41#y&o5SF?t8YCgvh&Bl*9 zTVbtDAaRBzODvpYAMxD?i7t3NRD92%YII`Sp1ELyD!(Z!|G?OTAp95#-xwgjHX%U7 zcWN!Ti3AXGP<;7)M@0PegAo#^g@}3#ENN1u@}26fX2N4lX`}1J#8=PX?G)mKl8xgX zxU13(ZGmgCy*8#@A6}K8{Qedn4WepZrZAT=B(CI}`B?j#RYh8 zx=NUhNBh52aF7>TgfgNcuT@xbkRFgq!aKx)8U+OY(1U~?Jq5_AOOHlu#Y1kjf+GV$ z)`}~+wTb!8QxP6eHs_X*9%fWo+q`;t;Km2mgg5@`=J6)gwMR`Ls=g}O87s#iub3pX zoRCLcPnfd!ej^gsqAohA&Y~nzm3+OcylbZ{8>=I%r6tHA!F<1ZHLcN!z}LoDqLa=- zogk(=n(#4n5ts+H5%SBdoM6uMjIH*<5!>(a?l%=6+pk;L7aEYhy5oRFZf=5aa$ zgOUL;H5($ur#Ghq8gwQbESSFX#Dq~4MobTh3-zf(aWu(#_r z>2LdaxN$$nd=yYcCt=A2WRpEsXCx-~kQwjoapV$?i}YFR8D6B}vqrSeSZ6wOTheP2_g*Z6#HU@YZPAUP`|)t`qMFkeAHU%X zmPw@dGD3Pg9vrgl>gto;E5|598Wrmb0$wj`t6p5NN>Z+0sQMKaYcD0b%PH1i#0FsPHw`{vMF~iP-6;{NlnFcdngwE8Fi%iYC?mIUY}4bb(W$caFf!v=ajdsD(Qm}C86Q6M8R}Hefch@?DeA@o>1!$86 zW4Hh|h){q*l2uhCb5SV_X0hDO=SxGH2S;e|H_tTOq>~ASMM^z|jE3o(nQ5rgj!SNd zo$KWCQ42T9g2=5du{OE~QJ@tq)+-*7v)T|_+RlLe_cQUa*0ytM(I+BdE+D|VjaBD~ z?7w;FR;sdc2SOID8_IbQ@-}1$t5KHslWfwrKN}gu8%}F9lRUJU^hj1G-lw;?BlcUS&rd||XZpDtUl0Xcx_V%KP>aZqzG|h1>Cl zHypuUS0=nU-Yu`Gtq_qAU-y5C*mxbr@7LO+Fu>i_B5&u6vdZnsBX2oh8*REXr@{*f zq+2n^I<@FrgTSjBQN7-z5V3jI3yWKLAz0`+^bcmovls~J!>Fy9di2+)e{z6qzyCtT zami*RvtNL+We_uHVBAOhae}GEnyS%8t@Vdp$mLfvS-o54-d;Haif*Aq(#>1$>vH$3 z08CCthvT60^y$SE>(dk+@wb|CYXFOxs6;Q4gVRCnc81t$IiPbom(+KJt5H~^DafSo zhNZ4xYoWNk1=pey;-O_l$qOkh!>mKY7J(Yfpx`k_?EkpFE;9%-L0~7lRaOlOC1Yqv z*g7s?kG~?vQ8pnK*~Byd-_!q^%V%2XvZ|0ZyDbbmxQHs$8l0{=$7TAAuEqnm-4$Hi z`}G&E^V|P-`sa1{Z~A?BV_2+>wk>x%-DFsuk8#K(?(FbdE4>l{jrsGL- z1z1~E5)}&w=dwuTlj@-Z(JGayUqg98=8YjY_O z@>>!Mt+Y+t%*JRAlz+OH4OUG(m6uNK>=W0j7Q;x<`{XGkLKhIWDvA}3mXS|D!N?k=UEos#NxJ2$tG>!Y(^UqU2%15m5y0lhl( z6;z^=$;N43m7B{U?rOFJ>8elvF(i<`FPkv*7cXf$Ls=z-Ns@N3mSPWSF=*Sq(^{lM z9zqRa*gmx~$fxV?_geW;M8=AY#g^_|sv2fL3+4#{Z87>A>cqBfUc9NOFBw8WZnntU zg;3c@5jb_R7HjsA^u6h0q-=7ZGSfOcxxQd*+RgHWY$M{r?W`%SQ&4_an<5k-OE$-L zg1~rn4ve>a_JLuD6zSh6TGzJMhi4<`~#co1L^^dS+j|J>0I4+^=s7uiPf@6gIoEJ$F0l zWauhnDNfVXA8Aa6-AWN2+4F3Q$0Da>w%wwu4Gd)Hx?S;(#O-=mhdwD*w=_B+d794{ z{N$1s?SzR^1TS?GQSaH*_2kE2#4 zIcv4&iXEZCn^d&D%y;xxXY2?K?%M6~Uza13a3JiFDRKa%HX^aV04V39{4=tnG$|OD zpdlJl<$S9TXz>Qa_lj)7*Q&(Ye!urZIF+gH`lzStOSB1(pu-qu>&6>1G`V^A=vU9wg2ob^`YGZiwA&RiB2=fAh3qwGu;3aq6W z$zUoqtQQ2zq|OA9GSjm2oEv4Lsy2$+RJSF?a;|4_ z=2nJF4&q)sxJYQK)NpR53$eo4WZ&1~W3}4oK(!qch&CFZUxa`fWr4R@QX^zfuv4if zP7T$NWNKRbQxFH|9NmKqZ~xhk@^LX!VTI?#R~ zaaTCvP2RtmyTYWPoSj0hb`izVi{i?0UX&|=uoM3xvS)h@Owk2R^+0ZBB^DefF7{=% za0a%-9$fKg?432b(g4K(>biPJ0vU0~IMBD7>(h7huqxSSI8|No-rNaDVtKPGF$AZV5wqGpn*y@JQ-N3yst<89 z$T3%|2iL7Y)+LZvO{iUJUO}ZCD}QF&e9aJA%(!r`-{Wu0ITEj zCs)-7$p_x`tQP8Bou4N~uACJL)>5#bWY}zsg0{pAdV5zEa!y0P=2tP*K+!wRN&@NX zKF+mg>I*~euPpS9hOkAjaWepOew^>$$ITN)L1G&e%kweN+2GAi`gkj2@u3utHi2t zMr1Mpo_>Vd7L*7^QO1(dh0MQgs%^-|tZ@<=P#yH%@@~_UAU-APa~s~fk|n}I$(hP+ zE`CoX$Dnay&S*|5*BnE=GbKcv>FVi9;E9GrDX3Ky?&WrM!JaxEz@Ev;JhM2#Ixe>87eNdw z)L4oqkzQ1ypkn0<6DTfIn2=7G%yE1&pNhg(XySXZ5E+prO~8x{{l!yB=u`o+{c;a+ z6c$X-qw<^tfq-JH*jf)z0`!?IH~M<7!hxP3rBB4@1Dea{hq(@1XR$#q3asPI<#c!#I}iY08}nv4 zS`rY$S!6}rV+Wz?HA0<=o5b7c(@C6^J7M2`sWdZmfc*4D_RS6Ix}#SjLQ!dny@!I& z5ZChp8{?Q6cIllI;WeVX79VcjCP%?|-!}xzGY2dNX$p_v z1*N15z(iH$5+0KX8%=Jp!a_jy$zswB%wsm{NH;LKKYz+-MI9hN?%N;|in;Fr6uMgc z%!07?vG?OCdU)uZ>P3uTF7TQS&uHw%#ghil!*kyV&%#+#&$%`vLb7^xR(q~*QdIkn zi!^h9E&s z(ONL49S2PZ9Lx$^wV$E1!d(6*0~|C6xX85`W)nccO;44s5E#dt+uG53o`|Ub>P-R^>M##pH zxHbCOz9NmoMdmEI(!h8U3eowue30eLO{J@rV)Gh9&ct4d4obiO>gu5wliTCrV>1n~ z#wNs;zhNv2Q9l&?ZV>HC@=xcv0yBu#0K7A!OT)})V^L!XhvPd4V$n zxmb?9y#U$XPNf)S@e=0KiNJ7<8rDl9Z;f%$3?J5vO$hi2XY#tn2MG$KF*c^=BYW>? z9qI6KIekh$hUC`?*@ahZNl*P^Vrf1Y2e}H3a>fS82|aXEY$kWUm%;$$^1Pp525cAx*x7 zP}JVs+BM#eq^oHDp{%?bTNWx&}douvlkxD3TQ9=-|*BxDi2)B-Pj zJwRaFQw9OZjs_sLa)=G95_3t2n`U)r2KGhf@)_VJp+6tiYI?}~x-79q$Mm6J;d*aH ztDq)jM0v?4u_nZuElQ&~$OL8Y`GNO5p_YJUC4(B)g-!GRVo@7wMH|9US-qO{=0MRP z5g~n5Uec1^+Lz;4XOm}l&e-$qO!4_jkjC)pje5@s(Yt=fmzwTs^@R6W{p0cYw0CJSUD6PBkWTEvrj!7x&gYLaZOBzN z*i<6wl_Ts*>pu-W@3X-fJGin1G2Go;5gK`1>}s5j-WA#sh7f8$tHV`$YOa=T*7!T# zU9toMRBb_6DdgpNNo@3l-7WFchL|^T82k&ud1MMg{6ERj&AF-_$b{GPQ>-CG{@7!n z6^@@5*Y{{Jv_MG^#bH$*O0c<9S{qUr9V75Xh(gdqF}i@PQ!j1W+fxns;;X~5_RsP* zWLg+*%#~oz58#YadOp^!SW~-d3*rj4t7tiTXAN(injr7$B*H2>Y)Xu7(@(JaYJ5~1 z5EJEo@uGn?CJ-fC!U(I#(N=~wC*(y3aXJNXRViX8Pfa|@i#4|38iu+nD#o39Z@9ZI z!r_ZjUi_y$QH+oQ;fR4uf)Zwuc#;$*P)J4ZE|LgINl2VLqRFc#&D3*XAE8UUK}60s z&4-JH8tagi%!XgCu4a(EBLiHVx4w#5bQZo!K?FtT@5-jzYAw|u{KVCN8rQJ3N#kDJTJ}AEMRhe z9%DHu#^o{AwUt4(znr@CJ#f*U5%`V<9}6^>BTnJeD1xyfQy(&^;e(_R=j{$P1(9{23N#R*&)UWt)NzM7jmho{FrZ_*weQDIOGt+?yuk9;k9^3KvxkoPz;}`_1 zFB4fZ2VIPh^-Atzy_Gt2nlgxq;6{)_>;PJ9L~*4uUJLkP;LgvIpva8bg83VkGtuGW zngREUgIt3^Dw-wM_P4vi=hJ7Q7KF4>Hz8ms@K~~JWK|dc`crC0t zr8AQ$HVx`tyshW_gMk#<&E^ns5`!e}M%7oYQpC85g<;j#$%)NM84~>*OV+LXMvO_T zsFIr%{fDbwHAkcD8ai|=vxmS?z*M%Yi3^9Jf_4lD(=Xz?!3@&?5gQrjL0ku0xbk?+ zd-NeC5MIj`QbFw$j%Ts=*wv7OIZO)1hBQ8=3d3Te;L-HC>urs`DzV!r(PiTliekqQ=41)vVN=OWlNCAw3?EK(# z>kdbKzlZi~BN(gz`Eif?LZ}Br`;Voh9Wg8}`qIcS8S|>UAGz`tne7Ky@JF&FU7&gO z)!~dq?^1*)J*r+XUrp)G6bt2`mO&tUW2$78R4z@IU6%DJqsQqEy;n>7-c>=08F)5o z%x_$Ea?!2IAKCKxV*^P(3My)bIY_clwb+47P;T&+-*av)$oraH4$Cv5KSuf6K$Y4f ze79XyVx4L%VhN5RL%@cvW41T|Wqg&tMoua?4S5lxm8}RUl4d+CgHfTEmuH0o1o`Iu zg%uL@sHwIgSJ{$aBlUTl7Q!u1hdX7l>9pRvka%D_h&&8%}xJmKRnpPgMTt^D^yVNpi$F5njkN7w^kF`iL>?n=6Kq%x? z^hUWq;LvsdDr2J>Alt9^u#d$Zc;FX({*%_i0&m;@FkKeP-FGfTnFM1NZ~^Ow1GMyq z60o;zo?nMzze&My2;=8RQi1+_YwMM(yS5OkXh)=mjoJHbF&< z^(N6JxswbSw5$6Ju#APs;qS{vwI5J$mPCCl#*+}OE})nSdv=6G?@nA1hjasvsr2_Y zBX`Uo0N?Zc@wx_9oN6rE3w6W_9x92is8$R~z!$a71MrzQ=kjKY1z|T2Y3RWr#%T!~ zF>P)0@vBw*^uyvtJyls#m^dk0?dCNKi)(#n37(W&3uj;S$~?*v=ISewSk6LN79kye z#;Y^)hmlRDUt)m;;7e~xOy@Xk4}cpsi`RUtvT~@9!g`BC;*(8Vx~jJfR9wMbgzI+z0O&nhd;Ni}&04aD$nrXrMlX3=IE;hvay`RzZ=?k^1!oZ=o`jtpHJNN3*?%y(3|c>6uJpsHx-#SPCMrHrW@u zIvQuZr;23{1r?+oAg3B@pN2`0(e6n)B7kwnkocsw_){ad)-Ysc(#8-WBV-+!gb!Ltn`H8jz~qT5el{ z5t)2qO4G^Jjo$e?%?#Ou2J2K!&h#Iu>A*(ce_g;#uB!p^<334sS*Zgejy$Q31U zJB>k!(E@8)CW4wuK5Zw^yz4V)3e5_u5+DQdma?P@$Z0bw*{<4yg*>^&2o44>;K5|6 z1hKUUFlLJ(oCj>KJof26hyWeUw!901@60)*n~jiIq4#nRvdAOcIiteS(IAJveGMsZ zsZ=oC=&KMQ&o5H~At*&~(|N%O(hUHbB^84NSX)Y- zuf$2Wxl~ZHiAmz-)Pu2;CoOgmMcsv7!*w-4K20?ifh`4zTwKNC4}+K1(LOiXmcC-) za%iE?NDT}DrM_$6-?l@MbyU&O)eyejLJk?nz5Qm9@Yk0*LFM|w0s!|$LvJb|I{V8g z6$xt}-xvLio5bwtL0|?U&HJ6 zHa$N1Rn4^LEIy7)!4X03?}q|w9Igh}XQ*h-CW0M;CA+SKJ3@g)Qb0YzVnZE8T;r1% z+*O=cFhmxIX|q*f)tmHzR~XhCBmptNU?U&|SGaIVbpMns8fBF&$p5p1tWylCFo248 zLh$#Qlor3eu)tT{%)qx>$RQh!?{!r{xn9qpdP!4qhWS&0MlpyVh3PYsuL zIy(Dhcw&74Qje62XE#B`1HjPV)L0=B!W1FuI+||Ptgxc@fM~W?gpEVx64EruPKM2yJ7hep@x=_6rJ1H15G zuhBbZ?b*rq&YhLSywkgdzUUKXr9Lg0YNoSj^3ZoPx+z%~%N0A3IaP-^c(__!U#T^# zS!G=eW>PH(zfN6(pkOt`14hhgPoMb2XGfw6zMGiN56H_p$;MMqaJSa^gE8R`Wqd4T zkYDeR0BYS;F_vWxpA(H10yZ8w+mLClfJu*}oDk7xk{AU9aQK-qlJ-HO7N#&ly!pq) zL3SZL8d!hct?NU=Fl$pKaO~#g*0uJcMXKuUFQF_COOcY^pxnBhj<}T4+_L;`j*pHD ze=Bfw5hKTMZ+zA=Ff>N%`wBzhTtifli~$bQSocgo3z&AHM)87I*E)?c?Vs8+teF5A zX;UECC~^e|T%R|GFoIXJ0*w6_s~*uB4i`hYFt-SRXyRxt+hdo;7IA1p^c1V>44>$g z8$-?zal93g0_jm2NB~QEXD%{|;BW>d%2t-QGemE5uIxbGEX7CR__*AFyu56N1EbpW z89zz};s)lG)Rva5d5D#|T`azaFO|1a_#xU72LWY5`>(5EPz#Vx+h1D0H^jDu0|;3~ z7scr=#6*ytvQUy-pxks&VG1${dnM>1PKqeTOgLFy`{v_cN7Lt42glf$99Bfgl^__2 znNe>;)B9?gah&|x?@GH+(>uW?T=j-pRxi1ayFwFt_(`s=miv!xg~XT?8jTBd12U@w za)A{4ufA#avvy@#$C-F@U)U{|n5n^ct^Kj2N-a#W2KgUoDGD8yoeb5XxNua@GiH| z)O(R$Sl>F6>eTNl%#?nicAG3578kuQ&g-OU5b z_IrXh3W-dpS%}1X(ZamVE9!%%LP*^j?m{C*pz!=J8Sg^WM4pnSE32BMw-vlaTt z6+tBOB*13njJNdLfn**R0wk+-1H*GE38g&TMkUwVi490~V7Zx%5Lew^I~#@KcC)>Q zCb=7H5NGY%odMe|O+b1s?jVG&*W?eYQ#%M$8{01({=T`1@c|&tIq1Ti4EzarI~~N? z4teAFkctr~=^qL~Y%gR^@A|QlKISvX_K!jQ2b8Nv)?NptQVkq(8=bKLsdQJX(q{w* z5rX<+$Q@wHIe2v!jp*akgU04#>50&l&gmm|afNDcjF3%9G4Cx$wu%;_%f(i2-13gu zMqA~a{;R$!fHI>x#pc?*6_r?|E%tn1|rvi*4<%pJ7o$nax;3R+J0OXfI}nKY>cQXl*kSWB?_JSgSG zgdW$pQN+vlZx6@1Ux;}3VU3bQ=tMTV%9yn;Hgvr?o!#vUdvvp@kxTKi4WE7MOD%~t z;i32+-8yRK+ZQ*!1-SvK=J$MY&oK_m8J5+mfcfEGb6YbBoT*hO>U+EYVY{vD(dPr? zw-5%LDlT#-Xy6I+oeI#b&|`tk^v;T63E z6nUgmx58$1U>2O)xb0* zQRw|hizz>!`B>~TC((q;NenLW)PtbEkNmF7XQp277#dyurC*4UD<_c~@poEHp_J5h zGtN`B{dr&011`tSwn21%M*46H(b=sslZZ|^(@|-Cf#KD_EN@!f)+KF;1J|*@jd;re zm*ZVAZmHRcX)+CQW(l&;gKU4<`y_Cb1Ar$HNQmRK250O^3XCffx_E2fAftlA9=$e{ zkVRIk^%~DD)Vo@#&>hYj_eM9v-X=a3tg623u$>edb>+s;N%I_e;CtiSxoU=DWX7fV zSSNI$~_up;r zmqAYP^W~lZz$}fj!7Qh>x&2pH%q zkREbbo<2TJ7zRqIz#?s4Fk5B+!8`zDXFI<@?$r<7qPyc8ie2($2$XH7vJy!mR~f*I;+_T1t(SxC+D|o{;&KnN{dLGed-XV4`CvG^7Q7T( z1x}BodRrEZquKQ!Er-I7)_DC@RP`!o#?TJ@!aonSJFv3{G*e>PEJld4n0^I+!>}mN zYHt=0UVc>J{@Kq!tlX~ZptF=cO!mj2M#*GOgm2&9+_i(`(sUMNZ=O~C+Tv<0G2+%j z4Dzi?3g%>LHm5Jo2!=XlF-OWkkAVLuSHg2L$oBU=@!5o>*_g~sKq;UC@}Vuw4D>)} z4==#{vZh5f#sZ_5g%lw-Pu|u?m10rcoq=6cb(ZX!ds8-7FD{%Z!aGm2<&a3RkEs|g ztj->Fb%wbMWsn(ta+#3aZDk~{OLUN#L)Ftzh~Ws05-Q{dp@49trU1!0W@B+Pak^Td z{rB?`un-{sNnm9fCY6?)dguBL7M<%hRx zvxoAKUM#b&T&cJyeLS4*o?RVZ6}oaM4d1&eB7VaHuGg#+ZmhE$9#;EtSQ980PZ~_6 zFXYYw3Z_(Xc4{ajlcQ!tzA8I9C2ht zO?P!hh$t>bo%AY*eY^u-*lrk`!rnH>QB~jaPtkSv>pw1@-Jn?c8MhQyb!+DamWH5} zsw>D#dnp6V1sq*Vyw1mp}vAIuj@0a>%|^q)UgJbyZUQd!oU{nC0o~5G);Ib z1I(cv*mSXXLVJJ`^owVgR?Vrn&H_k*hD^#X7t>yPZV2fTuEiL~ zSvcWhhoTVnKhL)4izU|f`pdz4M>@!fc8l*Yxg<}tMW;z)n?QCHs=}nKy_yVdgFz^# zuxFX1(hjaIpgm!S)4qB)k4BZ!i{ib@WmYm*?_kH%cer0&9YCp^x>-hJu0O4H)CgspVlDu3YmMUsVz@ThmBG*HR(E^i>j@(&Re#8X` zNIrWM4jER2r<48L_CYF#;l!CMv|q&Tb^mYXUIwjG&IAW_i~J#>j85^f z-~VJ(P3KIpw%cEE4**LbT;RiIw0#h4N;@klk*N!V2Tk?>p8^jjFg=jiS@Jt-y2^qC z^3BJWhk4OVi^lrZqJv1GgzzKUWl^HZMcS=I|r3mrVm?2@lca! zc=xL8HZq(8GG_^@+phwVl9d*yWr7<`001BWNklt>?*UBZ7WrJH3mye4oy1c_1w4S;KF2v;?s>EYGQ|=5&`e|jZ9h2LkM~b4RjSGnA(+72Kli9a$lor zl0NF|J$ojwju}XFJ}d>M4Ff9eVVL}`$;%B32XH2PZS)2J8p_2}v}Cz_@%AEly&S7C z(p6j&)}6R3ZIshX*p#zzSQ?Y)Oo3`!B(5)cyDP(kVN1HXEMi?OhnF93S^!HC3V1U? zlP9a9)tb$R$_WIL4;9tVw7n}gnu-+^PGY+@Uy8EEAngBGOd!hvay?FZ{UG2lQ$+%B zCVentFikg&32*Xy;LUkP(}P?KVsh9Xc0d3%lHt^Uw6RCY{Hfy_%xbsViK=KuqAMn2 ztM?*VxN?843G2mTqfp(A--JiqW_@(9;cllS!yomAnyOCmenNjda2kSd-PV#ct3?)@>*~Tmov!r`ulzG3(5;R z@Fj#6LefJ((I;e`?P8hEMSu#_vbZa_1WY#cp&AvZEo0{L$(zG$i(c+Sy2DvpLjlt2 zm1MLMb2IkqPBrs=@eX5|&KZuI_2D6)iCrNWHk(pz4_|#88B+ZEE~Ia=3Lr$6a40a> zX}3$$|BGRW)t$Nsp-ptnlo zy{&5(Bo(L1M|*b&3-yxKK{iuTkF+szlp#l|#V={|ZzAe?c-P(KledR@pRPEE#znd| ziIgy{icnl{NiddSFhi>C&jTdd#Pd!AHB0rdB0ic?1(~1tqFSI>VX=ZKnSVeU?TGq` z&#^ow7lDx6rI2rewjgnVhdd%ORN&(dWT;6H>UyK+lvtm}Wg!svIxuLH5Q-l{f*7l* zHp;-xIOFmWIpX;&PMbHTMY=4aMwAyZTM`8h<2tWx4j63S|8mcDf4c zwY7Q561}UfM#2QxiJ`E;Om}BQM{dr$b2jHGtG;`6ijTIXxcuYgG?%1;G=>E*HL|jm zH+gRK%yAVmfyj9k20hSgi0UYq^l(kAci0qV#G`-*}j19q02$DNx#-J@Hk8-%{D( z^lmLU*K-4&onaf*7Ygn?I?f7@&ctRGK3sN;9R3~@Os2Wb@GLiEz}K_Ks>lGX7fB={ z^hkr%N$Wim2k8N6V>YIun5nC3A{L|yMj9{jgxl@;gsG_BaEAcilz^N(p(%|J zMiInv3=3LPH&#uU7bc*DU^vVT1V0ROd}ZFTwUn2CZiWas-Yz#HxfH+O+K|P_jIM5P zPrJ&Q*KEagR&b2H`3gbNZf5^+d9!a%9Y`xhcM!^@c1Qu?Nb7n$>YPt<$_&s-5NorH z69!w5K~aHz6=7!-cv0xwTp$!BxT zakI|~s9>A}DBovbq`_s4~zwFGR)| z*%&Dx$@lh3&4lUt_675*S1tN^(Q)dH=I3=CGZ!+0RZ#qnTjv@OHFy1!-x6ly-0Zi`WLzJA3bNkbFxkX=@K~52+UhMnF!+#!gNQTNQAY1enD&AIzdHvqJdVZnWknX%X{GK5a8uu{`#KhtHn&lw_(eIe) z&F=iX5x(*LNKpcxIGCWfVME9;s%S5*^9w1op!m|4crM8vGHfH5aq#i$@gAIVTTWE4 zTe)#2j(x{8-o-J8JYCbGuMUvy?|TFRyiG|YCJqcjszBVGlbQ*VpT-o?r4XY@Cobry z0$(~#St(&yki%=z7RZ2}Q0QI&n$ZV$#f>>ze%(Jr#$4i9c~t>7ZdiD@7#jEgo?Rtz zbnDvm;ecZD3c|P0Cxi((3sJh3V%IzUrxQFD7m6Y>t#m_pVk5ha! zcY)^FO29hcJW&X83nIkjlEoA;z`FEht5NKTg#U82x{HbuqXF!2Xr?U$5PZLU=3j4D zH|e7cX&VA0H5&-=Y+~Nrg>c3|kQd4;5Oq@X{5Lfcg=7+F#PayP@+3R?yQs_L!0p`(i&bwDmcFmDPrwyd$yY}Os?=SBF^0uRaN$!d(LD!}F z6<|azC@6zWDAnUIqnb5ho=PGse+0yYogv(gF!8sC1_a@k6)2OlN~}-YulJLVPf7s+ z-V(Vfaf%ysLMft8d{pWh?tg@od14z6p>&G7KDjTPVt>j2Lu@p8v>Y->2ErqzY7Yu| zR|wJ3LNjc+ZeD!#b}jk(0lsbj>o>RQjLCIZUxk|LqPG`cy*T9$!c-lA=73;<&<=Ne z+I*89!cN3+;&yC&6B&n~81C#@1kJeMf}J`0pPJnd3~T$<&4HVd~Sz z3P)_T3G-AT3A^VBE~I-rVrG!{5V4XKOv`MR8bnOP7Ige|So&mLdz4QjY9UEf!f9f4>^y1Hk9`i`2*r zWdV_LyI}?y%wUgXv6Sj1)lQiEUM@yTl4?gRI?^I8qdO+L;Q;fc_LmtU9~mX<17sLv zQ5q3MC`labrYjwj9&ftlkylu0!aGf+aWrXT@uNwSY3dcKGfb?)Fb6{o4aV?M#I`jt z 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 ST+a&t0000>F<%xj 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 x5WYml)? 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 Hu0mjfum}|` literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..82e3d0e2b6b88f367c055d0c8b7b55181f3eefb5 GIT binary patch literal 86047 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 XMC2oBpA3tu00000NkvXXu0mjfZ&dJc literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..263f44b3d998a331a7f80a339b9a0a5946255525 GIT binary patch literal 69521 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..ed0a873c34f01f34bc6d44202bf0993934129c06 GIT binary patch literal 97709 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,$9U=Hli@-F5`Tk-v$g2!#KM@3m8G4Dq)WC`W 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 w;)y2!5>Gqg#Z8m07*qoM6N<$g6)EB_5c6? literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..738bcb6b3eca8e2a2c00681f73341df16e54a85c GIT binary patch literal 41539 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ཌmAhV5@O1{MTm{bb60#fiI$ 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 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 0000000000000000000000000000000000000000..7b3f2c7d0d2e599b49d78f55004beb5b2e48c9ea GIT binary patch literal 38326 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%0A;Jn|Wi7_EMxQD!W>S3L}z| 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 X?^7_nv0q0sp*-T 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

  • 0GU6%RTyoEcC*hSQsC8-OZJMXEL-zWJ(ixYL;s8 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

    mhu{F9j5pm zQ~oG{TKz4~%@R`}L}4=vfcX+7y9BKM7lF@u#)P6ER;Z*&`yl!Q$32NsxYOxCqx3IPk02lVD&#ez&XIHo6{j&Qe(_Vm2p0*6 zy`S@T2z~C2QT}4DTa`3?Ki$2Elib&L*qjs$zKLqbYeI%Y8^J?|8{3rp^x8h|r;Ti9 zO^`t<6ST-dt(dtNc}MF%4^WJC3*{i18!x$`*`S|WJ`q5m-_~)8G`4w8S3+*8ikm}3 zeLsax?_zj?!!hy3-@XPR&_=f))pUk%(uS0zQdIsKgzkd^*8ynRhV7rdQ2jPWM%1Iw zza=xD_be@!%p8*@u|HOI5pa?xtK93cZ?IF0Mn?;N4(CJfZ}zUVgUgX)_@^c1yhL$x zvxlf&XI8kYd?!p}Fw8{(THa|$9_TsU(?V%bK&UYt)^bYbMjhwwsX{KH2*AUw ziI!);Y{s8jo=P^Y^Hi$XuB8)TKK^|F#=#~OY}GE3#x33Ngs2esb=RzXk&649`+456!wAB5 zo(C}{z`QENUNJhcuc2@JfN0%*VZUlK#LOw!vKEfUZbraGFH$}okG(2Xf(1_zqoala zv}H+2C4!QlS<&!6A|(lmno~+Os^6-UPuHk-sszK?gzWS969S^S`bF}Agu7qqM*3q2 z6-i|f%L}DQnEn32a8hManbX|u2VK(0^Jpf46460<2Gxf}hTwf^Jj>eiCae1hpE?;n z2?$~B13;mdVb6Q}7gGe%$;C}&lXgPuoaY(X2dnT&mIa7y0!;`dJ|S2J@Q7_XwKacn z6C-)u3U4Poahr}P%QZfjHfD4JpDE>vEXTTmGv4z)n5g|;90Fq9?;O*S+137iP!DAP zV@36yEZ8zYxI5r?BWV~-R%f)4W9I@rG9S7;#aY|4^>^co0IM3Z@gI5qE z2@P^JB}YPh5=C_gQWNDQ6F+Arx@@ASpr;@zI$eW>scFp7B1MFX6lIb}Q=nFV*YH4s z1L*;OaXRaa6V3islML1WN)tUpe62aH5-c?bwxS7;5<%cC6gM6Vmm(EMK@ko~++(6P zNvI5Cmg{-4$SD?`orK^7%~7r%@=hOCe=$lhnE+R!V?py0q%xd|av3o0nS{tP9rR(e zY>R;jxd<8A3;;Ket)fJ;xsXr(BabvpX{K~=sUuExT)g!+J@QTkGU{hrDu3bv+>&N< zv+L|CKxkKvxQRlsBf4}v%#L|6sJ9$2+{jZmcqk=U!me#qJWGUJX+5ag%`>Uch*1ZJ zbtRI~ap~O^4fDrcGf)mymOkV?VoFbs9FwPndw?cZ+%D4$HEfc&F*c4*mFRH;78fun zd$h09WFPGF4)J^mD5mgz@x8Gdq)sYV3MDo#xd14U4k@nu(t%ro8u|e@fWk=(OL?!~)9ziu9+g zobf0UVCq{nkF1o)&aq4L<8wtUX_wzo40IWopp~dh=JUf|QE2Tns3Zwqs*uf*yq-gr z-8B%jM^u->N$|kLds_ep);Pp4P~Fw+R6d(97)pULfMjd6RvNNR1`6}^c%7@Dw@&t$ zcsiu?v>NDDt!}w&r(54SH?w{FnKmuVbiPQOV+I%mhuxh7e~>3jkv7{yOxh5`!oX#- z|9MN5wt>p9Ny+XBbbQ;6JE^PVZ=T2_{Yw(haKEAvlJuSy1$E=Y=c^Zb^m@4_^sffU z`?3-n+d5)2P-fmWa?(8q17}%dE-7tspiPq62})CEb9IN<)W$q9!2)JFX4gn&)qO2) zhO#D31*AmOj(HgZt}5#|N%n(NOxrqKMNZ>G|Pk~~# zN}i^wrCP!$yp2bj>XX5)hj^_XMHUs+2{n1nCS6u}Xsl|0YMo z1e2&(ntbzhh}^Q5(>Rf?BSn1*mOU*ZCDm`Zh)8KakUil!ee0v6<*C}Pkoe28_6vtd z&vxS(G-(~Tc-vhj!ceLYlx zwcT4m9)&^9)f@S@FbXm*EQyjb=9(AEL<(ai^R3y~(ZRn8T5aw2CSfg!945J%NcX+2 z3!DxA%LC(<#mS?Wmk@=jThTFIb0q+zVtj|?o6G^TUmF0eLiHD(;X!{a;)xZLhd8lo zAbz!oKD$#glhT)m} zudbui-De4_(tPUh2_7BMt%u~{qo8cAh*EuDwPsp3G13ZFs!#cEVd~)0cwufSv3aeZ zrK^W5JgB@P7->F5?tj$iFPI`U;ng#um}~oj6f|VZ4@cbggwr^w#0&5xX3#+Ug79Sd z_IWb9MMT(#?dUzKmsLEvnmno&yr=J&bvH&O>6?!CrRv`W=MY~7glfE6xXJw%ro(-| z)_kU~93Tc4AhvGmI$k`qlGy_ovAB_=NZfCq^6Z2Hj@L_OK7)-AVZkx85l~~ zDT1cnQ0cAzsST;9>blCT#MQOa1V=DeO_XhLxQX>efk9|3;#7d{Ki4O(a1m883f6Bu zU{3)uvp5r_+@2b#1Gvs_p(GF?uGKl)s7M6*`zIetl(hLz^)&d$9wjo$uqPo=SvEL* zb(G^Zfy3UuC+FgQ(qrO8o5;im1O70VppKkR4#R9Ze)YDG^T5pW57`LI+@b2#lgcX(cCwAhx z(P)(tL|wO%{? zXpFLAHe040paSW{>^J6sV@#e0zwDop4DFq{HlCd?{oY)`CFZ53N#8PX{SIFeL=gHc zqB{J5sGy^MlcqyY8bI-0Hq-v7@Hn-8D8qT`Q~#d5h3v5>bvKHgn!$IfE~4g`&%tZ4 z`gRzskK%u@{^?FWEp>J!dNg;S-mjk)V#vrG2ulMhIpMK+vc<#T65L2Af>hXwjOqT5WS(T7&S2fkPLwFV zNM%_{TQO{_yeVmCf+B*{F%3$TOHu<|0)2uXuB5Eo%?1FO3o75e(}Tr|*iKZ~{^Q8M zkmvo$y6u`CG*9EP&bj4W&Oee7kwe>W-t z*5qcrY@sZV+~lW%(ElQ_e26$m#P4j|_MUxIzxgF8X{aWvWfvekMMujv!gG;QU`E1~ zg+2W(UYcpJciCCU5-I2upMklTvY!4)M5_Yo`6!?85e){KRJttEEF0qTDGk=$RzTyoB8QKV=L5Fr3pe21>+A$g_ZmO6{7$ML_iw}WSx znR%=zXjJ#&rh8_QK*f^st82qve(r43)MUUu!A2yMxKMR(yWTJzTKmk;3D))z4-*nW zX!JL}3@KvQ92WQHO`+2RH>WoH-hGiVYQgAH2tB zX*ywes%>+~MqaK7&pYpjWj>fKxE4Z6wRf=R<-a#)&boGmk~{!LDo2%V)5f4}YoMe+ z1BlV+-BTUzi`~E-sNniKY64NG8z7(V+mtt?k9$H}x|E7KdUC64^Vp16&>~q&m;Z!D zLbecw=%g|T2!MB4`6$=evEQb84cG|IGEl|6z-DKj_g}owHEO;QBl#GOii5@2Xic>s zg$Vr=A0;~wkob}0FCcay?cbK23AI>vMh3E!GtFQEJ9Gmg?S1-qPV6fNOJ+uk^mptO z;{j~nBjvzLXDo9sD{C#$rLG$Hcp>{8Hhh-_xZnfVN!rFHsxU0db7?YC)a?xAS@;0r zGB`sjw2Ks*Q32GJfg?by=N7^dvl~<9ecE*U;u_s`VaX)sl7z(9pzWEJ!j4ZO(VBZU z`eWLjVW)H^;(W-_`aVC_TF1P8F^9%#EgGvXS}$h^;JrT2mAkFIZE-iB^`X^g#Ks`8 zElP(zx8%6}hkAZOKO4)b`v+IoL9XmP82lQke^o;`!VKp`Fi}qRHcyWMGR(A3bL_X` zubbLYgC#WTniGh{ey8q1g!-*{%L5m&v+rMhVBY>g5eSC2Fjc1E+#W(xfgi^37h9oEBcIZRtezeAV??Kz>6>nPn}8in&^H^^$-zmb=f+WFac_8uIn zxvry72{XsRc(nz)mY)*<(W|j;1{!@O#b)?7k?vZ1Zd%k|?=YrvI`e7PoAYp6QyZFp z7OL~_I2}-dD$vDn@in7?k0J4@D*%rmL+&{eTQB!dd%iskrYiL|COP}zaAB(*624u@ zB_!iZEgKRKL~+%vyfxc%Ur_wRf0(!W7yR}q2cS7^R)3ixi`)3O#2_Hd`Mr%c^#-%F z7p0SY$PJcfU&@jY{D|0A_YMxzaC*JD9D4*t_oxlbHTZ7IEd(_gFp%Io9mN2kt}gd8 z(G|W1%~3Og&FtH%TGq<313Y6E6`X&$I}#X(L`LkBM?z2EjTi8N@r++PUoq#Y@77k5 z?7hVc?`qDP8#cc6#L8mq^Td4)7Ms_@`s%4@n~oh;?;}N~$P3Z{mfYt`ycH8Ev-x|*{;u!U}JkYW9=h!-nzMF;v2 z^{H`G1+y(eP(TKd3h9*t!T;K6dw&G@mOD}~Ct4eVLX!F7tZ?pwC^EsSjx=lB>qiQk z5W|aIe;mJ2*TEX(QE+THM7Jj99s6s{fYhE*cjeXJwIOlvjG}IkxvrVFLa;nIL`ZKT z!~6a@R+kGIgcc3Fg-^VRUd1kKnazcNKMgp#{{XcwRK?%93y)lm&C=&W1i6XrdOp>V zH#g09JPgq8m00wFD1IpuUYCafUpf;$2j>w-E061mQA-+QK_W07`M2lJNeVS$i%RlV z>ib)p*)223!iDp`r`bKZ0|t~PH&3jEu~+IJ=wT7e>LzpOqBVf7Xedr3u7{X!YWiX5J{NSChKpw z@gTnV+Bl5?rpcPWpB+FkqoJS9%V&fzU1!w~lPk_pS&0XuGVQx4k~o7 zYCRy)%ViF)owV@nvHDX~viy-tdl93F#(oOm`x?G6NO~}VL^_&4dtj$px z&-Xqu&!k?148BiCFm%x*rLyzGM^HeoT5uR?bRIUPkAL5@EW?CR;5A*&N9KTDEo8Hk zTBH{g#Jn*6?%vhKB`GP)6SKem7<{mYi-%}jsIF}`LS^00=fRo{p1VQwsUYlV(2N(EE)8q7NCIj2HXekwrxpHYnk* zw$E-650;(re*t{UExtlq>&*UWf1l19Jp78^>KPk6`+g|p?m~99kQh5j20wZvOMJ$n z7$Gse!sMI)gKCD1<1bx=j{-YwBX({l%Gjq>nK|ct`RgP2Kj}}8GsMC#@5buUKZ*tP zA_pJkM5SvXVqc!ITp1K*l!5OnM(=Tn%=m9L0;n4>L2jL{Spxi`xp2I72%@+sevi(` zle*mACMe*8<+=TF&5s%wFZ9I1p~}nW3nt1dzBs^$Wcg6}tm_JQqUze258?P>gB`0p zZYCJ8We^BxZ5Pxo2j$q%`ki3rmlb|y{A|N5&5Z?HLtM&J=oN70REUY?iqeTP0+gj} zwy|tMst`Ank5Kow3le%#gwbMbSIqhCRyf;E<-i2jtJG@!rpQU|8@PL^<63+IPhn&$ z66t_zsf4ERxHVUzuXx9Q1>osx3A*J_-hwsXYbR^kRN_l{cf|bH9x3euO>05*Pc?9h z4dv#SaMhboI&+e9e%R*jy=_uW^UOz25FpOS5L5d}_pi;9pJdGVBA<1v=rfSCBC!!g zp`n(Vt9bm?RQ~p=qsIr+ggT&CH8{*oSQ4~QsRdNyaVe168~y2WwM!RD+7Dt!c7vh% zaLS+Hx|Hrq?-mO=}kZuvEJ270nR+^@GD42YHhh^gjjWjQU}y zwX8E2g>Yo}JIWFpOmGuR%7%Ymc<~Q|v!GxfT$PYC5r-Ygt|YNw=kdRAf3ozeC@})| zhIke!dcyH5WK)2nw-aSGRG=ePgQl& zLS=nbtK=J#4%o!t&*#-B3bOhr@gH#vrbkr2c}%uqdjN8H8U`MZdMqgI^+oL0ORHKba*|B5FkkMWX8FMV4Q@K{}( zzy50Jrb+ok7Uv}%@CZ-3U)68k8uO$aroBkuegD^B-&^9*N ze|XolUmb4xZZ3laDI8*$<@I^G7bU7k)*%pJYaLCo`fB!IBG3TR%kmT`q&zfV{7+_U zN=rFGf8g}USX*=G2;k%-Lsz#&FoSTX&d>D`VCOWup;R4lz*9o_Rj(TCG&n%Z6Z0xO z_1WhUa87GeM}(N~3aHlTmRDj{_k}B}>Jjo`J5%X_8Ge zp>)Nt(J%NnU2=bk$_{J0GUpK8gS;Z&`DFhSKqQ6LT`lc?c){^+;YfyEgX1bVp9NtW zMammK_Uw`eCgTHi1-tn? zhOKM!nNk>>bK3DkmFuMzbs3;o}`!fGkpc`{qV!YTUkqR^` zL%1$xzL*hiGOg#^4C2c}n(yQqokKVhfxyVTlMO4_gtI6i`&KUN*Kqf}AYL5qhGRpS zmrx-{>~QnLAnw^aVc0nvVeys0PUQF21;#Z2?gqOtJZ*8lnPugt)R!WxBXy~ouuTuYEWhHp+RTON=kDUg0{q*f0_lC_aZQS2 zdSA(`AZ(?IB60xi_35HY!qV^0!(sT}U|mZzz*Rhr4`+sBZQ`T6R>Cy`n+pNRQF2_7 zR--)eBL>(@Tnsj-W}c68JXx%*4@$0&O*k+JxM$U;|BX;pHRb%VrW9qYhH|%EdT!ZN zS?fU-2R6?QK8_hEfU*pUyq{(Mu=-w6Q{LS5%V`!t2{d{?17RgzqgEeelN1an=+_f@ zu>X%>ktF-pqG40z!{`}^vA)!EI|!xJ@Km94RFRf>m|?cU+mAUgMFnc{;6*@>Jw%OX zzCRt!!^*IhK5qT@e?5a+NDPEQp}eGD@M8&VN59M`2J(;oL-|9-L~0`OCIEnain6LQ J^-`vx{{xx;bsGQx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..31ebb4221804c8e33842b7f0593d40eef52eeea4 GIT binary patch literal 133289 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 (Y^`#Mm`D&mIh)^w+@?W^D6Yozw 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

    OWEY%AwzlIuujY_*NpRR#U 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 z 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 B1Ue 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�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 M07*qoM6N<$f`3$KS^xk5 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2ec9b119ec727cf6d75167bd639de9d412a50ed8 GIT binary patch literal 42542 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 N002ovPDHLkV1jO53e*4q literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..505752965f257a12937d9f4182f5af21959eb515 GIT binary patch literal 48797 zcmeEsRZu3)(k8BhyT8D|;O_43`r^*u?(RA`3=V_4`{3^G?(Xied}q&|fA?bdVk7o$ zJEA+fx-#?0%zmmXqpQLdj@V z_~SuS3Mofk3GwZVJ6dk8mU1VcO%S!5qphu~V^~IQx>{mRouDMw&45gC%ivElsfC@> zzLA;TnV8*1(SkUQhW_cdk2ezo(W+caIU|pa;b3(wF;zttGG0xe*jzkroq;;%v{=KG zlGcm0l%PPJwLuR71+B5QeQ!HqE!TKi0Zb=-fU$kR*`(`NIRF3n{~7qd&OqBx{rHzM zteu30BM1mQ>OUvw%(~Cp*8pKMR{=T!Wo5XGY^~`GjBO1~=-jOB{sqOu?`CIUWNG3A zFf{pTZo^A*+1g10FgNBUQD>E9khK#wF*BF&a4=E!kW(@8ur%T{CgJA;@VIe(8L&2S zG61+)TiG~rx$%=>gl!#60IYPZbPOb4+78C1TuLHh z|JMC#@sgN1IoWa1)4RI5(z!Cz**g5BXXNDMq-S8FXJVrLlAv{Tw{bFXqqT7){T~)Y zOdO3I%tyR_W^4B!?f(Vu zKi&TZ{Rf{*#K6f!#oXFN-ogAU?*>-9BuorUth9{(7*=6oz8W)aa-G;Rwe*JNfN++3I3DIFX6B27jOUfX{7(69{s<$_s{KrNX!QS0RC$r znAm(-as8tCR@L0syaND{6cJQ$TRCeFH(X__W}|vn+Q)WC{GC`5oet+LADcnZuw0`# zE9+Ug@mWC!8ovV-3xKtY8@FmCjRzj|o-x;b5-dBvzFvNMJ)f^(99yM>^F?N+&VzP)Yti|%!bH-zsr9go`H_>2=Fwuod_ z+6{U??yq)sw!NPFezbUlOGI0?eV(t&^ZVL)i`+fOf!U03+ewAyc%AOgc9nj55nvr) zhc7wGfzx?CJr}v^eYk_e3=Zh|`Z$JPPI9nl$HJ*D>1PhgLeAvu+{uAGFM~v3LKc*D zAq~bRJ#moI6Mb~LemZ)-T7Wvdz9#d3dZ!Y1YES6(s@mu24f7{EOBjZ8T&doC8}kj+ za7lZ{kV50Q-9F^^#aG(Fg#&c@x2zzTb5}3fp}jfokLH>7qOVin+sBP&sso!hiP4Uv6x6K>4k8 zeBSF_)ik4<1+#B`r!WZ+@7O3h#VL9aCQf7-YEmF;vGQBe)~)0^K$;6^cB*_dQ+^r&_qBaE4(uf$$UE4%!L!h$4?0^iH`T@ z57aM-MRxYNe(&xd)kqB(^fynLb7lnqf&Lf^-IzG)>3x;E^Yu$Cs95?=F9{jdzfjs4 ze8D=%z%e=W)p9|nQaHF96rX1YPezcI_nQQ6>gIR_;Y+u?8}o6zS8cAl&UZIYl&`M) zL*y&e27K%ImGn7&R9QIM^B=BFpKqt1u(yKU+gZO;5$S!r z{hR@Dr#GhF&&_>3F!pKH)a$uA{k-$31$n-Sq(*nt;F%FkciEha_YvVEti;g${9u#x zYx_(dTl;=h-5jzsiMWMF5N!=KEifkz9J6wWOJ&_25yzm2P^^$;5x@_Mp6Y6~d$F@J zYCSPnLGIWqqE7%DdezIdYQaQtuNqH&Aoosn52mFv1P63}!get99+zVwHl5kdtvl3I zPfHo{8}%l;HYI=zopWDB9xp_Mm9fKRvO#yDL`4rW_y@zF?}9v^uhK9vv=MAoiPra` zv}rF%{d_tf9Rj_Xlvk{tPc=c0C*&Gv%xye*l0psx@5CKsdQUmd7Y-iET_W0CMw@ez~9mH=f+u&9)$j|8BF5hYz(85DWK{ z=;Nm`NQ?Jj-Z~S6ZQ?bR8susip{P6IIu7GLIwN@O<7dR*uwqt5D;BM!^An~~4whQN z?bB3lwr81ojt~|UQjq8A`**onYt;TQS>Be4WS<=ks;Xemk;Mh^C(G|&3?MTkLiiCv z<`ePvp=}u7mm|9F-mq^-%sJlc?f8)qWY3pRhBpl(YQwB^2}5_}W!dWw@*ckz4nCmC zw?D}%Erv+Et!e2R>g<|_K&7$UUP$2^g7)1e!nfGfY?1S0G3j6^EQnW)2P*rf@Cw{0 zG=%6~f#dDCC5CHqsrg>tPaIUhCBMGS-jcnw!fS8UPyjO|BRnl1^eUl+B5?)MWhnTN z?bgrk>7%tlM%$8T{J=oP#i3}pdNZdB8tb6I*Q-?pkmu3IoKRXJtw|C1-7cHiUPhV; z?3l`sP$9NEi1p48&>`-dhV7xg#?+e(x$^Wp7Vs=Oe;bP(Q(N*{DJulC~*(*$~AM zqOzmU`}<*cN;6HEOWfYivwglu#Evg+haP<;Ni}heX=`XHZUIRv@RZH>HKYP39h=7B z3yqL}OcBhQ>4JAZDssbbOZ$R6@0h-d=mYR(lud(s8VORc{$!|>HxXP zlNRXh(m(Axepxt48JZaI^MRP$nEyar&Vd^0>vHP8|2%;P_~y8*n(k70)iqRdt4+6+ zz!rGi?MF&+_;-_ZoPq;aV)pF$Uc??fE6=Y)BI=ej}Czxk=}jPv| z;Lh%nRJ;~Q?8C$RFog!_bwN9M4o3`pAT_CBj261`$j>ACkCW*qS<|ba_|$>MJ_2U) zu23J9gAp@0H11pH5;Vv<1^05<1U{ZauHaU(Qca0DR7w6O>Lei`T=nu7etmQiK%q3% z@r`K_7Kn#FeDZD^XOg<%uU0QZKyTPQ$uA_YD&GUYKZs0-=(bxGmK|^zu zUPaN-qmeyDO8UK-X=o7$9^;Ny{MuAt<2 z0{rcG0Y+dW=h@uga&NZuPD?8Q`;Om@6`(pY|PAE3KXmST(M zW8S@`<2G(3D#mSQ>~awE&IXZnE6DwkoFvz*R?h;brHeVniPT~I4bVe+M}d$^eZ*mH z`$n4q7_Fs%N`DrCvIq(1Xb%j5kKsnZnSFF`y;1{$R)$S0-njhspTx?XIBIeQ^V15j zp-yIONas$#V=mMXKmCV^ zd6C(*eU-L+cK{>!E7g)&K$Ly~nWdURcYx#>H{#1elT6HTb}legmqS@SJP`9B6m+yQ ztwF*l$sDQ(()9E+MpOp^0nYkeX1A&E>z(!1%ei}b*K@LAM$hV4*mbV6K@4T@x}xle z#?A-J<|_Af$5Ogqrh)E7p2jpu#Tz{Mn?7DA)lfNk9`PAx2Lsw{!D3f^$I*odj){NS zt~4~POIQJwwN{qtzi6+OgRmWT-!q`!-J$O`JSJLcdj|{8BB!W#_r=f(PyxGQb2)AY zaC%tk{sYatZ0%*zfTt=x0iQc9ncMqt>KQ&{H`v*dEQus1E)%LJSu6lCIL^7qG%X=; zcM~n6kCgit=_U9n{aO3Hqrgjbwk<2@jb(z1$9_K}>mud|*vcxpmr<5f1eVoBmDyeT9)7>};b~rD=>Y+7{AyqbIdZ4qTJi$!Ohp zg>4ysZI^;9&r2a;UA$|f|NNRDVs?u}=a;V2$DQ)1_? z^o8FoFV{)m=o<meM=yD4W8XEhzx)qO@I%z**o~6WrnOYKo;DqLSk$rPb zHf%#;79X`L6OKFUqYpvV(j$yL_R7)s$y_oM_|Pt?>CCLJ83%f^J__>J4AFzcO(y(` zzU_Al{k3y+aL33QL%lI}lU?8UjDBGhKxgVW>6t&4fjqQy41~T3hmH^_)Hvv^#1OrFJb!$96T_ed7b+4U?T7%*}P#4Y50l;tORPNCCy z{MZ!3_43TNV0(1=U3ZO${_g7U@#7=`yY$|(sR$W#S0eQ!n2gn1%}m10KR3p-KBnMB z{XD2bU5CWnySH-DF*k>u(or;j(23(v?fac8tL$m8g04R;!9n1%|O9V4X@&Pm|_h$Z%;AsS!&! z9=TBX4-3Dp`ftZLfX^2r*dazfM3s_yHu0DR$%-GH5uo!ZKcH}fSk}IS4qeiZ55QtR znB3XJ6LfF<$=!9GD-K^~`5rgeuWviXg zT|EQK+mBfG+YeKB2e)JD^(BX3Ea>P+B@vL1VbDE!U-Ys7Wj*zZ;jJ(z&FtPHHdbvK z96PV(%i6EPaXEAwG`7+3*kT7?By0FsX7+M;flQ_oK(o74s8U5HptNrMyLr0%q_Bf3 zMCak>IXdDX-$@F6+``*FbgzVvKl7K#bQE@DU>!5Y74Q^;>U|0&-zuToqfj?!LN2gejI zTsBkBluB+qiwrkE8dX)E20PS&h0=}>xOAMyohrl-o-KES&F7Up5i)Y@rmSi{D%kx% z1K%55UV1=>*8Yyq3;H-Nt`(NEYnC~c<}bpZ?i~(#bNEfQ)@ZZ;rN(xGFTfnnpY9u? zFf2N`P6&g_=w}4z&Fz@?K2`^UM#6#CH|tt8nr*6#Ywg%n{P*@n(-UrO*mG(fQ`M6V z;1KnES8XIt1dv}G+Yf^_K&z*&}-3~HT6{gIpmt*ecw4znt!M3!iaD@>_D6rMrPXsC8qj+b@Nbbby zl$Qr7UXz8J+kp|v4M9$^r~}pvA+Yg&c`j4W+qI1*GJU@2zPiJ3aR?kZ$jyG?^zNU| zjcX*YKrqGRDg+OzehPQ|s;B1-fE)sZ+C+(eN*g$yrb8PS4#y#;u}Qb9eL4{SsijrB zvp2Xg>Z?KYR3J%h3GEkX2z{N7T+*HjArZtYi5ulUp#j_cnfhF3I@TaTRojr^Mp_QnV?#2xod zslfBzM!T;$=lX=rr>H>v zyY4uvrNi32o)pJnsrfRxm__rU0$}gMj(`R;Qa7eieoC%K;|DyMV$`0aGg6^+D(Ut|I5wF>aZio?f5-ehX@3@bpp79_H z(j_vf)ztTj6xABbrk3`QdEP^-4X^K_z@mpYWQRIUb4YEl?_M z7Po!*I#+DUz$hHphn5H^GOJf695zj^+D*>-E&&dqql0?S?|@CM@+3>#TNQjOJ=!6M zflA+>on|S5R71`e`x5J|L%*)~w z_$NP9V-XO`OJV}zYl1n#5eNyWjy4wkYGD9}on}^(4waX@odF0KT5I}b+d2Z%_ZtPw zZ)~qkosebf0C8=$xe#??uf(R6;3o;zn6=I^_mxl~Obba&GnnqB-$>4zGFHU!S{)tZ zeDy5f?xgo=RWWZ(U1pOa+VKV@gG+OZ`!Od8OSX5dd;6{MRmfB3nn$#JkU_fn1T0}} zj0{{%8O~@I4KI*lhhj!Up{M~odsQ8e&%*Lu1Ei~9j!(A{brg98bD8%);t)94Xy3Eb$8W&f`4zIF(Y3dG5jqtATDx`!VIVw!!flY zPo9pe#syGtE0vSo%jOhGoer~)p)4}}_Gj6MurkZHOcFl@Q8gsTowT>b6J zCrHSK+H7c47pyK0K@{(BEtAb=J$Ha zkCZ8tPDm>I^)e-%eQx6DQb0N0PknnE;(~6QrySR0f1b0ya3JpM$D zUKCTH4h4*z_5p>bJC=}I+-}hkEYF`?R8iK-L$gF%-diS=Dq))oB4HADE`wl(FjpQ6{?TuL9yy7aZE z9q?zFx1`y0mM^1dc)@ApJ@IM>pLfbxrqlj)1rn4urK{ZarN5hKo}Xy)hr?42T#r+( zOs#ehXKOo2l>#ByClo5$nB!(^Ev3Rl|~L- zHPzoWZ|@Uv=r0CJyQ*L)VyShW-@&Uc(8&U#jj}XQNi}_nb(lEhVBBCX9NH<9=nPo< zcb}RT+m_KWr=UIl!mOm6Kt>n`2M2i|2IOVXKY$_O!N&-6RHpvb)?P;GApv3h@gx-{ z0?pXsIXfQ3+NPsW75HcT_*Zzbwdyi7B*E(@7A#GQT&(1cGN#v~Hvi+42f_NE zNLrcdCzm54b@~c(p-}NBv(H4)PsP;q40wEaU0?DJ_rmI|3-r_M8Hj#E*~a zp%9=X9^u|c^mEivfWTQcI*=0XNX6QQ+M&K0epvDzOYI>m`UvvM$4%^w9S`GatTT~AjE`O$ScrN$wa$Ex|0!iC+a+`L@NbHO-c8>_n@ucpw zWiz8?VY2t(>DtTM0F%f_;Og|+rbUV1(-(#CnSqy z$kr?5p>SYnwJt0cEa%WjZqU4)9I#sh*YTz1ZvwX+azWEXzI_hpPctrvv(VT*wQ^Bb z%sos!awlX<(+$kOI4*qo@H7z4#@4fi66K~O;00@%a7ta6GsSYf0IP0_q`#^mfeahGEQC6wL59VLOi|HQ?;csOPgt3$7YAmX(EL@( zTt~t0bA4@{ngiVkDfEQ*ELIVs2?v@54W*Y{r)ikeD$UhD*AXVu906noWQ-|Weu4Kb z67Xm)D=LSd{B=wd87tQ%lT+9&XiW)J$>U z{3A^{Br-4Nv^&h%8n7wOtwLvh>o4sEofhG_o5;P`4FsaB4FBSj-hoy$BMnv(psC)1 z?iPav89BmurQVpf-SCq3!^Xu{bA&ZwqI&>6C;y?D6mY5}Gw~v4w?;7y0rL=*PHFL$)%FK7Bo=x=N6d9H#R;YPI8AjBRi)~b}gJl!y%;U_^mKmg4}F3!!uB0m&| z*5D?Q$mNibrR_XZkRh7inOr^btAt276&Zo`WdMTt((kBgnH=uweM#Fr<=zMRTH2*vwc8Z58$xoL>bk;y9s`vyb07ShT2cXJA z$kKt|P$pl_>AEQ^Z|Wd*#$LVJG--M!+Qm$j!w#Mezn6OY1VqrZ-%y2E9Ak7FM1$>r z>;*`z&NtHz1eQaEF8aNOnglK!opCWh5g03|O^fDRydNk)FPm`+MR=nGM61!%yUyu* z+U*pdrv*A7pPer|55y8ikqPycDvoFfHb!s`QDW4PFVS0vf#QY@r0J~X{_>&_k}Se# z3!pr?h2szNHRpw~+q*i?4BWzY9Xvpe^o9_X<0?ZfFx)^nresl7hk(AOhr`_MGzRIO zrpJ;qrOwGOGNQ|?W++Bw?e2^dNc4SnEXDuHri25tb42HdPnJ}Wg|j8)}~UDerU8|e!z_z z+-k(F*)@E*2v|c|qtvRA!N?Z%Y!stFv7!XVsY0hr)p?4Yu0aei0%RDFL05$0dBBc^WJceqa$ve)6LSo~Ynq4?CnORkshylFVU^Xn8QmA6 z)HQFQ6^<1!{dq^hfl1*5hnOJwO){5X+LOBln8=|OuuJPRPml}{^lOttSuoBp91&Hb z#+)q)RxQ5RfC3ynwDogv(BgPWk`h3KW)DB1@t!6+DW)fz*C$eWB3RG&*D6}W6%1gP zV}f}A7|e>z?u+tw8A2r&SqPQektZ!Ah%qCN>rfoGFLs#-qBR9dz=w)0uJ!eHYag8y zL~d)f!MGC4zxRxt25x$H#fw=i?F!{^6PM`31pad5LIWDdzU>|+Ic2upVKa2w@NX+5 zOwZqgI)b<>Ph${uA7}yagMYE93k8Mkqd9thQdu)1ILDskB4Dl<{jy3vL7+1;ly|5B z=Bs!lnq#tked)|ho+Jvn!6K=tSMus7 z+A~Vmm*#&=NQ_=jLh+8a8b|MR4?inTe**FXQ}{vBoLPm(6Yv`r8jO6`3Rf3~2H4BoE8g>PU){3><@rve&Xig* z5A&H<#!yhHkL6KO%HHi`3XcCAlT|A44VbGyS);&5fvi=!1O&D=ijR0-}c2%Yw*TkVuMG0hgDc9=UL-^JIlWTG6I35$#S;~{43S4 zJbRzPaK{61Vy2m}r4xB@7a0&S|_eh<~ zsC_J^bVJUI@yZyCls*+SYpf{LJ;a4pm)U+IE-6`A{QOB70hFuEm$zQ?j1D|H0nk3= z*`RO{(X4}Gcq-0}f^?%#0fFTkE3@oIyO?J`fUXZsJ2Cs7Er>$YCm$*-Qofom2UCm+ zY=4Lgz${(H1%AdJWvAjW%g3-4_`vh(6O5Mhg{kOj@Ik8dFs9t3tMqwXy{DnDG=0zc zaI#RtOs`b1gbED7ju&bRkRpIc&pd4ub%ht#=buvIO=v661U?sA|4CTf48|C(IxIX= zTihOyaxx?8FV3;QuiJhg2ws}n(Dw*?pt{0A)|`$N!$!;Nq=BHWHPnYyPIX_5!x)v@ z13CGoTUz~yZyHq*B}ogageY)CFHlnvwy9!m9xe>8!3Pr~NrS0scH;1X0=AbHn)Zh` z&9XYh3_T-?R=;o@npMigpX>J9Y10Pg!cj}WuQwcKNCI|T70h3 zJh-Ok!u0_N3U%+Ak)c}oAsW0z=Zh8$JEJf)#3&$f4=IK?O<{d0{h&MPYBPAo{(mg1 z6Z9<$HykO4Qg6hp*cup{O6PrQWT{2RVq(u0XA)OyVarlzc6fL_`aFoq@poWwuI^?U z3>(x%=uYd|-E#endHAk>pNesLz@dkF-?woU)Yk189iKHezNk^-Ve%ZeyHDFO0fc+M zhiu$H7b#uqM(Y9_w-_KE)mb90KfN}RmRqF>)|u7rb@#Ou#h4& zJwM8Kgo|uQX$R}9>i?j!O7p|}`#q_6*U`4uG5ECBIs{_Ep~oCldtE-#>PvGKGjl$L z8qzfK`!|i7!esTywUZ$@{6E8)1TGeCK^j3%JOLu_(J2D$gTex-X}){Q!BpJ5#w4Lt zg#I3;cn;-uiPyGxo}mlQjZ~H>55m8gM~&TUu#j(Ry)fZR`qF*wf=zC%NWyUAvyT9 z=^B(&EbQ7|9<*M0?D(D|w)S50T~vqnYeA+j^WkG67FYmPT=hqvB+QCS>9a0iKq+j^ z?&NGeeKUvI)iR2klg$<`#b`}ADG-md+$kLG7{?Sa;aesq=oWb!Q0NN z7JmG`i5W;*XC^AdCyCs0mqcHI)bQrjh8DEbq{-;tar*kR-JC_wJL56}#d1bR2|gZ` z{~iXMwU2tF$MG0l??IWHFwY97=2=KS>KjvSUN2we8h9tstNctn)u}RfG=I z7QujbQRLvl&xB{-$aH27({v~{6cECU4VE&INMaR zUl#cZL2Mah6ykB)VoXiHsv3q^vRm1tzc8AAD3xUorAWD~Xcm`vG1?l>fj0?XYI19g zNblP&6;iCOH8c4h5q^NsPup*~+i4+OkJ@p}(wQyE`78!cF^9BBMKIDMO!nn;XgVK) zxQr-2me#Ah^x9}|5H65vyA|n-2zaZ#r|z}J1umIo@#+MjsWIiko2?NZOgx7OXEbzP z?iBm-BHNI#+ULhthEGPFdGqrdWK%R(c1&4*5-_1`%7azDDL}>@lGSb%W7gOe@0x1& z)I|iEQE}S-Iv5jlP_38|{%``i4>LV)I2NU`j>%CE>s@HlpJEoRGdX}e#M*(U z2k3C#&c}K+FV~m=Xy$`9lr0b1-@Hl&2$K8~IfgV)xz5#mykuU>%2<(T<1${-Pn=>c zFqPjJ_pc+>%S0Zx36LFaIhjcg@YU$PRnLn>1Faftp$=FQMw~h5tn_`G<~K<>VDgj_ z&<_E~H8F$kfZouEqsbc#+6ayE#yE-M@Udhb%x~)s8h`JUyS+pOoRMsMK|<;L5}HK&~kX_hD}~5J}56%lu*G?eZ14A z%B@45Rtq`>sJz4@1A=5MEl;VTwTd*0BMvfYxXutWfy)~Q6E>EzMohYL{7q%(yxgZlej_V1$KoD&YVR>m!I#Cfuy&ABKSeT zbwIr5{#6sZ z93GBQd%n+2Bo$p&vONG{Gg@;s{HmECn*tJY2BLE`h<02US%LjU;*g|dJ&grry2P*_ z2~wF-F#XLPI{7}Y46tSl#2B3z6FAv}`%ES9!Ak$COd!U#Ohe(>{}7a#Tngwh=b~(v zHi?(pXpkstmPmqchpBGX1j^EjB4(P?qxG;Gx{*kZa0Kb@jDN(RJ4mE4U_> zIfpHA>X44eIZFAZu|t91iWm?Q!&c5_<{yF!Hj|40tR-mU{N^b2B3UU??UAlpqKH_b zID0yjZT^lF8G!L#L%@bWRB$=p_4mR0&(w^d`GNJw;8p{eh#j)IG(|ymZ~YOMq7Jrd zer0l}G48-#Vqp0%CoNW7M6)6Yk0!W3fI341;T9wh$dO`fU~V9TDnEsqaAoD` z(CrA<{B4J{G^0gGYv4FRFQHja7x$mH_ww1m?U^vWpAkW0nP5?MrG7mxW@|D4%)GR4 z0K)g`KE>d=Gh|w}MKw>%7V+YUM>}C~x&o40E3mIZfz8 zf_gNzLuIBFgND~hQ%fla#@mFa1*=G)$I5qVMoXsrP9ItmN!E1e4EM_}YNZ4t&0FO6 za7Ef{Yi$ScG6!`oL-#$BfdnR#JQ1K(wr6+arx!8 zv zs2wZ*TrsJCV8rENBB`fZQRF@(y1408lBhtuL=@4poPPWWFtfmCcKL zgh0}=GXK=sD;)8-X!)+ImYqEWH;&BzaftSeq7O#C#Lr?CO{$TSdeYtSJ@P=okTNrVN1ozah(zR?>s6BzRxA8;Cq6~AdfJDzjnDtwj`-0wz26nrB4B*W^k!;s!`9|m48+zKjlD09D4oO_Np$kWU#&Q#T-R5MGer)3C52v|St=rkc`oV0yq}5R zesI}ugTpQl4(Fsh3{w0p`PN6pgj_ht17zmwJt;T-#Xh+IzV=9DIE2S!xGde-k7{jz zbuMK4Xa84E;mn_wkk)6OlxYVPgA;`1(B9?2)WH08`_f$(RmRQ&!YLVU)d*D&!nzzi z&RLLsZR47b728l_VkocHCA`9)wAqXn9&BxKZRyNyXSSF>Mx@d}EDxuOKLM7QmHnkY zY2z0NC^v&|2GSECH8Xl%s7#s#{)_YVh6V*;!AXYdc#76uPg{C+yYoWTNRl^%s}vro zqdTstawWlSTEWL+){L1}n|7$(hTcs`C;?)!4^XWVmcC<3Zm4@4FpX0rW0uE%(QG>f zmMm1>EQKB>PiL3CvnD5tN9$?1myQdWmV)-Q>1#Vsiwtf1H#yttV1T?z2F5zvFHBn9A!E0N z|E$Q321lS`YBmasc_qRx+Q{g`?Z;F$oM7fujK5WPTV`Vui>M7 zaWx}>$^c6v%Zuxwz7-FMrXteWn4ogul-^Vrb2{1vCBPJoeU7(7 zFtG^DsVZqroennXLk)i=!9YDJUrMc=wy;noMm^k>ez<3F(hRl`&SSPbk zJP_vR<_AXc{xaWxAWxG(#up|B^UfAtU~jo)W)Ug3f2Mc=suHGRb41N_JKu~MF(~TH zo)=2KvKHoLGo;3&zVFjyRSscl?rra|ObXm`!RTI4Wdwu8;fOvAT8g6(jGmNNr(0c! zTKY#yCLxz@hp8m{=$}aFHRg=jf27dEb``^$Y^Q)S$-cK45R_l7M07nUWp|Z!Ij9k1 z)I=b=F61}Ut2U_p+^0g>N32r22cknkhuL`IVzJ zX%&e0wg0MmXwRDgq3KCOO7XB)sY1+B#(P7(uedtkQsly?WCGgsXPDQ@IvR;EjHUtT zZqxGvg<+HrBVcZ#Dgdoa=B>C9FR8PTbp}nj3Wa)JCDK@lC3)o{zz$}KM$mOGMmAP)sNDO%AZmhGh^-b$fpx37{0*3 z@3hx*`u0P3Ue~G)(c~lx-pGI)1W~5^QUc3Q+hGS< z41KG@26d5her7zi^ar!@wttprel15~2#V}Zh`Hoa=?J@l53g*GK$F#%leNdx8l> zZK1ngqH0P^L&S@k4D)5+p5WEsVCwUeC_d6D2tvZwhHHqyei0`1V(&Bjfs^fSmH<=p zO0EowK8anBei0A*_>-%8L}VJ)Lou(=nJZl}>aDmjf2p^mq;}lzD5lzIEn3fZ+j9yC z#AeFt>jwb>zS4AZNLLSS#W8u_VL!QJ4za@DIR?p8HtS_hX z(Z;Q&a0_L~a&Ur>zb*TG{LG@54f7leYVEUg@OiR*et$yeK&+bW&n{s&V@jIsRQqAj z@+8%GaF4~^XWHGY5kAmnAzFUjoA(a0ZF1j+$TrhRpn?Ee0Zf?N9=}G(?bU!deV%vN zuXvEhnNaY2%3cp9{&at_ZP28xLOkss-nOC`3}uRTNxRO?z;IVnAB!7qqmI14B?UEf z>$KwvJ+g{e@~d=>3{zd=!v_;r-SLx@qGTfQe#$@>olI+}a|yWLem0O7@;7PSnX__3>h`3YG^DXNvAk<_#O3i!w#z`OUB4U;Du+Qmgr(4 z(F)RZAT)F;MF&RGSs!n#F1I{<9%CWmjEWz}|2qjz1JCEW^q_M zm00fydESq2A(&C!hg^{~9JE6HyZ%p#!^nDX=LFylM};IV(TTHlWGi?(Kas(fdmM|dTD>&+-WYd;bphK+4#H_yWA7U}xwh!QtW`5cm=cDj z9#%Qg{T|nHb|)T&EL`wzFTx8}FH(Noowo}cP^}m8^hX6#uD^6wZ0p8Xo4TPhmU1~f$934i9tk1)ICH!Ebjg0WS1)_EJ1y_q;h3qPK?%N zA;0H%4duoHQAxriD#xfM1n8LkwFxwSYCXVEpsdfiFq-d>Fb2S}wpPVM-y=3Bz7oZi z)v~dks|2kW*NnCXj~H*OEF%Fc>B)Zsqd;80!Sw^z zfY8d$<7kiIQ3WevPaMZv?G_HBjqRefAB|#fokg%a-tWCMxf|TH;8e&#?iY?KP(-2! z&={?ulKzl*wIM4m5_s9J9z%6xv2d6y6opmsKUOSOq%sOGp7z9-xG`Wr^0g&xKw|5B z9i>Mh2SNnzIi*lqU23gVOh@jiK0CcR^H_6q8zKWOzt$TN_y*ACN2`Jj@} z5hf{G5__$=;^A<$e7_>1SbBKLiZ_G1ympk;cvwyc$>|Et)6xZBv3Pz6kx(6Zj#YN4 zg}1t95i2=#3ffh$zV`s#*QJQOu6z(-KOyAcuuA(*+Ju?rYlSj-k}8Wrt(;)JySW$M zasWIl<|Tq64{Jv=M4e`n(w*I2S&v6(I)r;izCIt;B3LUD%NkgOqj1-|RkMiZoQF@CH@|We6)MWs61dbWG48H`PZ>J4DX@$buT8J%W+`qG3?Z4iHqLyepN~`lm)J3qRU3i?}jtg1%ihSzuO7cN6TT1pjN3RU1 zwA6Dx%9mSTBX9ZB{OTn_M{Ko{({bd4*_~=7Ja!JDKU;cFhiz>@6u$^r?eFJLfe6-O zDnqWk=}9@(B&&vnJd8By(KYRJwOYiwOi7a)S+9axSv((xMb*XIsX)g%M90#L(E+uq z$YV|92RBnixrjffG+vgLdsy&D z6JLMr!w-W9McLnfehN;GFh^5KaAsW!ZpQA-Wh~U$a-23SQo0$9AEcj^BFk%sR=EP| z+II-i>U4UV-#vPyO)rg5#3J{Bqmg}5(9@mZD`~M#p*phVUiQyBo~K(^)I<_roE5aF z^R%xl;xKHOE_Mb)LB1LjK&-9~BzhP5&S{g?v;k1Zy|ayT;@nnY@Q>O%Crd$L8z;E&pfhz~>S^~xy@wDZQGO$>a_pzE{lXCf7jbxMP&Z66VG7$p zM3f}V14N+)#Hr+*yvPo8g73AV=Gb_pNC=Ys*W=UrBp^aJv@Bs|iY(H^l@4RjLa+}E zj)a5QU)`u4Z<&Kg@~@pxw7NcA?e`=uC+M4GDT4=l@W^t_Z}Eq&@}WINaSS~ z(OPsvE7NcVK+HQ5lnJg z@2-|xQHVX8hlEClv0TfFkIGU}XwtfByA0)y^C~IxGSu5(Qz+_%_S{u&WWKcNbv-BJ#@v6%HfV+=42+dTCiz7LB zsMYTHbrqF-OIkSEx%|g$T@$9R1)O$`qQTRim_MJ+NcTDT$P16wdfxG*OI8YIq!|(G zwb0A7>tZ!NS9lbZR0rX1hNt;`5~gdtbf2iKLhGF8S>bWK%|MBEO);1wD} zjBvA-`%+lw|HJ&tvCOgIQD#1%6|^=cN(J<^MD z6(RD~@QB7|(NLG3`EAHS$}z>*GsX03*XdbF9~vk=x%tH6BayeKJm&{;Eft$ex$WuI zyK!<|1j`xm#rQ$St6~{gc~n}qimU~AB+7ny!yD>4G-*Aun0xY#yv%ZP@Vbgu^Rigi zr%14-r^R~ryxbDvLtII!@#)fj7|%h(L721#7t8mN7COk{*@J$LDomCGqwYL+bAb^N zqUQW@=e??yeG>wR5nq%~uKrj!A`o$R^L4)^@L_-k$KZWGF?EqDS*;N!o8cSnJdP+hwrWZ+%wbDv&Y`vak--#uObaUG%KMZlvC-9d9ElBGOy7qChZ zt7OJv*Y~Ev%o}pbsNln6$Vb9uyW5i2KqW904uZy?7fKB;U+*8bDLV21X`_Qc<0+7@ zYgX!$#+3OXAqQCpU(M*~P3)$SG*);K9jxvjUWlk&hZ81&h6s6e97MF4@yQEhFBkgV z4DcV;bVKtkrX>-SXAcCWtWXt8i-5ocr9c!24J4FLi3_idTwWbO`1u|8xB(ZSbs{a~ z(s`SL^zn)1icb~%AT*b`Br;TXOCLInQ3)=rl)y8EhJBD5yhhDOu=DZo>HvaVMBw>> zJ|s=YTdHpzj%c!fayC>|NuK7uqESZr;gR$~ZYV>2)c)CztXr?bi1ms^EHk!^jxvnD z|ADDGpUJIQ&Y^9rB6PX!Y>b$iXocOu5lwqG?jhp@;1ai711(6!->*J88(P&NgyoD_ zbQ64DjfCv*VvwMPl~=$)stc<^KPW1QSlhY7s63-kR;el!v2Iob%)Gocc}b!j@v;CR zS-4jgi)G%-)9zZ`& zT5iaE&UB=i5~!QF=+Bt=B$`0S6g2;_Sg}BR7od0~gM~L&eB8{Ydf$UhRcDg3d=)F{ zEcoiV7kt5Jhc%njGQm)bEA8*x1t9lphgSE~&8CC!qCZ}{MT9YO>d%xWqZO|T?WKy8FCr~*SG=pI%lhKs?Adr|nOlWw}{M~sD z23?-%7b;_AbdOTN360xww3r*%#zuB^S{_f5)wC^1H+j@-1Z1x*v8335&hKfyV%hks z8Xg8^XywQ3?{`ia94ud9J>v**4lBPtSTT)D&WDIVfBV;fwn4I>phwlcS-{52LFzi< zz@UikEa&*E!%0~#PNJ;`2e03HZS8^8Lihyjhe9)I>9oJ420GI)WHq_RqNw4j+IQ+9 znDBPHtk}qh6k7PJ zN!x>39<4n2yqi)#YNoE=z)sIz^UBrz%Vcd8>@gX7p$;IE=z9Q0siXhhA>Q+8Q|=KW zYgQ=QOP#K~PU{1GOcN~c7}%$)@*8K9VH|bJg+0%Q`ST53@5-T-)lBly?u$FGkG%ma zcR~xtYI&1Eb7c*#z~svQKy8*R$o3{mKW`I<+ep!u>8naX(7RjEayJl~PX;+_BTjJd zX^ym|Dgf;%3Utp9fIKJDHrNB47qXMxrA<=*xBvng{|7CsSgn_+rB%7sk&Wa&pqo-S zZ$8F7{ecra_}Kn!`i6)ebQCBBoPtFXciYPv)wOwX00`75zF_sRsAROJr;08~VombZ z;}pS*&UK5LCL>X|>fR1op9Ps&tB=`FE7YXh@-%@bn4p1*hsfF#=DudRP^|UR$7VBw z5n={v!x>;qpoYoBVnJuZg&`MODq_XKScOLEa&28J6br_%PtB|x(1=uf7ihq?4uU2| z4yNWmu8?X`8EaF?LoyuXwA=e*v@nh>Ox?l~&7_YXfs=ps6Qx5@hQ|h6^R4#Q9iiH*H1Fal9(2iz?l84*- zP1+mk`?O*;@4^A8pZ3BOPjo|oET|e5g`lj(Rf|}~x61@ITwdu>m;y*b4ssP_`G-); znM~Faj`TYZ)K!rBQ(UF7?QoHFlbp`8%cb%WUnsh;Nz@Jb#e#buaI^~tBUw``W1dZH zVw2zTxC#eszpkBFzM_TFKaxn3udl1O?1%_pHZU--*6wkc9K_u|WP`D!OynGO;;fel zcwq}*_HeZ3w(C_%@5zxd0j7sQ9@h@5>JXCUAWwVOdN;yGI{}?YA8S82l3jtl>n5niM9#qQ5ZtYNAb!LJ@0wa5lN>qe@AO zo#v~F>FAg}(xUAX+m>wJh%Gb)gv@%Sixv-+h8aQB!Z~Y_#}UIpIC`rd{$Z(PgjC|G~NysaHHM*bp#3kWxmjHnm-te5bNtfbD!Gm*r zA@Pl{(~Soc!$&k)5IYtAcDLb%Z3*F<=T8XMQ_3g=-`nq(`{m;@ydJ_|OYvv9-x7Q3 zA8K1>ngYaK-Kcu#u)^PLapl=PsVwPhgzUu@CD%jvUATSwmDg6K!(LCaMzL6_Zj8nV zugO@6_x1U(dlJ|6(|Y}My$-($|Lo>pJu+5QS5#W?t^y{7L-~ii{~AtC#0qz8zFVgk z->hiM<_~eD;c-u?MVH&bCIsI8xDFi0q2ZsCleq#XxIXT^(XBPs{4cET0##X)qPqUa z*U3dHqD#UZbBY%ge=pWI`);8D*cU#u{UA6De$V{l@vv}sK%a=|i}LLl-7q1wJB!1M zH@O2=#G0@|tUJqOr>Er`t{pb#9aA9E_of0 z{oxZ6oyDU@ur%LJoCSyd)JTYsuj~3K#U#>%xKl&Oe(q%aJo!3b;W-z~S7elQ2f5nM z&GJEpJEOguPfoVzAWeh91w#pfXO$i@PR4@n%l7e!N)l})pkYt{k*Rs1y{kn!AzDr% zcETMS_jbjlIA_gjo(?m9^00Q&9^&aylyniN)OlJ?OiYK>;}5i`fk;*L4gF!ieQ9ZV z8|d=)2WLYijpfdBbe!r><$lVtH48uySje%n3!=^|J>PA|RJ+_cuIGK%^i^MS$x^rE8U zx;7KwAmMyghZ8Gzf6e6>Ifwmp#B?Cu@`saCp2|ki5y5fR_bZZ#6db$B&O17aGQ)}T z$QFm~5DZZJ4RJrKnca~XnK0RZ6dZ)96k5u=T&^ag$O2hit&8}OcGF3Olg;|Hc;4?} zGBaF#c9>Ll%v6g!Y{|g7Z3P>Fq;bZ~Fz#&N>}54Sol{ejB-Kpz1owwDYa~A8+5?dN zJaD8oU8btiOE=Equ-p?EAw9{i)!Zrb!~7X=+HDmT>#-NAs@tZ-lRo-G3Bv=IM~2gE zPZ>sYoi8~D88bjK`vI_j*qt2a&PZpJbnA)NovEQshzhq2Z6qh1o6M# z{upF^p0fNXWh>7OTL*_nkC({8aqA%@)Ip^F!Hj_=1c)>Z8;7RFTuJCDI11q<G`LUd(hbg*xrXOIz`pWah9#)fzSSoJ_EpZTS zaJTtunNmnm26d* zFAJ{ki#~+$fFsXAltKLLv>PeUpNf)>DZASr94D)B6w+{7a*)0{-|}9`y zVU?ZGv5X?@z0cg$e4MHDi%Fkt#?}jR*qC-EW{l}e-J2AYSDz5Sg{K5$VI<5 z00=<8>m1IHkp0KVy2}(+D^_43tdh;pND+AfTh=(p^sZ`k`(AJmDpRpo+S)o?8-(!~ z8H+10l0ND6EyTDLD>`}Nu73H9DcV9w@2zsYsF=1|?xNU4CUJP^7w09%*%zVG=y$&d48e{htVYn)v$LV!f!(m?jlfkUO{H>Je2sjmATWx#Mngp^4P z3?HZ6IEcg>!jdGgVuFG%c0Ve=*sm-s(?6h1T`Wr@B4qWr7q#~uA0PLR`<3UFMXa(t zB%`-C5wZGh2}<_!h2tp9S8}@?tK}b2Ef*e|Rd4QvzHtIYKZv6D`!1gY>U*pGBfp}$ znU5h6kRf#tH#)gTpo5Ur*Q2PJ7**bT+U<77hgF*Tz(uSDRR=B6#vG(aHJvOEfwPeW zm$1S-r1nr&W+0h(KNbXsC>6JUa^Uue6MiZr-Z}tfsnx+ zBwWOTf$_0FUN06&={+W@B`&U0=^+X=VN&zexy;E}M6CQ~hQi@}q@GiipM%w@9+~@C z$!F-CcK4woGP?F``B*GgV1&_eaZ1A7L7XGc*9)=xG_9GrKCV=jY)jpEprEB&(Ltag zJ{}LB0wFPow1MbyoIg^67k-el!a>V!bm5n+1Bl9Q1@>?fV*l#;tX|(-OVM$&wb6+TH z53c1_Rgldl979zTvYLN#HpKw&aB)7(No=DL8HF@QEb(`gWjRO#r4IUFBb+xbxOz^j zU{U-TQ}GWOw+Rt)3g-Jz9z_kaWq+%ZvtpIhCzg29McXWHu-b?C2;rX3W#CHI=VJXu z$QWUJ+05CH?88Oyp8w!W!&wN8ON#Q9qTGrp6wp`)k*65Z)QZKe>b~9qVRu>ysgh9r zSj5{-3$?st@L(0XyF@&TYq0WE+}+nmokhifp$q>2jeCkQ31vSBD`mKCoL!PY4Bl0= zP*I*GO%3?Y^}R3CLBQ}?rZUD2ucVXx(_%w65-m35uZifuMJ!sjU1crnjU0tN=ql(E z?`|E?d=vD7U5cqXN)hefoT5xuATbUdbkUwhzsg46FF-3H}`%n4g<&-3x>j%ygc$z8?T%cvATBeS* zmXh9=63=_^d8_BZ*%V9*OlH!pk-M_BJDDV#G7imJHLk)2CG`Oeo_hr=RtDgd38xTS z>{gK#3&{O-dI09L8k}o&=LfL9v%~5jBIGJ$u8IKmP;}rj7AAg>Nb#WAl)?=8H7*S`=4!1pL$e%7eDXJJ4J!(0oqG%q#VS2o4hJm}DMMY1PbdTTe&5 z^hvO?;r)i1NbG^cyE##XN69(ekVyU{nW`pv)^T>PSBqGE1-3_*FM>;0P3lLDr(9hQ zNM3-II_sPLxoj3dMWhDgRB&jvNT6jz&swqaVf$(DL#U)fEMm=-kp^^;14tab<4R({ zn?k5EFcPd;vGnzih?Z7Iho(FsuYZ3!hMK1zi&!!~ldacVos+J$j@U+;PzvBO&v>TX zU0p;k+o&@QWu`F3*djh7;QUv!^{BB8gT%jbR+)>p6pA)vl`fiwyAu~gtIzpKo=V09 zK)mJ#Hgn>FSq{?p{1F^PmH!~RgU32Zl*_%LY$N%2P0@x57nlvMLPF3prV)Ep8KOvK zvKEv7IPNFFg2OT!nkAF2Ktf}n!#|oCjd*3nn!LzFN$1@f=clq6GZrnKW48(wpwfOT zyZ|};&8)Esoim$w#}ieZixCImwRsaih?=aJ^Mi@v)dtE^bJ8iWAx!N_qudL> z(xY;DL=6yVB6xRRQF1Tv!7|oarYl-eX|S2Lq{g`C`EConkWS6Dl4kI*ybtg!VjWLZ zbrPgjEbJ8=iOAU(Kop+O5FjGTib-6{5eG?>bVk)j?l{W+L`%92r9mdEC&(%l@?`Eb zX>lztM4E3&Rs0Z-?iJw&SZ8eNz(GOgI+t*efXPFa&wV9D*&o5tLVzfbj71k61SZ5m zO3?x0K=3&Sp>icoDCuIeU*b@cqMDl1LF7ebGAb(=p#LhPSG3s=e*_za0g6@Y9^50& zuM>4xF0WXTMa5)A-~%3h(CVx*Y^XRmteWX1`5+MoQ7%d__sF29UT+*kx-BH;uH^=n zkrfL_A=IQCj>Y=P2dOV*CT=8f77%L|x zI>Fr*bhZWzZmxz7QdTjOswNQ!QJBR$idZJxc2#}S?Hkv8@3Z4jg_$?;gTUDjLKT8M z-Hf0Gn}|#$&z~rjMC}%gZUtI#PK)*K=IeeRo~a*R$bP?kep>ScJJv*37p!%0Ra`Ii}DC^slga=V^CIm)(!1p`AYTZU@KdiQ+4_qfCnU4(f1ug^QqMjV;nJaw=X zE9y8QK#28YRRGRVnFQ#KH>Gx^;jIXXeFJ#FFRQMI3~e-YbT?mmBEt ze2|J@MKHPdm5-Q68{hTw%!v@P+J8Sj1t-VJ=UpkIxI!hp4j^Sd z+PI>zPUcTO+`TLr(+me8MG-5*WT`VBwiyZxoezP3p8Ws-AOJ~3K~(bjM2q4Fi_^|S z{p>|h%?pWCJ|<7u9!pgdej2WxPmVmQDBo_7^E~HteYkquN0OB+k{n(_j4Z#;pF$~& zW^#8WKFBmaCls-;JB4@GL7bd1q8N(Gotjb61`M}%?x;dBX(UGUt$OqU5UpLvagbsV zM$AF{$PdEurE`kig`HBJz9HZO-tli*VU%TQboyzrd;Ypg^bXnniyE99BM(=H_2NV| zyzDem(z|VsfrK%)9PVBeqCydC8W7BRWBqize>`jDk}XY{$_s1>SJ~H&& zMO!;V5)rE+t1uCgX5JD9>4XpLn}c-ccbtPLovp%A=;v$m%Iir{jk;JpaggV~ zX-%1SZnQdn4Mi(>iO~TnmF8Rk^M!c($E!KV2+R4-Wg?dA54xvf@I?_zX2DH32-zyF zSdpX9A8=z^1ElLhVtnF$J}FWh5)Q%vvMPGgi)@6lQS?j==W}y%R5^j7CRz~ep8t;< ztwK18-zT%`mxSQZ7;V= zp%v*yNzsNe0OVPoW6#2^4$*P9_k>MX$5JYDY;r!bzZd$5@J4S6)d<-p2ssGaI&7;o zwQSwGh=b6oykTKh;pT03RU=|e*vyOPBs^?)dq%`!`6MFBPB*LA%o{1`lKNSR>9CIm zI;aPbg)~ZcaUJR%5$|x_Iwb+CGGJqj%!PY|=8{O5P|`ip;q218vwop7o^*u=a1)DI zew8P^ShQgPDa*be1mpunsglm}N;)ScpEK-?qcCY@$+A|gO=Vpy=xJp`fL!GaGLbiM zvEI$^c)JS$VZX&z<(ianS!*TS>^xknkiHmJ40mO?XFaqci>xyY1*xaXX7RX*7n zAlOZ6X?bUdP!lvD=3>#zn+-pVM6AS$Mb%L~=X{XCjaUL8PFfE&{2e&g>-pVdf({cn z#VA^fJl@T(uNO&q)7Z8Z14OwuV1Z#_sgQR9&zm!qP3QD@CcuPP1WoLt$1QQXf7=OnS zM`4nap0Q$O7CUK;DLBaE2t+JV1kDj0fC6FCC6PO@c9EemRFlwn;buQX*(0I4Gv9V| z6dJk;N_wv7PZDZ!*e4vMq@=Ua1S_@^v5ZB>NX)#cf$CGpL4>&QQVcaI2fa&TvD%Le z+5^NT%Xz35@EG>5BK@h(8`x#Y(e(n`?LG?E3a*b!Bly6so1JhFCMhkM4K)Ebj^Z;5 zeLV2U_=hY0+Wz}qO5asTxn+f5v^XDxFPMyjFr|pqzo0YA>1Sr)0d==U8HMGVi8M+W zNTYc(M#Dm8UJ~M~6>5S#&Ai+yrGd(=1?tr>U=3RlJ2 zmXvf!8|cHiKZx2}Oo#QP#|?CF7|h=z6*>qlwpGk|f^)H0Owo0Vo<1u?EHr(bOUWV|?v7Rf zSWSXLNvFkdws=(|Mf1SAGy4)S?;5o^FM^s0m@k#c)VidQEbL|ObG?lu9fLflPICoG z!*CpQC(BAYt4IeCLUFFD2~}7qxtVv!e2_%M!kYE9v-Gi}kSPD|c9*ujd$)oiI7RXf~4=YBNL#k44aWX-(tlB-Gk1B9%I#SCT?8U@H80#@t?q4H|w zylBJLJ^Ml85XJ0AXg1uvZ7fzFrxRGIlu%M^a5QWrZUap#I>}Yk#mane6go&F&%N2@ zPx^ywGQCw;F6EYcr$Z6z%!64`0f}wG=X{W+y>9zq-vHLICpEhctcjeX=h#M7ggf$s zhVt9*Gy<`7ac@a?w^}^qtu3%Y_MXv^+8riZ)fEN4WErJ=fQs12*A)S zKq?29scNDMcRwBC!g1N+)l3qsC=h}}fFmnnX?S1Fk1^6gqV9v``kKO%E|hcM=t`QPw@?UHc$Liti^fDOS*fd>2QaGc9@pkwFsgPGl3}m`gXBXMlBbMV$ zQT!lNj5tU|g?nDKA?`3Gf)y3PSVM=q=R~XlBv#_hPc&2hji$;PO&jR&j6zA}QI-!@ ztV@`R?LLtALIZ%?hiC?d>YKI;6o7`$gvLg_B0!SpIacmJmzsG+s0mbbn2P-%m0JWo z0A#RJE-~}cl7<#lcPFB#Ny0(WkENN-k#&o0G?jFP1<1U}f`cF8`fo2Mi*+9GUUZnM ziZx+54#GByNQopTU73_=yIB1>+#LtmH=(36X|Lc+*`Ix;MvrD2dQhz2R4r+ zkQGcEmHu%y=$RQ{RNeifv&nbrWd*r7&p~Ka;Wz?4HEobBPQN-xEjqZpo7Z?cHP- zaBE{8p^9fh3qpd{`}OJ5*;L3Ka?JT9V-S_t|{cqyl599Jl8J# zm391hM~9ZJ-z*JQ6lH(5`O>4(*wBxU+bt2#2mZIqgWuD}oNL7yTPuPd-xdC9M+?U)}c=@~*z zDM1?Ed?D@88jDz7e7t(Ago47~jeyZwjs(|k%5CP^{_?on?GA?@4u`|;@Z+5yom1zW z^fC((97H4(h8*Nn(~Tv>)#sbfM}FOizmN0d@$>xn`6&K`7yoV^{yB;-`Oo7IiMu`@ zKcD~RKmRPgNq#E+<8$;y^i}-1%w6+&^8H-AkN=(gJ|3g@&EroT(|=3T0G-l$WIh$GMf4emk1_gsAs=9NF`a0SsjSH@Es9uaELK(f15XID{#?)x6$G^S z`#`k)JXr@6loUFsab3--ieQ+#{D)6}JM4V@@f@X5l5;d~xu^;I`zG#D$YZe-9`sy3 z4l7=iDX!!{oYMa|dJmA^E4{-}el+_Sn)#;crBx$vwC1o`E1yNB4{)m9?vy@9`EOc| zEzO#+#P3Dq2jNz%xzfyg7O`IZ`6tE|QT}M=EIvIDQ-}8`%)H)Jh!4^ISR`*Oo;^_) z2a0{tldP%OiuIBdj$25IHbj2+q&^mn3#vy&)rDn?iUkb;NU3O}%;NvxFA(3bxC;&c z$KgM6Hqn12ALQMN#ec=Eo8#O0C-}YMAvFH8q32hL-&~3iPY|D`=NqF-Je)>Dp_}+Y zOw5DD|Fb!NDi%!QQ75yDZ;k#q@$-^@DIYffwaMLb{w^L-v<%dVCKFBI%&eoYSv-*Q zGtR#`RzhXlv&Hp3;&-s+3n@vi=$wz4}2H-rW^9awMNr^G@G}#L`F-f1N znReAVe`1q7ESY&Sb($Yw@{{61rc=s(a6`}6=8U5F5t0 z2|Yi5<1FsH1~pdO+1N`~EbJs^Rd(L?u0CbDg|WpI#v<17q%uyOqj>?&{Xv*y;m@0q zZ6sdyE7E+R1I;BQX8)!NA+G!|T8y5cXWFM_qZ`cw;fy=U{HgRCx+w(Z&~yg0{G;+< zX|JVf)3&xovON6K8XRs(pNaAyPi_j?Tc6_5~HsErYQlZ z9AuSkdPy@?MOiFj#VNN7M$g#=v|Kq(LWmoQNVX}GSfyPoPZJ4UM8rdD2#rOuTJkoU znA+$@+3TIrIz6lQzv-swm5pMctom8i4Jc~hQG#p|i-o!N2TY}dKw92I@J7x-I_b=y z=@RZ3i=`{lt-k-Akq_A7hN~BlYk$Bb97JRk#<5sws{;j9C=N}Ur$bFD$}=1}lSxON zeR@U^$=$u7(zx#pE#Oej2J}ZvrMEG8Ik8Pnj-qv+&oV+R=BD<=niI`47|E;^u4Q7R!|N_ zEH^dt$`>@XVr{pFMI@b^JB=0dY8cI_#+8(;N2d+QM#{t*@u+sZqS=3Syl9;cmakJ* zG`r9uypk4df`crol=PT`92XguM?)RNZ$O{Wf~KQjAM4@naW~uVpJ>KL69a^hVjE~y zOh+#DC}gd+)*j(hXsUe^a>I${WHPFf&Dw)iQBv_7i+aun@#c9?Ix82ihDeh?4^$}W zelv=1lP3V3MJ!!E$oBJtOyfnv<)9iuNinTvfwWX&jRic4TUZKU%Dly~#Z|_Ug+s2i2na@3Lg&kS8 zX}VRd<4{qekrJIgR3)0WG@2W~|65%G+^`f#aHky8j+4k-K%joqUKPmtu0*Di`=A&V zioRP5&Vl;;(u)G>xq5m z8qZ^F#mbli6R|>O=KUd7cVFvPELQf%ZE~=AY!TR;w&dU60x3hpK7F}|F0WXrrJ7?>PN&9I0%2sh=X{7 zqfoS8Weg;D6dv6?qfpM37+dM;vE~VROP#|EH31K%Rj|*<>ho?U$XkC&dyftO- z7ubL!;UFKAfV?shizlqO9|U)Mq@@4;*ri~Vn}(e}qTQoS;;;V^9o>nD6&`uQltGL8 zl7^Z{eh|tBCHV^jqvUlHlrLvsZ50lRL^@mjJh-VX4F)w#Vv>27Fuw(bzCYz3fvr)1 zr2e$+s;-0Rb+I4`HCbn)k2y#mN{CZA5)0}9xg2hn(|5bl1A%l@$H z?%MpVMHh4$hM@#RnJ^F-#1ttci#S>NePC7qgg`ANoJv*512v!{P##u{VPVut;FJvE zfG`~dd4QUNn&5_rG`o>M)HSIpW~?;SBraZkZ_+RCnI9wu$d%{^x%$1jqp)c-ZdC=hcOBSs7L5=3kD~PeGCd|$YLJPLFaZ?fkQL|Of0t)j$+#AKg9jGV}f^$WZ z326B#2=W`>9E1le%H>;?hz%ZRo*qH`C%Df);sNOQ zH}Qu-a)$b^BvL(z8jmkYe=nXSe2|`%UY=Z=f0B+!xFkMDcxL*c^m#rQ@j3bD>4W88 z-75pnzs2W?_f+5LUiwU%n0!#ug~^Mqv!CmrL`M%&4&u44no+1Z3K<7^_vI>E&6lh9 ze|M~$3$a)|RK!AXKfV7F9ar)3W%0<9@LjD9w1ASUL)$WzkMMS1uCo99J5C||B0P$nuRK>7h4zSN?bH|TW%vNuXV3p;=cnJ#*m=pYv-E?6?;`3+R^|E2`@dYTdnH}4Vqw$!l%9K>{r&0F-=BW_ z^xNN`{@xu^>y}d0MEE=IQOLKCTnC{mg|ng!>;L`4kFTG;evSY7^z~DEeC7X%zl9&^ z2lBbu3Hd#~Ca0(O`I?==zQ3lw7H%MXE`OLkoBi|a*L)DF>3TT_S!%X|F8e!r8OM(4E`NHBL9lN}UKd;mqjQVfIkMc1k|Bk=Y zuk?TEd+|>(9(b7FC>|ew$>g3+GV(BeW_oV)Bb2UXQulqICQcYIUW8p&V zFm*%38zptILjL}bk1iWQ2vq}3>XA6q0Z6SH%wcv-D7@MOSJKxv6n{u+^I}@GVQmgq zWgO(s-yU3kZ~hgsdO`8O($6AFOAgjfi~o%O9VUHglh5Ll-T0FDgD{NG;^!xqWRFVj zko-P50p-)vXT~GT2AJQ7Uy+QBtv`PzAG4Q@G=3-kx0~EL9(sCC{05=;r1Y(__lo}o z(U<3@17+t%|Kh*FZ@16Y0#pHFOyG9Rm-RpnduZvB->!iyq6SVV` zTT`$iryjmtrn7D*^)#;)-cx18OpXhapI#QMNa$wk93Ww$q_4FgthHDzBbR6kO%mw| za_8+ZjculY4F7HnvybF51Vo#q3yclXe1Ydgq{|5dc%_;P`Rm^@cfKFEu)iSf$^y-zxH2?*&g z=)1bR9-}3id1c8I7p2>>;GF*|XySP3{8rC=$6@bVld7-o!SJJ(dgWQaYgNV~Ltcb;|SU16qT7oYN zR^$`z9+T-_8`9C^4pZF$q#CUZ2`6mj;^uD6Pzrh~Vs!%$?4P!=+5p;$NTQ#Q^`-~1Hqhou0{3a@(LxS#Rm4HC2eb^W zq^on2?>2c|tdxV8at!K!4?Dq;A*=n-CXT|upn9(bGcRv{FcvEoF(-op1R;;b z(tUqfsEO3XbFJ?(H#e3d7G4THV|CIV6FUThnOBT@Pm4Bi9mG^wF$k_2>mbnV+Q9&V zsfZN>H&myUKs58ddl8%E=tXkZK_+71msh1L8Wj-gTR69%dvh6%-cEzx=K+!$@iCW5J3kq?KB2Y`bC(tz_vzy!7?;r8127XV#Ny7pljKR z^)aigXcVz-uFM>y+d@^f0Ma_O38hDM8!l@i5;8V(lqFg!=k_M6vUG{YDS*MYsBYfJ zrHaL_$!K1$$PW?(k`-$JVGD+L6pB?%g1F9A<|vHYK(kn^pn!!0NeKY&)f{LBQU&7^ z4umrhmGre(!Az`Ymi0;J(Yz)(BCbC>Al8R=6lx;YT2#`LP?HBaaDm8AyRlHxFGZ73 z9*vfCjj49dvuBZxG49ohC3Q7atKH=s1WGta_)7vLQPQu)&U0yj-F03#F5@62?ZMW9 zh}DDUHaIUa4-NVsC^1GNSW&f7-v9ZrwEaQELEa^0e};nk&^kyeVg)(};R#cmgM9q< zTvYLur`&$~k83GkSd9)#%rwwG;-GB4${Rwm8l6CcrB952nsTdK=mVk4trBXomaJF= z2f+?@JCmgW&^a&0WC(zWGQ+jd270Y0OdXjc9n!*a1uf9lNilu-0bTVyfi{*4%Ndi! zDH=Qygyf}X29UE7fCR?2B#CP`8ZjH)IleI)}qAnRW0avR7wa6RiF zPy`TY@rD%VDm)TDNI+DFiF-w3+y**z6s`?zZG*P*K`{HWodeU^MWsTJU~XDLAC$jE zxrusHJTI5a&1SQVzSxiDa(W&JCxnPa_6Kp}KAG37F15)I(tWTZ6n;FaU`5HB#Fg|g z(Lr8HT2ZW3fRIrev3*B8JmIJOivo}!X1~MKY?NGNx*$6>KNpc$kF2DF{b3QiE6=s*Xtw3V#*pI5wXazlv;a@02x9Fp>>czTHeHp1>-RDLZ+%K z(>kazv>@C)t7^hKOx;U!8)$&a0isZZNM97E&<}@y8A(289kcm)KRFyGlf`*HgXjY= zx8;@?mc(xq!sk-CFw%G|XhG!8UI&QrE$E5>03ZNKL_t(DkSdaU($}V*tLuBQ4Ya9! zT+nttNX1^zjY3VJMi>#Lg9IWc2m~elL(D-~>Cu<9v4v|qw-!1G?AftUj{RcKzWJ~6 zU+&M4@9m%(b|ZS7Pd2_livD!JOZ9fWfMj%^dHj^gelkf0an^{J&*qGsFyUYMXeNtt zqeD+3mQ_XENNQ43ZdJQV@RBI$v4|zd#0OF=mfPtjUSb(^x-*tTB@Pl4bCCOj&R#)g z#quP6p{(n9TjB6$g4WDUU83Z(nELt^n>&t>93`RxwA9W&0R<4)ki(gj=f3Iy@fS|R zVq0}P&wx<0VNG^j&2*5&*1rynO1j%FO;+R~PP18Rh%T{DdO!f=n3w%2?y0#h=OB3Y z?V!QGPl;PTWd}Jx5Em!IrJJ4Pix3zN9<-CEpc<&yGtTN@_;3yu>9kEb2;_QDBSW=r z#Uk~PyhkCkVy%N4x_{`)yVnwGQpkqnTQn_+B~LKtT=d@Y6vbgs}wm1 zO%AxI1dtg5O1g7wV8Y$1@VZ+d=AYysCp~%_=rQ_tHhh5KAd509R{Cn$n4um%Ko;l8 zl-sq^$2V<%0IH)J2GBdB5lP=Q2 zb4wytfxQYE>L5_qj}R=;Au78dTd@rOBtc34m=tZG&=Dv(>1HS2p*9CeG_{^ zkD{4_NayXy+n*h)L>CeuP->usEE)|219gQQ$7Dsb`*=m6CP8M*k2y$c<~4?zFh`*- zv(^re0)xf{Eh_1x{oIzR#`STWABJU)EO%p8Fd7aCYrRz%9uT5zm#9VFu)Ftf9R z9n?@OgB2^3BP%f^O}w{pm%&n=PAKUNAg1DPlFr~s4eG3yGt)sq{WMk5sS-4rlJ5R6 zM)R(dd=O2R>noJs9w1O4PeDZx=jUhQCow}`G7jQ?y9!j+p)^5|MJzJ5V^awr5Q=^Z zDDY8Gdp=5ZX#$84e}!n!&{wn2PGczLAQU`+uzO@chi3Bt?D3}C@l=?wx=>E>ygi}exvXu}jTD2fo(*G#*qvsu_bbzeI*u3$2 z(mP1HCU$iiATb!OK3uzTe~^p^825lfe|1hYGcR@zE>F95-0TuBF63o*L+GNwv;Y{fFv`epzz>^F#Wh5Y=(;qY{LV#g#qqW?r6 zM&Ek?Y3rsWG=J`dY=ADY`QJGi?SmoI$!};5yR|@{a}Zb+Q;otx{b*H8T)BwaMTTCOUz0;0PUq*2_hEYWb0EFEXcO@ z(w(cGhy``b^`$Zdl!clEVqGlv$Mc%jRD$4H5V4v|{ZRQFDrPKf`Rs-Q$qTDQU`U`l*Cwol88033_IpF24D@xc?p)&Ahpi9zBVa z|CXVx>;p7FG7&4g1yZiQsu8Ayvrs*h>h4sjzn5>B4)VcNa)3wky7GgdO?W`5skWbB zMPdoC%*@NX+{QT>*Wa#8ebPlMRv|z%FUBSWDS0EK*6dR;2Siu#SCDcnfbd|lASLuy z$U&kQ51|1}~ACW$ER#P?xw4Z}n=iEUYW93iv73bE#T7|KuXNQtwo3>+kZ4;g1Xg^H;h6hNe$ zbV$n-rAG_^CA5`0RnZAyw%g5S(QTc)cvxEFD7mm;_OAc+OchgJ=lfjVqcGwi&w)Wn zzmEXY9s{YMqi3}0c$S4K1T&lE7_rpehF&2+et(Q7koPDwsvtqmLENIjsC)dK2L*AV zAb4&Nh&)1$uRN4iX99bEWub_bbmE@-R2HFAv7!~7FeSdxZa&*ZU*a*J>kAqwT>Hc3 zwDPz9>NGtpW(h>vi0bW-IyRXKaz|OI z#1e0zhM?ONASMnHXF)~3ol+t5PSq-c8bJI+#L5cOO_}3AJy!hNU&?C(5t})0dVKufMTg0g_;g>otk++y}!Q+=&Y*ezaG7iG$qt@+CVk#QVtNBWk99K1Jm!( zb3cAJI6~IX-yU2}TX1xFhpEg7qR;r+Xy#34M04~d6b@z&bynsh(v&Bs5I^e~ zgB&29iGxg!@xqfq!c(`TSYt&Ii%C*cFyv~d%ogqlgW8FeN6~oXIW9e23XmJ3@NyvN zAQ2J#dA}Ak^Mr}8e>{Kx=whFGxkC1Wl0HmVR@eRg>R!<&;_v6@PmgKo9hrly)gq)k zn%AVHryN4H)2?PNfE?&e^jv0VAf=<9WD_Skw}cx!7qJNHJjDr9WRRkNM$bd6w4lX0 z2;iKGBs*ig0i>IPDKB{v34+=f3!KM7ZC-KJ0-*>5AG7fd zVCwC;PdZUlfmJMF2+5A*pEu7eQzjviJ1=EhaXJRju&4bhWo2`u1j+P=!IUPe#&hMwA9Rlu<(4KsRn|p~`Emqvh zAa^Y8*Gpzhnm9;om!e!PO96%~K;N7)8G&t5frDfs)|%@2k@W}39R2QZKdv|x2P}*51X}aNXh~XhHZZk^N=6!UtV7B?_YwKXi}o%<@xIUj|VrE-?@?=P?Bu!3`xwq zp>ZeB%Em3jvZ}1YzjYhc!4ajihyc%oCsF8TV9-I({Y(eTS7snYMxifo5Gq|Uu_Wi& z!9_WjdR+fpqXMw znaCORL<<-Nkb{tzPFFPvDgR0In=r2~Y!4HoqmT=bM79?XM#fCS$7*F?qRT@ts!4kL z1Fepn$nyan+`s?%^ZOs)|6t#Y2EKoL_sOl(ZmZ>Ea1IhpjvI#V@wek|>2dt%=2OF* zZIOs&4#O(-q;rFWrhP`@M?|5Kj4@-b0pOw*fI(Rz(!HHfazNvZP$cqvcmoGMb}Mh2V~9^A)J$d?%} zK)OP3zCAKSUj&iRMHXt#{-Kv(~r(HdXC&Bd3JV3Q& zI&A{9wvd$;XCt7DF$cLPRgZMmsTOQyENr9>E_2!rY2oLBYEm(3% zl^P7Bkb}rgJl858NtJZjPCQ1mz;IS9v_CBgcV8Q_|AWGm+axBpf(rUsDQJQeiR~O| zheuEMB~HDth=Y87*wC79O;Vu%!pyj&1#1z?Ef)XRi?ctR!FWB_}rOh2i}js+D_n4w8yko;5%g4%FTc2@&gw7O?zts2CwA z32WnG?#ew*i*yi8n^d&MHDy?dm2@P?42Oe53nCWuj1rVM2;ED>tb;&WH|MUR0-9&3 zvwv&~mGn4g#0(Jj^T|&A;f1>D?M9>y;vQF|9H$~=L)M1Ojv4->=g1_|rXtqbP}1op z=OFbn1-l25wI5_yR_K2G_Odpm5-I>eLdc3B67H*+Xf~quNp!aH6(!xHbdZNa9fW3G zPVHr;;T-eMhXM&^nrk2 zp<>+`7bYD9jU0rIz|P82e;>UL;(0c~ineZD>URx^+`7!N@tOVX5NoJ8N;i{MpSRoTMWgbTts59=m$~xw)^nzUSl9@sdB^m z<wmfE4*b49}e*){|-p4zhSMDIg;40}wj;9fneatzv-aR;+i=H|xOAE-&dz zTvEwwaPi6tAOlNToHM~O=OAKHF`?3;T(lv#jN}}Iu)-YXN7sepjtd34L zB71-^<4`TDh;wImchu^u0ud%7odgCB0-l)kE_0Bpo1E#d35=|-{`?3-Cwo|U3Y{t( zr)^+Z&JGWEPYbtdbw}f%(Py6C52nGhT7kQT5H)e@W_9CcUPy(z-sQ3m8mw5NnRm7! z_1ua|dYorvKj&D;K_~$$BsP8Bh;=LHY?X>w2oeYJ+z&+QQMv5T)wj{>=rCA5NVRO680EJ?g2i0e=U5Rrp`SxK+zC`?mX z>%_a;aFCN5iq(hH@#~R_PqH2l;7}r#aUtRH(;t}?Yn{d`24Y>O_0^9t10(~yGj0sW z)zcroKHtan#BS79o_raC;Q9GeadCH^cOJ=97#`1)&$nKfD>*E2jS!+v@wNyCE0*H0 zphT>6a;tHW?b0pF#70XUgvd1^^lCu8_UT^r@;D1CB|SB)habP+-vn#5ZroakG6ZgdcT=6X^ddIFHMPn9ex1IRoq5CtB8@Oryy09Gt0vzk87-;Qr0 zRx{B`kbvE<&o4n>ZiRaF{%=zO3{?NCH_c%`-4mgNm;s`4km$Cb&5pu~39X;I0tk!Z z)dFyVa)X>vInh~E5wRkG{PxE^5yP8oXu+=9SqO(zlm+-N)mn-~ajW z;lqy)?B@se^Phiy|NXDuSed!fI%`;BETa;h5+ETF$u&nTQ_@dq@30~fYxQvSbtdw; zhCj**AgoxI{`L!P1al?p7-$j8IIGNN7_HcUq80lmUacShL<{$Wt=aE?MeuOP?IINH z+up?-5Y2e>b^UmKeeJTZ$7}ZgqzYr@JQa|Ii10IQ#^O52gw$d^p*1ERiF}Z95i1ha z9%&X*m4FcKQeNglv;k%Sp^Ih}8j*{wSg|6)$^o*)x^_QCU(xaL;o+M74c_>;2apQ* z1py=$wb)nkSJti>%%T%*yUTl{XB4c5GqMIB3GGn;LAm%MQM4fs#WDh9;<#i%k*Qmm zDC{`Mc0*jbCpn0KA|!Q?M5_ZMIkQ>jtHuA$7R|Nl{XS+TePqLj0+`D!xhzas5Oh62l3qlo+TZUeV zh;^DV)HDUR!&i5m0B zw=$`68l{Nul2i{QT+L68!a;OF>5v(*3;rGfI^rM^wiV*19EDOC2paq# zkN|`#_(w%mS81UM9TG`X5eo(!5qK8XKl9dF>`d1yWalCl#X(XDiKt9{s|YGY3&4qB zFd_lMT9mN#3{t(G0#;MhZ8=E9x3cb=NdV5BPel<(n!K|x0R)P)5KDaYx`$S}(qzSg z+CpOI{0Qq`05Y$anm|*<;Sdri67o|yKo%t;)+PDC-1LayA`j9`%a zP}zn^M`5ju*$dImO#m4_tfT`(Av!`Msfc;Z)D9q|l0M6evrlysm2@>_WSt9MYXTtt zE{ldDYp$@mJ6K_M3;@~aHQ!c8B`t>tcUMig1+iGo_fNPWfLzLEfK_^l!u))<*iR0( zx693DdODr_rEH#L>#Pyd%FRQmmV_4&1pY*Hx#cOTNuzZtns)`6vkZu`JN|Z3O~#@D za(dWNEJQL=lg)pWy1TT9g`S1!u*@!g-`v2ukv&9!0PT5z09Tc-TG-)L=-^ zA)p)>nmbta8f&12AO(<>Qo)_7ZoP5R(z;|-D7pNa-o$C+dR}1z9aq?9s1_cag)~&s zpPY~a&R&LINY(U`^FhcN;5o(6maaHXk=+@X2lNp_0D9eAHQ0#i(|JfMbRv~=cP9ax z2<4ivJvjCAlN=po ze$G^a)X%tcg!({+%8DUeM8u&YDx?aCT`+M15Ul-dXorb(I?_*#cjm- z7O(HIT#nD|P&hFeiFw^cAbS*+43R53_EYH4&D=w>^6p9!p&T9FODSU#X4MMEy&k*o z%sCIc3H0%FDyP(!Wh`BW@_ldw0PN|o*mQ^0ZD1ST%sIIsoHLk?i*R-) zEtr`6aVB*f@ud!BiRWZ9+Su7ppM#`o(44MMm)AwSBXhY@cz}2IN$!T|6=x%~Dt!%M zEIK<}%%@6a2+6$={D-Pw6+ghHqwl{Hn9l_tO7Bd%TyMs>ICw?&$v9Re;YQ-FlabqY%+L(h- zR*JlS1LqQC|CH(e=X^I`9LNsA1ufV*wbeowEW_yS+&c%)tM#5x@^L#QE7}TYK|`0@ z)#uMsa{0NdT`K)SZt$z=^yF{LT-CIhS2e`bPgvTPkHP{D0z`)s@y=jOX!p0K{@KNa z<7$Ecx&@c?3@AC3M+r=vO{cMBqp@+5ETrIgQeu(7BR6J16 zN-zg)QL2SA1dUIJhVw$Zs*T4&Yz~tevaHL8#*Gg$){GWPI(JymEMym2(P0q>@sO4Z@w;FaCyj9D2u2QvE_^3x1-kSSs5@62!bhTlo?> z=F%$+tq8Kit2e(v}^?$mvgd+%ftpq@( zZm1b1kj|T3h8~uRqKX2qDZ8Rm=lUbEK^^NovS#IsfpK?o2cX5fY}v4Dpje3n^tGq$fQE7B8-POXlQe z{pce-#mr)F?@Xa4IIhjGO`>A82ppj{K_`O+tJ0>}!-OF()3zwa$8zQrS`#pw6y0Dt z3stMNNyM7E`V62)Rsh;=EC`Xx2MI&WlY+yuNl?nB7-t4k-{$dWk)!YuqOxjH*CqnU z=@?p@vn$8JK%YiBo41H0?WLK*SBr?E+`>nMI5)~^{=_9Cr;HqgAS^QK-9I}}w*P3+ zB7US{gkr=#q2T!2C5qe*UDB3yaEZckvzAhBvD8*N1V;F~!6^cWw1*7N)w;ibh`Yne zK;OJCt+^{qYK&cw`>cQ1h4dw8F8iaI%Ba9wKSC2?NnRPzNNs{*n<%Q)THKCML=nz4 zHEVho!sDGOyYO{xs?YLMDVf239Dlv+y z>0}m$G}_s7&j;yvnj99?mJsQ^bLqV3m`o0b$*i;*G0xH}*w5&a!(omnF)5hb^5bwD zpE)^1_nu4oKWm9SKb(9&pO;0nB@i8^Ry(y#+pE&l`MX6zsl!yc%ijpl79+7bijEV` z?k3CW>9ks{PM;6^`7A^?(HEpBURk9`ej6dl-7TIrQ&y(&w7H#}qsv2X`aoi6an=Z{ zqh|j?4nn>rNAg(v(j=UaY&)(<*n1L@1HhM2ot3~yBs95vi3+l zHVsS68xa+T4d(-eeG$k~x@s?vv_)MuFGLVQ5^RaDQ^Jbn-3{j;{;Y^o!ssZw?k$8J zJL}<`u74pu(1 zp1-sco69X83`5ZN2%cCKeQj>4VdW8{hK|zl2=(E-iNDCx_ynjBop|?&j*dMnBlbrw zf_IX8cO72m|AMSgRSetoIzWxM}49VMW;T65HHVwYrN-NbpJ$N#U?5(S)as zgz=%o2#e`}xTL?66>=V{9#UDssQ4xpdoFsFx&;nR66J6uY+)c2(B9mItR!BXug=2Y zr&I_&z<8*j?JFVG(K$f2dmM~UUA-pqv1l8S; z-offBlJUzzK|AaV9zE{ikcO^tfE+qdv}}qs;0X9Ew73UhSCmncm~5GEY}{1>iBFpY z4+Gnf!Ox$=-q#IVw}BKAMN;g~kpfGxPeS|^A|#v91GaUSauX#h!TnSr;dUSPKOKF_ zv5>ZPb+YWq(!l&CV66Na=yj5dgJWHgfmKq@Kq}NlTFt^&zd^+b$WEHOe~}vc+tJSK z0o?+`d`w?Dzym1`@u ze6l5F{PG;7M$!E8IpgtH^9mJz=2GFv*SRY2SpbOMHoV#DbdrLOZ-D7i1*xE-v*w`1 z(I3$H%D1{NQ%BMj$;kq1##rR2rx8_Z%>w|#y=2|;Nmve%`N_Vrca}@|iZ`ev0mjK| z?7!{Cm5~H(0nxgwOgFAuZsncX)pz$7Sz!w_Lb&x|_DY=mVM_@helPix_2vXe1&?g; zTclNNhOTx10uU}NYV)ql+)9B%%=Bek`vMVqNT`f^0XYHN}Dp>oQ zpCMkVkp!!qdQbqeI^w0jR=;WpG!HPSehG9u)e%A*SkTc|5%-w0+D36uruEA~_e;^m zv$6nxC+q0guImR{ql*p%?t0y-#Ckk+)ljHohU&ifcP?4*>Rr42M(y3}PxrIXLEc$j z-n>xO&Y|8rR@(#Ok}FbqBxrXg&b|te1A47h$AZ$`7i<=*yL|_$Qe2D*$dwMTQ7GD; z&tA5d5Lhjv<8Cpz-AviBxqaH7cdQCnG3S6rV1}w)%?(5ZEl{giD%KH7#bWbygoY3r zKvuGq=>UiqgdWEVeN8I&8!~CioxyQ7bJMbVx+SIOwK4s&eWP-oLg|S8xNDBwMivB5 zDkNhqrC|3HUQs3kOCH!i+S@a(CbfU^GFkD>L+w5&3y=NG40OIlIeFYo4v+(4XRiT- zf?HQgg}!#G78W5PvsMNQZJbl-d3klk8aT5Rv?^*4&=2Q+A^@_2uv^lDW>Yg3i42J5 z?a&F%Iu8vsG8+13p;yDF2^MEJRVLb}p%VcR-n+6daAZb^F{&XYO0tzgU=qY&=y$1X z*D{N1*pRBh;x%B1DL^5zSpdiqYnOnqkc~myf1$QK0JZ4{>fS?Fo@}&8$iB4JMb#b+ zwx?M}QKI!ou(}olywyx^pCv?R#<$l19m`CZf0sXS2g$6rneRznwaShcWUqvVu z2Y}f6!E0k)`;)PtpG(d219g<~_B;$yLrKTnceUMV0_jg91s&?xv;bNN4FQSEo8DOh z3RHUAMjrY)^f@*g33LQl%X`EoimA}*K?I0@7eYJFhoU_mYR0sJS6h#0VkQAuM+e&z zy#|KY?ykZfg{!t~d#x!pR_g&Mwaa#-a*}m)khb0n`=O$iUdN!Bz+iON!+~DkcpBi< zBjtZ-1c<*2p~W@`a5-x~gyi7$-0)(|!RbJ;V;Eu&0G#_qfNY--uqjoWRB!+_POy@s z)j+@+aJ`{bJhguzT)-~U>^f2Jg)-c+68B0=dl?}9(Jo5}^6*wD6SpC6xFEZrpPfHyK2 z+a7Mb(I|0Sh!a%W`6>W8g%$EltA_fOUEEpi0=Q^mtNT=V1AFxq;hk*@0J6Qql1Z;A ztHA4CH>i>TimwQe!yVYkOvOz>3IMVRtKAlwlF{3NZ%`S_HV3FRn{%|zL0DU#wUoc0 zCpx)Ec)V5b8&dWq+Ffe^xed*&LZD{WXQdcsy!^?BdUl9c!a877i%~85CfscO5`b)X zWqovj7MGwDQx;ZBY?G2;2)d~9P<*YVITGm)1th`%dL8mJp?S!xl-{?-sKm1y2Hlr9$p@a$UvWV?*c#7;(4C!Z$|SHjo1 zEcU2)gGT|iV8i8Lec=fPLIH#o03r|q29D6B?e@Y+0tT51&@OyKmJL7%6P5uWo6t0+ zm9?I>NC967mflEp#78)_1PF7dHxBA;kA&!Y;+IHjR>IO-r@4VRIPSN$06A$Q7Icml zi_{1-H&uU?V)dZ!hGU=FwwqIEQCI~4+3t;6dM{l1Nwv5Pu#*KeLTBW)8i^NO={K8T0_w*CVbL&ZLrwUIq|< zyKyh+-SJgWeTBDx;RcRYA|zha%7F))?bffrLAKik!pPu(}|c;Ck?c=$dzpZFx(3wG2}iuJGOs6TyCoag!|LS6Vi+po9#uhiz0~x$1%Uv z)F$kCdfS^MXR)mVkkbqsxdox}n_4>o(CU{s5K^#vvk+9*(Cl`4^a^5oupiRydwVeW z&`SZbJ%pWGOIlPE+R))`YY~maYBsDlq?NN1*bc}yG{(iUFa zP#b9Rqqo2-)!ZuqWHmz=&9+r-(qB^+M7tpZ*v)K@U^40%iV;?|0m7?f;kW}jTadfE z*qX6N-5cdczS>wrY>IPEd=vR|UxS1oa0Bqa)mAPkAc| z+4;-%mQI=7bh>Q@knL@F8G1+8))N{YSmBv?@#Nd}L;D|op@r8DAY{Gww=Hj6<9W+j zuQyH3-L^SE{EFFyzqXWtZyQ2CriG?Y=90+l)B-@ZQ;3U^!sSfnC6_*_Ju&#|cAKs? zvCIgt*|xz!SjfrS(J>w1#Stftcf2Jh&d$kcx7#)Vl6XVLT>u6LUcm9opuePuOb5~} z4!{>|zikU3{vE<=nxfG?4qJOFj_?&p|Nd~v)i61n89vT_YXFHWzIV7wzBLW&e+$41 z+IL!=uifFWX9~I%J}d#UJpqoC0LBtZ(uS^#zZ9hoh0pWhFxeI6fYboUc7t!G-ZwR% z_xG|+LAJjm943>)0yo=s0kS>Bg|gl-GA12gq91%!*zWAr7KiBAFSl(2WcyURL&Yzn zc;GJy?TflM?j{jFCev;E04c7NRg2o;jg)?gcf#>ZAVm0>Og7st0OBu-YQ9%!H1%e) z`lS#%s-59{m>jC$qY6M+a!66@DO>7?_P~N8Uyiq9Tss1u4^NZHa@!F=cvplXx^F=3 zZ(QX~jBE6IR2^M(N7 zwSb^|Bn)Vzd6Q&b4+}Z(C$;fW7a;z=dL9$hBt$Eh5mumi+hAjWZh zcDJvIkGcS1g&Z8DTc7m1&gfP1y239^Ex)SV8j7W<{cMS?_r83C%SFpr z=-qDn2gr6a!y1*X!R9wm2RE%{Wu_yzXjr^OHK)@6-fXiS0wB!X3oSqce&NL%*{$If zE(YN4v>gT@k*Xd7jDpCpDn#Ferq@CJ78J7Zw?hFWQq|!V^Yb?lT{wSc-#BST;SB-8 z6cMb}#t=H3k+91!b6JG%5oA#)>MSyJm1B3?pf?q>5{3U2{%rlF;0f@gH zCqN=ivt^jL$X%A0ix9n9!5O2AyINS-ERHy1BBbNJb0y` zz{?*fT*4+$`HpyAc0tRX03=dHSZz6gq*UBEuyP5A{Z&|P`_Xx`LpPM%5kR*7a`(E7 zP58@`D2x{!5j_0uWdVdk1hHk>!o~{#7rs-z@e0vq#i~w4KX;wMqf3B95V@U)n3c}L zk?hCN&l6s&KnJ6k>)e%q&a6XtbPEu!i^PRj`Vm)b{PosNMr&E$pdTuMOV}qme{`hc zBF+!1PARx!fNcHg!b60<<{B)hw8K46%n*aipt6fq1{plyyzx6G;BEoJM}L~k&~ibc zMdeY)4*cpA2sC&v^i2`&rrXXBXWPT!Kg|$FNgLg15YXw%TuQ5n?vxOO$*B+8?FArA zUq9#RROX7;U5a90A~ArL*Z0kI)rFlhwOPggnlD%VP;O5Ei6FAt&qBwEU$t1XhEBJ! zvIe_taFDTv5p-X>yWJO;8&F_syqfJ#eUWW{0AU!}+yM{M0z;R=WImw6azGV&1rd$V z2LXaN6m7NkT-$eQefTjofItzzeS&wq)u8_h0m2eSHv5?uY7oikHr+Fz-315GdvbOm zxHV=yePg34f}s^_w$*b1^1Tf>$uQorJZ*b~NACdPd}OiXQWk*Zame-y=xU#YbT zR4{4*l=BTx3gf8{sqSQK3sG2MexTZ(Uu9jO{1;F(8+@}&z=1H|Z~P%>br68?koe_( z2RyHe+a+=%1$thSy`7esL7a52pkpjpJ}PDXlH73_nfD;@Yb$crq2Ivn2OcRzC++-_ zuRK7B)5UIam<~m!g8_soB&*G04k2QBr$d6jSc);?a>%d%&2|O_WDc69A+Zp+?2?R7 ziOrQtr=^uUpn&@&rYfG6>Ug{Tav0VzI6&gJ_WjM%V#gIQ%+#^A6crJiZ%q#>CC9cJbAE#`?>~69=`P+V#@-cA`!AG(= zOzt>L5+4Z^?Lwee#RiKYcgQoiOfnW!!yr^5$^kPl+AvZB^-+cvs9?tfP2I{q;n0BH z{JekKocuA+<|qJ?!eqLPa5A6GqS*=!{&whC)~In#??W1c4&&7gmIs4m#lB!RzuO;{ zr}8kSBj&U|U=X+g=13s^gx{i{ywY*P!VR~h2TAV3RggPeDkU~J) z-C1#J>yKSX+GM-i(CCDwmVmBfsEF2&>y4Q2-}%4i{}A|JBhZJ1P4nFt#!*V!1q1{R z^}hmG*!F)10U-vF786$U+_>z42|ycd61+5`0&Cn)4F-3)%w-jla~+>H2L+EFVw!yZ z(ztegcJ;6qD0x>*hmo?lB^}o(D{HmndHsEO?8#%0osn`V>)4IYGz!9F5T9Wh`29A? z0*uc%JjNzA+&DJw#5aumua=g*_v7rbXO~dmjoEpiTum;L2m4hh2F)l7oC{%`y9lDGfV*Rf(O;TG z%n(o_vB;4HPq!}kDX@ZmkC&^5aBknt8QDcPQA)tFGX%k5^X5VV1bi}oICtZN9m#gQ zzYRj+S68s;!?Rl;M+e-QV+%oxFroHhTTPJ(5g0a^2Kus`9geONAyb0`6aXluCPpX& zy<+6WS7$w@v;N2mu&6W&T1 z$Z&F=0D_-SiwUD97uduF{l}vPR|3N+XrQ=|*x{YWeV$pxg(on`wJ>E{3+3|~xv&Xe zDD&etx66u>Ln|!6&$Id4a{vN5EBG;hvAViUsqc-W$-zj5p!i)z81srEu#M9+7T@s5 zH1OS&u9`?NHcedt{mPS;;60MwD)Fmb4?%c$a_u4^>!`nn?Cu$x_-m|=Uu-n-qGHRg z1QFp@nN&Q+iVTnf^0~A;LmM%h3Sw;N zzV<`*Qvd}!d~Qd3#cSE4gMJ&Psj-1POmdQZ!Iy$lOIYF#!EVB= z=H-nZ0XLh!O!>a&gJJ0ZvEMfBm^@&Td7@Fuh2P>{^|dUa?~2D$RG9fmnl2{7A3D;$ z<=gHN`)$k`cHaDtr=*bq*h6+s;pIgwu7pA*J8l^$l|iyqCAB7Sh1YU-QesXj_Wnb* z7p|-IuixJ&f|;3T5ETfVkCvHcpB2YUxKV0SyC16#i<@uc)Tim7itHTZ%sUlSai2pI zy*m!E6M~t^&!Z?srrv~BAQ>DjFQ&>*aKpY1lyIIdK1U6s9^)yWX}`?$%sSQzLc$Qf zl8u6BOKK7plX2n-Tu{@VRJs1C;caL^)EWkPq-rMBXvi;K$}mD16t}5 zc-N!fz%-tFnrQ z1b=i!L0)x>!4wn*u&omx;-XPd@Dn;ACB=S`ak&^?hfJlNgC;Q`IYk~al(L%;DxCHw z34I&pcQeh`)1$-3IC4TCiM%V6^q0%cg^AIm!aWFP3I~dqjIu<>yOV`S>++ zsre_2Ah*fkw;O04$NM00I;qDafEtYxV|b6j5t}8V0UE3FJmX{Z)XwzCenb<`>Fk)o z;<`TERxEnLCkhGh`g?y+Bfo*OgOhhf5uHQy>W23S#%sDFo!N>wnYW?|i$n$g;g%Yf zj18%04@7*^sZVI%{SJ;SKgmpOVJ1?Lh75HTn)(Mj4K93omN8TrdueK>Rok{Amb)5z zNrd33k`r>mhlfnbZzB66Hi`rY!#*k3f>Mp$4SL6}B}Tm`@mCY>wu9E|*XVZGuZ0QZ&Z##^U>i(!(C%obXO+;z&9Z}0 zSm|R3KT-Qn22q}U;1j?8oO(VsCa|e!96yM(L;z%7Xb4d@Q}kGOHTn;av2e^T`D%`e zQNAK+KHl~beCH{0LU?QGpi#pZN3Cb4eBdRAn(1hze44 zP%*Zm#=**6J_v&J>fLw{WPUrGLFs0xVj`-hZbu*PoUl%3CLkC5dtXpdVQ-M-J5Eb+ z2!0FtU~otu^pX|1QZ-uB>mfB})J26VUA?+~HEQY8FvFI_bHgDyl$e0r^!*vK$WR#! zq1TY`{p%;`P4KX07)BjP`7Xy=btfVs)XwtXA(9m~5={8K_;6Y+?hoH+b1%6WB^e*=n|wj8?d}m3QDes|eaWg3+oWvqk~mp? zW2e0}^cBBMb>H`!w@k_2Baqj}bqAyd(zTQ%)p|s6<>r!ADD=PjOb8Y84KspcYxv#N zzZRTZM^vUfc*bcreVyBwIh>G#f2PP;h63U}YneEKBNOMs#P(2sw5So4{1A{^esc1` zAdBjbx=PCsZ+4^|_ z?hY>`0n(^SwN67k%w8hLynDx?I#p6;K9vbl`{G*yd?BONJXnD`{#rm-vX_Z;(Y_mb zG*Wg24i&g88D;!W3FdxmvX{*ZqVI@4Za$uEI;&}+xfYgB09uo-edNc~Rq=_4?DaGb z*aDibv*DIuOgluNc zQK)2M-Kll+*yuP$fpn9Bi!h;mxGa#Z>C{STrHd_^G%hIJof zSZKuG#I#Wz7sgHM4d>+?ud_(a2WH^^C1-=1HH6e@A3S8fOoPQujBX{sj3&dIAXSX% zRi`e&YxVx}ayl8C#6$`t{PeyC!1u{nw(ufRH+euD@j4w4rF--J*sv{%rzn-_$cM2| z!i-L=j7xZAHN!(@e=&x^JmGhDp;DPer-h*0ZvOW|F~RQt`3>(cO{6m3V24o(T)jOv zb8$8M%&TJ#`SSi+FnxdON8$B!T_4g<7^>hCj0IS64sPs>F?5bqOU>!%b8Dgs*y^=}O zY>x|TM#&n;APSHDlT!_vL6tQ;0+dauiBz!UqH3;i6D!Gz7qVm4p)-d)&3WdB-va+k zo-PaQ1K-~+mm_ZSCBTV6R81t?-Yk4XkmiD>=jjiN`1CP84{;}b+r(rkHKwU(V=Q?*cE ztnMMJl;(xt8ClAyoca#rgbov2d&VTJE|oI7VZHS{_wmjt)TIfHY0MXfK3~pd$H)qd z1AY12kEK6;dqf4H4yhqU7|@Z>`%{~AULqz+lRR;VWjb`yB;YEL&}JE-^qAyzcY{I` zrV-2q1v^GbDsqD7Wi(3i;(Tl3b<;zkHV_<_Q84HkE5B=T2pMy_xRwQ9I7jC&O7-6wKQJ!T{LorGzWD+J`mQM!2~zJ=Slmp zMM1D_3qU1G?78L@EBjh~^2=&mflZDg1N@YpDE5X_#8j5VgG9wQ;}4|TR{Y4@;C>5U zHc0_YN>N8)ZuJ?(due1`KjLlMEH>WPEBIJK(KR;->idFRFQob9Xbchvk`5nOxZC*A zbT)KKDJD~6-;e3#*r~AIU%Du}hS-au?m?YyM~}pbma9LY2Rqx0vofM|=V1Ka|30>T ztG`FF=e9(?@JR8v4f1hHdF}Mg*Az3~wZ?@lYwg(|VFP%oX*0m|CQ?nAZfbFrIWmRu zGJ{UCc4n*?zWvz_?q7K2glD_)kdDlLGTKet?mmF$e_1BDih?oU%Pl+U+Q0Dpw%0p*nHrI3wM0!; z$%BmSBmOx5QU9aI!EXUwcia9<63HTZHZh;p4BBO_YNcHpc6wVn$8?tE%$$1x8&P;50J;h8)6^-JR=0!pe>XgCP=ng*Xj zM+vMvye>WlP1v2QcZ7t9%?pa+LR`#x*aAFXhC}BuKZ}8A#uX*dx!O8*lYtqM|L^Wo zbuK&6NPwW=ON|-s*Ej%`+@~1Qhl#mjWKN}OJJ5jxt_;wIR-RST#DSx6Zx~`B_H!jt z{$wZF;Ng7D#8^mQoWIoRm_;eMQq>T7H3)>w4WnhqdNDHUr=c z=IAMLI^uJ%+Toj~+uV*#uTG=DNu;sVZDgTM>W$nox!@lBL;L@rQ8(*!jEVnLjsB2K)s zlEMzCkz8+Ld{pjkXKu<Wx^lmp6Re2Wom$e-l}{|ND5$B$?2AZm^ytYca>iJrwV*1!9jJvkJxup zQ1Yk-B(K8km`eZT3xHyGE>X|{|3rV6pTL;6>YqR^L{=)_!FW)~J{{x!OEZrZ0swym z0TnsI8w$HGBnBR#oQm@l7QVPt9Q}pr-gEJRd`B20Y}4(x=DsgJEMFxG_H*K$k_tJQ z*z8w0Qt`(HGAF;GA`9RLw}RRxtu#kFk12RZhu5+LdPl%)_F~$4jqgF!@RTU{!377E z`!uUy!DGl&HoW$xMthV^h@LNr3_j3mF*FE?kxX5;d_t+fT(wx78^cajJ4_(hvp6fp z89GSjj0Um+Z!3&=C*(m}rd`=`KZOLaKe%!iuZ3p@A5)KOH-mLUXy{|7DrZv2M|g@r zW1eHZhb9+9F?p{_)@AZD;bCwCg1`E(wS6GHUKV?h9Gyj4nw=3}C>!t|qw3DM8sNp$ zs?pt>+cL={fN-8*p=^k1(e}YtB_6)~9L+N5ny7fznu!wmYF-^^ZH5nqoMc@TVZ@Hu zoJa$g&--5j-_nc-g<$u4!+xOUm#nuJ&qVkGxgVsE964IQF=IR8hq$lWKb6HouG{1x z@~S6|SRNNTE+OKac@isXgiM5=zewD)UP`^)QH!W0R|vJU9(7?}_)7OzUNFPI_dE&j zDNkf{h=~r@0_SJsyig}M)FVOo=CISZRCL{*4$+W+1=}5QxCuTc;__v=r3%eooat}Q zaF$sqB&6|`mA}|5e{4lMs7Ob)BX^5)Er4feda2U}t`3iZq!5`zCVi)+zEV3@bij^A zR}%=8^q@ewdw*?kDV-uZ+d#Ir;tDjwgXo*o@ZIO}^gRl0TvQypg5*IzR{;Z3uBK2g z)pUcX7);h_niC(-hkDHnB8`MC&&`aBgh-@r&V)>#x+XwgSx_eS!t49Hl4w%$oa!E>G1KQUn6| zPlzQupP;z2ddV^fhV#O37y-}X68{lnlbbr+Zs!AW*Er!m}AgqSPL{I z-SVU=SMvSQ<+j&l z$0X=?<+Q&$P+n{cT!s}J)+RD)>khRkD?O^`A1jima4am~2KS-EIQUn1f7Q)|zD0PV zxsTY{*0>Di{GfshF!w`NU6se^l?X3K#Pp|`QSUCw&?&>UlwVin(yPa_tu4P89;v4U z`ujcYn^Mbl=t)dA4HU{HrJ%ZY#X&0c$I+n_9jAsM5=@*~DQ5-1Qt3vxAAs~CGHc!V zpj2YaXJX=Ou?A~{EjwY*JTRLzcjLxd>kHl^7AvjDXgC-*EerIt&G0wHgS_6ZM}+<| zQ5m1BGJ)sR%9S92QzgN%*=}RR~--z^l7t%l%Hif!A zX*|Bgd#+PiG){hZwHO$zFl^~vXdj7=Du19vs@%jM!PYM6UfCrgMk4CU3USVGG@liDe;}fM2rA*br-z`>K3>H9MR?Q-E))gk=@#El`)|zcEqq5*&Nkc?4nP zLS3{V*4iCT$}IUgq&)%}{AzH%pezk@EGM{vM5JLU@WBN&HfUJzaY2SK7MDRk)t@>A zK~rkc8xQL9gX5J{tg4&Og~dUCPdsv4Lkc3o_mfHp9q*8A=H}k&=Bh4yu1ORKzi4GM zT569`6{M;EQ+3CcoDT(|m)xy48Jdk+)nthz*!KWx!TE=su%?D>-h0nH3i73mQU&pT zaTa7)18R)EruGIhA-0sFi*tuh%IPOX$E@x;UTTV_SxYqj=!3){h;iN8y$$O@%zV=g zqfjj*aBs#BMSzn`n`ERlWKJ#C{IX@wLj%yoTRHZc3;EVijQzR^dbHnWY{5aYCe2{x z1mLIYaxD$d4oa4t8YSS-mWCdAt-3hP?XnLSy$BRtvoYC7juUB`M$NS7BBMog$X6wS z9!+$&4el0@G_uv4_8^CGVp&)C*Y(pzD=Xy$q}ZyKc|__cf&U#9?8rDWewFAg1#N(E zIIDB`ALl}VU4ZxkTn7!U)DtooP*X&n^t!K@-&e8~GkcXS*X@x=?8DT*fbY(^r&76@ zD^vq9VHSbEMp`gRsXvvOV=sE2%36wwm#Wc_e7z|#pVARgaf}-Mg$!-<=A_`d{p zY&?rsD9lLWN$08UPT)B|`Vql8Ch|JvWJxdV?u4&11C?I#BtO7HjK(=00YSH~0}Klp zX_P8h@??^Z;O>n=u$)4*61|;a^2i%arSjl&B!%94KE@33h=l}w9@*703)y{2Cz{1}gU~0P z+_4$(A$?}!0IK7U^va3B#KssycT2Dz{aCnup`G&gCq2c6&NZH;xnulAvJU=;Ya-qi zpPkphCs5SpP;IZ~6q;lFa1A=QU{?eLhZ#o^BBA%2zgQ^WeA@YpPI(Aq-E?j=ORlm% zuPR<6L4*-eTM#6CnYmpzYv!*BrE3k#SbK%U(f1L_A_|^ga~?7D)+v)7Dr8CWq82v* z72lN{WhD9##geklK5Yd5&P2D^j^)Zp9Uck)rs$o=``L*3k;ihU`7N;=3 zF9x97X%m_(lPy&ax(uEum1|R4W}u~&5rsdE7nM84RHG>@oc5Gf2qaQ}C*DKjxW57_ zP&%@yDM)TgnOVabmyunX(e(r?Xv1_($KaiDV8S_UIX);Ysf0>o zg(%gk18YvwUW6DOyL3;zTrQvYoP==yiHT<(1gW|Zt$XI>H##I6u`5Is7<&4N$>^in zlCElT-`c_S=NT?L)lZamzf+#92@s0q{N_){eP2&o?kQKMNiEf|8sX=%QnGSf!4*=e zqRB4H9HP1}#Wx(Q;%X$VAym_7)}XsIdR4FPSd(d2DnZ?Zo;;Rf~w5r8?@V!eLP9MladNWAky$I zG@^yC=19)^zmGymolZFQF{W!6on)jNYPj;`qBZMIBeU5qUn076g4so)S}Bo%m}#ya(X3*S_9jG$N@2G|V4Ka$~tVu>XebNn|Z2k3XqFTPj@;fw)HUNC<;7 zbR(_JtgMua$l2ZtXV(Ij`I zKmXV^99WljakEG~atOZ0NWSsg%CfTn4jou-i(w}fV&^LLSj0+bwpG%tHsGb8 zn{c|L>v3fzJ6Iq7OpS#lgL{Q4xiLXx(ls(;meOE^vB_t}1}Q1CW7tsV=2?N5s(i!l zTX=Q&JO5)HzdA*To8KQ{vo8hE;q1hO8d>K6D;k&W2Ky@D`xaHDgeu)(L{Ut-`U^zk2}DVl0u?#9r=xLF)Ep+~;QMQgc9N z92qPUPWVQoIzKFOTdo^$i_Zlw`b9fDHW(lR3FEEd%1WNo$!>T~;VQbJuEGN^o!jH7 z%uYpV6=thsyC?NXNk|6|>~B>swK_BiRNglYN#K7fMbjS%rT%qnO3~bf=@Br<9F4Iu zFiQiDpw3&uZK)hx8x>K_9r4(jZf$k0XV{Bqu2_ZEX3+s*^*(+wU(inU3I=wx>Vp)X z638|=0H?O|+>1}DL|k(GH)lt0K}U|^Po@qY277BZg|j@5p=_2U@v^m$@L{2*l15K1 za0w1oHHaO&4x%meNTd`|U-;H=`tM>^rr5EA9Wt;(2~aVQJ3H9o$GqW!Lv6R88A{mH zao19jG+ef7n0pK>A+8g9@|;Mik!_%@|$Vo6!KdT@IrU&hExr5~jsoH46D;h20kXM<6NX-CZR zi{ri(d8ifTIiJCYLn=2iSDKC6mR2y4*v=aC1=<{k4w424tD2!OAUgB`xiB;yB4o{X zCkZk3eelq?V>DBG2|dA&s7ESFyq6jop=`2vDrWS89uaHx%`d5nm-g<}Amw#?(4J>I zX9Ua)1r|5xNv$D_8C9UV8Kv0z54gAOXh-}I2#{}H(g0nW7T5Gp}eZf zq`xc*k%VfwfP}px(#;WazBaUmN&j;f;6d9!9?q#LLlg;p8MRgeC(`IookiS9ZiSgz zgOV~SjLOM~`9xEbXcQ8!v#3>G*7~3sL)OkJ_dQe7F$|A9_H>}VMbcHg6(>=2h=hA3 z3(oXP%3hzC*S+E!j4GMUhinA5oxf-M!nf2lTq3#4P}!KQegu!SK#a7fpNhrUt|~3M z6H}12ej>71kqyHny$#iKMs7Caz~DEn`FOk|K-!i;&4orS@oSZb1Huv9vNHX-ADoFK~?NP1qV z{)j5+L zFW?T)bwp{uo`2zBeVK>Gqc=`5NADaewhbYoh+AoSUp+jooi5x+{z?221YSY7CEwh5 zn|^MFkfhsO=F#Cs1|QBF3Gr2eEt^Pdnlv$yfMr62J-Q$wi$sCXh>&5H#*~pRnP>0U zYFLqbVSD?_C53Izj_L8d824xoXZ;ZV%N(olxRjI>AT*?*0dgu%1ieY?VF9TEsj5kP zyd_spSVsrU7oH&WgG@V`tEd2YZGZ#B3U%D>%}kXy5agAR=z^U~8QI6O3d_Kq!8&f# zmL}pYPR0*mb#Ve z2v{mHWJ|V2prs>w;aX(n?MpL~mwzeQMO}?9-{e9Ld0pVY7>%7?Qv{831V5XLLA+k@ z9$TKrXiA@FM8bjl(*5+T^lDf?pt?c%rA*RiAAsEe_6w5!{+@Ia>@+oRG z74?a!ox)@gm_kHIz_%Mm0l=Lqw$WpsY3WPb1T7N;0?`&In-(;W48v=;<1K zy&yHUh0M3Bv2p2BY+4P+Mh?DwD~z@02X79*-Hq}Ym$Ro?3!(=ga${gbVsKPk`v_bSu##rCtwlN)aBj7uHsEb zVom3~a^BrGQ=nx0CyB1}Yh{td#Jq6Is;`d1=j~#IElgqobx4cPe4rL?9ybAB2|5%> z90PLxk9W8!t(x0@Ut9xx+ofn@|E@Zd)CpN z9AO~pjg^vFRb+~N1Cx5?!lzSZ60C~$5DAHkB7?<+V&eoX zSs0xFh(AYacPWjRfYOztsd-IgJn(rYo}36s4y?XCPW58vNe1ilmDDMW&RT zaoeeV4^`VVgyCo&(5{QaA)q!uZmS)$QJa1nwO5Epb;I!g34|*`RfTQn?74*1HW!}x z^`QQ14ttbZ6&XZxxh|ZQo1h+8z%2@*nd}64LkTmw8_x_U32RUwL~J)L?PaFX9t-esZVccAqz+>S6TNCv|7R+@dg*QNHJMnj=g!^`gRJZ)qZg{;e+>$d5OKSc*k;x5J1SOPc9XnBzsA zIiS%qSw)>z&Vu+x-h%?b!$_ty1W=QMgcmQ8RN8^LbW0*UuOz$9?BsT{_TcNBdZEAQ zio*G4fIIVKS%xrqMY}hTe5jZ6ZWnp^xptIV>#mVEw+kpTut5e}+CnE11rH=dChX)B ztLKBfLI$RN-jo95S}re*DuprU27PMjWt`gzPZmRA!HO-EAp6RTED;R}TdHs~WfYnF zTS7yB!TxFY*97Y~beZU=&xNGjXFL(nwf}X|nG^bg6yW#Z4Sgv)xU5QlJ{q_ih6}Rj zL9>b-sDVQKT-B*q-+C(XH5b$vytEJ204LTXw{N06BON{(`+|$r;k-jcRrkw`6Q1M2I)pG_CtFwru+?TBD>i8Jxs{;x; z6B|ar?vD7rkviT5MnWV$raMjz-kc5sz$AgTX)k}^=(F)9--u)knh&Xy*^5I5H<@XI zuZl!S;UWV)pR0Uah_&mtQj9usLuZ3_TyljEsc8t=;RWgt1B$mLixS?Hu-xTJ$~wK9 z_!tnIbyB=}~Mc&e+R?|f-yOJFFOo%`1(Hwf+iYppIEQMGpv-EcA zRY4=F{?$x|P&)^`#Wqhq_an^We(c1HS|U3ZEfA#E%c%X&GC1`3Z5msru>Gn%l`?2P zsEaQ*at=D%*6nntPl|9KtLWGminau3@dB5qn1}f+sf3Vy(P*FI#>SA0Xe>a@%=ruY zDbgw*hr{8a?j=zrMa5oGwjq&h-dsENZl2>NgW9;GDsK>z7Lb~|y1_cORLEB-hyJBL zLZOK3r=icDqI@$b@ACDSU*dEoTd@Y+62TdS`eCqfk&mawqY9QuBsyAWt( zGo?#cTk-Kvq)yqd0X-jUkrzl4WRa^8Hjt6~3+F+&Ra?o{%%2d&ij<~$7(p)B>UtyF z)s*RJahpCsl|k92$Lp)+~UbA};u%ej{P8i+J@pij&CktxUa@ z{*X9kj{SlYwc;>(BkBvwU>!doZF{KLF{&ABk&4WAi3uc?KAPRSG5G!@gK7QjhoZxvFnHAzCc zDv!eYLT$Xjp+jIV(JFntSHxJYt4siGz>)O z-p$7u2MxS=BS*!%XhAT#Bt}RI32CF2kW%wDo?EFT0sS$RH^4wj6H5zQ_E0Qmx;L6@ z0_~NNPt=q4sFj&(cO+EETs0W>Yz%>>_eD-{Mt4xr%mojNG2m%KG)IDBsye`TMnv*k z&a2DQ@~K-cQztll*XZxRKD?F7O6zb_Hd@R?# z;_oQRuCs+_feS4A@meD)ZvpW&qaZ##u8>YpyK_l6{F0rQxyVsK2?}Myi zn-mHIgS-y=H~j9l%)M0pN~hJ!(45LgFK3}i`g1&AVh|Wws*y8`;dx3ZQQI=eaFQ6i z-C0o0?NGqFP`u&WLKrp_)1)uSGB8OX1&1R>?#cQ-%;C=X|ueb zzr6QkzdO2uO}`~%>Q*7)WE_ZjJsO|9y-vAV2+wfUB@@F48vyO4pi}ebDLVRHvQN?} ztGN7cIoZ)KX276Lbxutsej}}X0f&Fe)90TE??+3O~!4^ zHQ|@DCI9mp=$*dF(Rj>)A2JW*jxqL zMLoL%{=IZ{9m?Vg4G3u-1|$S{b!@9>HV~F7T99I-Xk<1j`R0#i9}%}cjK|7Z2S+s5 zp;kjpmoHL~M|@Zrh}4s)E69`T8P=|ue>@)2wQlzYIJtOr9A+%uIJvyOXFQWcy)=mb zkXH>t`bAr|Gdsp}oV3K~x^Aq)DONNwmQkB+dDcqQPzWYl-L*qMKbq=$J9(dTOCdmD zIO2$7IOB<9xKPhHLY|E0cEg=z6k*o@0u9Vn4sKoq2jRepk$=m6A}(Z)r*{&a_+a<_ z>i$*T8jX^DDz05JBqh0-;W2u{jYPEXEMPG5<$k!@wK#cwCFekeg9u>l7j)NgH|HDH z#?y;MdyVvC){!VPK!!pr@)}k$P3_AeV2tc|Rl6hPzs+OJb$0K1$d0eKc|kK=yrt;r z_I+n_15cMbpZY-yRSS*F(#T+t%|WZ=(N!sqkGkb2fHQ=zE)%J-wBo*S?4H)54s5Yq z=15w2B;M%#{m(kXgiL?!PgnKgs43z+ygQ6^%Vzg_O4dv6gYR&a^g-}6$flqT19KM+ zs1O_n1}3W#YJuKK-f&BR z>CmH0$l^ycM#}~_>^4pk}5d?Asg*}g0N=4yK^~J zt*yXYp7A`Ik@}b)tUb~~z#1wyLdgcsG6e-#K||V7EvYZ4qY9a0A34VXf*|yYxFF$% z5Q7UmYnbd1$JvD5O}n12?R0E(09egawwLqjE-1)j@LZkyi2z6sIuCE*D<~;T|CUwt za@`h>b}c^1fg@ClRVHUp5+-gi=k2C;^nAo>@kN^j^>V&?zo0w3KKegWEw3o=(Q}MGT zL3w;~J1}wG5@yE4#*HN~&eClT<2%uz2sy;pcauk8ZNE$?sYcOJCp3zp$;F1ojFFRh zKd8+mR0FFX%T%L}??`)ePB+;B`XB{0!6#ZUed8Q*2^M z!BZRb%5`BAx39XsuX8`TyTFRp(*9ZS`xxBLGV{Vy!8#%REqq$lx7ld|Fg&Q)5N=;A z4nthQFnRv8;|z+Ge!Ueh4|Sh>XdMxNk--W`%UQ5KtzZfvvDalX)FYzGTczv8<+6cJ zcMgSw;cr&Q9iPqw={_->4+BAAD2+?pFMvYafjraRA?rjR@W1qg}R!oUqx<^UUFy8+G(RceTw>7QXSQBCbWVV2}a)gIZ8 zm3d(?(!#9BHZHzP`;WwjvTxIWRiZc`$I6EPfsZ;Wo?9j1?cYO_tAzu*fruS06gdw> z3gN;Ea&hiaAkKKyKc>0+AQExPyUH}OGmpCCW~PFh#&_ZY&b?YD@|ahCJ9BrBTpUIC z_@&VjtjTbyaxQY~m%2_}Ps%;a7@U}>J2iSXvphRD;1a7^MxNzduK%XDLuBaHL|tUA z*IeVrWL8V?$WIuqPh8a{OktS2lYM>$&P69McrO7V9rm%(iSl{dgZIWCwuJ|_p zOg>??q*n=as+D0z2H#@-`-yt-e$JV$MF@}D-cjkd4y;(E!Ihdsm?ZX}=VqSwE|r8j znt^|B{t1p5){Y|dDqTt85ExCGoUKB!fBiJ$9GD7Ey7~#9D@|!uE-hmZDSbePk_)e*u$)3L`ch|g6mjalzS5gkY#a%Gm0o@H zbBh-R|Lu3IR0cUB`g{`SJ|yBOklLNS$?CRY&A(zLFr^eX_ot9XFkDR({dwYOJp=6M z{rs{A`@Wbbr|~U^JgbUY3r-6k2o?z@XP2&cg8s)|eZWZs<9CPXVmOkHWD0t~=rJ}e z2`;3i9FuCozk-5-{AR`evMKK zBDnV;vYa9(H+8A5*de-yfQv&WIfN}H%fwOZXoz;=5^-2vXe$UWWgLr}*D$px8%EUC zW@)OrKUrz8?2wokZD>t%h?Pk)zP(4Z8^xCwI4g;oG$bLH?y@lh@PEujoL~FMdnBIC zP&ZXnZpTw_>ZFd4B|8eKpm?j#A>kfKI)X(~;oV%=gICWmnKnZ}&8CP|qaY;y0$R9q z2=cK;YUDP8)gb2i5KaDwc-NTrVh!?PJaE0nkCU;alcVspwDwa_fU^YG>3o|J(Be|Um;t>p!vsr@%%%Y;Q0(ONvI z#(Bg4s2f5u65L^*65ms-sM{^HBxHi|uJC{pNTqg-8$D)sB_P|5lU|T&Tt-B`1Y#uG z7T+f!sYnB19#6Gye~LhAW8dd1%6FF7kuIGywCqCorMu#9PxBoeC3jAf=!|DRgF_CL zAqwaeNDro@wOcwYc!V5C^T)&!qn$J4215c? zo5>;(`v?R~i81r5QR2}k(n&+klf{@Xyq=ZSWI^!f=>)o9nS9lnX*?!`ltbdHdLNL5Vw zOV?+@cTW7JZ5HnlWdR4h%=u82;ymu!qRF<5Z6bkl=Q9UbrbtbK1F4>-=zC(UPwi5m z+9^&oE`~=mq{VJdXkW2JIplvMyrgsLZUnn?WO2-36MN%##tv_TU70yaQTmMaFcXJm zMVZ<&&s>loX+1s7Ucf?1uOq4DbI+;8E|!YQ+Rd8(0R*Jrk>h<%t$ZV>p_$yz?(3Sl zOPwi-+R&gl>V636f~CfLv}aT1oe?z;bL52u@$-~ul^scA!-A^Lh5T(jzH@u6fx~U| zTI=%ry%cgeBNJFksh^HF#5r%KwP%K`D%dW=uI!FGd9tGFdMZ_DKBajWNn+Q1t{1Db zz7B#1i$>IghOcB2$8?tC*V+RI+Pj@T@_by{E55IPzCf+}*uIrtT*_W$syxrn|Uu?aq*H@QaaiwB!@{)WMyxTlBMKop8UD=cb4YdtN zRmIDW_y^><3I4fK>g z1^n6qUYGyg-+XRu#a=H>pG{9+o!p(j#$?clfe^fBXdkkZgIJ^{hssj)dzWdU{w+#c z%HM_qvw$Wt^|zo9+>`gF*#7uq>Uim1zFJ;>xO;=r%lq;0op5;?y zJW4C1baP4S^%qX%6KWYGGp3%pA^(@qpB!j2(ZZ9ywjw_2=bWW%806+uoJky`03ale zY|Rp7e0k%o{Tup_^e7i~w|3WA?VIcKw!i66hu>e!)sU$w#R(iR+t1*K)2g}dF^z>c zEi0?9+kMJwG3fSneE~JD?a4m{2Z2?33WvYDSn{@rz)I7#V&uIe#sDC&@4Q}U8coeN z=QIf6O(<<>zOG9NW5bZxJ1Ojo;y3bem;FPx$jlq~YnN22lLOqvL%2GuQF;J#dO-q1i1B>Doiao$Yr}8e2Q0yVUnz7LWzJzmU`1gA;Vb_uxjppps@{sA zWRQ!;m*Zi`6_=0S%v>1Shr?9)ALe~uDCjhFv&Y(gMIs10hG^wcVsV9x2rfOyr( zcYR}CZRDt=Hrdk47757F2VB$@tM}L#Ag3aMh&N$(duNZaZVFheg(iJ0v9OcU{~S7r z4G~erg!3144rq``-05hs@*Mg#Q_DkV)aeU#q44D<55+Ml!Ke*CUq{1~6%N2+r3?aH zcV|XJ>-O~VzUv2Y)cDxSn7H^twdnLkoDr-ILWF{?g;97Sx^#)<<~l%*28=E>$kgeq z8NluS>{Q6_i|{y~Mzlx9 z^<6@o6*u;`2vUMY4z(G%m)(@`_YkJS9;Cz61ICxX_4=PazTk3874t;~=*mP-)XCD} z3b9@7v`-sWr;F8tsjyJF3u{=M8fzQ0H}jcF8RWdtf=pUhb&9oH%pjVDWzWO}piQwd zAjPHOnHe^UrvWV{vH_#1X)QSFNpp&F;B2KO-vUTVC(G_fx~M0x;_Xro66Uwz_1}yE zGIn{b%jNAwSJnEImRu8vIM;#5lW~to1 zU&Rc92kk)uSh1^lja)4|u4z^WLblk?+ z_aX-(CYDNk&>=m@`Qv>8E8_Oa)j}YJ0;m^`QtY*sI^xt8fOmykxohfbz>1(sEaz0F z7q=)R-=*o1A}3dRRCn>>bguD!ISt~cP5Su(d=OM*MbayAAR{g8C~lLS+S~dHn+|Jo z1S5?<1lryKhKZUC__|q-g_ONv{lYF0Q9j9BVl62v#vTM?zw&a1eYiV)oHGa*A1#zp z?LuC%#efFsiOQt=)}v}dV5D%s&_!DoMo=atAgvO#mr5wH&Q50xDq;qSJcRdm7c>;EAFhiypoLK$tm`Qsnm;6u?BU@7E) z403j{Pp@Rq@jYw5^mp?V%X)oi8YKYv#DClGNmO_OjIO2!nf4&PkjT@7Td_sYr`;Cp z8=UnrbZUy_WRNtOij2a=5^Dp6MyuwZm{C|N9}+V3gZ1Q4Iy6GI1e(l1l|<1K9QBc2 zMgZN%PFI$T!oq>AFQxuc6)f9yi=6b7L1Mr1@^Q;V?#bQx zDOM-70JMN2sBXxcIdDa9*18cdW#S&>;aYkSX>;cs54P{tN=WEh#jxt2d($kju2Tky zbe!c)ddMLA4Rj#K1lnCjO2R=y?ne!0v5_KJJ3_h^G77)a{6cGw%icIj`$?&$V+wlO5z! z7B83}P;c8AWPCTSuD%(|Cd9%hJOIthB?Kz6T_E*jUF^v7I?5|J=Rif^uprd$(R*)e zOT`Aq;K5U@U7b2d;iQYtJ1cI;MjS}CtnNN$kc(*AHI`$^Y^QO83IWm+E6J@8j7yk8 ztA-AU4Fw>ARrMeh?%rULsvbm}TVsPhEqLO253*|o$nNT8WQ2qg>+T_&bS_9@WXGIw z6WMty+Ig#3i3^>-PNa z%c-w8V9a}#H|efqfZ-AutBUqmO1l~udoTpgML{a0NVV=NmFL~SQ@{bx9tM8zr&lo* z`VU;E{SZ}?^ROrkLDlVF-Y$)K2}BA}-3VByrSA}dYOBe_ond7zx7LWjEWjFPT5o7& z)RfaIJ@g5_ zfCLuu2%>{GL*eB@FuMl{JxI(T*vBUQfD#Kp;SOa=V^dlW6$o~3Zd_f|5?rjVUDSyg zP{^KD{e=He8!1b6KPZ8HhX-jMOUlt}Lc#lxYrDR=iDM#kdEN*Jb3- z>oGtI7RxGjH;@MEl%!tgCeLP#8AL5Wz_L92lARw;Y_TkK3}FF_HD-|gCaUuuH0Dik z_xAf?j#X<7B92_GK2ib$*clHzK&HxDdWE7YEd$TxVoFj2SXFpN^GnQEsnS+S>}Qjh z<-6r6R={G7Vb<@TwD=(5Es2Z5%#Y|B=TYMlZcLHE)Esh^1JR>!Jv~S-T%f@tU>~3e zCgDXAh>^gGyEfD$OtE5oi~(|WwOe8oZa0im+ZJf@ai;3*EI*a@H9}m{Y)6|4SN3s% zB^uhw#OZ0Jl!4v6k;+S`kje3zhw(wul)YPO(rf;hliqgsu1YCM4?LOO(fA*&Wr{Tz zmo4M*(0~d6nw0{g+c?4k7VA1@kUsc>EKjinVM@%ZtU8rx4$+XQc@l(X2X95~eX5B) zAA;bvqjTc%jh9jT&qyUHautIeDrkh79Dv0N{vbh{skuoH6t~mwN|WBZX#MsC9iSz6 z?McF{&0(sTnQ3UZttU{aHu=jp(ps|J44QY0k6j3mJ_Sf<(sxU6_xQm2sdFmF9+|RB zH6&hE;Sz6Jc#*X*XayA7cq^e^2i{0mDvOEo0)1yS!!0%@4VHTNJN6(r1;|y4lb(AJ z0`9tGAEsHK`ie@G(cijqunZJG`*w4)LNSK-r~;$PZYq#+Nlx@y}fD0!_JmiS8)&0 zLn^W6-_FDb5o<_Yzku)g?5QlE;v~3q>4qjKHpMm3pYJ28hJ-OHm?|}6a5uHNv;a35 zu6%9uyLZba)|-9Ge6wK1H0B-Z6sy^P03Ya@brKl<-HHPQ1}$qc+u?e4FUI3r*@WOy zlb-evq9!yFy1x$!rj%sCwjt?zdeM zo6#+k>&3K5zq>$~+MVq;iH|d%ZOWps2k^y^^(0$uJ_I_^0e!B|{$L>1g4pejCrqsM z1ts0upf*$RZMx=|_d20@OOt-sq7Yfu)23-II98QcV%eb-%;pU50Tt^48|||Dg}@nW z8Dj(`uvDKGX}$RZ>_-G|tIto=iy7p0lKn}1khu&}dk|&g?wB%ybq=4ios+NT0JN$x zFUPvhsqunRN(NXUI}|C1?Y@;kuCLRWHnNYceBV_v^WKWA|F9$e)w z*>|bYhOAoM&OV3r`Znn>7boE4e7P*{tv5PnuFv%#*J+BCO02HCSb)2S9%PF>mIsVB zt7rXe(-nA{IxZa)8cR8=mFU|T*qU7Q?*f?T8R9gS(?)C9l~t5u=FRrqL1W$uHECy% z?;NO!kx@nPPD=~C7gfQmZR&jy+)0DCyM5KjK)Gztpd0(5IG!)wlf@eCxRC0$B5*{mwtJQwR=2?HsF4) z#Ja9cdJip(i8s1wP$C;5$tg>(vPn1k&Nx?V@{hjdr83=X*Jcz3iL9{)>0%E82aS0P z7OMwMhH6%dfUf$8G45!oQ#hi#`u^PPq!SV-Z98_yBoy4GQaBoJmk%OW!U^H~`*(-H z-NQ+zn@9eJ9>f$HE^HT@Zbfr1G5f)=whYpPcNBoN%@H`h2I4~P1TtZ2H@hfgdyoS% z2#N=-i+Vsu=u2lsXml^>qi>$+fGo$?#jI&)l8Urk^^rRCJ-R$N*-_+0egtOsza^O1v7!AkUFbzx%DzgGk;5&<|dL+>IxQJtj9}> z!tto=BcpJ3%B#@4pg9*lh1Jd$m07Z=fqP4;WF7|CqQQ8A7CvH2i!mshdFH+XAbpsS zd{Z-&dr_{Ly8Y(h9;9nwv7+74Zs#rvt>RBpha2b3SQMIfWmv4HW{s!E1Pxe{(QTei zaNP`}aFYEgCD!~DYqvYQGf9v3sPazEp-;CP?zLkiq2AqgRJWk4}WCt1C+dnf@w12%2uy2^%;>9beX*;gexlkw1t4 zpt`6E9nv@lnORP?0kV-XGhn{Ub!0tS-r5WP);SHFC-riZ+ zKr8*=$;Ob>)-}%D&9r5}UQ}d%UM}uIQV){&APwb!yh%^$?l9xw>AGh(o`59hRWYsg zH0j141cZQ#6#B3zMZcfdY}{00wM(a6Xwo;(M@HfEd0nhs5^czUIVA<@GLt+WU{f~{ zac*FRO#@`LwDXAl!~|@m+Xp#KI4GmVdbi{ON$cX1vq9sScTqSl5T^QgE6qv2mW;wG z+Tg-(Q2UM|qC=c_P9|CvVOZ5B9ZS0l+P@DFZF3GDov?=%L^JeUo23%#UDtOL+R3ZAZ^|W%^S1L%OrGt?OB1P3^M2pqUp3K4A5;t z_6UeVaw1`|R^~7T&TJ(W#Ep50J#jX+yYc1h=0zK#vf>0*ynBE@2=75u|BFJO39IW7 zIG}fj1tw&J9JZ6NLG}Uf3M%Q$HxL~i7BHPWaV`f^xHfW#?Q58$FnIiLu@15+%_v+@!#R5UURT8IL^l|Ui??aCPI>Qv<-4|WfzU2~YuM9d&} z56K`D&tp&KD7QNXR`k!CdN=4Siad#Zqi_~|(pQl|NJ?V02RY5kSDlkBV6JA6-K;im z2&F!H6kgApc;4w4aDzui$?0Uk3!Z&pdk)_QL+Evv#Z+1CBjE1M(ER080PBiArED@1nG0=IFb^GQrNDYwI8ipSY;DDKZ`E6kOH|vAD4_pNr3{g$BiD=4dY2hlz zTTmfW-JGh)?RDIPKo+l_Rd)~K)z~Ru6BJ)ns4F*7=VQyB!I#@@K;?ON;|*(7-&#dN z`3M@sTwNgF^JABf+rAkN56cyRkCXGmG6;vex1lC+%I2Y{x2tEyazVMgVEVHjPo<`alb|>zF}sk)C^bdts4^P1dHFb@=cMfy2pX zx%If*k~Fw&3)#5JlIX%y)Qw7swVUff(&!cs!eZ?;Zq=gj`Efa|5j8CV9PMdyKc6l{Y0Tx(0s9YB^f>jI9BGo07l*)lqtnQEuGHLS~WdcVs4AI4s zHDx;Gly7CC4O+PgrIN6Xc=tReG(7mwwVz6?>$wavmQ9flvaHRUR82Zi&8(0sRE7Yi zZUS^Ajij@bSFb3Xt;?*nveRr3OyxiQN)p!56R5tgJR3ffBTqA3R`Q2huP2?{^qd{`E3!cOl{SMim zr3`W&;O-L>4N*`d97WouRH|caY8si<80egg&$m}9x4>|vI6G;V3g+nG9jEw6gsJN} z(S}%J^&P#xx>`WiorM75<&3Zk1!Uz4Z_}y4AGQfZkYn_&#ZHfTPfZMeP#=>_5_~+R zP-Fa2P~i@hhwf%8wiwmZMLMv=x{c!1am@a5=H-t~x}GtB4eA>$*1S2+Ej1)7qKo?G>(0X`lrZ_L0$`6SThzU$r zq@Y^fex13IOI{iwYB3eQY#B4i^Mji7a7WuGvpvXn(W6j|lATy+FwNafRLvQp3|UW! z#T~V@u9PKsc+$^O$Dtk;AO@k`#oa|L7EW;Yt66pT>oJ4$di`(Z5kb!xN$VOwW1Fo3 z^W-S>n^lD;V25m|W+5bXWloGDi^a(qi>I!uJ(ysER)l+DGikc@CH?pNkTKcb?_l-OOf?+w(Dlq<3f; z?q2;tIOn!t6CH(y-7~8~nHt3Q z!RoqzK&G=Jx5gHUv6ZY~{kScUnnZXK@@k|(77>v`2iQOdZQg^%ykiF8kP=E^OaSN- zVLSk%oTYnLTUnDn6uy+w`jW&nL?fFf#}3mef!GF%*fF@2L2h3L2s=(#tmP&>?bGs` z!vvty!9`GQQ^CkOYvpuV_Dso>mw3r!h3B#LuFj-;6$5hjDf%|)OFd780V*0)du>I3=;MrAd9Th+8PY( z1kbKrC7}k_tkceTz_&X#zvx-HmT?`n$=9vfh#&0jy-2CoNY< z2`hq{3`Ga5pV2LHlx$_6o*{Bwx8Lr=CH=eKC;RPb4{|;mAn`4VSga*=_dDB;hVhYy z2R~3eriSqEc!@_?{1d+uKaW2i(szb<*~4@mCUH*A=kW5mIF}Ptnizq& zlDY|r`yzGE0{~AL;x_vC@K4QyWDkPGBa!!~t~|JRZJzvQ`{YngI^klI-lbJKeN1n3 zxV*jpOL(U@);LNj*@6QH_puo?tjS>tCdjQL#9*YaJa2U7)$;D{&CPCivy1=iE_XN2 zpLTs8#TaHY$a%0on40wG2aI_)SZx)RtGT$;K1s<6prRuPRU_is10<=o@|~}!U|>Cm z&`}`PZ1b%nO|7_4w$`TFIXe?OzHn-hQ8?2u?hOel{Q)MPx4Y1!C(Gz1KFDM|(LIUp zba;>B`+fE4y9e=9Xfy^<3gZBx1GupcQ#7ni)dawcXpfy^$0tc|H~h$g%HJxVu#fub zc-F+Rf=*x2bRT2Ji?{63H{-wITjMX9el*=J#V(cdx2T(bcl=_LJ`Xn;f3S(aW_n~@ zewY|LwJu#{dOYEmO?OxxV!lnfL4LUPIZqFGQ=cNGU({{hd~>^`toULdZ67Bc-`lwi z68oW^?mWMVW~<{z_;Yo0Hv)hL1-5XM#<&9}?|bu98`cF@gu(~uoo!k}Sx_5g=95(y ztKHi)TaR1s=RtFKe7^IlCcE?0q)%hsCBLxm-|V;PvX6iA=ll4@oAm#_eusUzE#Jtu z+J|C#n{PAS;TwLB@t-&O25sY*p8+Z9W$^(qosJ}1Wiapx; zK&PAS_xpOw>HgENe3Kvh*I$2gd%mpho@9RxXwp*#d70no>ArVkfb>p@g=NZzj?J(F z@GwZhur@R=v@lBz{xeD|!f9Ue^0|zH)0-#V$Aqz(&mgxcgCwxxe2H~_^`C#gefvxJ zGk(;|^i}?5{(@h{yS#NjHQ#&Ny0QHg=@Gnb{j#^|R?{DQ#kaFx%1888KI^yq8tM1E z{rB5{|NHzQu(g^9&)?=5+um@pT$c}oVlx>|Za$IAEe^5!yKZsKP*r{Uk-&G={h#`sV8 z?d^6qVCf_`LH-3M*b-1I;-Q{#|H}N~;{amJRhA+Y`cj^ChFY){N*N?Xe z4OqPKSE&R(&!1kUpVs0ylyB$L zm*wkS{b9PB9lQQ+SHEIcIxm0oFWZ&hTR+%8>^oQWldF6`^;z&=eJ-8~yCe2vaSQ%L z)ML(9UA}}xVYXmfm||@yjL*g<-N_(55I84UDhzJMno#zJDDcm#@<|_rOav!=tWW6clw9=ySwxA+vU4#d}Dz}zwpy~>s|Z) zn|HU%|Lp2r?S9uwHSs|fr&u?&#Cmci-y>0C@o^8KaYFWpAY4mw45?vFoOChdm4ix$ z2?ic?CXMAcZMgCGEaLt4O=jf}Dv%hEp3ITB4}Gxt}SRpDp$ry@0CF}3ZWu3<<;ncJjWW(D|?ke za*36i^xfhfBoLqWG4E2;TGxJu&h1oNHOF z001BWNkl#lP$ z2&EE>=6aCGC`_x|V+Q$KGRV|}#0+xVF0t;0603}PgT{FL69eQ)huT(EfO%lnK~4!H zt%nan8tbl;1}J42Fq-Big^W#l1Y8wH`BY*>Qo=$8dD%sz^fJ`sc=;2W^vDNU>_Nu2 zDFg^X8uO<32>+a4Pfa=rg1YweX&85+ltQmqtW~+(_PSf*wph$1*7#v!1(ybDPI|en z;|n(i$jy@g@`+9Q>=f&^^dNuOnD==3ojpi6#cf~Sp3g%~I+;PvQ-qxFZpJ3PdWV4T zPGoiDw4YH{>0gb34h>nep$Av2$TvfpxPz5g4TaHMPAk(CD`k+`5-V-eF*!^vLQRgB zKV^!Qbo*wT^a3@(oIzNL6{lE(UraGPwYOliEy}POK1j(QRvXr#u7Xg#MN~aW_au~9 z*XOy+;)}w$5^Fp)Mapd-JPHHUOqz~3KLinkBh>;DTAbqcQ;3_x}C>e5iZ$!v<@g>LDd)&+99HEp)oVJ4QKpbB2y%#-oMKI^sHt-cC03B= zSpX}BJ;=MR$38L&pC5aW-`!;YAsHm0d2i?WAlqbfyZt$jc_)wP-Sa2g9$O;M&?Xsy z^c&BM!qx0SV8~|5eZxi$`1(U?BbUukEwQfIY&=3uC_+uB+s~C)i4QXQr0>q>loh|s z%fbtC_TOia#0Q~omY^n)#@mMytE>s90O?S;D>_MVv!}a_bFK`wM==C;#>vlX)!e9QO z4zug)0CBxe0NZpc{vZ2N{>*+WeRdmvMf~zi{U3jtuW~DYVE>eB$r~5w^0jp~Ju6Q* zeO`Zqeg?}KB=SKJ796I+m=_{CiQY%J`*o>?Lk3Arx{{}L`*O72u*keBR<%hVQgHOX zcd6rojGj(j>hkxwg1xQ*(#1XD(iH3VT}aT_N0-~NNxz;uTVC%@FHaL^Vs~@8JKf#v zP9s73bjL2?2iFNtUgP8RQ}`Hfcp5kx@%lHJSe-6c{En{De}QCwy1U9(pRREe|2<{j zDVM9Ayxg3!D_q9kH-34!laF^-?th|tp9WsaWq7imPETuqT*qToKHGY^oE}zsWbsKJ zm_e4oig$Ac>BayNS4W@G#I&9sggHzZ-7jGYq6EZ~x&arD3IQ_p zAQ^-ZpeAF96=js>uvoWYQP_`n8yJPp!^wSKwc*9t+1cao&K^HLdwg~_{y%=EE@$cQ zi}Byxw0I2Z<8-_&zuF6X!+39J>EpYz@6zY#C*ilIA55Q4|Cd{Q7jIwh<-2@O`Ty_o z_r43)2+tut`tR}`$tN(~Y`oI#+3oI>P0x2{|A`O&h5rol3vd=6$A4}YGsugJr0%}i z&TY~s8)%w(kaH6tUBrf?!SZ<#P1qxMH(BiF|Q<)M;gth zfEAksHdlAQv($s^&c6Tt{l&%4@gw}1xxBe}^Zi)bT~C+O)Bk+`_4oUW&BgdfB&DDL(RJ-;d8NK85}CX!iPdPM7!J|IgWh z83Yc@Akk}8XOKIckTQ4V-kl~yD)3hoJX#r}u-D?F&XbW;d_>6vOBv+O-K$grPZf2b z^2Y!PCD!RofCPV#C=fJFv1aTK&d&&O}}(;no>)xst{ zsYGsnzP)7QuG_QS-Kj}evb@mJQj}0d?J~8ZF)vNYV^TGl`Vlm!88x?K`m#Ad`XKvr zd6R1JMESgY{&NzJ!xu8`8uQz3o*&gKj_M2??5)s;v{||3nm;Q->p)NUF-M>67 zht{Xvldm^P79d?UxaCIWo-W=ID2Xkhr8V9J!=I!e6+TT5g4hklLvp$Wl}AG{C(xi~MA5f^CNcN$1MKz}x2G8$c)k1dpMAIiO;0(*GEGlDiUE~J6vT5k z^QJf{gQO;X!R0nG3a47(=ewUmqZLkqw_)OO^Ze%kOC1ock1cx{J#Rv88c(t7pxY(Z?e*2WZ4fCfe2}>k>-NdE z%fg#O@LCCb*CDBk#&hW;&>6q(_V;gCjdkH+bl8?YG~YT`%__(Zq8h z+ni25=|Qh?^FF-A-(P(H{`>di<>#MKrU^8zMPQWfnd@k^VM`{ZYs(lOCp6U0lU1k9nhk&Orxx4EgTPcb|5(#(EJ1Zhn7+ zVB=WC`VFi`kG*h7cJ7Tyi`H#H>o^bIrWY?R>ytRWd9v>d0HXDH3v_NVgG_{}_%?lW zyO2R9>5|m)q`oP2LQ(*$96myBU)x0sGa6p9uPB26%OGV}*fSM-3(b=AiE;`Eo4!5< zM5@L`DL)$^SAj6qV~ZQl6+>5$FO&_4vH-A>iKO*sXqi0q@_VKmV$71r&YO*_V`&*JpJ0={auJjJ4@nQ@3eNIqmb zNd6$>|D9Dk1`@h)XpM6amB1p?#afRxZ(gIPH?~iQ7Ff{+YcIpORnTK`0!=R%Yj&p| zWEP7R0wfcr?9y0gkPQd%s6(+N?vxe#i(g8BoL`?_zWq8?6HaK!H&aXJ2?0uDOu|pw zDMXkv6^h4}USh3kpnnge5%pbn|7OQpkQWyltY@@o=s?vKRD}1YJ4oGqQ^vgQJ;>?Z zWa8Pge2K-&YjWKZwisZ;fn^%37?YyQo1V#Ppe6&=8E?^UhzFOnB{a708i^9a3X4Ev zmNUngj-mzITn4$0>h9yw4BgV0H)fFD8YX*If2qb|W31pJHc=Xqy`E$ZS6MUJJ67*D zl=f|&VqnQ2Hn{SaJqTAOl*t4{0t+dpd-GMOuoATVbnMYD`c1KwBzbKhZVeV$nlG=G zJqnX=T>vYdFO*osU6Iqg4S}QD#R|aad!V)>R$kY%IdOt56Uw( zU7^SM3^I**a}RR07$A2#G@Dv5j~u7Uv48ozlqX}Au={4)A@S-6SXfA*4ec$7)t(Bg zixbbOv4SeI4&mSip60RRwi}nHlqTr|;iCzAW)EzR52pvlwZ#t_|*`&1b<*Xxo#XPIUQ`Tt&3@Idhb662ru?M~$?6c6KCf%bd3xK<~l;%`g zzNXvsOFhW-q>B~qAsXn+PqEH&pWU;nUd%vnYKBvQTzvJZ?9u}!BCbM;xu8_dYd{E8 zzR5;4003H0ug@JF@WGT6N^=DCg_EU#_M|09re1^qd3VK$-Mr2hy&4Gd_VrP8xgkuP!#JSLS0zhK!rMaPt`XkP@rd z9|X$n?Mw!#dAitM$&O5%PyrjB8isqM%(T~I!B%?^ZtC0{oB;3>AQz)h6YR+_jHzq_Lav@{BeR+%57dnWIIa(@sAgPaIV{M< zU5!uz<+H?H&4o0db`4L(Qn%T@uLi*(1zx`GHhn&yp>;D-dzt8RyIW||_rb(-p~Sl0 zRU2qd{%aZ5g7xQgIeBW#n}p+rm5q5Nnpd-i9ouUZLf6xHUkUh@QYT1eElshuY0^9` z3TM&onR&oZ)ZB-gPqD_k?C)Hi?ijV_^s9?4PAE+kR0=7;>TAJ%;nQAe9iPU_)0}q# zcp=(-3JO#ox~z$md%Dg3mmD8afa>bze%JRsrzc2M916wD;QO_dL3WvPyI=zydJqNZ zF13+hX#;Q7l^D96ORxb}Nzt%I%5CqQ+1hImA?DIca+MM-4M5*nMqwaKMO716Tom43 z=S87x(xu>C-V??Qawj@3l)K#ByiCk$W{au&EB=IJhNQ_QQxs<6A@otdsNZb*_%U8^ zLPDxtAb$yaU^e5WtQ+H_7wC^LsSajmJ%D({#Vn2KY#dr*1vGE8xo-wj+#-c37J*D3 zpwN5BumM7})^knfUWLrGa9vQ7f?7b=?7))%Ls>rys+G~z>JzGVhEaHR9ZM|8CD!#p zO?od?w-t~Q%lfn5hb;mNkjwwh;TlA?@1xa6TJ^`+YA^grUFapwiyN|&0 zO^@=_s?uH$>aq~v^F>Tx<>mK0xfxxLuO!!xT2T%S8p z!lqby{mGDs=r`roLRsN=1wLg>9)--LQ0g-%zh@W3$ewS{-Yw<-izz^6D7PttL}|a} zMd4YNN$v$CgEu{W;n|0?`S!j%LgG5T<0UU2G4*Oh!6Tp0$)#*%lGfVeakjtn_N&Lw zqw(SM=ihyG|K~Ah^{7yiHGB2bQX}tfGUBldFhz-i-rd~a_I&}hAUZPY0y(zn4%>rp zT`VU+uBX?nXTewx?mU;#`J#D-b;N&osH|v{UMs8~obmx3M=A4dFZXcN!69hgK)LN> zi8bG(@5&TQ3qqEZ4ag!S0(x)dyFMOdZ#umsFB1jyP6|8{2s0NS4UBOJWWI}+Up>G1 z^y&2UbT|IJ{PgMOyI)?0JR(8)ECb6WO5Wjw1oF-EorbM-&9|ghDGV;Q*n`~e&ZgyQ zM*gxB)HTx`y1c!B(u1& z$PAkI?z?R&(DT7?R*lGQmJKHVG2LQ7U@zx}%R@=m@jX=I1 zpTbumI)YNq^szhrbb0gm-9^`-LiSE=eSU@cmN8}!S{ z^_I|cCDYi;GiHZEb;N4Zr)34P1ZHMgo(sdk^=1f#vI&6v+Z#~VFujfP? zpe5mq68P!Wsr<Dw%}C7%{^f%Tj8yA3JpY!0!ehj?P)3OJ~^}`-BISSSf>y4`wr=d9SZk3z9yM zi$bb%KhcVUlu<)9w?a@0ShGkM^6u+n6!zvBW6N4jJo7&Nn@K__xD(U9A}|efF|Ea` zV-M0tm)pe>YhT8^y_g2&gw-pG)Ar5d-4%bY$Ak6L
    Ks|?wABcYX7D9BQ)Uzecl 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..22dfdb70d95423337762cd091030738c93327ddb GIT binary patch literal 57270 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

    B;8tBk-Hl(+ENZeO6&(w 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 XfqQ$~x5+33fd4cfKUJ+&whjM3gixUf literal 0 HcmV?d00001 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 From 65a010865754f75f355edbc2074df07ea0aaef6c Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 10 Jan 2026 12:42:51 +0100 Subject: [PATCH 30/53] Use rir in the 1 RM calculation, if available --- wger/trophies/checkers/personal_record.py | 73 +++++++++++------------ wger/trophies/services/trophy.py | 1 + wger/trophies/tests/test_checkers.py | 31 ++++------ wger/trophies/tests/test_overview.py | 4 +- wger/trophies/views.py | 1 + 5 files changed, 50 insertions(+), 60 deletions(-) diff --git a/wger/trophies/checkers/personal_record.py b/wger/trophies/checkers/personal_record.py index 80993db14..ea2b00aa1 100644 --- a/wger/trophies/checkers/personal_record.py +++ b/wger/trophies/checkers/personal_record.py @@ -15,6 +15,8 @@ # along with this program. If not, see . # Standard Library +import logging +from decimal import Decimal from typing import Optional # wger @@ -26,6 +28,9 @@ from wger.trophies.models.user_trophy import UserTrophy from .base import BaseTrophyChecker +logger = logging.getLogger(__name__) + + class PersonalRecordChecker(BaseTrophyChecker): """ Checker for Personal Record (PR) repeatable trophy. @@ -37,37 +42,33 @@ class PersonalRecordChecker(BaseTrophyChecker): """ - def _estimate_one_rep_max(self): + def _estimate_one_rep_max(self) -> float: """ - Brzycki's formula: 1RM = weight * (36 / (37 - repetitions)) - """ - log: WorkoutLog | None = self.params.get('log', None) + 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 = getattr(log, 'weight', None) - repetitions = getattr(log, 'repetitions', 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 - try: - reps = int(repetitions) - except (TypeError, ValueError): - raise ValueError('Repetitions must be an integer') - - if reps == 37: + if repetitions == 37: raise ValueError("In Brzycki's formula, repetitions cannot be equal to 37.") - try: - w = float(weight) - except (TypeError, ValueError): - raise ValueError('Weight must be a number') - - return round(w * (36.0 / float(37 - reps)), 2) + result = weight * (Decimal('36') / (Decimal('37') - repetitions)) + return round(float(result), 2) def check(self) -> bool: """Check if user has beaten Personal Record.""" @@ -109,43 +110,41 @@ class PersonalRecordChecker(BaseTrophyChecker): return 100.0 if self.check() else 0.0 def get_context_data(self) -> Optional[dict]: - log = self.params.get('log', None) + log: WorkoutLog | None = self.params.get('log', None) if not log: return None - session = getattr(log, 'session', None) - exercise = getattr(log, 'exercise', None) - repetitions_unit = getattr(log, 'repetitions_unit', None) - weight_unit = getattr(log, 'weight_unit', None) - repetitions = getattr(log, 'repetitions', None) - weight = getattr(log, 'weight', 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: - print(f'PR estimation failed : {e}') + logger.warning(f'PR estimation failed : {e}') one_rm_estimate = None return { - 'log_id': getattr(log, 'id', None), - 'date': getattr(log, 'date', None).isoformat(), - 'session_id': getattr(session, 'id', None) if session else None, - 'exercise_id': getattr(exercise, 'id', None) if exercise else None, - 'repetitions_unit_id': getattr(repetitions_unit, 'id', None) - if repetitions_unit - else None, + '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': getattr(weight_unit, 'id', None) if weight_unit else None, + 'weight_unit_id': weight_unit.id if weight_unit else None, 'weight': float(weight) if weight else None, - 'iteration': getattr(log, 'iteration', None), + 'iteration': log.iteration, 'one_rep_max_estimate': one_rm_estimate, } - def get_target_value(self) -> int: + def get_target_value(self) -> str: return 'N/A' - def get_current_value(self) -> int: + def get_current_value(self) -> str: return 'N/A' def get_progress_display(self) -> str: diff --git a/wger/trophies/services/trophy.py b/wger/trophies/services/trophy.py index 53d33dfe1..45cbfae2f 100644 --- a/wger/trophies/services/trophy.py +++ b/wger/trophies/services/trophy.py @@ -35,6 +35,7 @@ from wger.trophies.models import ( UserTrophy, ) + logger = logging.getLogger(__name__) # Trophy settings from WGER_SETTINGS (defined in settings_global.py) diff --git a/wger/trophies/tests/test_checkers.py b/wger/trophies/tests/test_checkers.py index d896f12b2..12bd7f1df 100644 --- a/wger/trophies/tests/test_checkers.py +++ b/wger/trophies/tests/test_checkers.py @@ -26,6 +26,7 @@ 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 @@ -509,16 +510,10 @@ class PersonalRecordCheckerTestCase(WgerTestCase): ) def test_check_returns_false_with_no_logs(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - checker = PersonalRecordChecker(self.user, self.trophy, {}) self.assertFalse(checker.check()) def test_first_log_counts_as_pr(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) @@ -528,9 +523,6 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNotNone(context) def test_improvement_detected_and_context_values(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) checker1 = PersonalRecordChecker(self.user, self.trophy, {'log': log1}) self.assertTrue(checker1.check()) @@ -543,9 +535,6 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNotNone(context) def no_award_if_not_an_improvement(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - log1 = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) checker1 = PersonalRecordChecker(self.user, self.trophy, {'log': log1}) self.assertTrue(checker1.check()) @@ -566,9 +555,6 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertFalse(checker4.check()) def test_estimate_1rm(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - log = WorkoutLog(user=self.user, exercise=self.exercise, repetitions=10, weight=100) one_rm = round(100 * (36.0 / (37 - 10)), 2) @@ -577,10 +563,16 @@ class PersonalRecordCheckerTestCase(WgerTestCase): 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): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker + 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): @@ -602,9 +594,6 @@ class PersonalRecordCheckerTestCase(WgerTestCase): self.assertIsNone(context.get('one_rep_max_estimate')) def test_estimate_1rm_raises_on_repetitions_37(self): - # wger - from wger.trophies.checkers.personal_record import PersonalRecordChecker - log = WorkoutLog(user=self.user, exercise=self.exercise, weight=100, repetitions=37) checker = PersonalRecordChecker(self.user, self.trophy, {'log': log}) with self.assertRaises(ValueError): diff --git a/wger/trophies/tests/test_overview.py b/wger/trophies/tests/test_overview.py index 5d57d08b9..f8dbab7b4 100644 --- a/wger/trophies/tests/test_overview.py +++ b/wger/trophies/tests/test_overview.py @@ -18,6 +18,7 @@ import logging # wger from wger.core.tests.base_testcase import WgerAccessTestCase + logger = logging.getLogger(__name__) @@ -25,6 +26,7 @@ class TrophiesOverviewTestCase(WgerAccessTestCase): """ Test case for the trophies overview page """ + url = 'trophies:admin-overview' anonymous_fail = True user_success = 'admin' @@ -41,5 +43,3 @@ class TrophiesOverviewTestCase(WgerAccessTestCase): 'member4', 'member5', ) - - diff --git a/wger/trophies/views.py b/wger/trophies/views.py index a559930fe..09a17779c 100644 --- a/wger/trophies/views.py +++ b/wger/trophies/views.py @@ -25,6 +25,7 @@ from django.views.generic import ListView # wger from wger.trophies.models import Trophy + logger = logging.getLogger(__name__) From 3ad2310a4136a38d1da0f466543a26dc164c0482 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 10 Jan 2026 23:24:36 +0100 Subject: [PATCH 31/53] Fix trophy urls --- wger/trophies/urls.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/wger/trophies/urls.py b/wger/trophies/urls.py index 5b5b8de40..1bf054f5f 100644 --- a/wger/trophies/urls.py +++ b/wger/trophies/urls.py @@ -14,7 +14,7 @@ # along with Workout Manager. If not, see . # Django -from django.urls import re_path +from django.urls import path # wger from wger.core.views.react import ReactView @@ -23,13 +23,13 @@ from wger.core.views.react import ReactView from .views import TrophiesOverview urlpatterns = [ - re_path( + path( '', ReactView.as_view(), name='overview', ), - re_path( - 'admin/overview/', + path( + 'admin', TrophiesOverview.as_view(), name='admin-overview', ), From 4f7e61f73580544f2f2d88c3af8581ac64c73773 Mon Sep 17 00:00:00 2001 From: Github-actions Date: Sun, 11 Jan 2026 11:13:23 +0000 Subject: [PATCH 32/53] Automatic linting --- manage.py | 3 +- settings/ci.py | 12 +-- settings/local_dev.py | 16 ++-- settings/main.py | 150 ++++++++++++++++++------------------ settings/settings_global.py | 118 +++++----------------------- 5 files changed, 112 insertions(+), 187 deletions(-) diff --git a/manage.py b/manage.py index 720ca5c44..b8b636672 100755 --- a/manage.py +++ b/manage.py @@ -7,6 +7,7 @@ import sys # Django from django.core.management import execute_from_command_line + if __name__ == '__main__': - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings.main") + os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.main') execute_from_command_line(sys.argv) diff --git a/settings/ci.py b/settings/ci.py index 64f552ef2..af4dbb364 100644 --- a/settings/ci.py +++ b/settings/ci.py @@ -27,11 +27,11 @@ 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': { @@ -70,7 +70,7 @@ 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", '/tmp/') +MEDIA_ROOT = env.str('DJANGO_MEDIA_ROOT', '/tmp/') MEDIA_URL = '/media/' # Allow all hosts to access the application. diff --git a/settings/local_dev.py b/settings/local_dev.py index d5c86eec9..4e650622a 100644 --- a/settings/local_dev.py +++ b/settings/local_dev.py @@ -16,7 +16,9 @@ MANAGERS = ADMINS SECRET_KEY = 'wger-local-development-supersecret-key-1234567890!' # Allow all hosts to access the application. -ALLOWED_HOSTS = ['*', ] +ALLOWED_HOSTS = [ + '*', +] EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' @@ -24,7 +26,7 @@ EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' 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['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 @@ -52,8 +54,8 @@ AXES_ENABLED = False # Does not really cache anything CACHES_DUMMY = { - "default": { - "BACKEND": "django.core.cache.backends.dummy.DummyCache", + 'default': { + 'BACKEND': 'django.core.cache.backends.dummy.DummyCache', 'TIMEOUT': 100, } } @@ -73,9 +75,7 @@ CACHE_REDIS = { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://localhost:6379/1', 'TIMEOUT': 5000, - 'OPTIONS': { - 'CLIENT_CLASS': 'django_redis.client.DefaultClient' - } + 'OPTIONS': {'CLIENT_CLASS': 'django_redis.client.DefaultClient'}, } } @@ -109,7 +109,7 @@ DBCONFIG_PG = { DBCONFIG_SQLITE = { 'ENGINE': 'django_prometheus.db.backends.sqlite3', - 'NAME': BASE_DIR.parent / 'db' / 'database.sqlite', + 'NAME': BASE_DIR.parent / 'db' / 'database.sqlite', } DATABASES = { diff --git a/settings/main.py b/settings/main.py index 2154e1412..b5aefc556 100644 --- a/settings/main.py +++ b/settings/main.py @@ -33,21 +33,23 @@ env = environ.Env( ) # Use 'DEBUG = True' to get more details for server errors -DEBUG = env("DJANGO_DEBUG") +DEBUG = env('DJANGO_DEBUG') if os.environ.get('DJANGO_ADMINS'): - ADMINS = [env.tuple('DJANGO_ADMINS'), ] + ADMINS = [ + env.tuple('DJANGO_ADMINS'), + ] MANAGERS = ADMINS -if os.environ.get("DJANGO_DB_ENGINE"): +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"), + '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: @@ -59,11 +61,11 @@ else: } # Timezone for this installation. Consult settings_global.py for more information -TIME_ZONE = env.str("TIME_ZONE", 'Europe/Berlin') +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!@#$%^&*(-_)') +SECRET_KEY = env.str('SECRET_KEY', 'wger-docker-supersecret-key-1234567890!@#$%^&*(-_)') # Your reCaptcha keys RECAPTCHA_PUBLIC_KEY = env.str('RECAPTCHA_PUBLIC_KEY', '') @@ -76,8 +78,8 @@ 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') +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/') @@ -86,66 +88,68 @@ 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 = ['*', ] +ALLOWED_HOSTS = [ + '*', +] -SESSION_ENGINE = "django.contrib.sessions.backends.cache" +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): +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_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 ") +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) +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", '') +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"): +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", '') - } + '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', '')}, } } @@ -153,21 +157,22 @@ if os.environ.get("DJANGO_CACHE_BACKEND"): 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_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_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_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: + if 'DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME' in os.environ: CONNECTION_POOL_KWARGS['ssl_check_hostname'] = env.bool( - "DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME") + 'DJANGO_CACHE_CLIENT_SSL_CHECK_HOSTNAME' + ) if CONNECTION_POOL_KWARGS: - CACHES["default"]["OPTIONS"]["CONNECTION_POOL_KWARGS"] = CONNECTION_POOL_KWARGS + CACHES['default']['OPTIONS']['CONNECTION_POOL_KWARGS'] = CONNECTION_POOL_KWARGS # # Django Compressor @@ -190,28 +195,29 @@ 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']) +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) +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", + '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' + 'https', ) REST_FRAMEWORK['NUM_PROXIES'] = env.int('NUMBER_OF_PROXIES', 1) @@ -219,8 +225,8 @@ 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") +CELERY_BROKER_URL = env.str('CELERY_BROKER', 'redis://cache:6379/2') +CELERY_RESULT_BACKEND = env.str('CELERY_BACKEND', 'redis://cache:6379/2') # # Prometheus metrics @@ -241,11 +247,7 @@ LOGGING = { }, }, 'handlers': { - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, + 'console': {'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'simple'}, }, 'loggers': { '': { @@ -253,5 +255,5 @@ LOGGING = { 'level': env.str('LOG_LEVEL_PYTHON', 'INFO').upper(), 'propagate': True, }, - } + }, } diff --git a/settings/settings_global.py b/settings/settings_global.py index 37846b769..2d66cdc8c 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -35,7 +35,7 @@ SITE_ROOT = Path(__file__).resolve().parent.parent / 'wger' # Static and media files (only during development) -MEDIA_ROOT = BASE_DIR / 'media' +MEDIA_ROOT = BASE_DIR / 'media' STATIC_ROOT = BASE_DIR / 'static' MEDIA_URL = '/media/' STATIC_URL = '/static/' @@ -56,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', @@ -74,23 +72,17 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', # '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', @@ -98,28 +90,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', ] @@ -127,43 +111,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', @@ -175,7 +149,6 @@ TEMPLATES = [ 'OPTIONS': { 'context_processors': [ 'wger.utils.context_processor.processor', - # Django 'django.contrib.auth.context_processors.auth', 'django.template.context_processors.debug', @@ -184,15 +157,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, }, }, ] @@ -203,15 +175,12 @@ MESSAGE_STORAGE = 'django.contrib.messages.storage.session.SessionStorage' 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 @@ -303,23 +272,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', }, - } + }, } # @@ -358,7 +321,7 @@ AXES_CACHE = 'default' # # Django Crispy Templates # -CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap5" +CRISPY_ALLOWED_TEMPLATE_PACKS = 'bootstrap5' CRISPY_TEMPLATE_PACK = 'bootstrap5' # @@ -366,43 +329,16 @@ 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}, }, } @@ -424,21 +360,8 @@ if USE_S3: 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 - } + {'request': {'user_agent': {'is_mobile': True}}, 'STATIC_URL': STATIC_URL}, + {'request': {'user_agent': {'is_mobile': False}}, 'STATIC_URL': STATIC_URL}, ] else: STATIC_URL = '/static/' @@ -576,7 +499,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 From 6405b10755d9694a19769f3f6bcd7501a5ced362 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 11 Jan 2026 17:42:44 +0100 Subject: [PATCH 33/53] Remove django compressor Our react components' main.js could not be added in the compression, so sometimes users would get outdated files served. The LenientManifestStaticFilesStorage now makes sure that the static files get a hash in the filename. Django compressor was removed since most of the js and css files are already minified and modern http versions can handle files better. --- pyproject.toml | 1 - settings/local_dev.py | 4 +- settings/main.py | 19 + settings/settings_global.py | 67 ++- uv.lock | 578 ++++++++----------- wger/core/storage.py | 55 ++ wger/core/templates/template.html | 52 +- wger/core/templates/template_features.html | 21 +- wger/core/templates/template_no_context.html | 2 +- 9 files changed, 361 insertions(+), 438 deletions(-) create mode 100644 wger/core/storage.py diff --git a/pyproject.toml b/pyproject.toml index 51f5f1684..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", diff --git a/settings/local_dev.py b/settings/local_dev.py index 4e650622a..5870382b6 100644 --- a/settings/local_dev.py +++ b/settings/local_dev.py @@ -81,8 +81,8 @@ CACHE_REDIS = { # CACHES = CACHE_REDIS -# CACHES = CACHE_LOCMEM -CACHES = CACHES_DUMMY +CACHES = CACHE_LOCMEM +# CACHES = CACHES_DUMMY # Django Debug Toolbar diff --git a/settings/main.py b/settings/main.py index b5aefc556..e257e516e 100644 --- a/settings/main.py +++ b/settings/main.py @@ -257,3 +257,22 @@ LOGGING = { }, }, } + +# +# 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/settings/settings_global.py b/settings/settings_global.py index 2d66cdc8c..450ff4ebe 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -35,8 +35,8 @@ SITE_ROOT = Path(__file__).resolve().parent.parent / 'wger' # Static and media files (only during development) -MEDIA_ROOT = BASE_DIR / 'media' -STATIC_ROOT = BASE_DIR / 'static' +MEDIA_ROOT = BASE_DIR.parent / 'media' +STATIC_ROOT = BASE_DIR.parent / 'static' MEDIA_URL = '/media/' STATIC_URL = '/static/' @@ -56,8 +56,10 @@ 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', @@ -72,17 +74,20 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', # '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,20 +95,28 @@ 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', ] @@ -115,23 +128,31 @@ MIDDLEWARE = [ '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 ] @@ -172,16 +193,16 @@ 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')),) + # # Email # @@ -356,36 +377,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 for CSS and JS files -# - -# 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', @@ -408,10 +407,11 @@ REST_FRAMEWORK = { }, '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': [ @@ -427,7 +427,6 @@ SPECTACULAR_SETTINGS = { 'REDOC_DIST': 'SIDECAR', 'COMPONENT_SPLIT_REQUEST': True } -# yapf: enable # # Django Rest Framework SimpleJWT 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/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/template.html b/wger/core/templates/template.html index f4dbcd707..5c1d21a6e 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 %} @@ -44,48 +46,28 @@ {% endif %} {% endblock %} + + + + + + - {% compress css %} - - - - - - {% endcompress %} - - - - - - {% compress js %} - - - - - - - - {% endcompress %} - - {# this needs to be outside of the compress block! #} + + + + + + + {% 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 %} From ea626844af1aa70623433695a995cc1a2e57f5bb Mon Sep 17 00:00:00 2001 From: Github-actions Date: Sun, 11 Jan 2026 20:29:13 +0000 Subject: [PATCH 34/53] Automatic linting --- settings/main.py | 5 ++--- settings/settings_global.py | 30 ++---------------------------- 2 files changed, 4 insertions(+), 31 deletions(-) diff --git a/settings/main.py b/settings/main.py index e257e516e..5147ec283 100644 --- a/settings/main.py +++ b/settings/main.py @@ -264,15 +264,14 @@ LOGGING = { STORAGES = { 'default': { 'BACKEND': env.str( - 'DJANGO_STORAGES_DEFAULT_BACKEND', - 'django.core.files.storage.FileSystemStorage' + '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' + 'wger.core.storage.LenientManifestStaticFilesStorage', ), }, } diff --git a/settings/settings_global.py b/settings/settings_global.py index 450ff4ebe..90cc66030 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -56,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', @@ -74,20 +72,15 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', # 'wger.trophies', - # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', - # The sitemaps app 'django.contrib.sitemaps', - # thumbnails 'easy_thumbnails', - # Form renderer helper 'crispy_forms', 'crispy_bootstrap5', - # REST-API 'rest_framework', 'rest_framework.authtoken', @@ -95,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', ] @@ -128,31 +113,23 @@ MIDDLEWARE = [ '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 ] @@ -401,10 +378,7 @@ 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', } @@ -425,7 +399,7 @@ SPECTACULAR_SETTINGS = { 'SWAGGER_UI_DIST': 'SIDECAR', 'SWAGGER_UI_FAVICON_HREF': 'SIDECAR', 'REDOC_DIST': 'SIDECAR', - 'COMPONENT_SPLIT_REQUEST': True + 'COMPONENT_SPLIT_REQUEST': True, } # From 290faf0a80b372fcc1672b6153c28e086d6756b0 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Thu, 15 Jan 2026 16:37:15 +0100 Subject: [PATCH 35/53] Prettify the output of the statistics calculation --- .../commands/recalculate_statistics.py | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) 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( From 5a6213c477abdeebea231fceac5baf9f08257536 Mon Sep 17 00:00:00 2001 From: "E. Ta." Date: Thu, 15 Jan 2026 00:32:16 +0100 Subject: [PATCH 36/53] Translated using Weblate (Arabic (Saudi Arabia)) Currently translated at 12.4% (75 of 603 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/ar_SA/ --- wger/locale/ar_SA/LC_MESSAGES/django.po | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index 75c1d2fb0..f05929cf4 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/LC_MESSAGES/django.po @@ -9,8 +9,8 @@ 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-12-31 21:36+0000\n" -"Last-Translator: MR \n" +"PO-Revision-Date: 2026-01-16 00:01+0000\n" +"Last-Translator: \"E. Ta.\" \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language: ar_SA\n" @@ -19,7 +19,7 @@ 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 5.15.1\n" +"X-Generator: Weblate 5.15.2\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -302,16 +302,20 @@ 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" @@ -345,15 +349,15 @@ 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" From 5367fde51bae107a59290fcb7836764e03c860fe Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 17 Jan 2026 14:10:42 +0100 Subject: [PATCH 37/53] Extract trophy data so it can be translated --- wger/i18n.tpl | 42 ++ wger/locale/ar_SA/LC_MESSAGES/django.po | 476 ++++++++++++------ wger/locale/bg/LC_MESSAGES/django.po | 528 +++++++++++++------- wger/locale/ca/LC_MESSAGES/django.po | 546 ++++++++++++++------- wger/locale/cs/LC_MESSAGES/django.po | 544 ++++++++++++++------- wger/locale/da/LC_MESSAGES/django.po | 504 +++++++++++++------ wger/locale/de/LC_MESSAGES/django.po | 545 ++++++++++++++------- wger/locale/el/LC_MESSAGES/django.po | 539 ++++++++++++++------- wger/locale/es/LC_MESSAGES/django.po | 545 ++++++++++++++------- wger/locale/fa/LC_MESSAGES/django.po | 505 +++++++++++++------ wger/locale/fi/LC_MESSAGES/django.po | 520 ++++++++++++++------ wger/locale/fr/LC_MESSAGES/django.po | 558 ++++++++++++++------- wger/locale/he/LC_MESSAGES/django.po | 482 ++++++++++++------ wger/locale/hi/LC_MESSAGES/django.po | 474 ++++++++++++------ wger/locale/hr/LC_MESSAGES/django.po | 549 ++++++++++++++------- wger/locale/hu/LC_MESSAGES/django.po | 527 +++++++++++++------- wger/locale/it/LC_MESSAGES/django.po | 545 ++++++++++++++------- wger/locale/ja/LC_MESSAGES/django.po | 483 ++++++++++++------ wger/locale/ko/LC_MESSAGES/django.po | 507 +++++++++++++------ wger/locale/nl/LC_MESSAGES/django.po | 565 +++++++++++++++------- wger/locale/no/LC_MESSAGES/django.po | 564 ++++++++++++++------- wger/locale/os/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/pl/LC_MESSAGES/django.po | 542 ++++++++++++++------- wger/locale/pt/LC_MESSAGES/django.po | 557 ++++++++++++++------- wger/locale/ro/LC_MESSAGES/django.po | 500 +++++++++++++------ wger/locale/ru/LC_MESSAGES/django.po | 553 ++++++++++++++------- wger/locale/sk/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/sl/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/sr/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/sv/LC_MESSAGES/django.po | 552 ++++++++++++++------- wger/locale/ta/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/th/LC_MESSAGES/django.po | 452 +++++++++++------ wger/locale/tr/LC_MESSAGES/django.po | 540 ++++++++++++++------- wger/locale/uk/LC_MESSAGES/django.po | 549 ++++++++++++++------- wger/locale/zh_Hans/LC_MESSAGES/django.po | 550 ++++++++++++++------- wger/trophies/urls.py | 1 + 36 files changed, 11990 insertions(+), 5614 deletions(-) diff --git a/wger/i18n.tpl b/wger/i18n.tpl index fa430982c..f109a1557 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 "Legend" %} +{% 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 75c1d2fb0..b1894678a 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/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 13:11+0000\n" "PO-Revision-Date: 2025-12-31 21:36+0000\n" "Last-Translator: MR \n" "Language-Team: Arabic (Saudi Arabia) 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 "" @@ -2716,6 +2898,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2787,7 +2973,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2890,14 +3076,6 @@ msgstr "" msgid "Re-Submit" msgstr "" -#, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "المعلومات الشخصية" - -#~ msgid "Sample workout" -#~ 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..4bd9b5dd8 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 #, 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:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +142,35 @@ msgstr "" msgid "Delete" msgstr "Изтрии" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Коментирай" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Какво искаш да кажеш?" @@ -311,7 +312,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -384,18 +385,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -419,7 +428,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 +446,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 +461,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 +513,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 +579,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 +627,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 "Администрация" @@ -709,7 +707,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 +716,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 +810,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 "Особености" @@ -903,19 +906,19 @@ msgstr "Преглед" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -924,7 +927,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 "" @@ -952,7 +955,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1033,7 +1036,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 +1123,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 "" @@ -1165,7 +1173,7 @@ 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 @@ -1188,15 +1196,15 @@ msgstr "" "този сайт да направи за теб. Чувствай се свободен да ги редактираш или " "изтриеш!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Обратна връзка" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Вашият съвет/коментар бе изпратен успешно. Благодарим ви!" @@ -1209,39 +1217,39 @@ 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 "" @@ -1304,12 +1312,22 @@ msgstr "" msgid "Other" msgstr "Други" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "Тегло" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1361,16 +1379,6 @@ msgstr "" 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" @@ -1397,13 +1405,13 @@ msgstr "Ден за упражнение" msgid "Action" msgstr "Действия" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Потребител" @@ -1457,7 +1465,7 @@ msgstr "" msgid "Add muscle" msgstr "Добави мускул" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1529,7 +1537,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Количество" @@ -1547,12 +1555,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1602,11 +1610,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 "" @@ -1920,6 +1923,190 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2157,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ред" @@ -1997,35 +2200,35 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Дата на създаване" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 #, fuzzy #| msgid "Workouts schedules" msgid "Workout template" msgstr "График на тренировки" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2119,52 +2322,30 @@ msgstr "Тренировка за %s" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2209,11 +2390,6 @@ msgstr "" 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 "" @@ -2431,6 +2607,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 "" @@ -2796,6 +2976,10 @@ msgstr "" msgid "Account" msgstr "Количество" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Табло" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workouts schedules" @@ -2871,7 +3055,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2974,14 +3158,20 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "Серии" +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height (in)" +#~ msgstr "Тегло" -#~ msgid "Rest day" -#~ msgstr "Ден за почивка" +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (kg)" +#~ msgstr "Запис на тегло" -#~ msgid "Nutritional data" -#~ msgstr "Хранителни данни" +#, fuzzy +#~| msgid "Weight log" +#~ msgid "Weight (lbs)" +#~ msgstr "Запис на тегло" #~ msgid "Workouts" #~ msgstr "Тренировки" @@ -2989,9 +3179,6 @@ msgstr "" #~ msgid "About us" #~ msgstr "За нас" -#~ msgid "Sample workout" -#~ msgstr "Примерна тренировка" - #~ msgid "Sample day" #~ msgstr "Примерен ден" @@ -3210,9 +3397,6 @@ msgstr "" #~ msgid "Edit workout" #~ msgstr "Редактирай тренировката" -#~ msgid "Copy workout" -#~ msgstr "Копирай тренировка" - #~ msgid "Move me" #~ msgstr "Премести ме" @@ -3231,9 +3415,6 @@ msgstr "" #~ msgid "Delete schedule" #~ msgstr "Изтрий график" -#~ msgid "Weight log" -#~ msgstr "Запис на тегло" - #~ msgid "Weight log for workout" #~ msgstr "Запис за тежести на тренировка" @@ -3291,8 +3472,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 +3544,6 @@ msgstr "" #~ msgid "Your nutrition plans" #~ msgstr "Твоите планове за хранене" -#~ msgid "Contents" -#~ msgstr "Съставки" - #~ msgid "No items for this meal." #~ msgstr "Няма артикули за това ядене." @@ -3560,8 +3738,8 @@ msgstr "" #~ "(no registration needed)" #~ msgstr "" #~ "Използвай публичната група за да получиш подкрепа за твоята\n" -#~ "локална wger инсталация или да дискутираш проблеми или новата ти идея и т." -#~ "н.\n" +#~ "локална wger инсталация или да дискутираш проблеми или новата ти идея и " +#~ "т.н.\n" #~ "(не е нужна регистрация)" #~ msgid "Open feedback form" @@ -3575,8 +3753,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 +3763,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..967f61519 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Dades personals" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Recordatoris d'entrenament" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +143,35 @@ msgstr "Introduïu la contrasenya actual." msgid "Delete" msgstr "Esborra" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Contrasenya invàlida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contacte" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Comentari" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Què voleu dir?" @@ -321,7 +322,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)" @@ -399,18 +400,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -434,7 +443,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 +474,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 +498,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 +548,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 +614,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 +656,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ó" @@ -739,7 +736,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 +745,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 +839,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" @@ -937,19 +939,19 @@ msgstr "Visió general" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripció" @@ -958,7 +960,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" @@ -986,7 +988,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1067,7 +1069,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 +1160,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" @@ -1203,7 +1210,7 @@ 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 @@ -1225,15 +1232,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Escriviu-nos" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Envia" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Els vostres comentaris s'han enviat amb èxit. Gràcies!" @@ -1246,39 +1253,39 @@ 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 "" @@ -1339,12 +1346,22 @@ msgstr "Foto" msgid "Other" msgstr "Altres" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Imatge" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "Pes" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Imatge principal" @@ -1400,16 +1417,6 @@ msgstr "" 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 "" @@ -1434,13 +1441,13 @@ msgstr "Dia d'entrenament" msgid "Action" msgstr "Accions" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Usuari" @@ -1499,7 +1506,7 @@ msgstr "Voleu esborrar l'equipament?" msgid "Add muscle" msgstr "Afegeix múscul" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Només se suporten els formats PNG i JPEG" @@ -1569,7 +1576,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Quantitat" @@ -1587,12 +1594,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data de finalització" @@ -1644,12 +1651,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" @@ -1973,6 +1974,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 "Contingut" + +#: i18n.tpl:43 +msgid "Dedicated" +msgstr "" + +#: i18n.tpl:44 +msgid "Obsessed" +msgstr "" + +#: i18n.tpl:45 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2213,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ordre" @@ -2056,34 +2260,34 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Unitat" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Data de creació" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Plantilla d'entrenament" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Plantilla pública" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "L'hora d'inici no pot ser posterior a la de finalització." @@ -2191,41 +2395,19 @@ msgstr "Pla d'entrenament per a %s" msgid "Value" msgstr "Valor" -#: 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,12 +2415,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2283,11 +2465,6 @@ msgstr "" 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 "" @@ -2493,6 +2670,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 "" @@ -2852,6 +3035,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,7 +3112,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -3028,6 +3215,36 @@ msgstr "" msgid "Re-Submit" msgstr "" +#, 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 +3257,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 +3680,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 +3727,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 +3774,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..52235f319 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Osobní data" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Připomenutí tréninku" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +146,35 @@ msgstr "Zadejte prosím vaše současné heslo." msgid "Delete" msgstr "Smazat" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Chybné heslo" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Komentář" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Co cheš říci?" @@ -321,7 +322,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)" @@ -399,18 +400,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -434,7 +443,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 +473,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 +497,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 +545,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 +611,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 +653,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" @@ -734,7 +731,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 +740,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 +835,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" @@ -930,19 +932,19 @@ msgstr "Přehled" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Popis" @@ -951,7 +953,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" @@ -979,7 +981,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1060,7 +1062,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 +1149,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" @@ -1192,7 +1199,7 @@ 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 @@ -1214,15 +1221,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Zpětná vazba" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Zaslat" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Vaše zpětná vazba byla zaslána. Děkujeme!" @@ -1235,39 +1242,39 @@ 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" @@ -1326,12 +1333,20 @@ msgstr "Foto" msgid "Other" msgstr "Ostatní" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Obrázek" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Výška" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Šířka" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Hlavní obrázek" @@ -1381,14 +1396,6 @@ msgstr "Velikost" 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" @@ -1409,13 +1416,13 @@ msgstr "Administrativní historie cvičení" msgid "Action" msgstr "Akce" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Uživatel" @@ -1467,7 +1474,7 @@ msgstr "Smazat nářadí?" msgid "Add muscle" msgstr "Přidat sval" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Podporovány jsou pouze formáty PNG a JPEG" @@ -1538,7 +1545,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Množství" @@ -1556,12 +1563,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Upravit datum" @@ -1613,11 +1620,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ů" @@ -1935,6 +1937,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2176,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Řazení" @@ -2018,19 +2223,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Jednotka" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Datum vytvoření" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Tréninková šablona" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2038,15 +2243,15 @@ 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Veřejná šablona" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Čas začátku nemůže být po čase ukončení." @@ -2156,35 +2361,19 @@ msgstr "Trénink pro %s" msgid "Value" msgstr "Hodnota" -#: 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,12 +2381,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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ě" @@ -2240,11 +2429,6 @@ msgstr "Odkaz na produkt" 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" @@ -2481,6 +2665,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" @@ -2864,6 +3052,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,7 +3130,7 @@ msgstr "Formát data" msgid "You have to enter your weight" msgstr "Zadejte nový údaj své hmotnosti" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Vložit hmotnost" @@ -3065,6 +3257,34 @@ msgstr "" msgid "Re-Submit" msgstr "Znovu poslat" +#, 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 +3297,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 +3339,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 +3459,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 +3743,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 +3777,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 +3848,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 +3912,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 +4621,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..52dd810ca 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 #, 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:136 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:175 msgid "Personal data" msgstr "Personlige oplysninger" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Træningspåmindelser" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,37 +143,37 @@ msgstr "Indtast venligst dit nuværende kodeord." msgid "Delete" msgstr "Slet" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Ukorrekt kodeord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 #, 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Kommentar" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Hvad vil du gerne sige?" @@ -322,7 +323,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)" @@ -398,18 +399,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -433,7 +442,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 +467,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 +486,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 +536,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 +602,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 +645,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" @@ -727,7 +724,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 +733,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 +827,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" @@ -924,19 +926,19 @@ msgstr "Oversigt" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivelse" @@ -945,7 +947,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" @@ -973,7 +975,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1054,7 +1056,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 +1143,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" @@ -1186,7 +1193,7 @@ 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 @@ -1208,15 +1215,15 @@ msgstr "" "og ernærningsplanposter så du bedre kan se hvad denne hjemmeside kan. Du kan " "redigere eller slette dem!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Indsend" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Din feedback blev sendt. Tak!" @@ -1229,39 +1236,39 @@ 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" @@ -1320,12 +1327,20 @@ msgstr "Foto" msgid "Other" msgstr "Øvrige" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Billede" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Højdde" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Bredde" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Primære billede" @@ -1375,14 +1390,6 @@ msgstr "Størrelse" 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" @@ -1403,13 +1410,13 @@ msgstr "Øvelses administrator historik" msgid "Action" msgstr "Handlinger" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Bruger" @@ -1461,7 +1468,7 @@ msgstr "Slet udstyr?" msgid "Add muscle" msgstr "Tilføj muskler" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Kun PNG og JPEG formatter er understøttet" @@ -1531,7 +1538,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Mængde" @@ -1549,12 +1556,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdato" @@ -1607,12 +1614,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" @@ -1929,6 +1930,189 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2164,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "Øvelse" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Orden" @@ -2010,19 +2210,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Enhed" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Oprettelsesdato" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Træningsskabelon" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2030,15 +2230,15 @@ 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Offentlig skabelon" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Startiden kan ikke være efter sluttiden." @@ -2132,46 +2332,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2214,11 +2398,6 @@ msgstr "" 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 "" @@ -2424,6 +2603,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 "" @@ -2765,6 +2950,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,7 +3027,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2941,6 +3130,18 @@ msgstr "" msgid "Re-Submit" msgstr "" +#, 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 +3154,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 +3343,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..75c7ef9e1 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Persönliche Daten" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Trainingsplanerinnerungen" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +147,35 @@ msgstr "Bitte dein aktuelles Passwort eingeben." msgid "Delete" msgstr "Löschen" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Ungültiges Passwort" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Kommentar" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Was willst du sagen?" @@ -323,7 +324,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)" @@ -401,18 +402,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -436,7 +445,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 +470,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 +488,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 +542,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 +608,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 +650,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" @@ -730,7 +728,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 +737,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 +831,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" @@ -928,19 +931,19 @@ msgstr "Übersicht" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschreibung" @@ -949,7 +952,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" @@ -977,7 +980,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1058,7 +1061,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 +1148,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" @@ -1190,7 +1198,7 @@ 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 @@ -1213,15 +1221,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Rückmeldung" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Abschicken" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Dein Feedback wurde erfolgeich versendet. Danke!" @@ -1234,39 +1242,39 @@ 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" @@ -1325,12 +1333,20 @@ msgstr "Foto" msgid "Other" msgstr "Andere" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Bild" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Höhe" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Breite" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Hauptbild" @@ -1380,14 +1396,6 @@ msgstr "Größe" 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" @@ -1408,13 +1416,13 @@ msgstr "Verwaltungsverlauf ausüben" msgid "Action" msgstr "Aktionen" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Benutzer" @@ -1466,7 +1474,7 @@ msgstr "Gerät löschen?" msgid "Add muscle" msgstr "Muskel hinzufügen" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Nur die PNG und JPEG-Formate werden unterstützt" @@ -1538,7 +1546,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Menge" @@ -1556,12 +1564,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Enddatum" @@ -1613,11 +1621,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" @@ -1934,6 +1937,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legende" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2176,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Routine wird bald auslaufen" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Routine" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Reihenfolge" @@ -2013,19 +2219,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Einheit" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Erstellungsdatum" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Trainingsvorlage" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2033,15 +2239,15 @@ msgstr "" "Wenn du ein Training als Vorlage markierst, wird es eingefroren und du " "kannst Kopien davon erstellen" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Öffentliche Vorlage" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Die Startzeit kann nicht vor der Endzeit liegen." @@ -2151,46 +2357,30 @@ msgstr "Trainingsplan für %s" msgid "Value" msgstr "Wert" -#: 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2233,13 +2423,6 @@ msgstr "Link zum Produkt" 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" @@ -2481,6 +2664,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" @@ -2870,6 +3057,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,7 +3135,7 @@ msgstr "Datumsformat" msgid "You have to enter your weight" msgstr "Du musst dein Gewicht eingeben" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Gewichtseintrag" @@ -3077,6 +3268,35 @@ msgstr "" msgid "Re-Submit" msgstr "Wieder abschicken" +#, 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 +3309,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 +3367,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 +3773,6 @@ msgstr "Wieder abschicken" #~ msgid "Edit workout" #~ msgstr "Trainingsplan bearbeiten" -#~ msgid "Copy workout" -#~ msgstr "Trainingsplan kopieren" - #~ msgid "Copy" #~ msgstr "Kopieren" @@ -3608,9 +3807,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 +3880,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 +3948,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 +4662,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 +4672,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..d2bdda7ff 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Ημερομηνία Γέννησης" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "Προσωπικά δεδομένα" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Υπενθύμιση προπόνησης" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:218 +#: core/forms.py:238 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:259 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:261 msgid "Please enter your current password." msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδικό σας." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +146,35 @@ msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδ msgid "Delete" msgstr "Διαγραφή" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Λάθος κωδικός" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Επικοινωνία" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "Κάποιος τρόπος απάντησής σας (ηλεκτρονικό ταχυδρομείο κ.λπ.)" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Σχόλια" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Τί θέλετε να πείτε;" @@ -324,7 +325,7 @@ msgstr "" msgid "Age" msgstr "Ηλικία" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Ύψος (cm)" @@ -403,18 +404,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -438,7 +447,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 +474,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 +498,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 +552,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 +618,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 +662,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 "Διαχείριση" @@ -743,7 +740,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 +749,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 +846,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 "Δυνατότητες" @@ -944,19 +946,19 @@ msgstr "Έπισκόπηση" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Περιγραφή" @@ -965,7 +967,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 "Τελευταία δραστηριότητα" @@ -993,7 +995,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1074,7 +1076,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 +1163,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" @@ -1206,7 +1213,7 @@ 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 @@ -1229,15 +1236,15 @@ msgstr "" "δείτε τι\tμπορεί να κάνει αυτός ο ιστότοπος. Νιώστε ελεύθερος να τις " "επεξεργαστείτε ή να τις διαγράψετε!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Αναπληροφόρηση" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Υποβολή" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Η αναπληροφόρηση σας αποστάλθηκε με επιτυχία. Ευχαριστούμε!" @@ -1250,39 +1257,39 @@ 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" @@ -1341,12 +1348,20 @@ msgstr "Φωτογραφία" msgid "Other" msgstr "Άλλα" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Εικόνα" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Ύψος" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Πλάτος" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Κύρια εικόνα" @@ -1396,14 +1411,6 @@ msgstr "Μέγεθος" 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" @@ -1424,13 +1431,13 @@ msgstr "Άσκηση ιστορικό διαχειριστή" msgid "Action" msgstr "Δράση" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Χρήστης" @@ -1483,7 +1490,7 @@ msgstr "Διαγραφή εξοπλισμού;" msgid "Add muscle" msgstr "Νέος μύς" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Μόνο PNG και JPEG εικόνες υποστηρίζονται" @@ -1556,7 +1563,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Ποσότητα" @@ -1574,12 +1581,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Ημερομηνία λήξης" @@ -1630,12 +1637,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 "Επισκόπηση των ανενεργών μελών" @@ -1953,6 +1954,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 i18n.tpl:47 +msgid "Legend" +msgstr "Υπόμνημα" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2195,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/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Η προπόνηση θα λήξει σε λίγο" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Διάταξη" @@ -2038,19 +2242,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Μονάδα" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Ημερομηνία δημιουργίας" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Υπόδειγμα προπόνησης" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2058,15 +2262,15 @@ msgstr "" "Η επισήμανση μιας προπόνησης ως υπόδειγμα θα την δεσμεύσει και θα σας " "επιτρέψει να δημιουργήσετε αντίγραφά της" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Δημόσιο υπόδειγμα" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "Ένα δημόσιο υπόδειγμα είναι διαθέσιμο σε άλλους χρήστες" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Η ώρα έναρξης δεν μπορεί να είναι μετά την ώρα λήξης." @@ -2182,35 +2386,19 @@ msgstr "Προπόνηση για %s" msgid "Value" 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,12 +2406,12 @@ msgstr "" "Επιπλέον θερμίδες θα προστεθούν στην βασική τάση (για αφαίρεση, εισάγετε " "αρνητικό αριθμό)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 +#: nutrition/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "Συστατικά" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Αναζητήστε επίσης ονόματα στα αγγλικά" @@ -2266,11 +2454,6 @@ msgstr "Σύνδεσμος προς το προϊόν" 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 "Κατηγορίες συστατικών" @@ -2521,6 +2704,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 "Σύνολο" @@ -2912,6 +3099,10 @@ msgstr "" msgid "Account" msgstr "Λογαριασμός" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Πίνακας Ελέγχου" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Ρουτίνες προπόνησης" @@ -2986,7 +3177,7 @@ msgstr "Μορφή ημερομηνίας" msgid "You have to enter your weight" msgstr "Πρέπει να εισάγετε το βάρος σας" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Εισαγωγή βάρους" @@ -3118,6 +3309,30 @@ msgstr "" msgid "Re-Submit" 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 +3345,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 +3390,6 @@ msgstr "Επανυποβολή" #~ "Λάβετε τον πηγαίο κώδικα αυτής της εφαρμογής και του διακομιστή της στο " #~ "github" -#~ msgid "Sample workout" -#~ msgstr "Δείγμα προπόνησης" - #~ msgid "Sample day" #~ msgstr "Δείγμα ημέρας" @@ -3594,9 +3794,6 @@ msgstr "Επανυποβολή" #~ msgid "Edit workout" #~ msgstr "Επεξεργασία προπόνησης" -#~ msgid "Copy workout" -#~ msgstr "Αντιγραφή προπόνησης" - #~ msgid "Copy" #~ msgstr "Αντιγραφή" @@ -3633,9 +3830,6 @@ msgstr "Επανυποβολή" #~ msgid "Your BMI is: " #~ msgstr "Το BMI σας είναι: " -#~ msgid "Legend" -#~ msgstr "Υπόμνημα" - #~ msgid "Adipositas III" #~ msgstr "Υπέρβαρο III" @@ -3709,9 +3903,6 @@ msgstr "Επανυποβολή" #~ msgid "Delete schedule" #~ msgstr "Διαγραφή προγράμματος" -#~ msgid "Weight log" -#~ msgstr "Εγγραφή βάρους" - #~ msgid "Weight log for workout" #~ msgstr "Εγγραφή βάρους για προπόνηση" @@ -3779,8 +3970,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 +4448,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 +4457,9 @@ msgstr "Επανυποβολή" #~ "η διαδικασία ανάπτυξης είναι ανοιχτή και πλήρως διαθέσιμο σε " #~ "οποιονδήποτε.\n" #~ "Αν είστε νέος στον κόσμο του ελεύθερου λογισμικού, σας συνιστούμε να " -#~ "ρίξετε μιά ματιά σε αυτό το άρθρο που περιληπτικά αναφέρει πως τα προγράμματα ανοιχτού κώδικα δουλεύουν " +#~ "ρίξετε μιά ματιά σε αυτό το άρθρο " +#~ "που περιληπτικά αναφέρει πως τα προγράμματα ανοιχτού κώδικα δουλεύουν " #~ "καλά." #~ msgid "" diff --git a/wger/locale/es/LC_MESSAGES/django.po b/wger/locale/es/LC_MESSAGES/django.po index 5630e64b0..e1829c365 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Datos personales" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Recordatorios de entrenamiento" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +151,35 @@ msgstr "Por favor, ingrese su contraseña actual." msgid "Delete" msgstr "Borrar" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Contraseña incorrecta" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contacto" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Comentario" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "¿Qué quieres decir?" @@ -330,7 +331,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)" @@ -408,18 +409,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -443,7 +452,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 +476,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 +494,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 +546,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 +612,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 +654,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" @@ -734,7 +732,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 +741,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 +838,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" @@ -935,19 +938,19 @@ msgstr "Resumen" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripción" @@ -956,7 +959,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" @@ -984,7 +987,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1065,7 +1068,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 +1158,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" @@ -1200,7 +1208,7 @@ 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 @@ -1222,15 +1230,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Comentarios" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Enviar" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Tu comentario ha sido enviado con éxito, ¡gracias!" @@ -1243,39 +1251,39 @@ 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" @@ -1334,12 +1342,20 @@ msgstr "Foto" msgid "Other" msgstr "Otros" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Imagen" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Altura" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Ancho" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Imagen principal" @@ -1389,14 +1405,6 @@ msgstr "Tamaño" 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" @@ -1417,13 +1425,13 @@ msgstr "Historial de administración de ejercicios" msgid "Action" msgstr "Acción" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Usuario" @@ -1475,7 +1483,7 @@ msgstr "¿Borrar equipo?" msgid "Add muscle" msgstr "Añadir músculo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Sólo los formatos PNG y JPEG están soportados" @@ -1546,7 +1554,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Cantidad" @@ -1564,12 +1572,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Fecha final" @@ -1621,11 +1629,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" @@ -1943,6 +1946,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Leyenda" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2185,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutina expirará pronto" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Rutina" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Orden" @@ -2022,19 +2228,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Unidad" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Fecha de creación" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Pantilla de entrenamiento" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2042,15 +2248,15 @@ msgstr "" "Marcando un entrenamiento como una plantilla lo bloqueará y te permitirá " "hacer copias de el" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Plantilla pública" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 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." @@ -2158,35 +2364,19 @@ msgstr "Rutina para %s" msgid "Value" msgstr "Valor" -#: 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,12 +2384,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2242,11 +2432,6 @@ msgstr "Enlace al producto" 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" @@ -2483,6 +2668,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" @@ -2867,6 +3056,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,7 +3134,7 @@ msgstr "Formato de fecha" msgid "You have to enter your weight" msgstr "Tienes que introducir su peso" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Entrada de peso" @@ -3069,6 +3262,34 @@ msgstr "" msgid "Re-Submit" msgstr "Re-enviar" +#, 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 +3302,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 +3360,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 +3743,6 @@ msgstr "Re-enviar" #~ msgid "Edit workout" #~ msgstr "Editar rutina" -#~ msgid "Copy workout" -#~ msgstr "Copiar rutina" - #~ msgid "Copy" #~ msgstr "Copiar" @@ -3577,9 +3777,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 +3848,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 +3913,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 +4615,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..330630056 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "برای بازنشانی رمز عبور استفاده می شود، به صورت اختیاری، یادآوری های ایمیل." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "تاریخ تولد" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "اطلاعات شخصی" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "یاداوری تمرین" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "استفاده شده برای بازیابی رمز عبور و به صورت اختیاری, یادآوری ایمیل" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "این ایمیل قبلا استفاده شده است." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "لطفا رمز عبور فعلی خود را وارد کنید." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +141,35 @@ msgstr "لطفا رمز عبور فعلی خود را وارد کنید." msgid "Delete" msgstr "حذف" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "رمز نامعتبر" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "ارتباط" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "راه های ارتباطی با شما(ایمیل و ... )" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "نظر" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "چه میخواهید بگویید؟" @@ -315,7 +316,7 @@ msgstr "" msgid "Age" msgstr "سن" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "قد (سانتی متر)" @@ -392,18 +393,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -427,7 +436,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 +459,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 +474,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 +524,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 +590,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 +638,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 "" @@ -722,7 +719,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 +728,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 +823,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 "امکانات" @@ -915,19 +917,19 @@ msgstr "بازنگری" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -936,7 +938,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 "" @@ -964,7 +966,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1045,7 +1047,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 +1134,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 "" @@ -1177,7 +1184,7 @@ 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 @@ -1196,15 +1203,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1217,39 +1224,39 @@ 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 "" @@ -1308,12 +1315,22 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "وزن" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1365,16 +1382,6 @@ msgstr "" 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 "" @@ -1397,13 +1404,13 @@ msgstr "" msgid "Action" msgstr "امکانات" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1455,7 +1462,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1525,7 +1532,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1543,12 +1550,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1598,11 +1605,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 "" @@ -1920,6 +1922,184 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2150,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1997,35 +2193,35 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 #, fuzzy #| msgid "Workouts schedules" msgid "Workout template" msgstr "برنامه تمرین" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2119,52 +2315,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2209,11 +2383,6 @@ msgstr "" 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 "" @@ -2419,6 +2588,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 "" @@ -2758,6 +2933,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "داشبورد" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2831,7 +3010,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2934,10 +3113,27 @@ msgstr "" msgid "Re-Submit" msgstr "" +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "بازگشت به \"%(target)s\"" + #, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" -#~ msgstr "برنامه غذایی" +#~| 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 "تمرینات" @@ -2945,9 +3141,6 @@ 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..75f8415af 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Henkilökohtaiset tiedot" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Harjoittelumuistutukset" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 msgid "Please enter your current password." msgstr "Anna nykyinen salasanasi." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +144,35 @@ msgstr "Anna nykyinen salasanasi." msgid "Delete" msgstr "Poista" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Väärä salasana" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Yhteydenotto" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Kommentti" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Mitä haluat sanoa?" @@ -321,7 +322,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)" @@ -385,8 +386,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,18 +399,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -433,7 +442,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 +465,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 +485,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 +535,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 +601,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 +643,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" @@ -725,7 +721,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 +730,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 +824,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" @@ -921,19 +922,19 @@ msgstr "Yleiskatsaus" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Kuvaus" @@ -942,7 +943,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" @@ -970,7 +971,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1051,7 +1052,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 +1142,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" @@ -1186,7 +1192,7 @@ 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 @@ -1208,15 +1214,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Palaute" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Lähetä" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Palautteesi lähetys onnistui. Kiitos!" @@ -1229,39 +1235,39 @@ 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" @@ -1320,12 +1326,20 @@ msgstr "Valokuva" msgid "Other" msgstr "Muu" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Kuva" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Korkeus" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Leveys" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Pääkuva" @@ -1375,14 +1389,6 @@ msgstr "Koko" 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" @@ -1403,13 +1409,13 @@ msgstr "Harjoitusten järjestelmänvalvojan historia" msgid "Action" msgstr "Toiminta" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Käyttäjä" @@ -1461,7 +1467,7 @@ msgstr "Poistetaanko varuste?" msgid "Add muscle" msgstr "Lisää lihas" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Vain PNG- ja JPEG-formaatit ovat tuettuja" @@ -1532,7 +1538,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Summa" @@ -1550,12 +1556,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Päättymispäivämäärä" @@ -1607,11 +1613,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ä" @@ -1928,6 +1929,189 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2164,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutiini päättyy pian" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Rutiini" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Järjestys" @@ -2007,19 +2207,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Yksikkö" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Luontipäivä" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Harjoitusmalli" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2027,15 +2227,15 @@ msgstr "" "Harjoituksen merkitseminen malliksi estää sen muokkauksen ja sallii sen " "kopioimisen" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Julkinen malli" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Aloitusaika ei voi olla päättymisajan jälkeen." @@ -2089,7 +2289,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 "" @@ -2141,47 +2342,31 @@ msgstr "Harjoitus %s" msgid "Value" msgstr "Arvo" -#: 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2224,11 +2409,6 @@ msgstr "Linkki tuotteeseen" 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 "" @@ -2434,6 +2614,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 "" @@ -2773,6 +2959,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,7 +3034,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2947,6 +3137,30 @@ msgstr "" msgid "Re-Submit" msgstr "" +#, 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 +3173,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..8409dceee 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Données personnelles" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Rappels d’entraînement" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +157,35 @@ msgstr "Veuillez entrer votre mot de passe actuel." msgid "Delete" msgstr "Supprimer" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Mot de passe invalide" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contact" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Commentaire" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Que voulez-vous nous dire ?" @@ -334,7 +335,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)" @@ -412,18 +413,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -447,7 +456,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 +480,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 +495,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 +550,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 +616,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 +658,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" @@ -740,7 +736,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 +745,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 +842,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" @@ -941,19 +942,19 @@ msgstr "Aperçu" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Description" @@ -962,7 +963,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é" @@ -990,7 +991,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1071,7 +1072,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 +1161,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" @@ -1205,7 +1211,7 @@ 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 @@ -1228,15 +1234,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Remarques" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Envoyer" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Votrecommentaire a été envoyé avec succès. Merci !" @@ -1249,39 +1255,39 @@ 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" @@ -1340,12 +1346,20 @@ msgstr "Photo" msgid "Other" msgstr "Autres" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Image" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Taille" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Largeur" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Image principale" @@ -1395,14 +1409,6 @@ msgstr "Taille" 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" @@ -1423,13 +1429,13 @@ msgstr "Historique d'exercice admin" msgid "Action" msgstr "Action" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Utilisateur" @@ -1481,7 +1487,7 @@ msgstr "Supprimer équipement ?" msgid "Add muscle" msgstr "Ajouter un muscle" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Seuls les formats PNG et JPEG sont pris en charge" @@ -1555,7 +1561,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Quantité" @@ -1573,12 +1579,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Date de fin" @@ -1630,11 +1636,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" @@ -1954,6 +1955,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Légende" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2195,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "La routine expirera bientôt" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Routine" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ordre" @@ -2034,19 +2238,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Unité" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Date de création" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Modèle d'entraînement" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2054,15 +2258,15 @@ 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Modèle public" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 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." @@ -2172,35 +2376,19 @@ msgstr "Séance pour %s" msgid "Value" msgstr "Valeur" -#: 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,12 +2396,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2256,12 +2444,6 @@ msgstr "Lien vers le produit" 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" @@ -2304,8 +2486,8 @@ 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é »" +"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" @@ -2504,6 +2686,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" @@ -2897,6 +3083,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,7 +3161,7 @@ msgstr "Format de date" msgid "You have to enter your weight" msgstr "Vous devez entrer votre poids" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Entrée de poids" @@ -3099,6 +3289,36 @@ msgstr "" msgid "Re-Submit" msgstr "Renvoyer" +#, 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 +3331,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 +3389,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 +3791,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 +3825,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 +3899,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 +3967,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 +4694,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 +4704,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..2cf706b39 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." -msgstr "בשימוש עבור איפוס סיסמה וגם, באופן אופציונלי, לתזכורות בדואר האלקטרוני." +msgstr "" +"בשימוש עבור איפוס סיסמה וגם, באופן אופציונלי, לתזכורות בדואר האלקטרוני." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "תאריך לידה" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "נתונים אישיים" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "תזכורות לאימונים" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "משמש לשחזור הסיסמה ולתזכורות אופציונליות." -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "כתובת דוא״ל זו כבר נמצאת בשימוש." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "נא להקליד את סיסמתך הנוכחית." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +139,35 @@ msgstr "נא להקליד את סיסמתך הנוכחית." msgid "Delete" msgstr "מחיקה" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "סיסמה שגויה" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "יצירת קשר" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "הערה" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "מה ברצונך לומר?" @@ -298,7 +300,7 @@ msgstr "" msgid "Age" msgstr "גיל" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "גובה (ס״מ)" @@ -371,18 +373,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -406,7 +416,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 +434,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 +449,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 +497,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 +563,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 +605,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 "ניהול" @@ -684,7 +683,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 +692,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 +782,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,19 +876,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "תיאור" @@ -893,7 +897,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 "פעילות אחרונה" @@ -921,7 +925,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1002,7 +1006,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 +1093,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 "" @@ -1134,7 +1143,7 @@ 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 @@ -1153,15 +1162,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1174,39 +1183,39 @@ 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 "" @@ -1265,12 +1274,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1320,14 +1337,6 @@ msgstr "" 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 "" @@ -1348,13 +1357,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1406,7 +1415,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1476,7 +1485,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1494,12 +1503,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1549,11 +1558,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 "" @@ -1863,6 +1867,184 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2095,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1940,33 +2138,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2060,46 +2258,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2142,11 +2324,6 @@ msgstr "" 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 "" @@ -2352,6 +2529,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 "" @@ -2687,6 +2870,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "לוח מחוונים" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2758,7 +2945,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2861,17 +3048,6 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "RiR" -#~ msgstr "מנוחה בין סטים" - -#, fuzzy -#~| msgid "Sample nutritional plan" -#~ msgid "Nutritional data" -#~ msgstr "דיאטה לדוגמא" - -#~ msgid "Sample workout" -#~ 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..f903e4d88 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +139,35 @@ msgstr "" msgid "Delete" msgstr "मितादे" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "अवैध पासवर्ड" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -372,18 +373,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -407,7 +416,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 +434,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 +449,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 +497,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 +563,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 +605,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 "" @@ -687,7 +685,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 +694,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 +784,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 "" @@ -875,19 +878,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -896,7 +899,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 "" @@ -924,7 +927,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1005,7 +1008,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 +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 "" @@ -1137,7 +1145,7 @@ 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 @@ -1156,15 +1164,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1177,39 +1185,39 @@ 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 "" @@ -1268,12 +1276,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1323,14 +1339,6 @@ msgstr "" 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 "" @@ -1351,13 +1359,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1409,7 +1417,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1479,7 +1487,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1497,12 +1505,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1552,11 +1560,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 "" @@ -1866,6 +1869,182 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2095,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1943,33 +2138,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2063,46 +2258,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2145,11 +2324,6 @@ msgstr "" 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 "" @@ -2355,6 +2529,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 "" @@ -2690,6 +2870,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2761,7 +2945,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2864,14 +3048,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..fd6096f2d 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Osobni podaci" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Podsjetitelji za treninge" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +142,35 @@ msgstr "Upiši svoju aktualnu lozinku." msgid "Delete" msgstr "Izbriši" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Nevaljana lozinka" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Komentar" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Što želiš reći?" @@ -315,7 +315,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)" @@ -391,18 +391,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -426,7 +434,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 +457,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 +477,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 +527,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 +593,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 +635,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" @@ -716,7 +713,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 +722,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 +816,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 +882,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 @@ -913,19 +915,19 @@ msgstr "Pregled" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -934,7 +936,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" @@ -962,7 +964,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1043,7 +1045,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 +1132,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" @@ -1175,7 +1182,7 @@ 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 @@ -1193,19 +1200,19 @@ msgid "" "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!" +"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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Povratne informacije" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Pošalji" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Tvoje povratne informacije su uspješno poslane. Hvala!" @@ -1218,39 +1225,39 @@ 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" @@ -1309,12 +1316,20 @@ msgstr "Fotografija" msgid "Other" msgstr "Drugo" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Slika" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Visina" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Širina" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Glavna slika" @@ -1364,14 +1379,6 @@ msgstr "Veličina" 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" @@ -1392,13 +1399,13 @@ msgstr "Povijest administratora vježbe" msgid "Action" msgstr "Radnja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Korisnik" @@ -1450,7 +1457,7 @@ msgstr "Izbrisati opremu?" msgid "Add muscle" msgstr "Dodaj mičić" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Podržani su samo PNG i JPEG formati" @@ -1522,7 +1529,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Iznos" @@ -1540,12 +1547,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Datum kraja" @@ -1595,11 +1602,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" @@ -1914,6 +1916,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2155,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rutina će uskoro isteći" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Rutina" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Redoslijed" @@ -1993,19 +2198,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Jedinica" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Datum stvaranja" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Predložak za trening" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2013,15 +2218,15 @@ msgstr "" "Označavanje treninga kao predloška će ga zamrznuti i omogućiti ti da ga " "kopiraš" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Javni predložak" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Vrijeme početka ne može biti prije vremena kraja." @@ -2123,35 +2328,19 @@ msgstr "Trening za %s" msgid "Value" msgstr "Vrijednost" -#: 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,12 +2348,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2207,11 +2396,6 @@ msgstr "Poveznica za proizvod" 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" @@ -2447,6 +2631,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" @@ -2826,6 +3014,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,7 +3091,7 @@ msgstr "Format datuma" msgid "You have to enter your weight" msgstr "Moraš upisati svoju težinu" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Unos težine" @@ -3025,6 +3217,33 @@ msgstr "" msgid "Re-Submit" msgstr "Pošalji ponovo" +#, 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 +3255,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 +3311,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 +3693,6 @@ msgstr "Pošalji ponovo" #~ msgid "Edit workout" #~ msgstr "Uredi trening" -#~ msgid "Copy workout" -#~ msgstr "Kopiraj trening" - #~ msgid "Copy" #~ msgstr "Kopiraj" @@ -3526,9 +3727,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 +3796,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 +3861,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 +3945,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..a835db7bd 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Személyes adat" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Edzés emlékeztetők" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +143,35 @@ msgstr "Kérlek írd be a jelenlegi jelszavad." msgid "Delete" msgstr "Törlés" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Érvénytelen jelszó" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kapcsolat" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 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 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Mit szeretnél mondani?" @@ -310,7 +311,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)" @@ -383,18 +384,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -418,7 +427,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 +445,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 +460,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 +512,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 +578,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 +624,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ó" @@ -707,7 +704,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 +713,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 +803,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" @@ -897,19 +899,19 @@ msgstr "Áttekintés" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Leírás" @@ -918,7 +920,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" @@ -946,7 +948,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1027,7 +1029,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 +1116,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" @@ -1159,7 +1166,7 @@ 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 @@ -1178,15 +1185,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Visszajelzés" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "A visszajelzésed sikeresen elküldtük. Köszönjük!" @@ -1199,39 +1206,39 @@ 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 "" @@ -1292,12 +1299,22 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Kép" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "Súly" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1349,16 +1366,6 @@ msgstr "" 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 "" @@ -1383,13 +1390,13 @@ msgstr "Gyakorlati kategóriák" msgid "Action" msgstr "Műveletek" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Felhasználó" @@ -1443,7 +1450,7 @@ msgstr "Felszerelés törlése?" msgid "Add muscle" msgstr "Izom hozzáadása" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Csak PNG és JPEG formátumok támogatottak" @@ -1517,7 +1524,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1535,12 +1542,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1590,12 +1597,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 "" @@ -1909,6 +1910,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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2142,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Sorrend" @@ -1986,35 +2185,35 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Létrehozás dátuma" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 #, fuzzy #| msgid "Workout complete!" msgid "Workout template" msgstr "Edzés befejezve!" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "A kezdő időpont nem lehet a vég időpont után." @@ -2108,52 +2307,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2198,11 +2375,6 @@ msgstr "" 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 "" @@ -2408,6 +2580,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 "" @@ -2763,6 +2941,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,7 +3020,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2941,16 +3123,32 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "Sorozatok" +#, fuzzy, python-format +#~| msgid "Back to \"%(target)s\"" +#~ msgid "" +#~ "Back to \"%(target)s\n" +#~ " \"" +#~ msgstr "Vissza \"%(target)s\"" -#~ msgid "Rest day" -#~ msgstr "Pihenő nap" +#, fuzzy, python-brace-format +#~| msgid "Configuration for {}" +#~ msgid "Configuration for {self.gym.name}" +#~ msgstr "{} beállításai" #, fuzzy -#~| msgid "Nutrition plan" -#~ msgid "Nutritional data" -#~ msgstr "Táplálkozási terv" +#~| 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" @@ -2958,9 +3156,6 @@ msgstr "" #~ msgid "About us" #~ msgstr "Rólunk" -#~ msgid "Sample workout" -#~ msgstr "Minta edzés" - #~ msgid "Sample day" #~ msgstr "Minta nap" @@ -3089,9 +3284,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 +3302,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 +3314,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..f1f498a7e 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Dati personali" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Promemoria allenamento" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +151,35 @@ msgstr "Si prega di inserire la tua password attuale." msgid "Delete" msgstr "Elimina" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Password non valida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contatto" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Commento" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Che cosa vuoi dire?" @@ -329,7 +330,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)" @@ -407,18 +408,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -442,7 +451,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 +475,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 +493,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 +542,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 +608,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 +650,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" @@ -730,7 +728,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 +737,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 +832,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" @@ -929,19 +932,19 @@ msgstr "Panoramica" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descrizione" @@ -950,7 +953,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à" @@ -978,7 +981,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1059,7 +1062,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 +1149,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" @@ -1191,7 +1199,7 @@ 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 @@ -1214,15 +1222,15 @@ msgstr "" "vedere meglio ciò che questo sito può fare. Sentiti libero di modificarli o " "cancellarli!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Commenti" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Invia" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Il tuo commento è stato mandato con successo. Grazie!" @@ -1235,39 +1243,39 @@ 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" @@ -1326,12 +1334,20 @@ msgstr "Foto" msgid "Other" msgstr "Altro" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Immagine" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Altezza" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Larghezza" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Immagine principale" @@ -1381,14 +1397,6 @@ msgstr "Dimensione" 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" @@ -1409,13 +1417,13 @@ msgstr "Storico allenamenti admin" msgid "Action" msgstr "Azione" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Utente" @@ -1467,7 +1475,7 @@ msgstr "Cancella attrezzatura?" msgid "Add muscle" msgstr "Aggiungi muscolo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Sono supportati solo i formati PNG e JPEG" @@ -1537,7 +1545,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Quantità" @@ -1555,12 +1563,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data fine" @@ -1612,11 +1620,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" @@ -1934,6 +1937,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Leggenda" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2176,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Il programma scadrà presto" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Programma" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ordine" @@ -2013,19 +2219,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Unità" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Data di creazione" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Modello di allenamento" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2033,15 +2239,15 @@ msgstr "" "Contrassegnare un allenamento come modello lo bloccherà e ti consentirà di " "farne delle copie" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Modello pubblico" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "L'ora di inizio non può essere successiva all'ora di fine." @@ -2150,35 +2356,19 @@ msgstr "Allenamento per %s" msgid "Value" msgstr "Valore" -#: 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,12 +2376,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2234,11 +2424,6 @@ msgstr "Collega al prodotto" 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" @@ -2484,6 +2669,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" @@ -2875,6 +3064,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,7 +3142,7 @@ msgstr "Formato data" msgid "You have to enter your weight" msgstr "Devi inserire il tuo peso" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Voce del peso" @@ -3078,6 +3271,33 @@ msgstr "" msgid "Re-Submit" msgstr "Re-Invia" +#, 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 +3310,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 +3354,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 +3755,6 @@ msgstr "Re-Invia" #~ msgid "Edit workout" #~ msgstr "Modifica allenamento" -#~ msgid "Copy workout" -#~ msgstr "Copia allenamento" - #~ msgid "Copy" #~ msgstr "Copia" @@ -3590,9 +3789,6 @@ msgstr "Re-Invia" #~ msgid "Your BMI is: " #~ msgstr "Il tuo IMC è " -#~ msgid "Legend" -#~ msgstr "Leggenda" - #~ msgid "Adipositas III" #~ msgstr "Obesità III" @@ -3665,9 +3861,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 +3926,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 +4657,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 +4667,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..4b1455e44 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "パスワードの再設定、またはオプションとしてメールのリマインダー通知に使用され" "ます。" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "生年月日" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "パーソナルデータ" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "ワークアウトリマインダー通知" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 #, 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:259 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:261 msgid "Please enter your current password." msgstr "現在のパスワードを入力してください。" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +147,35 @@ msgstr "現在のパスワードを入力してください。" msgid "Delete" msgstr "削除" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "パスワードは無効です。" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "問い合わせ" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "コメント" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -309,7 +310,7 @@ msgstr "" msgid "Age" msgstr "年齢" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "身長(cm)" @@ -382,18 +383,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -417,7 +426,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 +444,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 +459,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 +511,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 +577,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 +619,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 "" @@ -701,7 +699,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 +708,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 +798,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 "" @@ -889,19 +892,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -910,7 +913,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 "" @@ -938,7 +941,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1019,7 +1022,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 +1109,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" @@ -1151,7 +1159,7 @@ 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 @@ -1170,15 +1178,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1191,39 +1199,39 @@ 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 "" @@ -1282,12 +1290,22 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "体重" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1337,16 +1355,6 @@ msgstr "" 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 "" @@ -1369,13 +1377,13 @@ msgstr "" msgid "Action" msgstr "オプション" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1427,7 +1435,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1499,7 +1507,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1517,12 +1525,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1572,11 +1580,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 "" @@ -1894,6 +1897,172 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2113,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1971,33 +2156,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "単位" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2091,52 +2276,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "材料" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2179,11 +2342,6 @@ msgstr "" 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 "" @@ -2389,6 +2547,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 "" @@ -2732,6 +2896,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "ダッシュボード" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2805,7 +2973,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2908,13 +3076,20 @@ msgstr "" msgid "Re-Submit" msgstr "" -#~ msgid "Sets" -#~ msgstr "セット" +#, fuzzy +#~| msgid "Height (cm)" +#~ msgid "Height (in)" +#~ msgstr "身長(cm)" #, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "パーソナルデータ" +#~| 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..8e8a5dea5 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "생일" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "개인 정보" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Workout 리마인더" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "이 이메일 주소는 이미 사용중입니다." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "현재 비밀번호를 입력해주세요." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +139,35 @@ msgstr "현재 비밀번호를 입력해주세요." msgid "Delete" msgstr "삭제" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "유효하지 않은 비밀번호" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "연락" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "답변방법 (이메일 등)" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "댓글" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "어떤말을 하고 싶은가요?" @@ -309,7 +310,7 @@ msgstr "" msgid "Age" msgstr "나이" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "키 (cm)" @@ -384,18 +385,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -419,7 +428,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 +451,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 +470,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 +518,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 +584,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 +626,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 "관리" @@ -706,7 +704,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 +713,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 +807,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 "특징" @@ -903,19 +906,19 @@ msgstr "개요" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "설명" @@ -924,7 +927,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 "최종 활동" @@ -952,7 +955,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1033,7 +1036,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 +1123,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" @@ -1165,7 +1173,7 @@ 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 @@ -1186,15 +1194,15 @@ msgstr "" "이 사이트의 기능을 더 잘 확인하실 수 있도록 샘플 운동, 운동 일정, 체중 기록, " "(신체) 체중 및 영양 계획 항목을 만들었습니다. 자유롭게 수정하거나 삭제하세요!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "피드백" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "보내기" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "피드백이 성공적으로 전송되었습니다. 감사합니다!" @@ -1207,39 +1215,39 @@ 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로 확인 이메일이 전송되었습니다" @@ -1298,12 +1306,20 @@ msgstr "사진" msgid "Other" msgstr "기타" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "이미지" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "키" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "너비" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "메인 그림" @@ -1353,14 +1369,6 @@ msgstr "크기" 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 "코덱" @@ -1381,13 +1389,13 @@ msgstr "운동 관리 기록" msgid "Action" msgstr "활동" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "사용자" @@ -1439,7 +1447,7 @@ msgstr "장비를 삭제하시겠습니까?" msgid "Add muscle" msgstr "근육 추가" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "PNG,JPEG 포맷만 지원합니다" @@ -1509,7 +1517,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "양" @@ -1527,12 +1535,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "종료 날짜" @@ -1584,11 +1592,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 "비활성 회원 개요" @@ -1903,6 +1906,189 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2140,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "루틴이 곧 만료됩니다" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "루틴" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "주문" @@ -1981,33 +2183,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "단위" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "생성일" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "운동 알림 템플릿" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "운동을 템플릿으로 표시하면 운동이 고정되고 사본을 만들 수 있습니다" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "공개 템플릿" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "공개 템플릿은 다른 사용자에게 제공됩니다" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "시작 시간은 종료 시간 이후일 수 없습니다." @@ -2108,46 +2310,30 @@ msgstr "%s 를 위한 운동" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "성분" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "영어 이름도 검색해 보세요" @@ -2190,11 +2376,6 @@ msgstr "제품 링크" 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 "성분 카테고리" @@ -2429,6 +2610,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 "총" @@ -2803,6 +2988,10 @@ msgstr "" msgid "Account" msgstr "계정" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "대시보드" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "운동 루틴" @@ -2876,7 +3065,7 @@ msgstr "날짜 포맷" msgid "You have to enter your weight" msgstr "체중을 입력해야 합니다" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "체중 입력" @@ -3002,6 +3191,24 @@ msgstr "" msgid "Re-Submit" 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 +3220,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..6b5e23d41 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Persoonlijke gegevens" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Workout-herinneringen" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +150,35 @@ msgstr "Gelieve je huidige wachtwoord in te geven." msgid "Delete" msgstr "Verwijder" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Ongeldig wachtwoord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contact" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Opmerking" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Wat wil je zeggen?" @@ -328,7 +329,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)" @@ -405,18 +406,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -440,7 +449,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 +472,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 +488,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 +542,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 +608,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 +650,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" @@ -732,7 +728,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 +737,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 +832,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" @@ -928,19 +929,19 @@ msgstr "Overzicht" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschrijving" @@ -949,7 +950,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" @@ -977,7 +978,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1058,7 +1059,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 +1146,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" @@ -1190,7 +1196,7 @@ 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 @@ -1212,15 +1218,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Feedback" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Insturen" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Je feedback werd met succes verzonden. Bedankt!" @@ -1233,39 +1239,39 @@ 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" @@ -1324,12 +1330,20 @@ msgstr "Foto" msgid "Other" msgstr "Andere" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Afbeelding" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Hoogte" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Breedte" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Hoofdafbeelding" @@ -1379,14 +1393,6 @@ msgstr "Grootte" 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" @@ -1407,13 +1413,13 @@ msgstr "Admin oefening geschiedenis" msgid "Action" msgstr "Actie" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Gebruiker" @@ -1465,7 +1471,7 @@ msgstr "Materiaal verwijderen?" msgid "Add muscle" msgstr "Creëer spier" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Enkel PNG en JPEG-formaten worden ondersteund" @@ -1536,7 +1542,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Hoeveelheid" @@ -1554,12 +1560,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Einddatum" @@ -1611,11 +1617,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" @@ -1931,6 +1932,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legende" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2171,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Routine zal spoedig vervallen" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Routine" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Volgorde" @@ -2010,19 +2214,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Eenheid" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Creatiedatum" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Workout template" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2030,15 +2234,15 @@ 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Publieke template" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "De startijd kan niet na de eindtijd liggen." @@ -2145,35 +2349,19 @@ msgstr "Workout voor %s" msgid "Value" msgstr "Waarde" -#: 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,12 +2369,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2229,12 +2417,6 @@ msgstr "Link naar product" 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" @@ -2478,6 +2660,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" @@ -2863,6 +3049,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,7 +3127,7 @@ msgstr "Datumformaat" msgid "You have to enter your weight" msgstr "U moet uw gewicht ingeven" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Gewichtingave" @@ -2966,8 +3156,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 +3254,36 @@ msgstr "" msgid "Re-Submit" msgstr "Her-indienen" +#, 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 +3296,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 +3679,6 @@ msgstr "Her-indienen" #~ msgid "Edit workout" #~ msgstr "Bewerk workout" -#~ msgid "Copy workout" -#~ msgstr "Kopieer workout" - #~ msgid "Copy" #~ msgstr "Kopieer" @@ -3511,9 +3710,6 @@ msgstr "Her-indienen" #~ msgid "Your BMI is: " #~ msgstr "Je BMI is:" -#~ msgid "Legend" -#~ msgstr "Legende" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3577,9 +3773,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 +3827,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 +4378,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 +4436,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..830748b3a 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 13:11+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" @@ -2916,6 +3096,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,7 +3183,7 @@ msgstr "Datoformat" msgid "You have to enter your weight" msgstr "Du må angi vekten din" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Vektoppføring" @@ -3128,6 +3312,42 @@ msgstr "" msgid "Re-Submit" msgstr "Send på nytt" +#, 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 +3357,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 +3376,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 +3794,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 +3828,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 +3894,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 +3961,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 +4631,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 +4677,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 +4686,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..00ee5ebe0 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +137,35 @@ msgstr "" msgid "Delete" msgstr "Схафын" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Хъуыды" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -299,7 +300,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -372,18 +373,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -407,7 +416,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 +434,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 +449,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 +501,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 +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 msgid "Imprint" msgstr "" @@ -611,7 +609,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 "Администраци" @@ -691,7 +689,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 +698,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 +788,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 "" @@ -879,19 +882,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Ӕмбарынгӕнӕн" @@ -900,7 +903,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 "" @@ -928,7 +931,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1009,7 +1012,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 +1099,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 "" @@ -1141,7 +1149,7 @@ 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 @@ -1160,15 +1168,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1181,39 +1189,39 @@ 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 "" @@ -1274,12 +1282,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1331,14 +1347,6 @@ msgstr "" 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 "" @@ -1363,13 +1371,13 @@ msgstr "Фӕлтӕрӕнты ӕмбырд" msgid "Action" msgstr "Фадӕттӕ" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Архайӕг" @@ -1421,7 +1429,7 @@ msgstr "" msgid "Add muscle" msgstr "Мускул бафтауын" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1493,7 +1501,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1511,12 +1519,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1566,11 +1574,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 "" @@ -1880,6 +1883,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2097,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1957,33 +2140,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2077,46 +2260,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2159,11 +2326,6 @@ msgstr "" 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 "" @@ -2369,6 +2531,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 "" @@ -2708,6 +2874,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2779,7 +2949,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/pl/LC_MESSAGES/django.po b/wger/locale/pl/LC_MESSAGES/django.po index db1942d62..d450d36b8 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Dane personalne" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Przypomnienia treningowe" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +148,35 @@ msgstr "Wprowadź swoje aktualne hasło." msgid "Delete" msgstr "Usuń" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Hasło nieprawidłowe" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Komentarz" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Co chcesz powiedzieć?" @@ -322,7 +323,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)" @@ -398,18 +399,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -433,7 +442,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 +473,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 +497,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 +545,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 +611,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 +653,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" @@ -734,7 +731,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 +740,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 +834,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" @@ -931,19 +933,19 @@ msgstr "Podsumowanie" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -952,7 +954,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ść" @@ -980,7 +982,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1061,7 +1063,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 +1152,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" @@ -1195,7 +1202,7 @@ 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 @@ -1217,15 +1224,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Opinia" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Zapisz" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Twoja opinia została poprawnie wysłana. Dziękujemy!" @@ -1238,39 +1245,39 @@ 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" @@ -1329,12 +1336,20 @@ msgstr "Zdjęcie" msgid "Other" msgstr "Inny" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Obraz" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Wzrost" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Szerokość" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Główny obraz" @@ -1384,14 +1399,6 @@ msgstr "Rozmiar" 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" @@ -1412,13 +1419,13 @@ msgstr "Historia administratora ćwiczeń" msgid "Action" msgstr "Akcja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Użytkownik" @@ -1470,7 +1477,7 @@ msgstr "Usunąć sprzęt?" msgid "Add muscle" msgstr "Dodaj mięsień" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Tylko formaty PNG i JPEG są obsługiwane" @@ -1540,7 +1547,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Kwota" @@ -1558,12 +1565,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data zakończenia" @@ -1615,11 +1622,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" @@ -1935,6 +1937,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2174,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Kolejność" @@ -2016,34 +2221,34 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Jednostka" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Data utworzenia" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Szablon treningu" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 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 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Publiczny szablon" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Czas rozpoczęcia nie może być po czasie zakończenia." @@ -2153,35 +2358,19 @@ msgstr "Trening dla %s" msgid "Value" msgstr "Wartość" -#: 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,12 +2378,12 @@ msgstr "" "Dodatkowe kalorie modyfikujące bazową wartość (by odjąć, wpisz ujemną " "wartość)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 +#: nutrition/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2237,12 +2426,6 @@ msgstr "Podlinkuj produkt" 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" @@ -2480,6 +2663,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" @@ -2867,6 +3054,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,7 +3132,7 @@ msgstr "Format daty" msgid "You have to enter your weight" msgstr "Musisz wpisać swoją wagę" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Waga" @@ -3067,6 +3258,35 @@ msgstr "" msgid "Re-Submit" msgstr "Prześlij ponownie" +#, 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 +3299,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 +3355,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 +3757,6 @@ msgstr "Prześlij ponownie" #~ msgid "Edit workout" #~ msgstr "Edytuj trening" -#~ msgid "Copy workout" -#~ msgstr "Kopiuj trening" - #~ msgid "Copy" #~ msgstr "Kopiuj" @@ -3590,9 +3792,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 +3863,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 +3929,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 +4622,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 +4631,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..9a43047d1 100644 --- a/wger/locale/pt/LC_MESSAGES/django.po +++ b/wger/locale/pt/LC_MESSAGES/django.po @@ -15,11 +15,11 @@ 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 13:11+0000\n" "PO-Revision-Date: 2025-10-07 18:01+0000\n" "Last-Translator: Ninguém Mesmo \n" -"Language-Team: Portuguese " -"\n" +"Language-Team: Portuguese \n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Editar" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Dados pessoais" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Lembretes de treino" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +149,35 @@ msgstr "Por favor informe a sua senha atual." msgid "Delete" msgstr "Remover" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Senha inválida" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contato" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Comentário" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "O que você quer dizer?" @@ -325,7 +326,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)" @@ -400,18 +401,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -435,7 +444,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 +467,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 +487,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 +536,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 +602,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 +644,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" @@ -726,7 +722,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 +731,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 +825,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" @@ -924,19 +925,19 @@ msgstr "Visão geral" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "descrição" @@ -945,7 +946,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" @@ -973,7 +974,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1054,7 +1055,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 +1117,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 +1144,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" @@ -1188,7 +1194,7 @@ 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 @@ -1210,15 +1216,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Opiniões" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Submeter" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "O seu feedback foi enviado com sucesso. Obrigado!" @@ -1231,39 +1237,39 @@ 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" @@ -1322,12 +1328,20 @@ msgstr "Foto" msgid "Other" msgstr "Outro" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Imagem" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Altura" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Largura" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Imagem principal" @@ -1377,14 +1391,6 @@ msgstr "Tamanho" 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" @@ -1405,13 +1411,13 @@ 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 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Utilizador" @@ -1463,7 +1469,7 @@ msgstr "Apagar equipamento?" msgid "Add muscle" msgstr "Adicionar músculo" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Somente os formatos PNG e JPEG são suportados" @@ -1534,7 +1540,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Quantidade" @@ -1552,12 +1558,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data final" @@ -1609,11 +1615,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" @@ -1931,6 +1932,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legenda" + +#: i18n.tpl:46 +msgid "Veteran" +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 "Log 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 "Dados pessoais" + +#: i18n.tpl:62 +#, fuzzy +#| msgid "Copy workout" +msgid "Complete your first workout" +msgstr "Copiar treino" + +#: i18n.tpl:63 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 10 workouts" +msgstr "Treino de exemplo" + +#: i18n.tpl:64 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 50 workouts" +msgstr "Treino de exemplo" + +#: i18n.tpl:65 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 100 workouts" +msgstr "Treino de exemplo" + +#: i18n.tpl:66 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 200 workouts" +msgstr "Treino de exemplo" + +#: i18n.tpl:67 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 500 workouts" +msgstr "Treino de exemplo" + +#: i18n.tpl:68 +#, fuzzy +#| msgid "Sample workout" +msgid "Complete 1000 workouts" +msgstr "Treino de exemplo" + +#: 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 "Treino 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" @@ -1983,19 +2171,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Rotina expirará brevemente" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Rotina" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ordem" @@ -2010,19 +2214,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Unidade" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Data criação" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Modelo de treino" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2030,15 +2234,15 @@ msgstr "" "Marcar um treino como modelo irá congelá-lo e permitir que você faça cópias " "dele" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Modelo público" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 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." @@ -2145,35 +2349,19 @@ msgstr "Treino para %s" msgid "Value" msgstr "Valor" -#: 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,12 +2369,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2229,11 +2417,6 @@ msgstr "Link para o produto" 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" @@ -2474,6 +2657,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" @@ -2860,6 +3047,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,7 +3125,7 @@ msgstr "Formato da data" msgid "You have to enter your weight" msgstr "Você precisa digitar seu peso" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Registro de peso" @@ -3065,6 +3256,35 @@ msgstr "" msgid "Re-Submit" msgstr "Re-submeter" +#, 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 +3297,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 +3350,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 +3750,6 @@ msgstr "Re-submeter" #~ msgid "Edit workout" #~ msgstr "Edite treino" -#~ msgid "Copy workout" -#~ msgstr "Copiar treino" - #~ msgid "Copy" #~ msgstr "Copiar" @@ -3585,9 +3784,6 @@ msgstr "Re-submeter" #~ msgid "Your BMI is: " #~ msgstr "Seu IMC é: " -#~ msgid "Legend" -#~ msgstr "Legenda" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3660,9 +3856,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 +3920,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 +4624,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 +4634,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..f8788c534 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Date personale" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Mementouri de antrenament" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +148,35 @@ msgstr "Te rog introdu parola curentă" msgid "Delete" msgstr "Ștergere" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Parola incorectă" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Contact" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Comentariu" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Ce vrei să spui?" @@ -326,7 +327,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)" @@ -399,18 +400,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -434,7 +443,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 +461,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 +476,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 +528,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 +594,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 +638,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" @@ -720,7 +718,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 +727,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 +819,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 "" @@ -910,19 +913,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descriere" @@ -931,7 +934,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 "" @@ -959,7 +962,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1040,7 +1043,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 +1130,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 "" @@ -1172,7 +1180,7 @@ 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 @@ -1191,15 +1199,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1212,39 +1220,39 @@ 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 "" @@ -1305,12 +1313,22 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight log" +msgid "Height" +msgstr "Jurnalul de greutate" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1364,16 +1382,6 @@ msgstr "" 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 "" @@ -1398,13 +1406,13 @@ msgstr "Categorii de Exerciții" msgid "Action" msgstr "Opțiuni" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Utilizator" @@ -1459,7 +1467,7 @@ msgstr "" msgid "Add muscle" msgstr "Adaugă un mușchi" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1531,7 +1539,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1549,12 +1557,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1604,11 +1612,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 "" @@ -1928,6 +1931,186 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2161,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -2005,35 +2204,35 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 #, fuzzy #| msgid "Workout reminders" msgid "Workout template" msgstr "Mementouri de antrenament" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2127,52 +2326,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2217,11 +2394,6 @@ msgstr "" 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 "" @@ -2432,6 +2604,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 "" @@ -2771,6 +2949,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2844,7 +3026,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" @@ -2950,12 +3132,19 @@ msgid "Re-Submit" msgstr "Retrimiteți" #, fuzzy -#~| msgid "Personal data" -#~ msgid "Nutritional data" -#~ msgstr "Date personale" +#~| msgid "Weight log" +#~ msgid "Height (in)" +#~ msgstr "Jurnalul de greutate" -#~ msgid "Sample workout" -#~ msgstr "Workout de probă" +#, 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 +3185,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 cc9f9871b..1e6795fca 100644 --- a/wger/locale/ru/LC_MESSAGES/django.po +++ b/wger/locale/ru/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 13:11+0000\n" "PO-Revision-Date: 2026-01-03 23:01+0000\n" "Last-Translator: Gevorg Danielyan \n" "Language-Team: Russian \n" @@ -61,23 +61,24 @@ msgstr "" msgid "Edit" msgstr "Редактировать" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Дата рождения" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "Персональные данные" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Напоминания тренировок" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Необходимо для возобновлений пароля, и выборочно, напоминаний по электронной " "почте." -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "Этот электронный адрес уже используется." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "Пожалуйста, введите ваш пароль." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +150,35 @@ msgstr "Пожалуйста, введите ваш пароль." msgid "Delete" msgstr "Удалить" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Неверный пароль" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Контакт" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "Обратная связь с вами (электронная почта, и т.д.)" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Комментарий" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Что Вы имеете в виду?" @@ -327,7 +328,7 @@ msgstr "" msgid "Age" msgstr "Возраст" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Рост (см)" @@ -403,18 +404,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -438,7 +447,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 +471,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 +491,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 +543,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 +609,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 +651,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 "Администрация" @@ -732,7 +729,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 +738,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 +832,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 "Особенности" @@ -931,19 +933,19 @@ msgstr "Обзор" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -952,7 +954,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 "Последние действия" @@ -980,7 +982,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1061,7 +1063,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 +1152,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 "кг" @@ -1195,7 +1202,7 @@ 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 @@ -1217,15 +1224,15 @@ msgstr "" "масс тела и плана питания для наглядного примера возможностей этого сайта. " "Вы можете их изменить или удалить!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Отзывы" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Отправить" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Ваш отзыв был успешно отправлен. Спасибо!" @@ -1238,39 +1245,39 @@ 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 было отправлено электронное письмо с подтверждением" @@ -1329,12 +1336,20 @@ msgstr "Фото" msgid "Other" msgstr "Другое" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Изображение" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Высота" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Ширина" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Основное изображение" @@ -1384,14 +1399,6 @@ msgstr "Размер" 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 "Кодек" @@ -1412,13 +1419,13 @@ msgstr "История администрирования упражнений" msgid "Action" msgstr "Действие" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Пользователь" @@ -1470,7 +1477,7 @@ msgstr "Удалить оборудование?" msgid "Add muscle" msgstr "Добавить мышцу" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Поддерживаются только форматы PNG и JPEG" @@ -1542,7 +1549,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Количество" @@ -1560,12 +1567,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Конечная дата" @@ -1617,12 +1624,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 "Обзор неактивных членов" @@ -1941,6 +1942,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 i18n.tpl:47 +msgid "Legend" +msgstr "Условное обозначение" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2181,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/management/commands/email-reminders.py:89 #, fuzzy #| msgid "Workout will expire soon" msgid "Routine will expire soon" msgstr "Срок этой тренировки скоро истечет" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Рутина" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Порядок" @@ -2022,34 +2227,34 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Секция" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Дата создания" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Шаблон тренировки" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" "Отметив тренировку как шаблон, вы заморозите ее и сможете создавать ее копии" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Общедоступный шаблон" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "Общедоступный шаблон доступен для других пользователей" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Время начала не может быть после времени окончания." @@ -2155,35 +2360,19 @@ msgstr "Тренировка для %s" msgid "Value" 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,12 +2380,12 @@ msgstr "" "Дополнительные калории для добавления к базовой ставке (для вычитывания, " "введите отрицательное число)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 +#: nutrition/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "Ингредиент" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Также ищите названия на английском" @@ -2239,11 +2428,6 @@ msgstr "Ссылка на продукт" 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 "Категории ингредиентов" @@ -2478,6 +2662,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 "Итого" @@ -2882,6 +3070,10 @@ msgstr "" msgid "Account" msgstr "Аккаунт" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Панель управления" + #: software/templates/features.html:485 #, fuzzy #| msgid "Workout reminders" @@ -2965,7 +3157,7 @@ msgstr "Формат даты" msgid "You have to enter your weight" msgstr "Вы должны ввести свой вес" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Запись веса" @@ -3093,6 +3285,30 @@ msgstr "" msgid "Re-Submit" 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 +3321,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 +3366,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 +3785,6 @@ msgstr "Повторно отправить" #~ msgid "Edit workout" #~ msgstr "Изменить тренировку" -#~ msgid "Copy workout" -#~ msgstr "Копировать тренировку" - #~ msgid "Copy" #~ msgstr "Копировать" @@ -3625,9 +3819,6 @@ msgstr "Повторно отправить" #~ msgid "Your BMI is: " #~ msgstr "Ваш ИМТ: " -#~ msgid "Legend" -#~ msgstr "Условное обозначение" - #~ msgid "Adipositas III" #~ msgstr "Ожирение III" @@ -3693,9 +3884,6 @@ msgstr "Повторно отправить" #~ msgid "Delete schedule" #~ msgstr "Удалить программу" -#~ msgid "Weight log" -#~ msgstr "Регистрация веса" - #~ msgid "Weight log for workout" #~ msgstr "Регистрация веса для тренировки" @@ -3761,8 +3949,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 +4276,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 +4637,8 @@ msgstr "Повторно отправить" #~ "(no registration needed)" #~ msgstr "" #~ "Воспользуйтесь общественной группой, чтобы получить поддержку для Вашей " -#~ "локальной wger установки, обговорить проблемы или Вашу новую идею, и т." -#~ "п.\n" +#~ "локальной wger установки, обговорить проблемы или Вашу новую идею, и " +#~ "т.п.\n" #~ "(нет необходимости в регистрации)" #~ msgid "Open feedback form" @@ -4464,8 +4652,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 +4661,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..322da3f96 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +137,35 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -297,7 +298,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -370,18 +371,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -405,7 +414,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 +432,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 +447,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 +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 "" - -#: 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 +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 "" @@ -605,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 "" @@ -683,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 "" @@ -692,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 "" @@ -777,25 +780,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 "" @@ -871,19 +874,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,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 "" @@ -920,7 +923,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1001,7 +1004,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 +1091,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 "" @@ -1133,7 +1141,7 @@ 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 @@ -1152,15 +1160,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1173,39 +1181,39 @@ 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 "" @@ -1264,12 +1272,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1319,14 +1335,6 @@ msgstr "" 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 "" @@ -1347,13 +1355,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1405,7 +1413,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1475,7 +1483,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1493,12 +1501,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1556,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 "" @@ -1862,6 +1865,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2079,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1939,33 +2122,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2059,46 +2242,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2141,11 +2308,6 @@ msgstr "" 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 "" @@ -2351,6 +2513,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 "" @@ -2686,6 +2852,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,7 +2927,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/sl/LC_MESSAGES/django.po b/wger/locale/sl/LC_MESSAGES/django.po index ac2ba7c6d..003076204 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +137,35 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -297,7 +298,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -370,18 +371,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -405,7 +414,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 +432,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 +447,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 +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 "" - -#: 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 +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 "" @@ -605,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 "" @@ -683,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 "" @@ -692,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 "" @@ -777,25 +780,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 "" @@ -871,19 +874,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,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 "" @@ -920,7 +923,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1001,7 +1004,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 +1091,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 "" @@ -1133,7 +1141,7 @@ 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 @@ -1152,15 +1160,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1173,39 +1181,39 @@ 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 "" @@ -1264,12 +1272,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1319,14 +1335,6 @@ msgstr "" 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 "" @@ -1347,13 +1355,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1405,7 +1413,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1475,7 +1483,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1493,12 +1501,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1556,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 "" @@ -1862,6 +1865,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2079,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1939,33 +2122,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2059,46 +2242,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2141,11 +2308,6 @@ msgstr "" 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 "" @@ -2351,6 +2513,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 "" @@ -2686,6 +2852,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,7 +2927,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/sr/LC_MESSAGES/django.po b/wger/locale/sr/LC_MESSAGES/django.po index 05c0b2448..ab3705ec0 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +137,35 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -297,7 +298,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -370,18 +371,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -405,7 +414,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 +432,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 +447,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 +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 "" - -#: 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 +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 "" @@ -605,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 "" @@ -683,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 "" @@ -692,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 "" @@ -777,25 +780,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 "" @@ -871,19 +874,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -892,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 "" @@ -920,7 +923,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1001,7 +1004,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 +1091,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 "" @@ -1133,7 +1141,7 @@ 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 @@ -1152,15 +1160,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1173,39 +1181,39 @@ 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 "" @@ -1264,12 +1272,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1319,14 +1335,6 @@ msgstr "" 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 "" @@ -1347,13 +1355,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1405,7 +1413,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1475,7 +1483,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1493,12 +1501,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1548,11 +1556,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 "" @@ -1862,6 +1865,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2079,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1939,33 +2122,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2059,46 +2242,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2141,11 +2308,6 @@ msgstr "" 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 "" @@ -2351,6 +2513,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 "" @@ -2686,6 +2852,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2757,7 +2927,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/sv/LC_MESSAGES/django.po b/wger/locale/sv/LC_MESSAGES/django.po index 83ef01385..22ecbc1eb 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Personlig data" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Träningspåminnelser" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +145,35 @@ msgstr "Vänligen ange ditt nuvarande lösenord." msgid "Delete" msgstr "Ta bort" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Ogiltigt lösenord" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Kontakt" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Kommentar" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Vad vill du säga?" @@ -316,7 +317,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)" @@ -392,18 +393,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -427,7 +436,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 +454,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 +469,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 +518,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 +584,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 +630,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" @@ -714,7 +710,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 +719,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 +813,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" @@ -910,19 +911,19 @@ msgstr "Överblick" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivning" @@ -931,7 +932,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" @@ -959,7 +960,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1040,7 +1041,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 +1128,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" @@ -1172,7 +1178,7 @@ 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 @@ -1194,15 +1200,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Feedback" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Ladda upp" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Din feedback skickades. Tack!" @@ -1215,39 +1221,39 @@ 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 "" @@ -1310,12 +1316,22 @@ msgstr "" msgid "Other" msgstr "Andra" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Bild" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +#, fuzzy +#| msgid "Weight" +msgid "Height" +msgstr "Vikt" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Huvudbild" @@ -1369,16 +1385,6 @@ msgstr "" 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" @@ -1405,13 +1411,13 @@ msgstr "Träningsdag" msgid "Action" msgstr "Åtgärder" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Användare" @@ -1469,7 +1475,7 @@ msgstr "Ta bort utrustning?" msgid "Add muscle" msgstr "Lägg till muskel" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "PNG- och JPEG-format som stöds" @@ -1544,7 +1550,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Mängd" @@ -1562,12 +1568,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdatum" @@ -1619,12 +1625,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" @@ -1949,6 +1949,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Legend" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2188,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Ordning" @@ -2032,33 +2235,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Enhet" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Datum för skapande" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Träningspassmall" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Starttiden kan inte vara efter sluttiden." @@ -2166,41 +2369,19 @@ msgstr "Träning för %s" msgid "Value" msgstr "" -#: 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,12 +2389,12 @@ 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2258,11 +2439,6 @@ msgstr "" 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 "" @@ -2496,6 +2672,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" @@ -2876,6 +3056,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,7 +3143,7 @@ msgstr "Datumformat" msgid "You have to enter your weight" msgstr "Du måste ange din vikt" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Viktinträde" @@ -3079,6 +3263,37 @@ msgstr "Du kan korrigera listan här och skicka om den så ofta du vill." msgid "Re-Submit" msgstr "Skicka igen" +#, 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 +3303,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 +3691,6 @@ msgstr "Skicka igen" #~ msgid "Edit workout" #~ msgstr "Redigera träningspass" -#~ msgid "Copy workout" -#~ msgstr "Kopiera träningspass" - #~ msgid "Copy" #~ msgstr "Kopiera" @@ -3518,9 +3718,6 @@ msgstr "Skicka igen" #~ msgid "Your BMI is: " #~ msgstr "Din BMI är: " -#~ msgid "Legend" -#~ msgstr "Legend" - #~ msgid "Adipositas III" #~ msgstr "Adipositas III" @@ -3583,9 +3780,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 +3842,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 +4437,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..053c8697f 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +136,35 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -296,7 +297,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -369,18 +370,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -404,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 "" @@ -422,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 "" @@ -437,13 +446,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 +494,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 +560,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 +602,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 "" @@ -682,7 +680,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 +689,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 +779,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 "" @@ -870,19 +873,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -891,7 +894,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 "" @@ -919,7 +922,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1000,7 +1003,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 +1090,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 "" @@ -1132,7 +1140,7 @@ 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 @@ -1151,15 +1159,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1172,39 +1180,39 @@ 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 "" @@ -1263,12 +1271,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1318,14 +1334,6 @@ msgstr "" 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 "" @@ -1346,13 +1354,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1404,7 +1412,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1474,7 +1482,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1492,12 +1500,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1547,11 +1555,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 "" @@ -1861,6 +1864,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2078,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1938,33 +2121,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2058,46 +2241,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2140,11 +2307,6 @@ msgstr "" 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 "" @@ -2350,6 +2512,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 "" @@ -2685,6 +2851,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2756,7 +2926,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/th/LC_MESSAGES/django.po b/wger/locale/th/LC_MESSAGES/django.po index e4fe9bec1..63f42545a 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "" -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +136,35 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "" @@ -296,7 +297,7 @@ msgstr "" msgid "Age" msgstr "" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "" @@ -369,18 +370,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -404,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 "" @@ -422,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 "" @@ -437,13 +446,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 +494,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 +560,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 +602,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 "" @@ -682,7 +680,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 +689,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 +779,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 "" @@ -870,19 +873,19 @@ msgstr "" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -891,7 +894,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 "" @@ -919,7 +922,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1000,7 +1003,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 +1090,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 "" @@ -1132,7 +1140,7 @@ 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 @@ -1151,15 +1159,15 @@ msgid "" "do. Feel free to edit or delete them!" msgstr "" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "" @@ -1172,39 +1180,39 @@ 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 "" @@ -1263,12 +1271,20 @@ msgstr "" msgid "Other" msgstr "" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "" @@ -1318,14 +1334,6 @@ msgstr "" 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 "" @@ -1346,13 +1354,13 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "" @@ -1404,7 +1412,7 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "" @@ -1474,7 +1482,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "" @@ -1492,12 +1500,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1547,11 +1555,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 "" @@ -1861,6 +1864,170 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "" + +#: i18n.tpl:46 +msgid "Veteran" +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,19 +2078,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "" @@ -1938,33 +2121,33 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" msgstr "" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "" @@ -2058,46 +2241,30 @@ msgstr "" msgid "Value" 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "" @@ -2140,11 +2307,6 @@ msgstr "" 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 "" @@ -2350,6 +2512,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 "" @@ -2685,6 +2851,10 @@ msgstr "" msgid "Account" msgstr "" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "" @@ -2756,7 +2926,7 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "" diff --git a/wger/locale/tr/LC_MESSAGES/django.po b/wger/locale/tr/LC_MESSAGES/django.po index f5b7a0094..ae5b0b77a 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 13:11+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:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 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:136 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:175 msgid "Personal data" msgstr "Kişisel bilgiler" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Antrenman hatırlatıcıları" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 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:238 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:259 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:261 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:270 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,35 +146,35 @@ msgstr "Lütfen geçerli parolanızı girin." msgid "Delete" msgstr "Sil" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Geçersiz parola" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "İletişim" -#: core/forms.py:324 +#: core/forms.py:354 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 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Yorum" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Ne söylemek istiyorsun?" @@ -319,7 +320,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)" @@ -396,18 +397,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -431,7 +440,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 +470,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 +494,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 +544,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 +610,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 +652,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" @@ -733,7 +730,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 +739,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 +833,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" @@ -930,19 +932,19 @@ msgstr "Genel Bakış" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Açıklama" @@ -951,7 +953,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" @@ -979,7 +981,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1060,7 +1062,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 +1152,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" @@ -1195,7 +1202,7 @@ 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 @@ -1217,15 +1224,15 @@ 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 +#: core/views/misc.py:116 msgid "Feedback" msgstr "geri bildirim" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Sunmak" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Geri bildiriminiz başarıyla gönderildi. Teşekkür ederim!" @@ -1238,39 +1245,39 @@ 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" @@ -1329,12 +1336,20 @@ msgstr "Fotoğraf" msgid "Other" msgstr "Diğer" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Resim" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Yükseklik" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Genişlik" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Ana resim" @@ -1384,14 +1399,6 @@ msgstr "Boyut" 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" @@ -1412,13 +1419,13 @@ msgstr "Egzersiz yönetici geçmişi" msgid "Action" msgstr "Eylem" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Kullanıcı" @@ -1470,7 +1477,7 @@ msgstr "Ekipman silinsin mi?" msgid "Add muscle" msgstr "Kas ekleyin" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Yalnızca PNG ve JPEG formatları desteklenir" @@ -1543,7 +1550,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Miktar" @@ -1561,12 +1568,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Bitiş tarihi" @@ -1618,11 +1625,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ış" @@ -1940,6 +1942,193 @@ 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 i18n.tpl:47 +msgid "Legend" +msgstr "Efsane" + +#: i18n.tpl:46 +msgid "Veteran" +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,21 +2181,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/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 +#: manager/models/day.py:51 msgid "Routine" msgstr "" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Sipariş" @@ -2023,19 +2228,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Birim" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Oluşturulma tarihi" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Antrenman şablonu" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2043,15 +2248,15 @@ msgstr "" "Bir antrenmanı şablon olarak işaretlemek onu donduracak ve kopyalarını " "oluşturmanıza izin verecektir" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Herkese açık şablon" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 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:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Başlangıç zamanı, bitiş zamanından sonra olamaz." @@ -2163,47 +2368,31 @@ msgstr "%s için egzersiz" msgid "Value" msgstr "Değer" -#: 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/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 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" @@ -2246,11 +2435,6 @@ msgstr "Ürün bağlantısı" 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" @@ -2492,6 +2676,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" @@ -2879,6 +3067,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,7 +3145,7 @@ msgstr "Tarih Biçimi" msgid "You have to enter your weight" msgstr "Kilonuzu girmelisiniz" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Ağırlık girişi" @@ -3084,6 +3276,34 @@ msgstr "" msgid "Re-Submit" msgstr "Yeniden Gönder" +#, 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 +3316,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 +3373,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 +3773,6 @@ msgstr "Yeniden Gönder" #~ msgid "Edit workout" #~ msgstr "Antrenmanı düzenle" -#~ msgid "Copy workout" -#~ msgstr "Antrenmanı kopyala" - #~ msgid "Copy" #~ msgstr "Kopyala" @@ -3605,9 +3807,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 +3879,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 +3944,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 +4665,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 +4675,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..6b9612994 100644 --- a/wger/locale/uk/LC_MESSAGES/django.po +++ b/wger/locale/uk/LC_MESSAGES/django.po @@ -12,7 +12,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 13:11+0000\n" "PO-Revision-Date: 2025-10-02 15:01+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian \n" @@ -20,10 +20,10 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 " -"? 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" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " +"11 ? 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" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 @@ -60,23 +60,24 @@ msgstr "" msgid "Edit" msgstr "Змінити" -#: core/forms.py:69 core/templates/navigation.html:271 +#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Використовується для скидання пароля і, і за необхідності, нагадування " "електронною поштою." -#: core/forms.py:116 core/models/profile.py:222 +#: core/forms.py:136 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 msgid "Date of Birth" msgstr "Дата народження" -#: core/forms.py:155 +#: core/forms.py:175 msgid "Personal data" msgstr "Особисті дані" -#: core/forms.py:167 +#: core/forms.py:187 msgid "Workout reminders" msgstr "Нагадування про тренування" -#: core/forms.py:174 +#: core/forms.py:194 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:202 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:209 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Використовується для скидання пароля і, при необхідності, нагадування " "електронною поштою." -#: core/forms.py:218 +#: core/forms.py:238 msgid "This e-mail address is already in use." msgstr "Ця адреса електронної пошти вже використовується." -#: core/forms.py:239 gym/templates/gym/new_user.html:26 +#: core/forms.py:259 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:261 msgid "Please enter your current password." msgstr "Введіть свій поточний пароль." -#: core/forms.py:250 core/templates/language/view.html:70 +#: core/forms.py:270 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,35 +151,35 @@ msgstr "Введіть свій поточний пароль." msgid "Delete" msgstr "Вилучити" -#: core/forms.py:259 +#: core/forms.py:279 msgid "Invalid password" msgstr "Неправильний пароль" -#: core/forms.py:271 core/forms.py:346 +#: core/forms.py:291 core/forms.py:376 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:312 core/forms.py:339 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 +#: core/forms.py:353 software/templates/features.html:45 msgid "Contact" msgstr "Контакт" -#: core/forms.py:324 +#: core/forms.py:354 msgid "Some way of answering you (e-mail, etc.)" msgstr "Яким чином відповідати вам (електронна пошта, тощо)" -#: core/forms.py:332 exercises/models/comment.py:55 manager/models/slot.py:40 +#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 #: nutrition/models/log.py:77 msgid "Comment" msgstr "Коментар" -#: core/forms.py:333 +#: core/forms.py:363 msgid "What do you want to say?" msgstr "Що ви хочете сказати?" @@ -323,7 +324,7 @@ msgstr "" msgid "Age" msgstr "Вік" -#: core/models/profile.py:230 nutrition/forms.py:117 +#: core/models/profile.py:230 msgid "Height (cm)" msgstr "Зріст (см)" @@ -400,18 +401,26 @@ 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 +#: core/templates/user/overview.html:280 core/views/user.py:589 #: 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 #: 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 +#: gym/views/gym.py:158 manager/models/day.py:72 manager/models/routine.py:82 #: 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 @@ -435,7 +444,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 +467,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 +487,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 +539,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 +605,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 +647,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 "Адміністрація" @@ -729,7 +725,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 +734,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 +828,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 "Особливості" @@ -927,19 +928,19 @@ msgstr "Огляд" #: 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 +#: gallery/models/image.py:45 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 -#: weight/templates/import_csv_preview.html:13 +#: nutrition/models/ingredient.py:231 software/templates/about_us.html:170 +#: weight/models.py:35 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 +#: exercises/models/translation.py:49 gallery/models/image.py:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:79 manager/models/routine.py:87 +#: manager/models/day.py:78 manager/models/routine.py:88 #: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Опис" @@ -948,7 +949,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 "Остання активність" @@ -976,7 +977,7 @@ 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 +#: manager/helpers.py:89 manager/models/log.py:173 weight/models.py:37 #: weight/templates/import_csv_preview.html:14 #: weight/templates/import_csv_preview.html:43 weight/views.py:54 msgid "Weight" @@ -1057,7 +1058,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 +1145,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 "кг" @@ -1189,7 +1195,7 @@ 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 @@ -1211,15 +1217,15 @@ msgstr "" "тіла та плани харчування, щоб ви могли краще побачити, що може зробити цей " "сайт. Ви можете редагувати або видаляти їх!" -#: core/views/misc.py:125 +#: core/views/misc.py:116 msgid "Feedback" msgstr "Відгук" -#: core/views/misc.py:144 weight/templates/import_csv_form.html:9 +#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 msgid "Submit" msgstr "Надіслати" -#: core/views/misc.py:152 +#: core/views/misc.py:143 msgid "Your feedback was successfully sent. Thank you!" msgstr "Ваш відгук успішно надіслано. Дякуємо!" @@ -1232,39 +1238,39 @@ 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" @@ -1323,12 +1329,20 @@ msgstr "Знімок" msgid "Other" msgstr "Інше" -#: exercises/models/image.py:81 gallery/models/image.py:51 +#: exercises/models/image.py:81 gallery/models/image.py:54 #: nutrition/models/image.py:59 msgid "Image" msgstr "Зображення" -#: exercises/models/image.py:89 +#: exercises/models/image.py:91 exercises/models/video.py:140 +msgid "Height" +msgstr "Висота" + +#: exercises/models/image.py:99 exercises/models/video.py:133 +msgid "Width" +msgstr "Ширина" + +#: exercises/models/image.py:107 msgid "Main picture" msgstr "Головне зображення" @@ -1378,14 +1392,6 @@ msgstr "Розмір" 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 "Кодек" @@ -1406,13 +1412,13 @@ msgstr "Історія адміністрування вправ" msgid "Action" msgstr "Дія" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:46 +#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 #: 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 +#: manager/models/routine.py:77 manager/models/session.py:47 #: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:60 +#: nutrition/models/plan.py:51 weight/models.py:44 msgid "User" msgstr "Користувач" @@ -1464,7 +1470,7 @@ msgstr "Видалити обладнання?" msgid "Add muscle" msgstr "Додати м'язи" -#: gallery/models/image.py:52 nutrition/models/image.py:60 +#: gallery/models/image.py:55 nutrition/models/image.py:60 msgid "Only PNG and JPEG formats are supported" msgstr "Підтримуються лише формати PNG і JPEG" @@ -1534,7 +1540,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/forms.py:58 nutrition/models/ingredient_weight_unit.py:54 #: nutrition/models/log.py:108 nutrition/models/meal_item.py:73 msgid "Amount" msgstr "Сума" @@ -1552,12 +1558,12 @@ 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 +#: manager/models/routine.py:99 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 +#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Кінцева дата" @@ -1609,11 +1615,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 "Огляд неактивних членів" @@ -1930,6 +1931,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 i18n.tpl:47 +msgid "Legend" +msgstr "Умовне позначення" + +#: i18n.tpl:46 +msgid "Veteran" +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" @@ -1982,19 +2170,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/management/commands/email-reminders.py:89 msgid "Routine will expire soon" msgstr "Термін дії процедури скоро закінчиться" -#: manager/models/day.py:52 +#: manager/models/day.py:51 msgid "Routine" msgstr "Рутина" -#: manager/models/day.py:60 manager/models/slot.py:34 +#: manager/models/day.py:59 manager/models/slot.py:34 #: nutrition/models/meal.py:53 nutrition/models/meal_item.py:66 msgid "Order" msgstr "Порядок" @@ -2009,19 +2213,19 @@ 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 +#: nutrition/forms.py:62 msgid "Unit" msgstr "Одиниця" -#: manager/models/routine.py:93 nutrition/models/plan.py:57 +#: manager/models/routine.py:94 nutrition/models/plan.py:57 msgid "Creation date" msgstr "Дата створення" -#: manager/models/routine.py:106 +#: manager/models/routine.py:107 msgid "Workout template" msgstr "Шаблон тренування" -#: manager/models/routine.py:108 +#: manager/models/routine.py:109 msgid "" "Marking a workout as a template will freeze it and allow you to make copies " "of it" @@ -2029,15 +2233,15 @@ msgstr "" "Позначення тренування як шаблону заморозить його і дозволить вам зробити " "його копії" -#: manager/models/routine.py:116 +#: manager/models/routine.py:117 msgid "Public template" msgstr "Загальнодоступний шаблон" -#: manager/models/routine.py:117 +#: manager/models/routine.py:118 msgid "A public template is available to other users" msgstr "Загальнодоступний шаблон доступний для інших користувачів" -#: manager/models/routine.py:155 manager/models/session.py:147 +#: manager/models/routine.py:156 manager/models/session.py:147 msgid "The start time cannot be after the end time." msgstr "Час початку не може бути після часу закінчення." @@ -2145,35 +2349,19 @@ msgstr "Тренування для %s" msgid "Value" 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,12 +2369,12 @@ msgstr "" "Додаткові калорії для додавання до базової ставки (для віднімання, введіть " "від'ємне число)" -#: nutrition/forms.py:246 nutrition/models/ingredient_weight_unit.py:39 +#: nutrition/forms.py:209 nutrition/models/ingredient_weight_unit.py:39 #: nutrition/models/log.py:87 nutrition/models/meal_item.py:54 msgid "Ingredient" msgstr "Інгредієнт" -#: nutrition/forms.py:250 +#: nutrition/forms.py:213 msgid "Also search for names in English" msgstr "Також шукайте імена англійською мовою" @@ -2229,11 +2417,6 @@ msgstr "Посилання на виріб" 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 "Категорії інгредієнтів" @@ -2475,6 +2658,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 "Разом" @@ -2861,6 +3048,10 @@ msgstr "" msgid "Account" msgstr "Обліковий запис" +#: software/templates/features.html:453 +msgid "Dashboard" +msgstr "Панель" + #: software/templates/features.html:485 msgid "Workout routines" msgstr "Процедури тренувань" @@ -2935,7 +3126,7 @@ msgstr "Формат дати" msgid "You have to enter your weight" msgstr "Ви повинні ввести свою вагу" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "Запис ваги" @@ -3064,6 +3255,35 @@ msgstr "" msgid "Re-Submit" 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 +3296,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 +3351,6 @@ msgstr "Повторно подати" #~ "Купіть нам каву, щоб допомогти проекту, оплатити витрати на сервер і " #~ "підтримати нас" -#~ msgid "Sample workout" -#~ msgstr "Пробне тренування" - #~ msgid "Sample day" #~ msgstr "Пробний день" @@ -3540,9 +3742,6 @@ msgstr "Повторно подати" #~ msgid "Edit workout" #~ msgstr "Змінити тренування" -#~ msgid "Copy workout" -#~ msgstr "Копіювати тренування" - #~ msgid "Copy" #~ msgstr "Копіювати" @@ -3577,9 +3776,6 @@ msgstr "Повторно подати" #~ msgid "Your BMI is: " #~ msgstr "Ваш ІМТ: " -#~ msgid "Legend" -#~ msgstr "Умовне позначення" - #~ msgid "Adipositas III" #~ msgstr "Ожиріння III" @@ -3652,9 +3848,6 @@ msgstr "Повторно подати" #~ msgid "Delete schedule" #~ msgstr "Видалити програму" -#~ msgid "Weight log" -#~ msgstr "Журнал ваги" - #~ msgid "Weight log for workout" #~ msgstr "Журнал ваги для тренування" @@ -3720,8 +3913,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 +4606,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..aaccbd216 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 13:11+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 "总量" @@ -2781,6 +2968,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,7 +3045,7 @@ msgstr "日期格式" msgid "You have to enter your weight" msgstr "您必须输入您的体重" -#: weight/models.py:78 +#: weight/models.py:62 msgid "Weight entry" msgstr "体重输入" @@ -2978,6 +3169,35 @@ msgstr "" msgid "Re-Submit" 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 +3209,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 +3256,6 @@ msgstr "重新提交" #~ "fueled" #~ msgstr "打赏我们来支持这个项目!" -#~ msgid "Sample workout" -#~ msgstr "健身示例" - #~ msgid "Sample day" #~ msgstr "示例健身日" @@ -3416,9 +3618,6 @@ msgstr "重新提交" #~ msgid "Edit workout" #~ msgstr "编辑健身" -#~ msgid "Copy workout" -#~ msgstr "拷贝健身" - #~ msgid "Copy" #~ msgstr "复制" @@ -3453,9 +3652,6 @@ msgstr "重新提交" #~ msgid "Your BMI is: " #~ msgstr "你的体重指数是:" -#~ msgid "Legend" -#~ msgstr "说明" - #~ msgid "Adipositas III" #~ msgstr "三级肥胖" @@ -3510,9 +3706,6 @@ msgstr "重新提交" #~ msgid "Add exercises to this workout day" #~ msgstr "新增健身项目到这个健身日" -#~ msgid "Weight log" -#~ msgstr "体重日志" - #~ msgid "Weight log for workout" #~ msgstr "健身的体重日志" @@ -3537,8 +3730,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 +4129,8 @@ msgstr "重新提交" #~ "you might also be interested in contributing." #~ msgstr "" -#~ "如果你想要更近一步地帮助提升这个项目,你或许也会对 感兴趣." +#~ "如果你想要更近一步地帮助提升这个项目,你或许也会对 感兴趣." #~ msgid "Feedback form" #~ msgstr "反馈表格" @@ -3982,17 +4175,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/trophies/urls.py b/wger/trophies/urls.py index 1bf054f5f..bfd7a4f6c 100644 --- a/wger/trophies/urls.py +++ b/wger/trophies/urls.py @@ -22,6 +22,7 @@ from wger.core.views.react import ReactView # Local from .views import TrophiesOverview + urlpatterns = [ path( '', From fc1381e8f7776c90f4c83f294d637ec603fdb5a9 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 17 Jan 2026 14:25:41 +0100 Subject: [PATCH 38/53] Remove unnecessarily translated strings These made sense when we were using django forms, but not with the mobile app and the react one, which use their own translation systems. This just makes way more work for all the translations, so it's better to just cull everything not needed. --- wger/core/forms.py | 60 +- wger/core/tests/test_feedback.py | 92 --- wger/core/urls.py | 8 - wger/core/views/misc.py | 70 -- wger/exercises/models/base.py | 19 +- wger/exercises/models/category.py | 5 +- wger/exercises/models/comment.py | 7 +- wger/exercises/models/equipment.py | 3 +- wger/exercises/models/exercise_alias.py | 5 +- wger/exercises/models/image.py | 21 +- wger/exercises/models/muscle.py | 2 +- wger/exercises/models/translation.py | 17 +- wger/exercises/models/video.py | 24 +- wger/gallery/models/image.py | 14 +- wger/locale/ar_SA/LC_MESSAGES/django.po | 461 +++--------- wger/locale/bg/LC_MESSAGES/django.po | 563 +++++---------- wger/locale/ca/LC_MESSAGES/django.po | 600 ++++++---------- wger/locale/cs/LC_MESSAGES/django.po | 662 ++++++++--------- wger/locale/da/LC_MESSAGES/django.po | 591 ++++++---------- wger/locale/de/LC_MESSAGES/django.po | 662 ++++++++--------- wger/locale/el/LC_MESSAGES/django.po | 666 ++++++++--------- wger/locale/es/LC_MESSAGES/django.po | 662 ++++++++--------- wger/locale/fa/LC_MESSAGES/django.po | 481 +++---------- wger/locale/fi/LC_MESSAGES/django.po | 611 ++++++---------- wger/locale/fr/LC_MESSAGES/django.po | 663 ++++++++--------- wger/locale/he/LC_MESSAGES/django.po | 461 +++--------- wger/locale/hi/LC_MESSAGES/django.po | 452 +++--------- wger/locale/hr/LC_MESSAGES/django.po | 656 ++++++++--------- wger/locale/hu/LC_MESSAGES/django.po | 530 ++++---------- wger/locale/it/LC_MESSAGES/django.po | 666 ++++++++--------- wger/locale/ja/LC_MESSAGES/django.po | 467 +++--------- wger/locale/ko/LC_MESSAGES/django.po | 650 ++++++++--------- wger/locale/nl/LC_MESSAGES/django.po | 661 ++++++++--------- wger/locale/no/LC_MESSAGES/django.po | 648 +++++++---------- wger/locale/os/LC_MESSAGES/django.po | 480 +++---------- wger/locale/pl/LC_MESSAGES/django.po | 653 ++++++++--------- wger/locale/pt/LC_MESSAGES/django.po | 664 ++++++++--------- wger/locale/ro/LC_MESSAGES/django.po | 500 ++++--------- wger/locale/ru/LC_MESSAGES/django.po | 658 ++++++++--------- wger/locale/sk/LC_MESSAGES/django.po | 452 +++--------- wger/locale/sl/LC_MESSAGES/django.po | 452 +++--------- wger/locale/sr/LC_MESSAGES/django.po | 452 +++--------- wger/locale/sv/LC_MESSAGES/django.po | 629 +++++++---------- wger/locale/ta/LC_MESSAGES/django.po | 452 +++--------- wger/locale/th/LC_MESSAGES/django.po | 452 +++--------- wger/locale/tr/LC_MESSAGES/django.po | 668 ++++++++---------- wger/locale/uk/LC_MESSAGES/django.po | 656 ++++++++--------- wger/locale/zh_Hans/LC_MESSAGES/django.po | 645 +++++++---------- wger/manager/models/day.py | 9 +- wger/manager/models/log.py | 19 +- wger/manager/models/rest_config.py | 1 + wger/manager/models/routine.py | 23 +- wger/manager/models/session.py | 18 +- wger/manager/models/slot.py | 7 +- wger/manager/models/slot_entry.py | 3 +- wger/measurements/models/category.py | 7 +- wger/measurements/models/measurement.py | 9 +- wger/nutrition/models/image.py | 5 +- wger/nutrition/models/ingredient.py | 60 +- wger/nutrition/models/ingredient_category.py | 5 +- .../models/ingredient_weight_unit.py | 12 +- wger/nutrition/models/log.py | 18 +- wger/nutrition/models/meal.py | 14 +- wger/nutrition/models/meal_item.py | 12 +- wger/nutrition/models/plan.py | 22 +- wger/nutrition/models/weight_unit.py | 5 +- wger/nutrition/views/ingredient.py | 7 +- wger/utils/tests/test_middleware.py | 3 - wger/weight/models.py | 9 +- 69 files changed, 7015 insertions(+), 13226 deletions(-) delete mode 100644 wger/core/tests/test_feedback.py diff --git a/wger/core/forms.py b/wger/core/forms.py index ccf1d8e73..955b87159 100644 --- a/wger/core/forms.py +++ b/wger/core/forms.py @@ -17,6 +17,18 @@ # Standard Library from datetime import date +# Third Party +from crispy_forms.helper import FormHelper +from crispy_forms.layout import ( + HTML, + ButtonHolder, + Column, + Fieldset, + Layout, + Row, + Submit, +) + # Django from django import forms from django.contrib.auth import authenticate @@ -35,19 +47,9 @@ from django.forms import ( ) from django.utils.translation import ( gettext as _, - gettext_lazy, ) - -# Third Party -from crispy_forms.helper import FormHelper -from crispy_forms.layout import ( - HTML, - ButtonHolder, - Column, - Fieldset, - Layout, - Row, - Submit, +from django.utils.translation import ( + gettext_lazy, ) from django_recaptcha.fields import ReCaptchaField from django_recaptcha.widgets import ReCaptchaV3 @@ -341,37 +343,3 @@ class RegistrationFormNoCaptcha(UserCreationForm, UserEmailForm): ), ) - -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/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 d63f41a0d..a0d684406 100644 --- a/wger/core/urls.py +++ b/wger/core/urls.py @@ -35,7 +35,6 @@ from wger.core.views import ( ) from wger.core.views.react import ReactView - # sub patterns for languages patterns_language = [ path( @@ -196,19 +195,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..79e229a5f 100644 --- a/wger/core/views/misc.py +++ b/wger/core/views/misc.py @@ -21,33 +21,17 @@ 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.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 +78,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/muscle.py b/wger/exercises/models/muscle.py index da78b02d3..c0b117e8a 100644 --- a/wger/exercises/models/muscle.py +++ b/wger/exercises/models/muscle.py @@ -22,13 +22,13 @@ from django.db import models from django.templatetags.static import static from django.utils.translation import gettext_lazy as _ - logger = logging.getLogger(__name__) class Muscle(models.Model): """ Muscle an exercise works out + Muscle an exercise works out """ name = models.CharField( diff --git a/wger/exercises/models/translation.py b/wger/exercises/models/translation.py index 97efbd1da..6ad568571 100644 --- a/wger/exercises/models/translation.py +++ b/wger/exercises/models/translation.py @@ -17,16 +17,15 @@ # Standard Library import uuid +# Third Party +import bleach + # Django from django.contrib.postgres.indexes import GinIndex 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 from simple_history.models import HistoricalRecords # wger @@ -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..88e935df7 100644 --- a/wger/exercises/models/video.py +++ b/wger/exercises/models/video.py @@ -29,7 +29,6 @@ from simple_history.models import HistoricalRecords # wger from wger.utils.cache import reset_exercise_api_cache - try: # Third Party import ffmpeg @@ -43,7 +42,6 @@ from wger.utils.models import ( AbstractLicenseModel, ) - MAX_FILE_SIZE_MB = 100 @@ -95,33 +93,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 +128,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 +150,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 +158,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/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index b1894678a..a093197ed 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-12-31 21:36+0000\n" "Last-Translator: MR \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language-Team: Bulgarian \n" @@ -53,24 +53,24 @@ msgstr "" msgid "Edit" msgstr "Поправи" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 "" msgid "Email" msgstr "Е-мейл" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 "" msgid "Delete" msgstr "Изтрии" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Коментирай" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "Какво искаш да кажеш?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Съкратено име на езика" @@ -202,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 "" @@ -362,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 "Единица за тегло" @@ -399,16 +381,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "Име" @@ -637,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 "" @@ -903,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -940,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 "Бележки" @@ -955,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:37 -#: 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 "Мазнини" @@ -1158,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 "" @@ -1167,7 +1133,7 @@ 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 "" @@ -1179,13 +1145,13 @@ msgstr "" #: 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 " @@ -1196,18 +1162,6 @@ msgstr "" "този сайт да направи за теб. Чувствай се свободен да ги редактираш или " "изтриеш!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Обратна връзка" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Вашият съвет/коментар бе изпратен успешно. Благодарим ви!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1254,83 +1208,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Тегло" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1345,50 +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: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 "" @@ -1405,13 +1251,10 @@ msgstr "Ден за упражнение" msgid "Action" msgstr "Действия" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Потребител" @@ -1465,10 +1308,6 @@ msgstr "" msgid "Add muscle" msgstr "Добави мускул" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1537,8 +1376,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "Количество" @@ -1555,12 +1393,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "Начална дата" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1887,7 +1723,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повторения" @@ -2177,58 +2013,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата на създаване" - -#: manager/models/routine.py:107 -#, fuzzy -#| msgid "Workouts schedules" -msgid "Workout template" -msgstr "График на тренировки" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2244,32 +2037,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." @@ -2313,13 +2084,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2340,8 +2115,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "Съставка" @@ -2351,100 +2125,6 @@ msgstr "Съставка" 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_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 "" @@ -2506,6 +2186,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 @@ -2513,10 +2197,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" @@ -2590,7 +2286,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 "Добави нова съставка" @@ -2784,6 +2480,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -3055,14 +2755,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3158,6 +2858,103 @@ msgstr "" msgid "Re-Submit" 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 "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)" diff --git a/wger/locale/ca/LC_MESSAGES/django.po b/wger/locale/ca/LC_MESSAGES/django.po index 967f61519..3a6fa454b 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2024-08-04 23:09+0000\n" "Last-Translator: Zixu Sun \n" "Language-Team: Catalan \n" @@ -52,24 +52,24 @@ msgstr "" msgid "Edit" msgstr "Edita" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,54 +79,54 @@ msgstr "Cognom" msgid "Email" msgstr "Adreça electrònica" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Dades personals" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Recordatoris d'entrenament" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Altres configuracions" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Aquesta adreça ja s'està usant." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Introduïu la contrasenya actual." -#: core/forms.py:270 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 +143,21 @@ msgstr "Introduïu la contrasenya actual." msgid "Delete" msgstr "Esborra" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Contrasenya invàlida" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "El formulari està protegit amb reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contacte" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Algun medi per respondre-us (adreça electrònica, etc.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentari" - -#: core/forms.py:363 -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" @@ -205,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" @@ -372,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" @@ -414,16 +396,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -666,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" @@ -936,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripció" @@ -973,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" @@ -988,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:37 -#: 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" @@ -1195,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" @@ -1204,7 +1170,7 @@ 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}?" @@ -1216,13 +1182,13 @@ msgstr "Esborrar {0}?" #: 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 " @@ -1232,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:116 -msgid "Feedback" -msgstr "Escriviu-nos" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Envia" - -#: core/views/misc.py:143 -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" @@ -1290,81 +1244,6 @@ msgstr "Gimnàs" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Imatge" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Pes" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -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»" @@ -1379,52 +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: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" @@ -1441,13 +1289,10 @@ msgstr "Dia d'entrenament" msgid "Action" msgstr "Accions" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Usuari" @@ -1506,10 +1351,6 @@ msgstr "Voleu esborrar l'equipament?" msgid "Add muscle" msgstr "Afegeix múscul" -#: gallery/models/image.py:55 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" @@ -1576,8 +1417,7 @@ msgid "Contract type" msgstr "Tipus de contracte" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1594,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data de finalització" @@ -1938,7 +1776,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repeticions" @@ -2233,61 +2071,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Unitat" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data de creació" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Plantilla d'entrenament" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Plantilla pública" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Una plantilla pública està disponible per a altres usuaris" - -#: manager/models/routine.py:156 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ó." @@ -2303,34 +2097,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." @@ -2386,14 +2156,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2415,8 +2189,7 @@ msgstr "" "Calories addicionals a afegir a la base (per a sostreure-les-en, introduïu " "un número negatiu)" -#: nutrition/forms.py:209 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" @@ -2426,96 +2199,6 @@ msgstr "Ingredient" 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_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 "" @@ -2569,6 +2252,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 @@ -2576,10 +2263,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" @@ -2653,7 +2352,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 "" @@ -2837,6 +2536,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 "" @@ -3112,14 +2815,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3215,6 +2918,141 @@ 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 "" diff --git a/wger/locale/cs/LC_MESSAGES/django.po b/wger/locale/cs/LC_MESSAGES/django.po index 52235f319..c8dce192b 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2024-02-21 11:02+0000\n" "Last-Translator: Fjuro \n" "Language-Team: Czech \n" @@ -59,24 +59,24 @@ msgstr "" msgid "Edit" msgstr "Upravit" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,50 +86,50 @@ msgstr "Příjmení" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Osobní data" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Připomenutí tréninku" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Další nastavení" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Zadejte prosím vaše současné heslo." -#: core/forms.py:270 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 +146,21 @@ msgstr "Zadejte prosím vaše současné heslo." msgid "Delete" msgstr "Smazat" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Chybné heslo" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Zabezpečeno službou reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Nějaký kontakt na vás (email, apod.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentář" - -#: core/forms.py:363 -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" @@ -208,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" @@ -372,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" @@ -414,16 +396,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -661,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í" @@ -929,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Popis" @@ -966,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" @@ -981,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:37 -#: 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" @@ -1184,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" @@ -1193,7 +1159,7 @@ 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}?" @@ -1205,13 +1171,13 @@ msgstr "Smazat {0}?" #: 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 " @@ -1221,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:116 -msgid "Feedback" -msgstr "Zpětná vazba" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Zaslat" - -#: core/views/misc.py:143 -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" @@ -1279,77 +1233,6 @@ msgstr "Posilovna" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Obrázek" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Výška" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Šířka" - -#: exercises/models/image.py:107 -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\"" @@ -1362,48 +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: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í" @@ -1416,13 +1270,10 @@ msgstr "Administrativní historie cvičení" msgid "Action" msgstr "Akce" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Uživatel" @@ -1474,10 +1325,6 @@ msgstr "Smazat nářadí?" msgid "Add muscle" msgstr "Přidat sval" -#: gallery/models/image.py:55 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" @@ -1545,8 +1392,7 @@ msgid "Contract type" msgstr "Typ zakázky" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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í" @@ -1563,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Upravit datum" @@ -1901,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í" @@ -2196,62 +2040,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Jednotka" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum vytvoření" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Tréninková šablona" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Veřejná šablona" - -#: manager/models/routine.py:118 -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:156 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í." @@ -2267,35 +2066,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." @@ -2352,14 +2126,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2381,8 +2159,7 @@ msgstr "" "Další kalorie můžete přidat k základní hodnotě (pokud chcete odečíst, " "zadejte záporné číslo)" -#: nutrition/forms.py:209 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" @@ -2390,101 +2167,6 @@ msgstr "Potravina" 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_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 "" @@ -2550,6 +2232,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 @@ -2557,10 +2243,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" @@ -2648,7 +2346,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" @@ -2852,6 +2550,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" @@ -3130,14 +2832,14 @@ msgstr "Formát data" msgid "You have to enter your weight" msgstr "Zadejte nový údaj své hmotnosti" -#: weight/models.py:62 -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" @@ -3257,6 +2959,202 @@ 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 "" diff --git a/wger/locale/da/LC_MESSAGES/django.po b/wger/locale/da/LC_MESSAGES/django.po index 52dd810ca..8111c9a2c 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-30 04:25+0000\n" "Last-Translator: Fedder Skovgaard \n" "Language-Team: Danish \n" @@ -54,24 +54,24 @@ msgstr "" msgid "Edit" msgstr "Rediger" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,52 +81,52 @@ msgstr "Efternavn" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Personlige oplysninger" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Træningspåmindelser" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Andre indstillinger" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Denne emailadresse er allerede i brug." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Indtast venligst dit nuværende kodeord." -#: core/forms.py:270 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,40 +143,21 @@ msgstr "Indtast venligst dit nuværende kodeord." msgid "Delete" msgstr "Slet" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ukorrekt kodeord" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Denne formular er sikret med reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -#, 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:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:363 -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" @@ -207,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" @@ -373,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" @@ -413,16 +393,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -653,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" @@ -923,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivelse" @@ -960,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" @@ -975,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:37 -#: 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" @@ -1178,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" @@ -1187,7 +1151,7 @@ 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}?" @@ -1199,13 +1163,13 @@ msgstr "Slet {0}?" #: 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 " @@ -1215,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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Indsend" - -#: core/views/misc.py:143 -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" @@ -1273,77 +1225,6 @@ msgstr "Fitnescenter" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Billede" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Højdde" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Bredde" - -#: exercises/models/image.py:107 -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\"" @@ -1356,48 +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: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" @@ -1410,13 +1262,10 @@ msgstr "Øvelses administrator historik" msgid "Action" msgstr "Handlinger" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Bruger" @@ -1468,10 +1317,6 @@ msgstr "Slet udstyr?" msgid "Add muscle" msgstr "Tilføj muskler" -#: gallery/models/image.py:55 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" @@ -1538,8 +1383,7 @@ msgid "Contract type" msgstr "Kontrakttype" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1556,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdato" @@ -1894,7 +1736,7 @@ msgstr "" msgid "Quads" msgstr "Quadmuskler" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Repetitioner" @@ -2184,61 +2026,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "Øvelse" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Enhed" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Oprettelsesdato" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Træningsskabelon" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Offentlig skabelon" - -#: manager/models/routine.py:118 -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:156 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." @@ -2254,32 +2052,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." @@ -2323,14 +2099,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2350,8 +2130,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2359,96 +2138,6 @@ msgstr "" 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_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 "" @@ -2502,6 +2191,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 @@ -2509,10 +2202,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" @@ -2586,7 +2291,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 "" @@ -2768,6 +2473,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 "" @@ -3027,14 +2736,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3130,6 +2839,138 @@ 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 "" diff --git a/wger/locale/de/LC_MESSAGES/django.po b/wger/locale/de/LC_MESSAGES/django.po index 75c7ef9e1..b7465a5bf 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-12-08 07:00+0000\n" "Last-Translator: Elias Lang \n" "Language-Team: German \n" @@ -56,24 +56,24 @@ msgstr "" msgid "Edit" msgstr "Bearbeiten" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +83,54 @@ msgstr "Nachname" msgid "Email" msgstr "E-Mail" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Persönliche Daten" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Trainingsplanerinnerungen" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Andere Einstellungen" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Diese E-Mail-Adresse wird bereits verwendet." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Bitte dein aktuelles Passwort eingeben." -#: core/forms.py:270 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 +147,21 @@ msgstr "Bitte dein aktuelles Passwort eingeben." msgid "Delete" msgstr "Löschen" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ungültiges Passwort" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Das Formular ist mit reCaptcha gesichert" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Eine Möglichkeit, dich zu erreichen (E-Mail, usw.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:363 -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" @@ -207,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" @@ -374,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" @@ -416,16 +398,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -658,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" @@ -928,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschreibung" @@ -965,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" @@ -980,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:37 -#: 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" @@ -1183,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" @@ -1192,7 +1158,7 @@ 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?" @@ -1204,13 +1170,13 @@ msgstr "{0} löschen?" #: 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 " @@ -1221,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:116 -msgid "Feedback" -msgstr "Rückmeldung" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Abschicken" - -#: core/views/misc.py:143 -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" @@ -1279,77 +1233,6 @@ msgstr "Studio" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Bild" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Höhe" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Breite" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Hauptbild" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Auf latein, z.B. „Pectoralis major“" @@ -1362,48 +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: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" @@ -1416,13 +1270,10 @@ msgstr "Verwaltungsverlauf ausüben" msgid "Action" msgstr "Aktionen" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Benutzer" @@ -1474,10 +1325,6 @@ msgstr "Gerät löschen?" msgid "Add muscle" msgstr "Muskel hinzufügen" -#: gallery/models/image.py:55 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" @@ -1546,8 +1393,7 @@ msgid "Contract type" msgstr "Vertragstyp" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1564,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Enddatum" @@ -1901,7 +1745,7 @@ msgstr "Klimmzugstange" msgid "Quads" msgstr "Quadrizeps" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Wiederholungen" @@ -2196,58 +2040,15 @@ msgstr "Pause" 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:51 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Einheit" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Erstellungsdatum" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Trainingsvorlage" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Öffentliche Vorlage" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Eine öffentliche Vorlage ist für andere Benutzer verfügbar" - -#: manager/models/routine.py:156 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." @@ -2263,35 +2064,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." @@ -2348,14 +2124,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2375,8 +2155,7 @@ msgid "" "number)" msgstr "Zusat" -#: nutrition/forms.py:209 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" @@ -2384,101 +2163,6 @@ msgstr "Zutat" 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_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 "" @@ -2544,6 +2228,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 @@ -2551,10 +2239,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" @@ -2647,7 +2347,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" @@ -2858,6 +2558,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" @@ -3135,14 +2839,14 @@ msgstr "Datumsformat" msgid "You have to enter your weight" msgstr "Du musst dein Gewicht eingeben" -#: weight/models.py:62 -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" @@ -3268,6 +2972,204 @@ 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" diff --git a/wger/locale/el/LC_MESSAGES/django.po b/wger/locale/el/LC_MESSAGES/django.po index d2bdda7ff..555832a5a 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2023-10-01 07:01+0000\n" "Last-Translator: Antonis-geo \n" "Language-Team: Greek \n" @@ -55,24 +55,24 @@ msgstr "" msgid "Edit" msgstr "Επεξεργασία" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +82,54 @@ msgstr "Επίθετο" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Προσωπικά δεδομένα" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Υπενθύμιση προπόνησης" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Άλλες ρυθμίσεις" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Χρησιμοποιείται για επαναφορά κωδικού πρόσβασης και, προαιρετικά, " "υπενθυμίσεις ηλεκτρονικού ταχυδρομείου." -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Αυτή η διεύθυνση email χρησιμοποιείται ήδη." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδικό σας." -#: core/forms.py:270 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 +146,21 @@ msgstr "Παρακαλώ πληκτρολογήστε τον τρέχων κωδ msgid "Delete" msgstr "Διαγραφή" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Λάθος κωδικός" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Η φόρμα είναι ασφαλισμένη με reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Επικοινωνία" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Κάποιος τρόπος απάντησής σας (ηλεκτρονικό ταχυδρομείο κ.λπ.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Σχόλια" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "Τί θέλετε να πείτε;" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Γλώσσα μικρή ονομασία" @@ -208,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 "Σύνδεσμος" @@ -376,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 "Μονάδα βάρους" @@ -418,16 +400,11 @@ msgstr "Το σύνολο όλων των ωρών θα πρέπει να είν #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "Όνομα" @@ -670,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 "Όργανα" @@ -943,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Περιγραφή" @@ -980,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 "Σημειώσεις" @@ -995,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:37 -#: 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 "Λιπαρή ύλη" @@ -1198,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 "Επιτυχής διαγραφή" @@ -1207,7 +1173,7 @@ 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};" @@ -1219,13 +1185,13 @@ msgstr "Διαγραφή {0};" #: 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 " @@ -1236,18 +1202,6 @@ msgstr "" "δείτε τι\tμπορεί να κάνει αυτός ο ιστότοπος. Νιώστε ελεύθερος να τις " "επεξεργαστείτε ή να τις διαγράψετε!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Αναπληροφόρηση" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Υποβολή" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Η αναπληροφόρηση σας αποστάλθηκε με επιτυχία. Ευχαριστούμε!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1294,77 +1248,6 @@ msgstr "Γυμναστήριο" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Εικόνα" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Ύψος" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Πλάτος" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Κύρια εικόνα" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Στα λατινικά, π.χ. \"Pectoralis major\"" @@ -1377,48 +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: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 "Λίστα οργάνων" @@ -1431,13 +1285,10 @@ msgstr "Άσκηση ιστορικό διαχειριστή" msgid "Action" msgstr "Δράση" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Χρήστης" @@ -1490,10 +1341,6 @@ msgstr "Διαγραφή εξοπλισμού;" msgid "Add muscle" msgstr "Νέος μύς" -#: gallery/models/image.py:55 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 "Προσθέστε εικόνα" @@ -1563,8 +1410,7 @@ msgid "Contract type" msgstr "Τύπος συμβολαίου" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "Ποσότητα" @@ -1581,12 +1427,10 @@ msgid "Contract is active" msgstr "Το συμβόλαιο είναι ενεργό" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "Ημερομηνία έναρξης" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Ημερομηνία λήξης" @@ -1918,7 +1762,7 @@ msgstr "Μπάρα έλξης" msgid "Quads" msgstr "Τετρακέφαλοι" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Επαναλήψεις" @@ -2215,62 +2059,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Μονάδα" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Ημερομηνία δημιουργίας" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Υπόδειγμα προπόνησης" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Η επισήμανση μιας προπόνησης ως υπόδειγμα θα την δεσμεύσει και θα σας " -"επιτρέψει να δημιουργήσετε αντίγραφά της" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "Δημόσιο υπόδειγμα" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Ένα δημόσιο υπόδειγμα είναι διαθέσιμο σε άλλους χρήστες" - -#: manager/models/routine.py:156 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 "Η ώρα έναρξης δεν μπορεί να είναι μετά την ώρα λήξης." @@ -2286,37 +2085,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." @@ -2377,14 +2151,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2406,8 +2184,7 @@ msgstr "" "Επιπλέον θερμίδες θα προστεθούν στην βασική τάση (για αφαίρεση, εισάγετε " "αρνητικό αριθμό)" -#: nutrition/forms.py:209 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 "Συστατικά" @@ -2415,103 +2192,6 @@ msgstr "Συστατικά" 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_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 "" @@ -2579,6 +2259,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 @@ -2586,10 +2270,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" @@ -2686,7 +2382,7 @@ msgstr "" "τον εαυτό σας τις προσεχείς εβδομάδες και αλλάξτε την συνολική ποσότητα αν " "απαιτείται." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Προσθήκη νέου συστατικού" @@ -2889,6 +2585,10 @@ msgstr "" "Το wger Workout Manager είναι μια δωρεάν διαδικτυακή εφαρμογή ανοιχτού " "κώδικα που διαχειρίζεται τις ασκήσεις και τις προπονήσεις σας." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Επικοινωνία" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Εφαρμογή για κινητά τηλέφωνα" @@ -3177,14 +2877,14 @@ msgstr "Μορφή ημερομηνίας" msgid "You have to enter your weight" msgstr "Πρέπει να εισάγετε το βάρος σας" -#: weight/models.py:62 -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" @@ -3309,6 +3009,204 @@ 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 "" diff --git a/wger/locale/es/LC_MESSAGES/django.po b/wger/locale/es/LC_MESSAGES/django.po index e1829c365..85392317d 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-16 08:08+0000\n" "Last-Translator: v7mbz \n" "Language-Team: Spanish \n" @@ -60,24 +60,24 @@ msgstr "" msgid "Edit" msgstr "Editar" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,54 +87,54 @@ msgstr "Apellido" msgid "Email" msgstr "Correo electrónico" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Datos personales" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Recordatorios de entrenamiento" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Otras configuraciones" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Por favor, ingrese su contraseña actual." -#: core/forms.py:270 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 @@ -151,38 +151,21 @@ msgstr "Por favor, ingrese su contraseña actual." msgid "Delete" msgstr "Borrar" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Contraseña incorrecta" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "El Formulario está asegurado por recaptcha" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contacto" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Alguna manera de responderte (correo electrónico u otros)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentario" - -#: core/forms.py:363 -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" @@ -211,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" @@ -381,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" @@ -423,16 +405,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -662,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" @@ -935,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descripción" @@ -972,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" @@ -987,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:37 -#: 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" @@ -1193,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" @@ -1202,7 +1168,7 @@ 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}?" @@ -1214,13 +1180,13 @@ msgstr "¿Borrar {0}?" #: 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 " @@ -1230,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:116 -msgid "Feedback" -msgstr "Comentarios" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Enviar" - -#: core/views/misc.py:143 -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" @@ -1288,77 +1242,6 @@ msgstr "Gimnasio" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Imagen" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Altura" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Ancho" - -#: exercises/models/image.py:107 -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\"" @@ -1371,48 +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: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" @@ -1425,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:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Usuario" @@ -1483,10 +1334,6 @@ msgstr "¿Borrar equipo?" msgid "Add muscle" msgstr "Añadir músculo" -#: gallery/models/image.py:55 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" @@ -1554,8 +1401,7 @@ msgid "Contract type" msgstr "Tipo de contrato" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1572,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Fecha final" @@ -1910,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" @@ -2205,58 +2049,15 @@ msgstr "descanso" 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:51 -msgid "Routine" -msgstr "Rutina" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Unidad" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Fecha de creación" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Pantilla de entrenamiento" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Plantilla pública" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Una plantilla pública estará disponible para otros usuarios" - -#: manager/models/routine.py:156 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." @@ -2272,36 +2073,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." @@ -2355,14 +2132,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2384,8 +2165,7 @@ msgstr "" "Calorías adicionales para agregar a la tasa básica (para restar, introduce " "un número negativo)" -#: nutrition/forms.py:209 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" @@ -2393,102 +2173,6 @@ msgstr "Ingrediente" 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_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 "" @@ -2551,6 +2235,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 @@ -2558,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 "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" @@ -2651,7 +2351,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" @@ -2858,6 +2558,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" @@ -3134,14 +2838,14 @@ msgstr "Formato de fecha" msgid "You have to enter your weight" msgstr "Tienes que introducir su peso" -#: weight/models.py:62 -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" @@ -3262,6 +2966,204 @@ 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" diff --git a/wger/locale/fa/LC_MESSAGES/django.po b/wger/locale/fa/LC_MESSAGES/django.po index 330630056..5c6fc0449 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-12 17:07+0000\n" "Last-Translator: Mahmuoud Salehi \n" "Language-Team: Persian \n" @@ -53,24 +53,24 @@ msgstr "" msgid "Edit" msgstr "ویرایش" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,51 +80,51 @@ msgstr "نام خانوادگی" msgid "Email" msgstr "ایمیل" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "برای بازنشانی رمز عبور استفاده می شود، به صورت اختیاری، یادآوری های ایمیل." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "اطلاعات شخصی" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "یاداوری تمرین" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "تنظیمات دیگر" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "استفاده شده برای بازیابی رمز عبور و به صورت اختیاری, یادآوری ایمیل" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "این ایمیل قبلا استفاده شده است." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "لطفا رمز عبور فعلی خود را وارد کنید." -#: core/forms.py:270 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 +141,21 @@ msgstr "لطفا رمز عبور فعلی خود را وارد کنید." msgid "Delete" msgstr "حذف" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "رمز نامعتبر" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "این فرم با ریکپچا امن شده است" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "ارتباط" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "راه های ارتباطی با شما(ایمیل و ... )" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "نظر" - -#: core/forms.py:363 -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 +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 "پیوند" @@ -366,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 "واحد وزن" @@ -407,16 +389,11 @@ msgstr "مجموع تمام ساعت ها باید 24 باشد" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "نام" @@ -648,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 "تجهیزات" @@ -914,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -951,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 "" @@ -966,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:37 -#: 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 "چربی" @@ -1169,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 "" @@ -1178,7 +1144,7 @@ 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 "" @@ -1190,31 +1156,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1261,79 +1215,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "وزن" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1346,50 +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: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 "" @@ -1404,13 +1256,10 @@ msgstr "" msgid "Action" msgstr "امکانات" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1462,10 +1311,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1532,8 +1377,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1550,12 +1394,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1884,7 +1726,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2170,58 +2012,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -#, fuzzy -#| msgid "Workouts schedules" -msgid "Workout template" -msgstr "برنامه تمرین" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2237,32 +2036,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." @@ -2306,13 +2083,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2333,8 +2114,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2344,96 +2124,6 @@ msgstr "" 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_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 "" @@ -2487,6 +2177,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 @@ -2494,10 +2188,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" @@ -2571,7 +2277,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 "" @@ -2751,6 +2457,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "ارتباط" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -3010,14 +2720,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3113,6 +2823,31 @@ 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 "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 "" diff --git a/wger/locale/fi/LC_MESSAGES/django.po b/wger/locale/fi/LC_MESSAGES/django.po index 75f8415af..0c9419d87 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+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,24 +54,24 @@ msgstr "" msgid "Edit" msgstr "Muokkaa" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,53 +81,53 @@ msgstr "Sukunimi" msgid "Email" msgstr "Sähköposti" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Henkilökohtaiset tiedot" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Harjoittelumuistutukset" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Muut asetukset" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Anna nykyinen salasanasi." -#: core/forms.py:270 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 +144,21 @@ msgstr "Anna nykyinen salasanasi." msgid "Delete" msgstr "Poista" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Väärä salasana" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Lomake on suojattu reCAPTCHA:lla" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Yhteydenotto" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Jokin tapa vastata sinulle (sähköposti, jne.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentti" - -#: core/forms.py:363 -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" @@ -204,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" @@ -372,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ö" @@ -413,16 +395,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -651,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" @@ -919,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Kuvaus" @@ -956,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" @@ -971,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:37 -#: 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" @@ -1177,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" @@ -1186,7 +1152,7 @@ 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}?" @@ -1198,13 +1164,13 @@ msgstr "Poista {0}?" #: 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 " @@ -1214,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:116 -msgid "Feedback" -msgstr "Palaute" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Lähetä" - -#: core/views/misc.py:143 -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" @@ -1272,77 +1226,6 @@ msgstr "Kuntosali" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Kuva" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Korkeus" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Leveys" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Pääkuva" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latinaksi, esim. \"Pectoralis major\"" @@ -1355,48 +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: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" @@ -1409,13 +1263,10 @@ msgstr "Harjoitusten järjestelmänvalvojan historia" msgid "Action" msgstr "Toiminta" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Käyttäjä" @@ -1467,10 +1318,6 @@ msgstr "Poistetaanko varuste?" msgid "Add muscle" msgstr "Lisää lihas" -#: gallery/models/image.py:55 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" @@ -1538,8 +1385,7 @@ msgid "Contract type" msgstr "Sopimuksen tyyppi" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1556,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Päättymispäivämäärä" @@ -1893,7 +1737,7 @@ msgstr "Leuanvetotanko" msgid "Quads" msgstr "Etureidet" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Toistot" @@ -2184,58 +2028,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "Rutiini" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Yksikkö" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Luontipäivä" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Harjoitusmalli" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Julkinen malli" - -#: manager/models/routine.py:118 -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:156 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." @@ -2251,36 +2052,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." @@ -2333,14 +2108,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2361,8 +2140,7 @@ msgid "" msgstr "" "Perustarpeeseen lisättävät kalorit (vähentääksesi, syötä negatiivinen luku)" -#: nutrition/forms.py:209 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" @@ -2370,96 +2148,6 @@ msgstr "Ainesosa" 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_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 "" @@ -2513,6 +2201,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 @@ -2520,10 +2212,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" @@ -2597,7 +2301,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" @@ -2779,6 +2483,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 "" @@ -3034,14 +2742,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3137,6 +2845,157 @@ 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" diff --git a/wger/locale/fr/LC_MESSAGES/django.po b/wger/locale/fr/LC_MESSAGES/django.po index 8409dceee..3f57bb65e 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-12-20 11:00+0000\n" "Last-Translator: Justin Pinheiro \n" "Language-Team: French \n" @@ -66,24 +66,24 @@ msgstr "" msgid "Edit" msgstr "Modifier" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 @@ -93,54 +93,54 @@ msgstr "Nom" msgid "Email" msgstr "Courriel" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Données personnelles" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Rappels d’entraînement" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Autres paramètres" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Veuillez entrer votre mot de passe actuel." -#: core/forms.py:270 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 @@ -157,38 +157,21 @@ msgstr "Veuillez entrer votre mot de passe actuel." msgid "Delete" msgstr "Supprimer" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Mot de passe invalide" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Le formulaire est sécurisé avec reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Un moyen de vous répondre (courriel, etc.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Commentaire" - -#: core/forms.py:363 -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" @@ -217,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" @@ -385,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" @@ -427,16 +409,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -666,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" @@ -939,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Description" @@ -976,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" @@ -991,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:37 -#: 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" @@ -1196,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" @@ -1205,7 +1171,7 @@ 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} ?" @@ -1217,13 +1183,13 @@ msgstr "Supprimer {0} ?" #: 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 " @@ -1234,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:116 -msgid "Feedback" -msgstr "Remarques" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Envoyer" - -#: core/views/misc.py:143 -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" @@ -1292,77 +1246,6 @@ msgstr "Activités" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Image" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Taille" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Largeur" - -#: exercises/models/image.py:107 -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 »" @@ -1375,48 +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: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" @@ -1429,13 +1283,10 @@ msgstr "Historique d'exercice admin" msgid "Action" msgstr "Action" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utilisateur" @@ -1487,10 +1338,6 @@ msgstr "Supprimer équipement ?" msgid "Add muscle" msgstr "Ajouter un muscle" -#: gallery/models/image.py:55 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" @@ -1561,8 +1408,7 @@ msgid "Contract type" msgstr "Type de contrat" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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é" @@ -1579,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Date de fin" @@ -1919,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" @@ -2215,58 +2059,15 @@ msgstr "repos" 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:51 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Unité" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Date de création" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Modèle d'entraînement" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Modèle public" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Un modèle public est disponible pour les autres utilisateurs" - -#: manager/models/routine.py:156 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." @@ -2282,35 +2083,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." @@ -2367,14 +2144,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2396,8 +2177,7 @@ msgstr "" "Les calories supplémentaires à ajouter au taux de base (pour soustraire, " "entrez un nombre négatif)" -#: nutrition/forms.py:209 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" @@ -2405,103 +2185,6 @@ msgstr "Ingrédient" 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_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 "" @@ -2568,6 +2251,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 @@ -2575,10 +2262,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" @@ -2668,7 +2367,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" @@ -2879,6 +2578,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" @@ -3161,14 +2864,14 @@ msgstr "Format de date" msgid "You have to enter your weight" msgstr "Vous devez entrer votre poids" -#: weight/models.py:62 -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" @@ -3289,6 +2992,204 @@ 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" diff --git a/wger/locale/he/LC_MESSAGES/django.po b/wger/locale/he/LC_MESSAGES/django.po index 2cf706b39..fddc450d2 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-11-17 06:51+0000\n" "Last-Translator: \"Omer I.S.\" \n" "Language-Team: Hebrew \n" @@ -51,24 +51,24 @@ msgstr "" msgid "Edit" msgstr "עריכה" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,51 +78,51 @@ msgstr "שם משפחה" msgid "Email" msgstr "דואר אלקטרוני" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "בשימוש עבור איפוס סיסמה וגם, באופן אופציונלי, לתזכורות בדואר האלקטרוני." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "נתונים אישיים" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "תזכורות לאימונים" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "הגדרות אחרות" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "משמש לשחזור הסיסמה ולתזכורות אופציונליות." -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "כתובת דוא״ל זו כבר נמצאת בשימוש." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "נא להקליד את סיסמתך הנוכחית." -#: core/forms.py:270 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 @@ -139,38 +139,21 @@ msgstr "נא להקליד את סיסמתך הנוכחית." msgid "Delete" msgstr "מחיקה" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "סיסמה שגויה" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "טופס זה מאובטח באמצעות reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "יצירת קשר" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "הערה" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "מה ברצונך לומר?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "שם שפה מקוצר" @@ -197,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 "קישור" @@ -350,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 "יחידת משקל" @@ -387,16 +369,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "שם" @@ -613,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 "ציוד" @@ -873,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "תיאור" @@ -910,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 "הערות" @@ -925,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:37 -#: 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 "שומנים" @@ -1128,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 "" @@ -1137,7 +1103,7 @@ 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 "" @@ -1149,31 +1115,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1220,77 +1174,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1303,48 +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: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 "" @@ -1357,13 +1211,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1415,10 +1266,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1485,8 +1332,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1503,12 +1349,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1831,7 +1675,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "חזרות" @@ -2115,56 +1959,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2180,32 +1983,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." @@ -2249,13 +2030,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2276,8 +2061,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2285,96 +2069,6 @@ msgstr "" 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_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 "" @@ -2428,6 +2122,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 @@ -2435,10 +2133,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" @@ -2512,7 +2222,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 "" @@ -2690,6 +2400,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "יצירת קשר" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2945,14 +2659,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3048,6 +2762,15 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Comment" +#~ msgstr "הערה" + +#~ msgid "What do you want to say?" +#~ 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 f903e4d88..d67a34971 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-12-01 06:00+0000\n" "Last-Translator: Madhav Agarwal \n" "Language-Team: Hindi \n" @@ -51,24 +51,24 @@ msgstr "" msgid "Edit" msgstr "संपादन" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +78,50 @@ msgstr "उपनाम" msgid "Email" msgstr "ईमेल" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 @@ -139,38 +139,21 @@ msgstr "" msgid "Delete" msgstr "मितादे" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "अवैध पासवर्ड" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "फ़ॉर्म reCAPTCHA द्वारा सुरक्षित है" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "" @@ -197,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 "" @@ -350,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 "" @@ -387,16 +369,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -615,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 "" @@ -875,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -912,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 "" @@ -927,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:37 -#: 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 "" @@ -1130,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 "" @@ -1139,7 +1105,7 @@ 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 "" @@ -1151,31 +1117,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1222,77 +1176,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1305,48 +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: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 "" @@ -1359,13 +1213,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1417,10 +1268,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1487,8 +1334,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1505,12 +1351,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1833,7 +1677,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2115,56 +1959,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2180,32 +1983,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." @@ -2249,13 +2030,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2276,8 +2061,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2285,96 +2069,6 @@ msgstr "" 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_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 "" @@ -2428,6 +2122,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 @@ -2435,10 +2133,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" @@ -2512,7 +2222,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 "" @@ -2690,6 +2400,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2945,14 +2659,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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/hr/LC_MESSAGES/django.po b/wger/locale/hr/LC_MESSAGES/django.po index fd6096f2d..f22a2a7f0 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-26 11:02+0000\n" "Last-Translator: Milo Ivir \n" "Language-Team: Croatian \n" @@ -53,24 +53,24 @@ msgstr "" msgid "Edit" msgstr "Uredi" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Osobni podaci" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Podsjetitelji za treninge" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Druge postavke" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ova se e-mail adresa već koristi." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Upiši svoju aktualnu lozinku." -#: core/forms.py:270 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:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Nevaljana lozinka" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Obrazac je zaštićen pomoću reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Neki način slanja odgovora (e-mail, itd.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentar" - -#: core/forms.py:363 -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" @@ -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" @@ -405,16 +387,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -643,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" @@ -912,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -949,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" @@ -964,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:37 -#: 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" @@ -1167,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" @@ -1176,7 +1142,7 @@ 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}?" @@ -1188,13 +1154,13 @@ msgstr "Izbrisati {0}?" #: 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 " @@ -1204,18 +1170,6 @@ msgstr "" "(tjelesnu) težinu i unose za planove prehrane za bolji prikaz " "funkcionalnosti ove stranice. Slobodno ih uredi ili izbriši!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Povratne informacije" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Pošalji" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Tvoje povratne informacije su uspješno poslane. Hvala!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1262,77 +1216,6 @@ msgstr "Teretana" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Slika" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Visina" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Širina" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Glavna slika" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Na latinskom, npr. „Pectoralis major”" @@ -1345,48 +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: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" @@ -1399,13 +1253,10 @@ msgstr "Povijest administratora vježbe" msgid "Action" msgstr "Radnja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Korisnik" @@ -1457,10 +1308,6 @@ msgstr "Izbrisati opremu?" msgid "Add muscle" msgstr "Dodaj mičić" -#: gallery/models/image.py:55 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" @@ -1529,8 +1376,7 @@ msgid "Contract type" msgstr "Vrsta ugovora" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1547,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Datum kraja" @@ -1880,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" @@ -2175,58 +2019,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "Rutina" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Jedinica" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum stvaranja" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Predložak za trening" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Javni predložak" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Javni predložak je dostupan drugim korisnicima" - -#: manager/models/routine.py:156 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." @@ -2242,33 +2043,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." @@ -2319,14 +2097,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2348,8 +2130,7 @@ msgstr "" "Dodatne kalorije za dodavanje osnovnoj stopi (za oduzimanje upiši negativan " "broj)" -#: nutrition/forms.py:209 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" @@ -2357,100 +2138,6 @@ msgstr "Sastojak" 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_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 "" @@ -2514,6 +2201,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 @@ -2521,10 +2212,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" @@ -2614,7 +2317,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" @@ -2819,6 +2522,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" @@ -3091,14 +2798,14 @@ msgstr "Format datuma" msgid "You have to enter your weight" msgstr "Moraš upisati svoju težinu" -#: weight/models.py:62 -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" @@ -3217,6 +2924,201 @@ 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" diff --git a/wger/locale/hu/LC_MESSAGES/django.po b/wger/locale/hu/LC_MESSAGES/django.po index a835db7bd..b8dcc29c4 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2023-12-29 22:12+0000\n" "Last-Translator: Adam Cool \n" "Language-Team: Hungarian \n" @@ -54,24 +54,24 @@ msgstr "" msgid "Edit" msgstr "Módosítás" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,52 +81,52 @@ msgstr "Vezetéknév" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Személyes adat" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Edzés emlékeztetők" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Egyéb beállítások" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Kérlek írd be a jelenlegi jelszavad." -#: core/forms.py:270 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 +143,21 @@ msgstr "Kérlek írd be a jelenlegi jelszavad." msgid "Delete" msgstr "Törlés" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Érvénytelen jelszó" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Ez az űrlap reCAPTCHA-val van biztosítva" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kapcsolat" - -#: core/forms.py:354 -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:362 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:363 -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" @@ -203,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" @@ -361,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" @@ -398,16 +380,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -634,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" @@ -896,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Leírás" @@ -933,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" @@ -948,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:37 -#: 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" @@ -1151,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" @@ -1160,7 +1126,7 @@ 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}?" @@ -1172,31 +1138,19 @@ msgstr "Töröljem {0}?" #: 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:116 -msgid "Feedback" -msgstr "Visszajelzés" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -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" @@ -1243,81 +1197,6 @@ msgstr "Edzőterem" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Kép" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Súly" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latinul, pl.: \"Pectoralis major\"" @@ -1332,48 +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: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" @@ -1390,13 +1240,10 @@ msgstr "Gyakorlati kategóriák" msgid "Action" msgstr "Műveletek" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Felhasználó" @@ -1450,10 +1297,6 @@ msgstr "Felszerelés törlése?" msgid "Add muscle" msgstr "Izom hozzáadása" -#: gallery/models/image.py:55 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" @@ -1524,8 +1367,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1542,12 +1384,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1874,7 +1714,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Ismétlések" @@ -2162,58 +2002,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Létrehozás dátuma" - -#: manager/models/routine.py:107 -#, fuzzy -#| msgid "Workout complete!" -msgid "Workout template" -msgstr "Edzés befejezve!" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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." @@ -2229,32 +2026,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." @@ -2298,13 +2073,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2325,8 +2104,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2336,96 +2114,6 @@ msgstr "" 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_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 "" @@ -2479,6 +2167,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 @@ -2486,10 +2178,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" @@ -2563,7 +2267,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 "" @@ -2747,6 +2451,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 "" @@ -3020,14 +2728,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3123,6 +2831,78 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Image" +#~ msgstr "Kép" + +#~ 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 "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 "" diff --git a/wger/locale/it/LC_MESSAGES/django.po b/wger/locale/it/LC_MESSAGES/django.po index f1f498a7e..a4355fbdb 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-09-10 09:02+0000\n" "Last-Translator: Luca Galli \n" "Language-Team: Italian \n" @@ -60,24 +60,24 @@ msgstr "" msgid "Edit" msgstr "Modifica" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,54 +87,54 @@ msgstr "Cognome" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Dati personali" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Promemoria allenamento" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Altre impostazioni" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Questo indirizzo e-mail è già in uso." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Si prega di inserire la tua password attuale." -#: core/forms.py:270 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 @@ -151,38 +151,21 @@ msgstr "Si prega di inserire la tua password attuale." msgid "Delete" msgstr "Elimina" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Password non valida" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Questo modulo è protetto con reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contatto" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Un modo per contattarti (e-mail, ecc.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Commento" - -#: core/forms.py:363 -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" @@ -211,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" @@ -380,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à" @@ -422,16 +404,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -658,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" @@ -929,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descrizione" @@ -966,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" @@ -981,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:37 -#: 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" @@ -1184,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" @@ -1193,7 +1159,7 @@ 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}?" @@ -1205,13 +1171,13 @@ msgstr "Eliminare {0}?" #: 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 " @@ -1222,18 +1188,6 @@ msgstr "" "vedere meglio ciò che questo sito può fare. Sentiti libero di modificarli o " "cancellarli!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Commenti" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Invia" - -#: core/views/misc.py:143 -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" @@ -1280,77 +1234,6 @@ msgstr "Palestra" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Immagine" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Altezza" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Larghezza" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Immagine principale" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "In latino es. «Pectoralis major»" @@ -1363,48 +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: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" @@ -1417,13 +1271,10 @@ msgstr "Storico allenamenti admin" msgid "Action" msgstr "Azione" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utente" @@ -1475,10 +1326,6 @@ msgstr "Cancella attrezzatura?" msgid "Add muscle" msgstr "Aggiungi muscolo" -#: gallery/models/image.py:55 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" @@ -1545,8 +1392,7 @@ msgid "Contract type" msgstr "Tipo di contratto" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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à" @@ -1563,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data fine" @@ -1901,7 +1745,7 @@ msgstr "Spalliera" msgid "Quads" msgstr "Quadricipiti" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Ripetizioni" @@ -2196,58 +2040,15 @@ msgstr "pausa" 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:51 -msgid "Routine" -msgstr "Programma" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Unità" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data di creazione" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Modello di allenamento" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Modello pubblico" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Un modello pubblico è disponibile per altri utenti" - -#: manager/models/routine.py:156 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." @@ -2263,36 +2064,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." @@ -2347,14 +2123,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2376,8 +2156,7 @@ msgstr "" "Calorie aggiuntive da aggiungere alla tariffa base (per sottrarre, inserire " "un numero negativo)" -#: nutrition/forms.py:209 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" @@ -2385,103 +2164,6 @@ msgstr "Alimenti" 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_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 "" @@ -2549,6 +2231,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 @@ -2556,10 +2242,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" @@ -2652,7 +2350,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" @@ -2861,6 +2559,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" @@ -3142,14 +2844,14 @@ msgstr "Formato data" msgid "You have to enter your weight" msgstr "Devi inserire il tuo peso" -#: weight/models.py:62 -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" @@ -3271,6 +2973,206 @@ 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" diff --git a/wger/locale/ja/LC_MESSAGES/django.po b/wger/locale/ja/LC_MESSAGES/django.po index 4b1455e44..a340428d7 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-09-22 11:52+0000\n" "Last-Translator: Ryohei Morimoto \n" "Language-Team: Japanese \n" @@ -56,24 +56,24 @@ msgstr "" msgid "Edit" msgstr "編集" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +83,54 @@ msgstr "姓" msgid "Email" msgstr "メール" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "パスワードの再設定、またはオプションとしてメールのリマインダー通知に使用され" "ます。" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "パーソナルデータ" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "ワークアウトリマインダー通知" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "その他の設定" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 #, fuzzy #| msgid "This email is already used." msgid "This e-mail address is already in use." msgstr "このメールアドレスは既に登録済みです。" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "現在のパスワードを入力してください。" -#: core/forms.py:270 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 +147,21 @@ msgstr "現在のパスワードを入力してください。" msgid "Delete" msgstr "削除" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "パスワードは無効です。" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "問い合わせ" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "コメント" - -#: core/forms.py:363 -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 +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 "リンク" @@ -360,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 "体重の単位" @@ -397,16 +379,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -629,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 "" @@ -889,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -926,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 "" @@ -941,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:37 -#: 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 "脂肪質" @@ -1144,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 "" @@ -1153,7 +1119,7 @@ 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 "" @@ -1165,31 +1131,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1236,79 +1190,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "体重" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1321,48 +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: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 "" @@ -1377,13 +1229,10 @@ msgstr "" msgid "Action" msgstr "オプション" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1435,10 +1284,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add member" @@ -1507,8 +1352,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1525,12 +1369,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1859,7 +1701,7 @@ msgstr "プルアップ・バー" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "回数" @@ -2133,56 +1975,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "単位" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2198,32 +1999,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." @@ -2267,14 +2046,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2294,8 +2077,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "材料" @@ -2303,96 +2085,6 @@ msgstr "材料" 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_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 "" @@ -2446,6 +2138,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 @@ -2453,10 +2149,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" @@ -2530,7 +2238,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 "" @@ -2712,6 +2420,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "問い合わせ" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2973,14 +2685,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3076,6 +2788,17 @@ msgstr "" msgid "Re-Submit" msgstr "" +#~ msgid "Comment" +#~ msgstr "コメント" + +#, fuzzy +#~| msgid "Weight" +#~ msgid "Height" +#~ msgstr "体重" + +#~ msgid "Language" +#~ msgstr "表示言語" + #, fuzzy #~| msgid "Height (cm)" #~ msgid "Height (in)" diff --git a/wger/locale/ko/LC_MESSAGES/django.po b/wger/locale/ko/LC_MESSAGES/django.po index 8e8a5dea5..d16ceb8f2 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-05-29 07:01+0000\n" "Last-Translator: kobo \n" "Language-Team: Korean \n" @@ -52,24 +52,24 @@ msgstr "" msgid "Edit" msgstr "편집" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,50 +79,50 @@ msgstr "성" msgid "Email" msgstr "이메일" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "개인 정보" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Workout 리마인더" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "기타 설정" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "비밀번호 재설정 및 이메일 알람(option)에 사용됩니다." -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "이 이메일 주소는 이미 사용중입니다." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "현재 비밀번호를 입력해주세요." -#: core/forms.py:270 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 @@ -139,38 +139,21 @@ msgstr "현재 비밀번호를 입력해주세요." msgid "Delete" msgstr "삭제" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "유효하지 않은 비밀번호" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "양식은 reCAPTCHA로 보호됩니다" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "연락" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "답변방법 (이메일 등)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "댓글" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "어떤말을 하고 싶은가요?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "언어 코드" @@ -199,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 "링크" @@ -360,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 "몸무게 단위" @@ -399,16 +381,11 @@ msgstr "모든 시간의 합은 24이어야 합니다" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "이름" @@ -634,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 "장비" @@ -903,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "설명" @@ -940,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 "메모" @@ -955,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:37 -#: 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 "지방" @@ -1158,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 "삭제 성공" @@ -1167,7 +1133,7 @@ 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} 삭제하시겠어요?" @@ -1179,13 +1145,13 @@ msgstr "{0} 삭제하시겠어요?" #: 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 " @@ -1194,18 +1160,6 @@ msgstr "" "이 사이트의 기능을 더 잘 확인하실 수 있도록 샘플 운동, 운동 일정, 체중 기록, " "(신체) 체중 및 영양 계획 항목을 만들었습니다. 자유롭게 수정하거나 삭제하세요!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "피드백" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "보내기" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "피드백이 성공적으로 전송되었습니다. 감사합니다!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1252,77 +1206,6 @@ msgstr "짐" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "이미지" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "키" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "너비" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "메인 그림" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "라틴어로 예를 들어 \"Pectoralis major\"" @@ -1335,48 +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: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 "장비 리스트" @@ -1389,13 +1243,10 @@ msgstr "운동 관리 기록" msgid "Action" msgstr "활동" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "사용자" @@ -1447,10 +1298,6 @@ msgstr "장비를 삭제하시겠습니까?" msgid "Add muscle" msgstr "근육 추가" -#: gallery/models/image.py:55 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 "이미지 추가" @@ -1517,8 +1364,7 @@ msgid "Contract type" msgstr "계약 유형" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 +1381,10 @@ msgid "Contract is active" msgstr "계약이 활성화되었습니다" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "시작 날짜" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "종료 날짜" @@ -1870,7 +1714,7 @@ msgstr "풀업바" msgid "Quads" msgstr "쿼드" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "반복" @@ -2160,56 +2004,15 @@ msgstr "휴식" 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:51 -msgid "Routine" -msgstr "루틴" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "단위" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "생성일" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "운동 알림 템플릿" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "운동을 템플릿으로 표시하면 운동이 고정되고 사본을 만들 수 있습니다" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "공개 템플릿" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "공개 템플릿은 다른 사용자에게 제공됩니다" - -#: manager/models/routine.py:156 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 "시작 시간은 종료 시간 이후일 수 없습니다." @@ -2225,32 +2028,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." @@ -2301,14 +2082,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2328,8 +2113,7 @@ msgid "" "number)" msgstr "기본에 추가할 칼로리 (빼려면 음수 입력)" -#: nutrition/forms.py:209 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 "성분" @@ -2337,100 +2121,6 @@ msgstr "성분" 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_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 "" @@ -2494,6 +2184,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 @@ -2501,10 +2195,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" @@ -2593,7 +2299,7 @@ msgstr "" "이 값을 기준으로 영양 계획을 세우는 경우, 몇 주 동안 자신의 상태를 관찰하고\n" "필요에 따라 총량을 변경하세요." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "새로운 성분 추가" @@ -2794,6 +2500,10 @@ msgstr "" "wger 운동 관리기는 운동과 훈련을 관리하는 무료 오픈 소스 웹 애플리케이션입니" "다." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "연락" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "모바일 앱" @@ -3065,14 +2775,14 @@ msgstr "날짜 포맷" msgid "You have to enter your weight" msgstr "체중을 입력해야 합니다" -#: weight/models.py:62 -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" @@ -3191,6 +2901,198 @@ 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" diff --git a/wger/locale/nl/LC_MESSAGES/django.po b/wger/locale/nl/LC_MESSAGES/django.po index 6b5e23d41..ffa122a3e 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-12-20 11:00+0000\n" "Last-Translator: Floris C \n" "Language-Team: Dutch \n" @@ -59,24 +59,24 @@ msgstr "" msgid "Edit" msgstr "Bewerk" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +86,54 @@ msgstr "Achternaam" msgid "Email" msgstr "E-mail" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Persoonlijke gegevens" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Workout-herinneringen" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Overige instellingen" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Dit e-mailadres wordt al gebruikt." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Gelieve je huidige wachtwoord in te geven." -#: core/forms.py:270 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 +150,21 @@ msgstr "Gelieve je huidige wachtwoord in te geven." msgid "Delete" msgstr "Verwijder" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ongeldig wachtwoord" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Dit formulier is beveiligd met reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Een manier om je van antwoorden te voorzien (e-mail, etc.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Opmerking" - -#: core/forms.py:363 -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" @@ -211,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" @@ -379,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" @@ -420,16 +402,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -658,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" @@ -926,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beschrijving" @@ -963,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" @@ -978,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:37 -#: 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" @@ -1181,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" @@ -1190,7 +1156,7 @@ 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}?" @@ -1202,13 +1168,13 @@ msgstr "Verwijder {0}?" #: 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 " @@ -1218,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:116 -msgid "Feedback" -msgstr "Feedback" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Insturen" - -#: core/views/misc.py:143 -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" @@ -1276,77 +1230,6 @@ msgstr "Gym" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Afbeelding" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Hoogte" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Breedte" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Hoofdafbeelding" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Latijns, bvb. \"Pectoralis major\"" @@ -1359,48 +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: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" @@ -1413,13 +1267,10 @@ msgstr "Admin oefening geschiedenis" msgid "Action" msgstr "Actie" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Gebruiker" @@ -1471,10 +1322,6 @@ msgstr "Materiaal verwijderen?" msgid "Add muscle" msgstr "Creëer spier" -#: gallery/models/image.py:55 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" @@ -1542,8 +1389,7 @@ msgid "Contract type" msgstr "Contracttype" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1560,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Einddatum" @@ -1896,7 +1740,7 @@ msgstr "Optrekstaaf" msgid "Quads" msgstr "Quads" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Herhalingen" @@ -2191,58 +2035,15 @@ msgstr "rust" 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:51 -msgid "Routine" -msgstr "Routine" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Eenheid" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Creatiedatum" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Workout template" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Publieke template" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Een publieke template is beschikbaar voor andere gebruikers" - -#: manager/models/routine.py:156 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." @@ -2258,34 +2059,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." @@ -2340,14 +2117,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2369,8 +2150,7 @@ msgstr "" "Bijkomende calorieën om toe te voegen aan het basisaantal (om af te trekken, " "voer een negatief cijfer in)" -#: nutrition/forms.py:209 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" @@ -2378,102 +2158,6 @@ msgstr "Ingrediënt" 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_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 "" @@ -2541,6 +2225,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 @@ -2548,10 +2236,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" @@ -2643,7 +2343,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" @@ -2849,6 +2549,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" @@ -3127,14 +2831,14 @@ msgstr "Datumformaat" msgid "You have to enter your weight" msgstr "U moet uw gewicht ingeven" -#: weight/models.py:62 -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" @@ -3254,6 +2958,203 @@ 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" diff --git a/wger/locale/no/LC_MESSAGES/django.po b/wger/locale/no/LC_MESSAGES/django.po index 830748b3a..8bdc8c2ee 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2024-08-20 18:09+0000\n" "Last-Translator: GS Bacon \n" "Language-Team: Norwegian Bokmål \n" "Language-Team: Ossetic (http://www.transifex.com/rge/wger-workout-manager/" @@ -50,24 +50,24 @@ msgstr "" msgid "Edit" msgstr "Ивын" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +77,50 @@ msgstr "" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +137,21 @@ msgstr "" msgid "Delete" msgstr "Схафын" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Хъуыды" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Ӕвзаджы цыбыр ном" @@ -197,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 "" @@ -350,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 "" @@ -387,16 +369,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "Ном" @@ -619,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 "" @@ -879,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Ӕмбарынгӕнӕн" @@ -916,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 "" @@ -931,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:37 -#: 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 "" @@ -1134,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 "" @@ -1143,7 +1109,7 @@ 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 "" @@ -1155,31 +1121,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1226,79 +1180,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1313,48 +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: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 "" @@ -1371,13 +1223,10 @@ msgstr "Фӕлтӕрӕнты ӕмбырд" msgid "Action" msgstr "Фадӕттӕ" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Архайӕг" @@ -1429,10 +1278,6 @@ msgstr "" msgid "Add muscle" msgstr "Мускул бафтауын" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1501,8 +1346,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1519,12 +1363,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1847,7 +1689,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2117,56 +1959,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2182,32 +1983,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." @@ -2251,13 +2030,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2278,8 +2061,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2287,96 +2069,6 @@ msgstr "" 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_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 "" @@ -2430,6 +2122,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 @@ -2437,10 +2133,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" @@ -2514,7 +2222,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 "" @@ -2692,6 +2400,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2949,14 +2661,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3052,6 +2764,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 d450d36b8..f43124da3 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-02-25 19:10+0000\n" "Last-Translator: Karol Solecki \n" "Language-Team: Polish \n" @@ -61,24 +61,24 @@ msgstr "" msgid "Edit" msgstr "Edytuj" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 @@ -88,50 +88,50 @@ msgstr "Nazwisko" msgid "Email" msgstr "Email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Dane personalne" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Przypomnienia treningowe" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Inne ustawienia" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Wprowadź swoje aktualne hasło." -#: core/forms.py:270 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 +148,21 @@ msgstr "Wprowadź swoje aktualne hasło." msgid "Delete" msgstr "Usuń" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Hasło nieprawidłowe" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Formularz jest chroniony przez reCaptcha" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Wybrany sposób kontaktu (e-mail itp.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Komentarz" - -#: core/forms.py:363 -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" @@ -208,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" @@ -373,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" @@ -413,16 +395,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -661,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" @@ -930,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Opis" @@ -967,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" @@ -982,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:37 -#: 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" @@ -1187,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" @@ -1196,7 +1162,7 @@ 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}?" @@ -1208,13 +1174,13 @@ msgstr "Usunąć {0}?" #: 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 " @@ -1224,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:116 -msgid "Feedback" -msgstr "Opinia" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Zapisz" - -#: core/views/misc.py:143 -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" @@ -1282,77 +1236,6 @@ msgstr "Siłownia" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Obraz" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Wzrost" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Szerokość" - -#: exercises/models/image.py:107 -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\"" @@ -1365,48 +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: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" @@ -1419,13 +1273,10 @@ msgstr "Historia administratora ćwiczeń" msgid "Action" msgstr "Akcja" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Użytkownik" @@ -1477,10 +1328,6 @@ msgstr "Usunąć sprzęt?" msgid "Add muscle" msgstr "Dodaj mięsień" -#: gallery/models/image.py:55 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" @@ -1547,8 +1394,7 @@ msgid "Contract type" msgstr "Typ kontraktu" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1565,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Data zakończenia" @@ -1901,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" @@ -2194,61 +2038,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Jednostka" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Data utworzenia" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Szablon treningu" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Publiczny szablon" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Publiczny szablon dostępny jest dla innych użytkowników" - -#: manager/models/routine.py:156 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." @@ -2264,35 +2064,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." @@ -2349,14 +2126,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2378,8 +2159,7 @@ msgstr "" "Dodatkowe kalorie modyfikujące bazową wartość (by odjąć, wpisz ujemną " "wartość)" -#: nutrition/forms.py:209 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" @@ -2387,98 +2167,6 @@ msgstr "Składnik" 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_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 "" @@ -2543,6 +2231,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 @@ -2550,10 +2242,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" @@ -2646,7 +2350,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" @@ -2850,6 +2554,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" @@ -3132,14 +2840,14 @@ msgstr "Format daty" msgid "You have to enter your weight" msgstr "Musisz wpisać swoją wagę" -#: weight/models.py:62 -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" @@ -3258,6 +2966,199 @@ 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 "" diff --git a/wger/locale/pt/LC_MESSAGES/django.po b/wger/locale/pt/LC_MESSAGES/django.po index 9a43047d1..480d6b1d3 100644 --- a/wger/locale/pt/LC_MESSAGES/django.po +++ b/wger/locale/pt/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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-07 18:01+0000\n" "Last-Translator: Ninguém Mesmo \n" "Language-Team: Portuguese \n" "Language-Team: Romanian \n" @@ -57,24 +57,24 @@ msgstr "" msgid "Edit" msgstr "Editare" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 @@ -84,54 +84,54 @@ msgstr "Nume" msgid "Email" msgstr "Adresa de email" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Date personale" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Mementouri de antrenament" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Alte setari" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Acest email este deja în uz." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Te rog introdu parola curentă" -#: core/forms.py:270 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 +148,21 @@ msgstr "Te rog introdu parola curentă" msgid "Delete" msgstr "Ștergere" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Parola incorectă" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Acest formular este securizat cu reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Contact" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Metodă de contactare (e-mail, etc.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Comentariu" - -#: core/forms.py:363 -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" @@ -210,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" @@ -377,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 "" @@ -414,16 +396,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -648,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 "" @@ -910,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Descriere" @@ -947,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 "" @@ -962,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:37 -#: 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 "" @@ -1165,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 "" @@ -1174,7 +1140,7 @@ 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}?" @@ -1186,31 +1152,19 @@ msgstr "Ștergere {0}?" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1257,81 +1211,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight log" -msgid "Height" -msgstr "Jurnalul de greutate" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1346,50 +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: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 +1256,10 @@ msgstr "Categorii de Exerciții" msgid "Action" msgstr "Opțiuni" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Utilizator" @@ -1467,10 +1314,6 @@ msgstr "" msgid "Add muscle" msgstr "Adaugă un mușchi" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 #, fuzzy #| msgid "Add muscle" @@ -1539,8 +1382,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1557,12 +1399,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1893,7 +1733,7 @@ msgstr "Bara de tragere" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2181,58 +2021,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -#, fuzzy -#| msgid "Workout reminders" -msgid "Workout template" -msgstr "Mementouri de antrenament" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2248,32 +2045,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." @@ -2317,13 +2092,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2344,8 +2123,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2355,96 +2133,6 @@ msgstr "" 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_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 "" @@ -2503,6 +2191,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 @@ -2510,10 +2202,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" @@ -2587,7 +2291,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 "" @@ -2767,6 +2471,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 "" @@ -3026,14 +2734,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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" @@ -3131,6 +2839,48 @@ msgstr "" msgid "Re-Submit" msgstr "Retrimiteți" +#~ msgid "Some way of answering you (e-mail, etc.)" +#~ msgstr "Metodă de contactare (e-mail, etc.)" + +#~ 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)" diff --git a/wger/locale/ru/LC_MESSAGES/django.po b/wger/locale/ru/LC_MESSAGES/django.po index 1e6795fca..4dfffafd6 100644 --- a/wger/locale/ru/LC_MESSAGES/django.po +++ b/wger/locale/ru/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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2026-01-03 23:01+0000\n" "Last-Translator: Gevorg Danielyan \n" "Language-Team: Russian \n" @@ -61,24 +61,24 @@ msgstr "" msgid "Edit" msgstr "Редактировать" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 @@ -88,52 +88,52 @@ msgstr "Фамилия" msgid "Email" msgstr "Электронный адрес" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "Используется для сброса пароля и опциональных уведомлений по e-mail." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Персональные данные" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Напоминания тренировок" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Другие настройки" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Необходимо для возобновлений пароля, и выборочно, напоминаний по электронной " "почте." -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Этот электронный адрес уже используется." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Пожалуйста, введите ваш пароль." -#: core/forms.py:270 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 +150,21 @@ msgstr "Пожалуйста, введите ваш пароль." msgid "Delete" msgstr "Удалить" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Неверный пароль" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Данная форма защищена reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Контакт" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Обратная связь с вами (электронная почта, и т.д.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Комментарий" - -#: core/forms.py:363 -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 +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 "Ссылка" @@ -378,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 "Единица веса" @@ -418,16 +400,11 @@ msgstr "Сумма всех часов должна быть 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "Имя" @@ -659,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 "Спортивное оборудование" @@ -930,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Описание" @@ -967,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 "Заметки" @@ -982,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:37 -#: 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 "Жиры" @@ -1187,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 "Успешно удалено" @@ -1196,7 +1162,7 @@ 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}?" @@ -1208,13 +1174,13 @@ msgstr "Удалить {0}?" #: 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 " @@ -1224,18 +1190,6 @@ msgstr "" "масс тела и плана питания для наглядного примера возможностей этого сайта. " "Вы можете их изменить или удалить!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Отзывы" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Отправить" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Ваш отзыв был успешно отправлен. Спасибо!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1282,77 +1236,6 @@ msgstr "Тренажерный зал" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Изображение" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Высота" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Ширина" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Основное изображение" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "Латинское название (например: \"Pectoralis major\")" @@ -1365,48 +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: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 "Перечень оборудования" @@ -1419,13 +1273,10 @@ msgstr "История администрирования упражнений" msgid "Action" msgstr "Действие" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Пользователь" @@ -1477,10 +1328,6 @@ msgstr "Удалить оборудование?" msgid "Add muscle" msgstr "Добавить мышцу" -#: gallery/models/image.py:55 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 "Добавить изображение" @@ -1549,8 +1396,7 @@ msgid "Contract type" msgstr "Форма контракта" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "Количество" @@ -1567,12 +1413,10 @@ msgid "Contract is active" msgstr "Контракт активен" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "Дата начала" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Конечная дата" @@ -1906,7 +1750,7 @@ msgstr "Брус для подтягивания" msgid "Quads" msgstr "Квадрицепсы" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повторений" @@ -2202,59 +2046,17 @@ msgstr "остальное" 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:51 -msgid "Routine" -msgstr "Рутина" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Секция" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата создания" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Шаблон тренировки" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Отметив тренировку как шаблон, вы заморозите ее и сможете создавать ее копии" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "Общедоступный шаблон" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Общедоступный шаблон доступен для других пользователей" - -#: manager/models/routine.py:156 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 "Время начала не может быть после времени окончания." @@ -2270,32 +2072,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." @@ -2351,14 +2131,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2380,8 +2164,7 @@ msgstr "" "Дополнительные калории для добавления к базовой ставке (для вычитывания, " "введите отрицательное число)" -#: nutrition/forms.py:209 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 "Ингредиент" @@ -2389,102 +2172,6 @@ msgstr "Ингредиент" 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_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 "" @@ -2545,6 +2232,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 @@ -2552,10 +2243,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" @@ -2645,7 +2348,7 @@ msgstr "" "вы создаете ваш план питания на этих значениях, понаблюдайте за собой " "несколько недель и при необходимости измените общее количество." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Добавить новый ингредиент" @@ -2858,6 +2561,10 @@ msgstr "" "wger Workout Manager - это бесплатное веб-приложение с открытым исходным " "кодом, которое управляет вашими упражнениями и тренировками." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Контакт" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Мобильное приложение" @@ -3157,14 +2864,14 @@ msgstr "Формат даты" msgid "You have to enter your weight" msgstr "Вы должны ввести свой вес" -#: weight/models.py:62 -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" @@ -3285,6 +2992,203 @@ 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 "" diff --git a/wger/locale/sk/LC_MESSAGES/django.po b/wger/locale/sk/LC_MESSAGES/django.po index 322da3f96..c4234e267 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,24 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -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 +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 "" @@ -348,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 "" @@ -385,16 +367,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -611,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 "" @@ -871,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -908,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 "" @@ -923,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:37 -#: 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 "" @@ -1126,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 "" @@ -1135,7 +1101,7 @@ 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 "" @@ -1147,31 +1113,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1218,77 +1172,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1301,48 +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: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 "" @@ -1355,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1413,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1483,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1501,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1829,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2099,56 +1943,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2164,32 +1967,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." @@ -2233,13 +2014,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2260,8 +2045,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2269,96 +2053,6 @@ msgstr "" 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_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 "" @@ -2412,6 +2106,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 @@ -2419,10 +2117,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" @@ -2496,7 +2206,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 "" @@ -2672,6 +2382,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2927,14 +2641,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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 003076204..ce51fd5aa 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,24 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -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 +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 "" @@ -348,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 "" @@ -385,16 +367,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -611,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 "" @@ -871,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -908,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 "" @@ -923,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:37 -#: 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 "" @@ -1126,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 "" @@ -1135,7 +1101,7 @@ 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 "" @@ -1147,31 +1113,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1218,77 +1172,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1301,48 +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: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 "" @@ -1355,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1413,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1483,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1501,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1829,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2099,56 +1943,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2164,32 +1967,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." @@ -2233,13 +2014,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2260,8 +2045,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2269,96 +2053,6 @@ msgstr "" 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_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 "" @@ -2412,6 +2106,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 @@ -2419,10 +2117,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" @@ -2496,7 +2206,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 "" @@ -2672,6 +2382,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2927,14 +2641,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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 ab3705ec0..d5f450e21 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -50,24 +50,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +77,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +137,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -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 +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 "" @@ -348,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 "" @@ -385,16 +367,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -611,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 "" @@ -871,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -908,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 "" @@ -923,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:37 -#: 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 "" @@ -1126,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 "" @@ -1135,7 +1101,7 @@ 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 "" @@ -1147,31 +1113,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1218,77 +1172,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1301,48 +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: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 "" @@ -1355,13 +1209,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1413,10 +1264,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1483,8 +1330,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1501,12 +1347,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1829,7 +1673,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2099,56 +1943,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2164,32 +1967,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." @@ -2233,13 +2014,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2260,8 +2045,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2269,96 +2053,6 @@ msgstr "" 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_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 "" @@ -2412,6 +2106,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 @@ -2419,10 +2117,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" @@ -2496,7 +2206,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 "" @@ -2672,6 +2382,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2927,14 +2641,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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 22ecbc1eb..11d7be254 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-04-08 08:05+0000\n" "Last-Translator: wonnock \n" "Language-Team: Swedish \n" @@ -56,24 +56,24 @@ msgstr "" msgid "Edit" msgstr "Redigera" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,52 +83,52 @@ msgstr "Efternamn" msgid "Email" msgstr "E-post" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Personlig data" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Träningspåminnelser" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Andra inställningar" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Denna mail används redan." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Vänligen ange ditt nuvarande lösenord." -#: core/forms.py:270 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 +145,21 @@ msgstr "Vänligen ange ditt nuvarande lösenord." msgid "Delete" msgstr "Ta bort" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Ogiltigt lösenord" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Formuläret är säkrat med reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Kontakt" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Något sätt att svara dig (e-post osv.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Kommentar" - -#: core/forms.py:363 -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" @@ -205,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" @@ -367,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" @@ -407,16 +389,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -640,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" @@ -908,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Beskrivning" @@ -945,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" @@ -960,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:37 -#: 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" @@ -1163,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" @@ -1172,7 +1138,7 @@ 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}?" @@ -1184,13 +1150,13 @@ msgstr "Ta bort {0}?" #: 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 " @@ -1200,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:116 -msgid "Feedback" -msgstr "Feedback" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Ladda upp" - -#: core/views/misc.py:143 -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" @@ -1258,83 +1212,6 @@ msgstr "Gym" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Bild" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -#, fuzzy -#| msgid "Weight" -msgid "Height" -msgstr "Vikt" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Huvudbild" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "På latin, e.g. \"Pectoralis major\"" @@ -1349,52 +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: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" @@ -1411,13 +1255,10 @@ msgstr "Träningsdag" msgid "Action" msgstr "Åtgärder" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Användare" @@ -1475,10 +1316,6 @@ msgstr "Ta bort utrustning?" msgid "Add muscle" msgstr "Lägg till muskel" -#: gallery/models/image.py:55 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" @@ -1550,8 +1387,7 @@ msgid "Contract type" msgstr "Kontrakttyp" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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" @@ -1568,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Slutdatum" @@ -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" @@ -2208,60 +2042,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Enhet" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Datum för skapande" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Träningspassmall" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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." @@ -2277,32 +2068,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." @@ -2360,14 +2129,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2389,8 +2162,7 @@ msgstr "" "Extra kalorier att lägga till basen (för att subtrahera, ange ett negativt " "tal)" -#: nutrition/forms.py:209 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" @@ -2400,102 +2172,6 @@ msgstr "Ingrediens" 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_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 "" @@ -2556,6 +2232,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 @@ -2563,10 +2243,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" @@ -2655,7 +2347,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" @@ -2856,6 +2548,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 "" @@ -3143,14 +2839,14 @@ msgstr "Datumformat" msgid "You have to enter your weight" msgstr "Du måste ange din vikt" -#: weight/models.py:62 -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" @@ -3263,6 +2959,163 @@ 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" diff --git a/wger/locale/ta/LC_MESSAGES/django.po b/wger/locale/ta/LC_MESSAGES/django.po index 053c8697f..06433ed04 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,24 +49,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +76,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +136,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -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 +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 "" @@ -347,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 "" @@ -384,16 +366,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -610,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 "" @@ -870,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -907,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 "" @@ -922,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:37 -#: 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 "" @@ -1125,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 "" @@ -1134,7 +1100,7 @@ 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 "" @@ -1146,31 +1112,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1217,77 +1171,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1300,48 +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: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 "" @@ -1354,13 +1208,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1412,10 +1263,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1482,8 +1329,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1500,12 +1346,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1828,7 +1672,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2098,56 +1942,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2163,32 +1966,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." @@ -2232,13 +2013,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2259,8 +2044,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2268,96 +2052,6 @@ msgstr "" 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_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 "" @@ -2411,6 +2105,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 @@ -2418,10 +2116,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" @@ -2495,7 +2205,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 "" @@ -2671,6 +2381,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2926,14 +2640,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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 63f42545a..60ba71201 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -49,24 +49,24 @@ msgstr "" msgid "Edit" msgstr "" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +76,50 @@ msgstr "" msgid "Email" msgstr "" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "" -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "" -#: core/forms.py:270 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 +136,21 @@ msgstr "" msgid "Delete" msgstr "" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "" - -#: core/forms.py:363 -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 +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 "" @@ -347,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 "" @@ -384,16 +366,11 @@ msgstr "" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "" @@ -610,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 "" @@ -870,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "" @@ -907,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 "" @@ -922,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:37 -#: 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 "" @@ -1125,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 "" @@ -1134,7 +1100,7 @@ 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 "" @@ -1146,31 +1112,19 @@ msgstr "" #: 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:116 -msgid "Feedback" -msgstr "" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1217,77 +1171,6 @@ msgstr "" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "" @@ -1300,48 +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: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 "" @@ -1354,13 +1208,10 @@ msgstr "" msgid "Action" msgstr "" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "" @@ -1412,10 +1263,6 @@ msgstr "" msgid "Add muscle" msgstr "" -#: gallery/models/image.py:55 nutrition/models/image.py:60 -msgid "Only PNG and JPEG formats are supported" -msgstr "" - #: gallery/templates/images/overview.html:72 msgid "Add image" msgstr "" @@ -1482,8 +1329,7 @@ msgid "Contract type" msgstr "" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "" @@ -1500,12 +1346,10 @@ msgid "Contract is active" msgstr "" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "" @@ -1828,7 +1672,7 @@ msgstr "" msgid "Quads" msgstr "" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "" @@ -2098,56 +1942,15 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "" - -#: manager/models/routine.py:156 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 "" @@ -2163,32 +1966,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." @@ -2232,13 +2013,17 @@ 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:170 nutrition/templates/rate/form.html:76 @@ -2259,8 +2044,7 @@ msgid "" "number)" msgstr "" -#: nutrition/forms.py:209 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 "" @@ -2268,96 +2052,6 @@ msgstr "" 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_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 "" @@ -2411,6 +2105,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 @@ -2418,10 +2116,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" @@ -2495,7 +2205,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 "" @@ -2671,6 +2381,10 @@ msgid "" "your exercises and workouts." msgstr "" +#: software/templates/features.html:45 +msgid "Contact" +msgstr "" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "" @@ -2926,14 +2640,14 @@ msgstr "" msgid "You have to enter your weight" msgstr "" -#: weight/models.py:62 -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 ae5b0b77a..6b1971d44 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2024-07-20 17:09+0000\n" "Last-Translator: Oğuz Ersen \n" "Language-Team: Turkish \n" @@ -55,24 +55,24 @@ msgstr "" msgid "Edit" msgstr "Düzenle" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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 +82,54 @@ msgstr "Soyisim" msgid "Email" msgstr "E-posta" -#: core/forms.py:132 +#: 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:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Kişisel bilgiler" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Antrenman hatırlatıcıları" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Diğer ayarlar" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: 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:238 +#: 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:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Lütfen geçerli parolanızı girin." -#: core/forms.py:270 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 +146,21 @@ msgstr "Lütfen geçerli parolanızı girin." msgid "Delete" msgstr "Sil" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Geçersiz parola" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Form reCAPTCHA ile güvence altına alındı" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "İletişim" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Size cevap vermenin bir yolu (e-posta vb.)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Yorum" - -#: core/forms.py:363 -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ı" @@ -206,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ı" @@ -370,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" @@ -411,16 +393,11 @@ 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:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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" @@ -660,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" @@ -929,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Açıklama" @@ -966,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" @@ -981,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:37 -#: 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ğ" @@ -1187,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" @@ -1196,7 +1162,7 @@ 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?" @@ -1208,13 +1174,13 @@ msgstr "{0} silinsin mi?" #: 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 " @@ -1224,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:116 -msgid "Feedback" -msgstr "geri bildirim" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Sunmak" - -#: core/views/misc.py:143 -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" @@ -1282,77 +1236,6 @@ msgstr "Jimnastik" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Resim" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Yükseklik" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Genişlik" - -#: exercises/models/image.py:107 -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\"" @@ -1365,48 +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: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" @@ -1419,13 +1273,10 @@ msgstr "Egzersiz yönetici geçmişi" msgid "Action" msgstr "Eylem" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Kullanıcı" @@ -1477,10 +1328,6 @@ msgstr "Ekipman silinsin mi?" msgid "Add muscle" msgstr "Kas ekleyin" -#: gallery/models/image.py:55 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" @@ -1550,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:58 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" @@ -1568,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:99 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:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Bitiş tarihi" @@ -1906,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" @@ -2201,62 +2045,17 @@ msgstr "" 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:51 -msgid "Routine" -msgstr "" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Birim" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Oluşturulma tarihi" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Antrenman şablonu" - -#: manager/models/routine.py:109 -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:117 -msgid "Public template" -msgstr "Herkese açık şablon" - -#: manager/models/routine.py:118 -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:156 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." @@ -2272,36 +2071,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." @@ -2359,14 +2133,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2387,8 +2165,7 @@ msgid "" msgstr "" "Baz orana eklenecek ek kaloriler (çıkarmak için negatif bir sayı girin)" -#: nutrition/forms.py:209 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" @@ -2396,103 +2173,6 @@ msgstr "Bileşen" 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_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 "" @@ -2559,6 +2239,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 @@ -2566,10 +2250,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" @@ -2659,7 +2355,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" @@ -2864,6 +2560,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" @@ -3145,14 +2845,14 @@ msgstr "Tarih Biçimi" msgid "You have to enter your weight" msgstr "Kilonuzu girmelisiniz" -#: weight/models.py:62 -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" @@ -3276,6 +2976,206 @@ 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 "" diff --git a/wger/locale/uk/LC_MESSAGES/django.po b/wger/locale/uk/LC_MESSAGES/django.po index 6b9612994..f258d7427 100644 --- a/wger/locale/uk/LC_MESSAGES/django.po +++ b/wger/locale/uk/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-10-02 15:01+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian \n" @@ -60,24 +60,24 @@ msgstr "" msgid "Edit" msgstr "Змінити" -#: core/forms.py:89 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:128 core/forms.py:242 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:129 core/forms.py:243 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:131 core/forms.py:208 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,54 +87,54 @@ msgstr "Прізвище" msgid "Email" msgstr "Адреса електронної пошти" -#: core/forms.py:132 +#: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." msgstr "" "Використовується для скидання пароля і, і за необхідності, нагадування " "електронною поштою." -#: core/forms.py:136 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:175 +#: core/forms.py:177 msgid "Personal data" msgstr "Особисті дані" -#: core/forms.py:187 +#: core/forms.py:189 msgid "Workout reminders" msgstr "Нагадування про тренування" -#: core/forms.py:194 +#: core/forms.py:196 msgid "Other settings" msgstr "Інші параметри" -#: core/forms.py:202 core/views/user.py:614 core/views/user.py:629 +#: 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:209 +#: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." msgstr "" "Використовується для скидання пароля і, при необхідності, нагадування " "електронною поштою." -#: core/forms.py:238 +#: core/forms.py:240 msgid "This e-mail address is already in use." msgstr "Ця адреса електронної пошти вже використовується." -#: core/forms.py:259 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:261 +#: core/forms.py:263 msgid "Please enter your current password." msgstr "Введіть свій поточний пароль." -#: core/forms.py:270 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 @@ -151,38 +151,21 @@ msgstr "Введіть свій поточний пароль." msgid "Delete" msgstr "Вилучити" -#: core/forms.py:279 +#: core/forms.py:281 msgid "Invalid password" msgstr "Неправильний пароль" -#: core/forms.py:291 core/forms.py:376 +#: core/forms.py:293 msgid "The form is secured with reCAPTCHA" msgstr "Форма захищена reCAPTCHA" -#: core/forms.py:312 core/forms.py:339 core/templates/navigation.html:272 +#: 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:353 software/templates/features.html:45 -msgid "Contact" -msgstr "Контакт" - -#: core/forms.py:354 -msgid "Some way of answering you (e-mail, etc.)" -msgstr "Яким чином відповідати вам (електронна пошта, тощо)" - -#: core/forms.py:362 exercises/models/comment.py:55 manager/models/slot.py:40 -#: nutrition/models/log.py:77 -msgid "Comment" -msgstr "Коментар" - -#: core/forms.py:363 -msgid "What do you want to say?" -msgstr "Що ви хочете сказати?" - #: core/models/language.py:31 core/templates/language/view.html:21 msgid "Language short name" msgstr "Коротке позначення мови" @@ -211,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 "Посилання" @@ -374,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 "Одиниця ваги" @@ -415,16 +397,11 @@ msgstr "Сума всіх годин повинна дорівнювати 24" #: core/models/rep_unit.py:36 core/models/weight_unit.py:42 #: core/templates/user/overview.html:280 core/views/user.py:589 -#: 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 +#: 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:72 manager/models/routine.py:82 -#: 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 "Ім'я" @@ -655,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 "Обладнання" @@ -925,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:45 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 software/templates/about_us.html:170 -#: weight/models.py:35 weight/templates/import_csv_preview.html:13 +#: 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:69 #: gym/models/contract.py:58 gym/models/contract.py:109 -#: manager/models/day.py:78 manager/models/routine.py:88 -#: measurements/models/measurement.py:61 nutrition/models/plan.py:76 msgid "Description" msgstr "Опис" @@ -962,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 "Примітки" @@ -977,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:37 -#: 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 "Жири" @@ -1180,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 "Успішно вилучено" @@ -1189,7 +1155,7 @@ 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}?" @@ -1201,13 +1167,13 @@ msgstr "Вилучити {0}?" #: 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 +1183,6 @@ msgstr "" "тіла та плани харчування, щоб ви могли краще побачити, що може зробити цей " "сайт. Ви можете редагувати або видаляти їх!" -#: core/views/misc.py:116 -msgid "Feedback" -msgstr "Відгук" - -#: core/views/misc.py:135 weight/templates/import_csv_form.html:9 -msgid "Submit" -msgstr "Надіслати" - -#: core/views/misc.py:143 -msgid "Your feedback was successfully sent. Thank you!" -msgstr "Ваш відгук успішно надіслано. Дякуємо!" - #: core/views/user.py:143 #, python-brace-format msgid "Account \"{0}\" was successfully deleted" @@ -1275,77 +1229,6 @@ msgstr "Тренажерний зал" 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:54 -#: nutrition/models/image.py:59 -msgid "Image" -msgstr "Зображення" - -#: exercises/models/image.py:91 exercises/models/video.py:140 -msgid "Height" -msgstr "Висота" - -#: exercises/models/image.py:99 exercises/models/video.py:133 -msgid "Width" -msgstr "Ширина" - -#: exercises/models/image.py:107 -msgid "Main picture" -msgstr "Головне зображення" - #: exercises/models/muscle.py:37 msgid "In latin, e.g. \"Pectoralis major\"" msgstr "На латині, напр. \"Pectoralis major\"" @@ -1358,48 +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: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 +1266,10 @@ msgstr "Історія адміністрування вправ" msgid "Action" msgstr "Дія" -#: exercises/templates/history/overview.html:28 gallery/models/image.py:49 -#: 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:77 manager/models/session.py:47 -#: measurements/models/category.py:31 measurements/models/measurement.py:41 -#: nutrition/models/plan.py:51 weight/models.py:44 +#: gym/templates/gym/reset_user_password.html:20 msgid "User" msgstr "Користувач" @@ -1470,10 +1321,6 @@ msgstr "Видалити обладнання?" msgid "Add muscle" msgstr "Додати м'язи" -#: gallery/models/image.py:55 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 "Додати зображення" @@ -1540,8 +1387,7 @@ msgid "Contract type" msgstr "Тип контракту" #: gym/models/contract.py:211 gym/templates/contract/view.html:59 -#: nutrition/forms.py:58 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 "Сума" @@ -1558,12 +1404,10 @@ msgid "Contract is active" msgstr "Контракт активний" #: gym/models/contract.py:237 gym/templates/contract/view.html:69 -#: manager/models/routine.py:99 nutrition/models/plan.py:62 msgid "Start date" msgstr "Дата початку" #: gym/models/contract.py:247 gym/templates/contract/view.html:71 -#: manager/models/routine.py:103 nutrition/models/plan.py:68 msgid "End date" msgstr "Кінцева дата" @@ -1895,7 +1739,7 @@ msgstr "Перекладина" msgid "Quads" msgstr "Квадрицепс" -#: i18n.tpl:30 manager/models/log.py:138 +#: i18n.tpl:30 msgid "Repetitions" msgstr "Повтори" @@ -2190,58 +2034,15 @@ msgstr "відпочинок" 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:51 -msgid "Routine" -msgstr "Рутина" - -#: manager/models/day.py:59 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:62 -msgid "Unit" -msgstr "Одиниця" - -#: manager/models/routine.py:94 nutrition/models/plan.py:57 -msgid "Creation date" -msgstr "Дата створення" - -#: manager/models/routine.py:107 -msgid "Workout template" -msgstr "Шаблон тренування" - -#: manager/models/routine.py:109 -msgid "" -"Marking a workout as a template will freeze it and allow you to make copies " -"of it" -msgstr "" -"Позначення тренування як шаблону заморозить його і дозволить вам зробити " -"його копії" - -#: manager/models/routine.py:117 -msgid "Public template" -msgstr "Загальнодоступний шаблон" - -#: manager/models/routine.py:118 -msgid "A public template is available to other users" -msgstr "Загальнодоступний шаблон доступний для інших користувачів" - -#: manager/models/routine.py:156 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 "Час початку не може бути після часу закінчення." @@ -2257,32 +2058,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." @@ -2340,14 +2119,18 @@ 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:170 nutrition/templates/rate/form.html:76 msgid "Basic caloric intake" @@ -2369,8 +2152,7 @@ msgstr "" "Додаткові калорії для додавання до базової ставки (для віднімання, введіть " "від'ємне число)" -#: nutrition/forms.py:209 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 "Інгредієнт" @@ -2378,101 +2160,6 @@ msgstr "Інгредієнт" 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_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 "" @@ -2538,6 +2225,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 @@ -2545,10 +2236,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" @@ -2641,7 +2344,7 @@ msgstr "" "свій план харчування на цих значеннях, поспостерігайте за собою кілька\n" "тижнів і при необхідності змініть загальну кількість." -#: nutrition/views/ingredient.py:157 +#: nutrition/views/ingredient.py:158 msgid "Add a new ingredient" msgstr "Додати новий інгредієнт" @@ -2848,6 +2551,10 @@ msgstr "" "wger Workout Manager - безплатний вебзастосунок з відкритим вихідним кодом, " "який керує вашими вправами та тренуванням." +#: software/templates/features.html:45 +msgid "Contact" +msgstr "Контакт" + #: software/templates/features.html:57 msgid "Mobile app" msgstr "Мобільний застосунок" @@ -3126,14 +2833,14 @@ msgstr "Формат дати" msgid "You have to enter your weight" msgstr "Ви повинні ввести свою вагу" -#: weight/models.py:62 -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" @@ -3255,6 +2962,201 @@ 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" diff --git a/wger/locale/zh_Hans/LC_MESSAGES/django.po b/wger/locale/zh_Hans/LC_MESSAGES/django.po index aaccbd216..293e457f0 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: 2026-01-17 13:11+0000\n" +"POT-Creation-Date: 2026-01-17 13:49+0000\n" "PO-Revision-Date: 2025-07-25 05:03+0000\n" "Last-Translator: KW Lam \n" "Language-Team: Chinese (Simplified Han script) . + # Django from django.core.validators import ( MaxValueValidator, diff --git a/wger/manager/models/routine.py b/wger/manager/models/routine.py index 426a583e1..5638eb22d 100644 --- a/wger/manager/models/routine.py +++ b/wger/manager/models/routine.py @@ -53,7 +53,6 @@ from wger.manager.models import ( ) from wger.utils.cache import CacheKeyMapper - logger = logging.getLogger(__name__) @@ -74,48 +73,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..8f31736bb 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 @@ -59,7 +58,6 @@ from wger.utils.language import load_language from wger.utils.models import AbstractLicenseModel from wger.utils.requests import wger_user_agent - logger = logging.getLogger(__name__) @@ -78,19 +76,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 +121,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 +151,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 +169,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 +179,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 +189,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 +218,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 +240,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 +248,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 +314,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..6603aef3a 100644 --- a/wger/nutrition/models/ingredient_weight_unit.py +++ b/wger/nutrition/models/ingredient_weight_unit.py @@ -19,13 +19,11 @@ import logging # Django from django.db import models -from django.utils.translation import gettext_lazy as _ # Local from .ingredient import Ingredient from .weight_unit import WeightUnit - logger = logging.getLogger(__name__) @@ -36,23 +34,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..9562cdc1e 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,16 @@ 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 +86,7 @@ class LogItem(BaseMealItem, models.Model): ingredient = models.ForeignKey( Ingredient, - verbose_name=_('Ingredient'), + verbose_name='Ingredient', on_delete=models.CASCADE, ) """ @@ -93,7 +95,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 +107,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..ef191e875 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 @@ -28,7 +27,6 @@ from wger.utils.fields import Html5TimeField from ..helpers import NutritionalValues from .plan import NutritionPlan - logger = logging.getLogger(__name__) @@ -45,27 +43,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..06610ff63 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 @@ -34,7 +33,6 @@ from .ingredient import Ingredient from .ingredient_weight_unit import IngredientWeightUnit from .meal import Meal - logger = logging.getLogger(__name__) @@ -45,32 +43,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..702e03a23 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 @@ -31,7 +30,6 @@ from wger.nutrition.helpers import NutritionalValues from wger.utils.cache import cache_mapper from wger.weight.models import WeightEntry - logger = logging.getLogger(__name__) @@ -48,24 +46,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 +71,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 +92,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 +110,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..33285cb70 100644 --- a/wger/nutrition/views/ingredient.py +++ b/wger/nutrition/views/ingredient.py @@ -33,6 +33,8 @@ from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.utils.translation import ( gettext as _, +) +from django.utils.translation import ( gettext_lazy, ) from django.views.decorators.cache import cache_page @@ -57,7 +59,6 @@ from wger.utils.generic_views import ( ) from wger.utils.language import load_language - logger = logging.getLogger(__name__) @@ -121,7 +122,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 +142,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/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/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', ] From f8578f434969ec358268374f77d70b48ab8a3295 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sat, 17 Jan 2026 15:04:08 +0100 Subject: [PATCH 39/53] Fix duplicated trophy name --- wger/exercises/models/muscle.py | 1 - wger/i18n.tpl | 2 +- wger/locale/ar_SA/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/bg/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ca/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/cs/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/da/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/de/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/el/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/es/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/fa/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/fi/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/fr/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/he/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/hi/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/hr/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/hu/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/it/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ja/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ko/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/nl/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/no/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/os/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/pl/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/pt/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ro/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ru/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/sk/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/sl/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/sr/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/sv/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/ta/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/th/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/tr/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/uk/LC_MESSAGES/django.po | 8 ++++++-- wger/locale/zh_Hans/LC_MESSAGES/django.po | 8 ++++++-- wger/trophies/fixtures/initial_trophies.json | 2 +- wger/trophies/migrations/0002_load_initial_trophies.py | 2 +- 38 files changed, 207 insertions(+), 72 deletions(-) diff --git a/wger/exercises/models/muscle.py b/wger/exercises/models/muscle.py index c0b117e8a..43f528fe2 100644 --- a/wger/exercises/models/muscle.py +++ b/wger/exercises/models/muscle.py @@ -28,7 +28,6 @@ logger = logging.getLogger(__name__) class Muscle(models.Model): """ Muscle an exercise works out - Muscle an exercise works out """ name = models.CharField( diff --git a/wger/i18n.tpl b/wger/i18n.tpl index f109a1557..b2674c353 100644 --- a/wger/i18n.tpl +++ b/wger/i18n.tpl @@ -44,7 +44,7 @@ {% translate "Obsessed" %} {% translate "Legend" %} {% translate "Veteran" %} -{% translate "Legend" %} +{% translate "Titan" %} {% translate "Unstoppable" %} {% translate "Weekend Warrior" %} {% translate "Elephant lifter" %} diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index 6b1f42d0b..8cd63a16d 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/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: 2026-01-17 13:49+0000\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2026-01-16 00:01+0000\n" "Last-Translator: \"E. Ta.\" \n" "Language-Team: Arabic (Saudi Arabia) \n" "Language-Team: Bulgarian \n" @@ -1777,7 +1777,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1785,6 +1785,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/ca/LC_MESSAGES/django.po b/wger/locale/ca/LC_MESSAGES/django.po index 3a6fa454b..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: 2026-01-17 13:49+0000\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" @@ -1831,7 +1831,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1839,6 +1839,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/cs/LC_MESSAGES/django.po b/wger/locale/cs/LC_MESSAGES/django.po index c8dce192b..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: 2026-01-17 13:49+0000\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" @@ -1800,7 +1800,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legenda" @@ -1808,6 +1808,10 @@ msgstr "Legenda" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/da/LC_MESSAGES/django.po b/wger/locale/da/LC_MESSAGES/django.po index 8111c9a2c..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: 2026-01-17 13:49+0000\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" @@ -1791,7 +1791,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1799,6 +1799,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/de/LC_MESSAGES/django.po b/wger/locale/de/LC_MESSAGES/django.po index b7465a5bf..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: 2026-01-17 13:49+0000\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" @@ -1800,7 +1800,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legende" @@ -1808,6 +1808,10 @@ msgstr "Legende" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/el/LC_MESSAGES/django.po b/wger/locale/el/LC_MESSAGES/django.po index 555832a5a..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: 2026-01-17 13:49+0000\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" @@ -1817,7 +1817,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Υπόμνημα" @@ -1825,6 +1825,10 @@ msgstr "Υπόμνημα" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/es/LC_MESSAGES/django.po b/wger/locale/es/LC_MESSAGES/django.po index 85392317d..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: 2026-01-17 13:49+0000\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" @@ -1809,7 +1809,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Leyenda" @@ -1817,6 +1817,10 @@ msgstr "Leyenda" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/fa/LC_MESSAGES/django.po b/wger/locale/fa/LC_MESSAGES/django.po index 5c6fc0449..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: 2026-01-17 13:49+0000\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" @@ -1780,7 +1780,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1788,6 +1788,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/fi/LC_MESSAGES/django.po b/wger/locale/fi/LC_MESSAGES/django.po index 0c9419d87..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: 2026-01-17 13:49+0000\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" @@ -1792,7 +1792,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1800,6 +1800,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/fr/LC_MESSAGES/django.po b/wger/locale/fr/LC_MESSAGES/django.po index 3f57bb65e..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: 2026-01-17 13:49+0000\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" @@ -1818,7 +1818,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Légende" @@ -1826,6 +1826,10 @@ msgstr "Légende" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/he/LC_MESSAGES/django.po b/wger/locale/he/LC_MESSAGES/django.po index fddc450d2..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: 2026-01-17 13:49+0000\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" @@ -1727,7 +1727,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1735,6 +1735,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/hi/LC_MESSAGES/django.po b/wger/locale/hi/LC_MESSAGES/django.po index d67a34971..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: 2026-01-17 13:49+0000\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" @@ -1729,7 +1729,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1737,6 +1737,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/hr/LC_MESSAGES/django.po b/wger/locale/hr/LC_MESSAGES/django.po index f22a2a7f0..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: 2026-01-17 13:49+0000\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" @@ -1779,7 +1779,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legenda" @@ -1787,6 +1787,10 @@ msgstr "Legenda" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/hu/LC_MESSAGES/django.po b/wger/locale/hu/LC_MESSAGES/django.po index b8dcc29c4..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: 2026-01-17 13:49+0000\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" @@ -1766,7 +1766,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1774,6 +1774,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/it/LC_MESSAGES/django.po b/wger/locale/it/LC_MESSAGES/django.po index a4355fbdb..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: 2026-01-17 13:49+0000\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" @@ -1800,7 +1800,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Leggenda" @@ -1808,6 +1808,10 @@ msgstr "Leggenda" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/ja/LC_MESSAGES/django.po b/wger/locale/ja/LC_MESSAGES/django.po index a340428d7..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: 2026-01-17 13:49+0000\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" @@ -1755,7 +1755,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1763,6 +1763,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/ko/LC_MESSAGES/django.po b/wger/locale/ko/LC_MESSAGES/django.po index d16ceb8f2..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: 2026-01-17 13:49+0000\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" @@ -1769,7 +1769,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1777,6 +1777,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/nl/LC_MESSAGES/django.po b/wger/locale/nl/LC_MESSAGES/django.po index ffa122a3e..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: 2026-01-17 13:49+0000\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" @@ -1795,7 +1795,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legende" @@ -1803,6 +1803,10 @@ msgstr "Legende" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/no/LC_MESSAGES/django.po b/wger/locale/no/LC_MESSAGES/django.po index 8bdc8c2ee..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: 2026-01-17 13:49+0000\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 \n" "Language-Team: Ossetic (http://www.transifex.com/rge/wger-workout-manager/" @@ -1741,7 +1741,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1749,6 +1749,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/pl/LC_MESSAGES/django.po b/wger/locale/pl/LC_MESSAGES/django.po index f43124da3..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: 2026-01-17 13:49+0000\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" @@ -1800,7 +1800,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legenda" @@ -1808,6 +1808,10 @@ msgstr "Legenda" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/pt/LC_MESSAGES/django.po b/wger/locale/pt/LC_MESSAGES/django.po index 480d6b1d3..b6f9dafb9 100644 --- a/wger/locale/pt/LC_MESSAGES/django.po +++ b/wger/locale/pt/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: 2026-01-17 13:49+0000\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-07 18:01+0000\n" "Last-Translator: Ninguém Mesmo \n" "Language-Team: Portuguese \n" "Language-Team: Romanian \n" @@ -1787,7 +1787,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1795,6 +1795,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/ru/LC_MESSAGES/django.po b/wger/locale/ru/LC_MESSAGES/django.po index 4dfffafd6..acacb8bf8 100644 --- a/wger/locale/ru/LC_MESSAGES/django.po +++ b/wger/locale/ru/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: 2026-01-17 13:49+0000\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" @@ -1805,7 +1805,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Условное обозначение" @@ -1813,6 +1813,10 @@ msgstr "Условное обозначение" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/sk/LC_MESSAGES/django.po b/wger/locale/sk/LC_MESSAGES/django.po index c4234e267..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: 2026-01-17 13:49+0000\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" @@ -1725,7 +1725,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1733,6 +1733,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/sl/LC_MESSAGES/django.po b/wger/locale/sl/LC_MESSAGES/django.po index ce51fd5aa..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: 2026-01-17 13:49+0000\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" @@ -1725,7 +1725,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1733,6 +1733,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/sr/LC_MESSAGES/django.po b/wger/locale/sr/LC_MESSAGES/django.po index d5f450e21..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: 2026-01-17 13:49+0000\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" @@ -1725,7 +1725,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1733,6 +1733,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/sv/LC_MESSAGES/django.po b/wger/locale/sv/LC_MESSAGES/django.po index 11d7be254..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: 2026-01-17 13:49+0000\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" @@ -1802,7 +1802,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Legend" @@ -1810,6 +1810,10 @@ msgstr "Legend" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/ta/LC_MESSAGES/django.po b/wger/locale/ta/LC_MESSAGES/django.po index 06433ed04..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: 2026-01-17 13:49+0000\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" @@ -1724,7 +1724,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1732,6 +1732,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/th/LC_MESSAGES/django.po b/wger/locale/th/LC_MESSAGES/django.po index 60ba71201..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: 2026-01-17 13:49+0000\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" @@ -1724,7 +1724,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "" @@ -1732,6 +1732,10 @@ msgstr "" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/tr/LC_MESSAGES/django.po b/wger/locale/tr/LC_MESSAGES/django.po index 6b1971d44..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: 2026-01-17 13:49+0000\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" @@ -1805,7 +1805,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Efsane" @@ -1813,6 +1813,10 @@ msgstr "Efsane" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/uk/LC_MESSAGES/django.po b/wger/locale/uk/LC_MESSAGES/django.po index f258d7427..7937b45c5 100644 --- a/wger/locale/uk/LC_MESSAGES/django.po +++ b/wger/locale/uk/LC_MESSAGES/django.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2026-01-17 13:49+0000\n" +"POT-Creation-Date: 2026-01-17 14:03+0000\n" "PO-Revision-Date: 2025-10-02 15:01+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian \n" @@ -1794,7 +1794,7 @@ msgstr "" msgid "Obsessed" msgstr "" -#: i18n.tpl:45 i18n.tpl:47 +#: i18n.tpl:45 msgid "Legend" msgstr "Умовне позначення" @@ -1802,6 +1802,10 @@ msgstr "Умовне позначення" msgid "Veteran" msgstr "" +#: i18n.tpl:47 +msgid "Titan" +msgstr "" + #: i18n.tpl:48 msgid "Unstoppable" msgstr "" diff --git a/wger/locale/zh_Hans/LC_MESSAGES/django.po b/wger/locale/zh_Hans/LC_MESSAGES/django.po index 293e457f0..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: 2026-01-17 13:49+0000\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) Date: Sun, 18 Jan 2026 11:22:18 +0000 Subject: [PATCH 40/53] Automatic linting --- settings/settings_global.py | 1 - wger/core/forms.py | 27 +++++++++---------- wger/core/urls.py | 1 + wger/core/views/misc.py | 5 ++-- wger/exercises/models/muscle.py | 1 + wger/exercises/models/translation.py | 6 ++--- wger/exercises/models/video.py | 2 ++ wger/manager/models/routine.py | 1 + wger/nutrition/models/ingredient.py | 1 + .../models/ingredient_weight_unit.py | 1 + wger/nutrition/models/log.py | 5 +--- wger/nutrition/models/meal.py | 1 + wger/nutrition/models/meal_item.py | 1 + wger/nutrition/models/plan.py | 1 + wger/nutrition/views/ingredient.py | 3 +-- 15 files changed, 29 insertions(+), 28 deletions(-) diff --git a/settings/settings_global.py b/settings/settings_global.py index 18b8433ed..fc83566dd 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -72,7 +72,6 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', 'wger.trophies', - # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', # The sitemaps app diff --git a/wger/core/forms.py b/wger/core/forms.py index 955b87159..7d23f5f39 100644 --- a/wger/core/forms.py +++ b/wger/core/forms.py @@ -17,18 +17,6 @@ # Standard Library from datetime import date -# Third Party -from crispy_forms.helper import FormHelper -from crispy_forms.layout import ( - HTML, - ButtonHolder, - Column, - Fieldset, - Layout, - Row, - Submit, -) - # Django from django import forms from django.contrib.auth import authenticate @@ -47,10 +35,20 @@ from django.forms import ( ) from django.utils.translation import ( gettext as _, -) -from django.utils.translation import ( gettext_lazy, ) + +# Third Party +from crispy_forms.helper import FormHelper +from crispy_forms.layout import ( + HTML, + ButtonHolder, + Column, + Fieldset, + Layout, + Row, + Submit, +) from django_recaptcha.fields import ReCaptchaField from django_recaptcha.widgets import ReCaptchaV3 @@ -342,4 +340,3 @@ class RegistrationFormNoCaptcha(UserCreationForm, UserEmailForm): css_class='text-center', ), ) - diff --git a/wger/core/urls.py b/wger/core/urls.py index a0d684406..463c5f159 100644 --- a/wger/core/urls.py +++ b/wger/core/urls.py @@ -35,6 +35,7 @@ from wger.core.views import ( ) from wger.core.views.react import ReactView + # sub patterns for languages patterns_language = [ path( diff --git a/wger/core/views/misc.py b/wger/core/views/misc.py index 79e229a5f..8ceb7fc7a 100644 --- a/wger/core/views/misc.py +++ b/wger/core/views/misc.py @@ -22,9 +22,7 @@ from django.conf import settings from django.contrib import messages from django.contrib.auth import login as django_login from django.http import HttpResponseRedirect -from django.urls import ( - reverse, -) +from django.urls import reverse from django.utils.translation import gettext as _ # wger @@ -33,6 +31,7 @@ from wger.core.demo import ( create_temporary_user, ) + logger = logging.getLogger(__name__) diff --git a/wger/exercises/models/muscle.py b/wger/exercises/models/muscle.py index 43f528fe2..da78b02d3 100644 --- a/wger/exercises/models/muscle.py +++ b/wger/exercises/models/muscle.py @@ -22,6 +22,7 @@ from django.db import models from django.templatetags.static import static from django.utils.translation import gettext_lazy as _ + logger = logging.getLogger(__name__) diff --git a/wger/exercises/models/translation.py b/wger/exercises/models/translation.py index 6ad568571..1e171186b 100644 --- a/wger/exercises/models/translation.py +++ b/wger/exercises/models/translation.py @@ -17,15 +17,15 @@ # Standard Library import uuid -# Third Party -import bleach - # Django from django.contrib.postgres.indexes import GinIndex from django.core.validators import MinLengthValidator from django.db import models from django.urls import reverse from django.utils.text import slugify + +# Third Party +import bleach from simple_history.models import HistoricalRecords # wger diff --git a/wger/exercises/models/video.py b/wger/exercises/models/video.py index 88e935df7..0795a125d 100644 --- a/wger/exercises/models/video.py +++ b/wger/exercises/models/video.py @@ -29,6 +29,7 @@ from simple_history.models import HistoricalRecords # wger from wger.utils.cache import reset_exercise_api_cache + try: # Third Party import ffmpeg @@ -42,6 +43,7 @@ from wger.utils.models import ( AbstractLicenseModel, ) + MAX_FILE_SIZE_MB = 100 diff --git a/wger/manager/models/routine.py b/wger/manager/models/routine.py index 5638eb22d..2f5683eb6 100644 --- a/wger/manager/models/routine.py +++ b/wger/manager/models/routine.py @@ -53,6 +53,7 @@ from wger.manager.models import ( ) from wger.utils.cache import CacheKeyMapper + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/models/ingredient.py b/wger/nutrition/models/ingredient.py index 8f31736bb..99099fb5c 100644 --- a/wger/nutrition/models/ingredient.py +++ b/wger/nutrition/models/ingredient.py @@ -58,6 +58,7 @@ from wger.utils.language import load_language from wger.utils.models import AbstractLicenseModel from wger.utils.requests import wger_user_agent + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/models/ingredient_weight_unit.py b/wger/nutrition/models/ingredient_weight_unit.py index 6603aef3a..e31073721 100644 --- a/wger/nutrition/models/ingredient_weight_unit.py +++ b/wger/nutrition/models/ingredient_weight_unit.py @@ -24,6 +24,7 @@ from django.db import models from .ingredient import Ingredient from .weight_unit import WeightUnit + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/models/log.py b/wger/nutrition/models/log.py index 9562cdc1e..fb4b27566 100644 --- a/wger/nutrition/models/log.py +++ b/wger/nutrition/models/log.py @@ -67,10 +67,7 @@ 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 """ diff --git a/wger/nutrition/models/meal.py b/wger/nutrition/models/meal.py index ef191e875..180b65d3f 100644 --- a/wger/nutrition/models/meal.py +++ b/wger/nutrition/models/meal.py @@ -27,6 +27,7 @@ from wger.utils.fields import Html5TimeField from ..helpers import NutritionalValues from .plan import NutritionPlan + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/models/meal_item.py b/wger/nutrition/models/meal_item.py index 06610ff63..c773be163 100644 --- a/wger/nutrition/models/meal_item.py +++ b/wger/nutrition/models/meal_item.py @@ -33,6 +33,7 @@ from .ingredient import Ingredient from .ingredient_weight_unit import IngredientWeightUnit from .meal import Meal + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/models/plan.py b/wger/nutrition/models/plan.py index 702e03a23..635d2a804 100644 --- a/wger/nutrition/models/plan.py +++ b/wger/nutrition/models/plan.py @@ -30,6 +30,7 @@ from wger.nutrition.helpers import NutritionalValues from wger.utils.cache import cache_mapper from wger.weight.models import WeightEntry + logger = logging.getLogger(__name__) diff --git a/wger/nutrition/views/ingredient.py b/wger/nutrition/views/ingredient.py index 33285cb70..489918d03 100644 --- a/wger/nutrition/views/ingredient.py +++ b/wger/nutrition/views/ingredient.py @@ -33,8 +33,6 @@ from django.urls import reverse_lazy from django.utils.decorators import method_decorator from django.utils.translation import ( gettext as _, -) -from django.utils.translation import ( gettext_lazy, ) from django.views.decorators.cache import cache_page @@ -59,6 +57,7 @@ from wger.utils.generic_views import ( ) from wger.utils.language import load_language + logger = logging.getLogger(__name__) From c5281d2665f560f4dca3de968ae5a8ebf4b261dc Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 18 Jan 2026 12:27:22 +0100 Subject: [PATCH 41/53] Formatting --- settings/settings_global.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/settings/settings_global.py b/settings/settings_global.py index fc83566dd..576b415ec 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -58,6 +58,7 @@ INSTALLED_APPS = [ 'storages', # Uncomment the next line to enable the admin: # 'django.contrib.admin', + # Apps from wger proper 'wger.config', 'wger.core', @@ -72,15 +73,20 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', 'wger.trophies', + # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', + # The sitemaps app 'django.contrib.sitemaps', + # thumbnails 'easy_thumbnails', + # Form renderer helper 'crispy_forms', 'crispy_bootstrap5', + # REST-API 'rest_framework', 'rest_framework.authtoken', @@ -88,20 +94,28 @@ 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', ] From 839f5163e2f63ea36653bbf2f8460c06278e8463 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 18 Jan 2026 12:42:57 +0100 Subject: [PATCH 42/53] Bump wger react components version --- package-lock.json | 68 ++++++++++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index d4a373fb3..81c5e965a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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 95ee27845..56dee2a02 100644 --- a/package.json +++ b/package.json @@ -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" From d054712639175efa0153b6cf820f16d3efb64009 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 18 Jan 2026 12:43:27 +0100 Subject: [PATCH 43/53] Bump wger version and min flutter app version --- package.json | 2 +- wger/version.py | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 56dee2a02..354c5730c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wger", - "version": "2.4.alpha3", + "version": "2.4", "description": "Self hosted FLOSS fitness/workout and weight tracker", "repository": "github:wger-project/wger", "author": "wger team ", diff --git a/wger/version.py b/wger/version.py index a3e6583ad..88e2bc699 100644 --- a/wger/version.py +++ b/wger/version.py @@ -19,13 +19,12 @@ import os # Third Party from packaging.version import Version - 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.10.0') """ Minimum version of the mobile app required to access this server. @@ -35,7 +34,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-alpha3') +VERSION = Version('2.4.0') """Current version of the app""" From 89adaf6921954ae6c10a5a3d268daacb38edc2bd Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 18 Jan 2026 13:04:27 +0100 Subject: [PATCH 44/53] Remove... unnecessary break statement --- extras/authors/generate_authors_api.py | 2 -- 1 file changed, 2 deletions(-) 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 From 9f76bde20c69b686242f81f49a958603c382cdc9 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Sun, 18 Jan 2026 13:04:46 +0100 Subject: [PATCH 45/53] Update authors and translators list --- AUTHORS.md | 75 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 12 deletions(-) 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) From 57e6923f2ca3810841ef393247dc5a2a017e0b2e Mon Sep 17 00:00:00 2001 From: Github-actions Date: Sun, 18 Jan 2026 12:06:40 +0000 Subject: [PATCH 46/53] Automatic linting --- settings/settings_global.py | 14 -------------- wger/version.py | 1 + 2 files changed, 1 insertion(+), 14 deletions(-) diff --git a/settings/settings_global.py b/settings/settings_global.py index 576b415ec..fc83566dd 100644 --- a/settings/settings_global.py +++ b/settings/settings_global.py @@ -58,7 +58,6 @@ INSTALLED_APPS = [ 'storages', # Uncomment the next line to enable the admin: # 'django.contrib.admin', - # Apps from wger proper 'wger.config', 'wger.core', @@ -73,20 +72,15 @@ INSTALLED_APPS = [ 'wger.gallery', 'wger.measurements', 'wger.trophies', - # reCaptcha support, see https://github.com/praekelt/django-recaptcha 'django_recaptcha', - # The sitemaps app 'django.contrib.sitemaps', - # thumbnails 'easy_thumbnails', - # Form renderer helper 'crispy_forms', 'crispy_bootstrap5', - # REST-API 'rest_framework', 'rest_framework.authtoken', @@ -94,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', ] diff --git a/wger/version.py b/wger/version.py index 88e2bc699..7ce2f23f6 100644 --- a/wger/version.py +++ b/wger/version.py @@ -19,6 +19,7 @@ import os # Third Party from packaging.version import Version + logger = logging.getLogger(__name__) # For more details and possibilities, see: From 32cfa473c82d8b798e2b9fcdcae05d806332131a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=20=D0=93=D0=BE=D1=80?= =?UTF-8?q?=D0=BF=D0=B8=D0=BD=D1=96=D1=87?= Date: Sun, 18 Jan 2026 13:35:00 +0100 Subject: [PATCH 47/53] Translated using Weblate (Ukrainian) Currently translated at 100.0% (588 of 588 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/uk/ --- wger/locale/uk/LC_MESSAGES/django.po | 125 +++++++++++---------------- 1 file changed, 51 insertions(+), 74 deletions(-) diff --git a/wger/locale/uk/LC_MESSAGES/django.po b/wger/locale/uk/LC_MESSAGES/django.po index 7937b45c5..3a52cfb5c 100644 --- a/wger/locale/uk/LC_MESSAGES/django.po +++ b/wger/locale/uk/LC_MESSAGES/django.po @@ -13,18 +13,18 @@ msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-01-17 14:03+0000\n" -"PO-Revision-Date: 2025-10-02 15:01+0000\n" +"PO-Revision-Date: 2026-01-19 13:01+0000\n" "Last-Translator: Максим Горпиніч \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != " -"11 ? 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" +"Plural-Forms: nplurals=4; plural=(n % 1 == 0 && n % 10 == 1 && n % 100 != 11 " +"? 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.16-dev\n" #: config/models/gym_config.py:46 gym/templates/gym/list.html:56 msgid "Default gym" @@ -385,11 +385,11 @@ msgstr "" #: core/models/profile.py:379 msgid "Enable trophies" -msgstr "" +msgstr "Увімкнути трофеї" #: core/models/profile.py:380 msgid "Enable or disable the trophy system for this user" -msgstr "" +msgstr "Увімкнути або вимкнути систему трофеїв для цього користувача" #: core/models/profile.py:446 msgid "The sum of all hours has to be 24" @@ -744,7 +744,7 @@ msgstr "Тренажерні зали" #: core/templates/navigation.html:403 #: trophies/templates/trophies/overview.html:7 msgid "Trophies" -msgstr "" +msgstr "Трофеї" #: core/templates/registration/password_reset_complete.html:4 msgid "Password reset complete" @@ -1117,7 +1117,7 @@ msgstr "Змінити пароль" #: core/templates/user/registration_sidebar.html:8 msgid "Already have an account?" -msgstr "" +msgstr "Вже маєте обліковий запис?" #: core/templatetags/wger_extras.py:142 i18n.tpl:38 msgid "kg" @@ -1777,22 +1777,19 @@ msgstr "немає (вправа з вагою тіла)" #: i18n.tpl:41 msgid "Beginner" -msgstr "" +msgstr "Початківець" #: i18n.tpl:42 -#, fuzzy -#| msgctxt "As in \"content of an email\"" -#| msgid "Content" msgid "Consistent" -msgstr "Вміст" +msgstr "Послідовний" #: i18n.tpl:43 msgid "Dedicated" -msgstr "" +msgstr "Присвячений" #: i18n.tpl:44 msgid "Obsessed" -msgstr "" +msgstr "Одержимий" #: i18n.tpl:45 msgid "Legend" @@ -1800,171 +1797,151 @@ msgstr "Умовне позначення" #: i18n.tpl:46 msgid "Veteran" -msgstr "" +msgstr "Ветеран" #: i18n.tpl:47 msgid "Titan" -msgstr "" +msgstr "Титан" #: i18n.tpl:48 msgid "Unstoppable" -msgstr "" +msgstr "Непереможний" #: i18n.tpl:49 msgid "Weekend Warrior" -msgstr "" +msgstr "Воїн вихідного дня" #: i18n.tpl:50 msgid "Elephant lifter" -msgstr "" +msgstr "Підйомник слонів" #: i18n.tpl:51 msgid "Bus lifter" -msgstr "" +msgstr "Підйомник автобуса" #: i18n.tpl:52 msgid "Plane lifter" -msgstr "" +msgstr "Літак-підйомник" #: i18n.tpl:53 msgid "Blue whale lifter" -msgstr "" +msgstr "Підйомник синього кита" #: i18n.tpl:54 msgid "Space Station lifter" -msgstr "" +msgstr "Підйомник космічної станції" #: i18n.tpl:55 msgid "Millionaire" -msgstr "" +msgstr "Мільйонер" #: i18n.tpl:56 msgid "Atlas" -msgstr "" +msgstr "Атлас" #: i18n.tpl:57 msgid "Early Bird" -msgstr "" +msgstr "Рання пташка" #: i18n.tpl:58 -#, fuzzy -#| msgid "Weight log" msgid "Night Owl" -msgstr "Журнал ваги" +msgstr "Нічна сова" #: i18n.tpl:59 msgid "New Year, New Me" -msgstr "" +msgstr "Новий рік, нова я" #: i18n.tpl:60 msgid "Phoenix" -msgstr "" +msgstr "Фенікс" #: i18n.tpl:61 -#, fuzzy -#| msgid "Personal data" msgid "Personal Record" -msgstr "Особисті дані" +msgstr "Особистий рекорд" #: i18n.tpl:62 -#, fuzzy -#| msgid "Copy workout" msgid "Complete your first workout" -msgstr "Копіювати тренування" +msgstr "Завершіть своє перше тренування" #: i18n.tpl:63 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 10 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 10 тренувань" #: i18n.tpl:64 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 50 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 50 тренувань" #: i18n.tpl:65 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 100 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 100 тренувань" #: i18n.tpl:66 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 200 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 200 тренувань" #: i18n.tpl:67 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 500 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 500 тренувань" #: i18n.tpl:68 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 1000 workouts" -msgstr "Пробне тренування" +msgstr "Виконайте 1000 тренувань" #: i18n.tpl:69 msgid "Maintain a 30-day workout streak" -msgstr "" +msgstr "Підтримуйте 30-денну серію тренувань" #: i18n.tpl:70 msgid "Work out on Saturday and Sunday for 4 consecutive weekends" -msgstr "" +msgstr "Тренуйтеся в суботу та неділю протягом 4 вихідних поспіль" #: i18n.tpl:71 msgid "Lift a cumulative total of 5.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 5.000 кг" #: i18n.tpl:72 msgid "Lift a cumulative total of 20.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 20 000 кг" #: i18n.tpl:73 msgid "Lift a cumulative total of 50.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 50 000 кг" #: i18n.tpl:74 msgid "Lift a cumulative total of 150.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 150 000 кг" #: i18n.tpl:75 msgid "Lift a cumulative total of 450.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 450 000 кг" #: i18n.tpl:76 msgid "Lift a cumulative total of 1.000.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 1.000.000 кг" #: i18n.tpl:77 msgid "Lift a cumulative total of 10.000.000 kg" -msgstr "" +msgstr "Підняти загальну вагу 10 000.000 кг" #: i18n.tpl:78 msgid "Complete a workout before 6:00 AM" -msgstr "" +msgstr "Завершіть тренування до 6:00 ранку" #: i18n.tpl:79 msgid "Complete a workout after 9:00 PM" -msgstr "" +msgstr "Завершіть тренування після 21:00" #: i18n.tpl:80 -#, fuzzy -#| msgid "Workout for %s" msgid "Work out on January 1st" -msgstr "Тренування для %s" +msgstr "Тренуйтеся 1 січня" #: i18n.tpl:81 msgid "Return to training after being inactive for 30 days" -msgstr "" +msgstr "Повернення до тренувань після 30 днів бездіяльності" #: i18n.tpl:82 msgid "Achieve a new Personal Record on any exercise" -msgstr "" +msgstr "Досягніть нового особистого рекорду в будь-якій вправі" #: mailer/forms.py:34 mailer/templates/mailer/gym/preview.html:32 msgctxt "As in \"email subject\"" From bd4c2c246b48d953a81c2403641376b86831344c Mon Sep 17 00:00:00 2001 From: "E. Ta." Date: Mon, 19 Jan 2026 13:20:02 +0100 Subject: [PATCH 48/53] Translated using Weblate (Arabic (Saudi Arabia)) Currently translated at 13.2% (78 of 588 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/ar_SA/ --- wger/locale/ar_SA/LC_MESSAGES/django.po | 113 ++++++++++++------------ 1 file changed, 55 insertions(+), 58 deletions(-) diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index 8cd63a16d..d38ebe31e 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-01-17 14:03+0000\n" -"PO-Revision-Date: 2026-01-16 00:01+0000\n" +"PO-Revision-Date: 2026-01-19 13:01+0000\n" "Last-Translator: \"E. Ta.\" \n" "Language-Team: Arabic (Saudi Arabia) \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 5.15.2\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 @@ -65,12 +65,12 @@ msgstr "تسجيل الدخول" #: 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: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:133 core/forms.py:210 core/templates/user/overview.html:288 #: gym/models/contract.py:256 gym/models/gym.py:58 @@ -80,11 +80,12 @@ msgstr "الاسم الاخير" #: mailer/templates/mailer/gym/overview.html:4 #: mailer/templates/mailer/gym/preview.html:4 msgid "Email" -msgstr "البريد الألكتروني" +msgstr "البريد الإلكتروني" #: core/forms.py:134 msgid "Used for password resets and, optionally, e-mail reminders." -msgstr "يستخدم لأعادة تعيين كلمة السر, واختيارياً لتنبيهات البريد" +msgstr "" +"يُستخدم لإعادة تعيين كلمة السر، واختياريًا، رسائل التذكير عبر البريد الإلكتروني." #: core/forms.py:138 core/models/profile.py:222 #: gym/templates/gym/new_user.html:38 @@ -97,24 +98,24 @@ msgstr "المعلومات الشخصية" #: core/forms.py:189 msgid "Workout reminders" -msgstr "تنبيهات و اشعارات التدريب" +msgstr "تذكيرات بالتمارين" #: core/forms.py:196 msgid "Other settings" -msgstr "أعدادات اخرى" +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 "الحفظ" +msgstr "حفظ" #: core/forms.py:211 msgid "Used for password resets and, optionally, email reminders." -msgstr "يستخدم للأعادة تعيين كلمة المرور, وتنبيهات البريد." +msgstr "يُستخدم لإعادة تعيين كلمة المرور، ورسائل التذكير عبر البريد الإلكتروني." #: core/forms.py:240 msgid "This e-mail address is already in use." -msgstr "البريد الذي ادخلته مستخدم مسبقاً." +msgstr "هذا البريد مُستخدم بالفعل." #: core/forms.py:261 gym/templates/gym/new_user.html:26 #: gym/templates/gym/reset_user_password.html:24 gym/views/gym.py:217 @@ -123,7 +124,7 @@ msgstr "كلمة السر" #: core/forms.py:263 msgid "Please enter your current password." -msgstr "الرجاء ادخال كلمة المرور الحالية." +msgstr "الرجاء إدخال كلمة مرورك الحالية." #: core/forms.py:272 core/templates/language/view.html:70 #: core/templates/license/list.html:21 @@ -144,48 +145,46 @@ msgstr "حذف" #: core/forms.py:281 msgid "Invalid password" -msgstr "الرمز غير صحيح" +msgstr "كلمة مرور غير صالحة" #: core/forms.py:293 msgid "The form is secured with reCAPTCHA" -msgstr "" -"يتم تامين النموذج مع استخدام خدمه تمييز البشر عن ريبوت في الفحص للدخول الى " -"اي موقع او اي شيء يحتاج الى تمييزك كانسان" +msgstr "النموذج مؤمّن بـ reCAPTCHA" #: 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 "التسجيل" +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 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 msgid "Link" @@ -198,7 +197,7 @@ 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" @@ -206,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" @@ -222,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 "" @@ -247,24 +246,21 @@ 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" -"\n" -"من قبل وزارة الزراعة الأمريكية. إنه كامل للغاية ، مع حول\n" -"\n" -"7000 إدخالات، ولكن يمكن أن تكون ساحقة إلى حد ما وجعل البحث صعبا." +"تحقّق أيضًا من عرض المكوّنات باللغة الإنكليزية أثناء إنشاء\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 @@ -273,13 +269,11 @@ 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 "" -"المدة الافتراضية للتدريبات\n" -"Arabic (Sudish)" +msgstr "المدة الافتراضية للتمارين" #: core/models/profile.py:161 msgid "" @@ -311,11 +305,11 @@ msgstr "الطول (سنتيمتر)" #: core/models/profile.py:247 msgid "Hours of sleep" -msgstr "ساعات النMم" +msgstr "ساعات النوم" #: core/models/profile.py:248 msgid "The average hours of sleep per day" -msgstr "معدل ساعات النوم خلال اليوم" +msgstr "متوسط ساعات النوم في اليوم" #: core/models/profile.py:257 msgid "Work" @@ -323,12 +317,12 @@ 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 @@ -345,29 +339,32 @@ 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 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" From 4a49326938d0ffc3e98491ab160248620321316a Mon Sep 17 00:00:00 2001 From: "E. Ta." Date: Tue, 20 Jan 2026 14:20:28 +0100 Subject: [PATCH 49/53] Translated using Weblate (Arabic (Saudi Arabia)) Currently translated at 29.5% (174 of 588 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/ar_SA/ --- wger/locale/ar_SA/LC_MESSAGES/django.po | 207 +++++++++++++----------- 1 file changed, 109 insertions(+), 98 deletions(-) diff --git a/wger/locale/ar_SA/LC_MESSAGES/django.po b/wger/locale/ar_SA/LC_MESSAGES/django.po index d38ebe31e..7188de0b5 100644 --- a/wger/locale/ar_SA/LC_MESSAGES/django.po +++ b/wger/locale/ar_SA/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-01-17 14:03+0000\n" -"PO-Revision-Date: 2026-01-19 13:01+0000\n" +"PO-Revision-Date: 2026-01-20 20:01+0000\n" "Last-Translator: \"E. Ta.\" \n" "Language-Team: Arabic (Saudi Arabia) \n" @@ -368,23 +368,23 @@ 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:379 msgid "Enable trophies" -msgstr "" +msgstr "فعّل الجوائز" #: core/models/profile.py:380 msgid "Enable or disable the trophy system for this user" -msgstr "" +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:589 @@ -394,27 +394,27 @@ msgstr "" #: gym/templates/gym/member_list.html:28 gym/templates/gym/member_list.html:108 #: 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: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_wide.html:12 #, python-format msgid "Back to \"%(target)s\"" -msgstr "" +msgstr "الرجوع إلى \"%(target)s\"" #: core/templates/base_wide.html:7 #, python-format @@ -444,56 +449,57 @@ msgid "" " their data.\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/language/overview.html:4 core/templates/navigation.html:344 msgid "Languages" @@ -501,13 +507,12 @@ 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 @@ -529,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 @@ -540,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 @@ -560,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: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 @@ -606,149 +611,149 @@ msgstr "تمارين" #: core/templates/navigation.html:102 core/templates/navigation.html:176 #: 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 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: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:301 core/templates/navigation.html:329 msgid "Logout" -msgstr "" +msgstr "تسجيل الخروج" #: core/templates/navigation.html:320 msgid "My preferences" -msgstr "" +msgstr "تفضيلاتي" #: core/templates/navigation.html:352 msgid "Licenses" -msgstr "" +msgstr "التراخيص" #: core/templates/navigation.html:360 #: core/templates/repetition_unit/list.html:4 msgid "Repetition units" -msgstr "" +msgstr "وحدات التكرار" #: 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:376 core/templates/user/list.html:4 msgid "User list" -msgstr "" +msgstr "قائمة المستخدمين" #: core/templates/navigation.html:382 msgid "Gyms" -msgstr "" +msgstr "الصالات" #: core/templates/navigation.html:403 #: trophies/templates/trophies/overview.html:7 msgid "Trophies" -msgstr "" +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 @@ -756,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:96 msgid "Close" -msgstr "" +msgstr "إغلاق" #: 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:117 msgid "Create some demo entries" -msgstr "" +msgstr "أنشئ بعض الإدخالات التجريبية" #: 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: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 @@ -847,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 @@ -862,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 @@ -870,7 +881,7 @@ 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 From 05f83da601cc396054ef6dc4c2cb9e7167b6e346 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ningu=C3=A9m=20Mesmo?= Date: Mon, 19 Jan 2026 20:45:02 +0100 Subject: [PATCH 50/53] Translated using Weblate (Portuguese) Currently translated at 97.1% (571 of 588 strings) Translation: wger Workout Manager/Web App Translate-URL: https://hosted.weblate.org/projects/wger/web/pt/ --- wger/locale/pt/LC_MESSAGES/django.po | 84 +++++++++++----------------- 1 file changed, 32 insertions(+), 52 deletions(-) diff --git a/wger/locale/pt/LC_MESSAGES/django.po b/wger/locale/pt/LC_MESSAGES/django.po index b6f9dafb9..bfd739105 100644 --- a/wger/locale/pt/LC_MESSAGES/django.po +++ b/wger/locale/pt/LC_MESSAGES/django.po @@ -16,16 +16,16 @@ msgstr "" "Project-Id-Version: wger Workout Manager\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-01-17 14:03+0000\n" -"PO-Revision-Date: 2025-10-07 18:01+0000\n" +"PO-Revision-Date: 2026-01-20 20:01+0000\n" "Last-Translator: Ninguém Mesmo \n" -"Language-Team: Portuguese \n" +"Language-Team: Portuguese " +"\n" "Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n > 1;\n" -"X-Generator: Weblate 5.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" @@ -1837,135 +1837,115 @@ msgstr "" #: i18n.tpl:55 msgid "Millionaire" -msgstr "" +msgstr "Milionário" #: i18n.tpl:56 msgid "Atlas" -msgstr "" +msgstr "Atlas" #: i18n.tpl:57 msgid "Early Bird" -msgstr "" +msgstr "Passarinho matinal" #: i18n.tpl:58 -#, fuzzy -#| msgid "Weight log" msgid "Night Owl" -msgstr "Log de peso" +msgstr "Coruja Noturna" #: i18n.tpl:59 msgid "New Year, New Me" -msgstr "" +msgstr "Novo ano, novo eu" #: i18n.tpl:60 msgid "Phoenix" -msgstr "" +msgstr "Fénix" #: i18n.tpl:61 -#, fuzzy -#| msgid "Personal data" msgid "Personal Record" -msgstr "Dados pessoais" +msgstr "Recorde Pessoal" #: i18n.tpl:62 -#, fuzzy -#| msgid "Copy workout" msgid "Complete your first workout" -msgstr "Copiar treino" +msgstr "Completa o teu primeiro treino" #: i18n.tpl:63 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 10 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 10 treinos" #: i18n.tpl:64 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 50 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 50 treinos" #: i18n.tpl:65 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 100 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 100 treinos" #: i18n.tpl:66 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 200 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 200 treinos" #: i18n.tpl:67 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 500 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 500 treinos" #: i18n.tpl:68 -#, fuzzy -#| msgid "Sample workout" msgid "Complete 1000 workouts" -msgstr "Treino de exemplo" +msgstr "Completa 1000 treinos" #: i18n.tpl:69 msgid "Maintain a 30-day workout streak" -msgstr "" +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 "" +msgstr "Treina sábado e domingo por 4 semanas consecutivas" #: i18n.tpl:71 msgid "Lift a cumulative total of 5.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 5000kg" #: i18n.tpl:72 msgid "Lift a cumulative total of 20.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 20000kg" #: i18n.tpl:73 msgid "Lift a cumulative total of 50.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 50000kg" #: i18n.tpl:74 msgid "Lift a cumulative total of 150.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 150000kg" #: i18n.tpl:75 msgid "Lift a cumulative total of 450.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 450000kg" #: i18n.tpl:76 msgid "Lift a cumulative total of 1.000.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 1000000kg" #: i18n.tpl:77 msgid "Lift a cumulative total of 10.000.000 kg" -msgstr "" +msgstr "Levanta um peso acumulado de 10000000kg" #: i18n.tpl:78 msgid "Complete a workout before 6:00 AM" -msgstr "" +msgstr "Completa um treino antes das 6:00 da manhã" #: i18n.tpl:79 msgid "Complete a workout after 9:00 PM" -msgstr "" +msgstr "Completa um treino após as 21:00 horas" #: i18n.tpl:80 -#, fuzzy -#| msgid "Workout for %s" msgid "Work out on January 1st" -msgstr "Treino para %s" +msgstr "Treino em %s de janeiro" #: i18n.tpl:81 msgid "Return to training after being inactive for 30 days" -msgstr "" +msgstr "Volta a treinar após estar inativo por 30 dias" #: i18n.tpl:82 msgid "Achieve a new Personal Record on any exercise" -msgstr "" +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\"" From bbfc0c1e20363681cf4b6b8e8fd0045ef097afc3 Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 21 Jan 2026 07:32:03 +0100 Subject: [PATCH 51/53] Bump app version --- .github/workflows/docker.yml | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- wger/version.py | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) 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/package-lock.json b/package-lock.json index 81c5e965a..7b5fbf621 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "wger", - "version": "2.4.alpha3", + "version": "2.5-alpha1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "wger", - "version": "2.4.alpha3", + "version": "2.5-alpha1", "license": "AGPL-3.0", "dependencies": { "@popperjs/core": "^2.11.8", diff --git a/package.json b/package.json index 354c5730c..913e92c2f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "wger", - "version": "2.4", + "version": "2.5-alpha1", "description": "Self hosted FLOSS fitness/workout and weight tracker", "repository": "github:wger-project/wger", "author": "wger team ", diff --git a/wger/version.py b/wger/version.py index 7ce2f23f6..06b235742 100644 --- a/wger/version.py +++ b/wger/version.py @@ -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') +VERSION = Version('2.5.0-alpha1') """Current version of the app""" From 6715b849c4ad2345bf9d75efb5314570384de9df Mon Sep 17 00:00:00 2001 From: Roland Geider Date: Wed, 21 Jan 2026 07:32:30 +0100 Subject: [PATCH 52/53] Revert minimum flutter app version Bumping this was probably a mistake, since the only changes was the new trophy APIs and older app versions can simply ignore them --- wger/version.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/wger/version.py b/wger/version.py index 06b235742..779355295 100644 --- a/wger/version.py +++ b/wger/version.py @@ -19,13 +19,12 @@ import os # Third Party from packaging.version import Version - logger = logging.getLogger(__name__) # For more details and possibilities, see: # https://packaging.python.org/en/latest/specifications/version-specifiers/ -MIN_APP_VERSION = Version('1.10.0') +MIN_APP_VERSION = Version('1.9.0') """ Minimum version of the mobile app required to access this server. From e18ea0036b51d400f4998170f316e54e9b11b608 Mon Sep 17 00:00:00 2001 From: Github-actions Date: Wed, 21 Jan 2026 06:32:57 +0000 Subject: [PATCH 53/53] Automatic linting --- wger/version.py | 1 + 1 file changed, 1 insertion(+) diff --git a/wger/version.py b/wger/version.py index 779355295..9cf41d2db 100644 --- a/wger/version.py +++ b/wger/version.py @@ -19,6 +19,7 @@ import os # Third Party from packaging.version import Version + logger = logging.getLogger(__name__) # For more details and possibilities, see:

    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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..94cb3bf3cdec7eb73e6fb218b3b2c79b8bb596bd GIT binary patch literal 101977 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⪻wB?l;YtMVA}9eOe~Rdmw?;9qm{F}qrz&z5}HZVWGTU}{zBYMMf)+sNxjy7qfX0TStD)FyV_ z90Y9KGl^9p{6py&EVDZ_NcrZjbA8Q-v|E+@4hZQ#KU7d+ceanRGCn6pc0W8`AE%wd zf4->~R>y6vT(=XK_C`8H$zi;_jJM*(AEc`;cg{<6SV&aqCy0;wJR`D5mcM|6(3KUHN z4}3f9hk4Lb@;Aqppb-`1*z~-7iog@}m;Mb#6=^P#dZCDf*1_Uc*_3?0NgWw`B(ocE z;c@pMOs$gs@#EocvyrAMTC-fEm2S4q`Yy@b?N@0#);V)|V5V~c z`-ld94S;!5uQ|azUg9TL;Q}}HJcGjp+w-^94qZcoOd{k2{YinG zRqkYjyG|m~!ps84NTce>^p2&mOgU-Fa&LQ~o1Qw%S&i$jsxWpaHEs(8pBCew^pbo5v&Kr3ct zupooQbDy3>I^)dnRD<0>|L$iW8{LN&GLsISTVp@F3j1@c;}$Az&)KD$Synq=`m+6g z3aFQJPSZge{4^Yrcy4q4X{XW+SrhiF4;gN2O%~$F#B>i-K0LU_z?z2nmd?wFO8&*@_$wdo;`W+JQLEnqUsQA%V6%y~J*?rK?=REl* zz*=e~rjo}dMVp7XPe=nq{_aY|u@|l1F4!OyAMKkMk?a@>mu$c~P3CZt864F$^4)-q zvNJVJ?%t`H$2shL%r6E`w)>R%^@ljpjId9r5uzfLWka9HaG zxu(HZ?9!g$pj`gl4h&ixTGYe<6Z5${7-}DOD0*=JFUAR3c4MiPHat>B^nGV`Mm&A^ zX~}ut@*BRzCdoU-;%HMWyhkD zgTDC*!$D{FI56fgGSoC|-J=p`uMDub+dpGnu&B`DrKtblxrdh$#8NwS^6uQ~I@ET- zkux&K!yXtZd4j`s`u^P4x-rFw?BOQ<1Bfs_^=Q#(e<^tY6u(S6(8gv7^vfN>ws%cL z*jf!W;Jp{7BDwLD|Zi-*S%b~1ow8lYYuE!*PgLnmKa`nTo!Z!O4t z2cqbOU?{iAio=SKv;@$rLFf74C{=2|UguB=~Ci1je> ze5d;CY#>4^L?I4~U0AevEyVGwq9YcGjF9Je@pLoI?% zfc>#E=*EB8+aBTAgRMGoXZ2GwSc0XGn%?CHlKtDl*Tz*fT3pt-TE1(^;ITGx{=(Fk zS%7r?XKoKuzew6xU&4t8ykrRh3gh!V<=@)id3{7!`B_S;FOYH&!r1#xOu;aubXLF& zy+F@>jp2=u=Sl|kP&?a2gKB&Gw|;)F*q+e2Kwkc|kdA|C?9=8UQ7krW$%m&b4Qr$sB%v$V&X8&4 z0=aeP#=it4va>ngUJ_8z1!A9iGk#QDx3as^6cRpcvv}X`)cN89`6NjxWKs-}^*Ra> zP8Td}34}K)8u4BDfCL37xq)P6D?N6T;$a~Fz5R3@l(Lyx`xT9O%_)rRKxt{jI&Df? z(La!}$VOXb_(44ba%ZI90L!JsYrBGSw8E{)j%$zH!W<@yEw4=G25Qi3a-@O%DSv`!h3saROUkZ((k9Y`k9&zv#}~ z5pB6EKW%C5uNRmL+%JD%lSzl5wB6gNcu;i=KV-ekIfU#dI@MEor?_CtLEZRMt!R3l z>wkAPrx>&vUtDObFX>$CZjEwKs8B5G@AvJZ6N?Ih?`H)g)K&MPO5m6s>Vzi;MqUmZ zZ0@yvp@E-fA&~SSall1##`>hFt1v=}(d;h32!#j{#5>!I+C#V+ml?mkKUdM&@HxG> zqwCVS>Q~%b4f9ebGt($3Zsajq{Aki}4gYze1iGpgTT6HgJM&RjXn&)LGQ@3XDrc(0 zKKVImvF)%Xzq>B#N^GvD!rp8@ffQ~6CLs1P@C#+6dBUZUfN=1;2xT>_|0buE?dT$> z;?IkHw=RC&0v+8fXYdF*ZriCMSXOZcIX9IQvay zgx*4Z97xhGd@oap zR~yO@Y_^oL%DYIkPTP=|O$#;zhSuyZ`%&s1Bp!5wi>H?Znp6s)hkFAG1y69dLZepl zU6{`|JWIb0A1)%s`1werXY~O}0nF(m#WVo&*|-C*@qE{A`Bybn!^au^XQ$Ou33cbH zE3p9yqK-<(U-c8Kz$Bv$l=a=4@2wNGGxu}33ZKt|ZH>wVJi#73y=>@_oc!`YQWL%y zT+*;#Q$m24}iK)26)CZW`8S=}t7Dw7%5 zfooo6%+q?l(6jTuqW1k6Z<7>gn5w1xC#d2dgsAo|SIU54W=@t)+>=-STzeM?X(22S zdr<8~5DRUxr)oqmh;3CGj4nRs&3K#3^zHU@z{ga~ZlYxS!6~e$uX>A$TWLTPr-e zdyDQSWj<_;)PBGd9AKc}fR{d$YV`RDNeZeIRNSxaKvdQ(22(?l%~;K$>^?F46bh+Y3)Fyf1{UEM5;KZbFuvOg-qTD=;*1&WLMeA zBhbbXzuU&wN~7=z|78!An)VD!Vf3!SnM0Tk1l{2z6aoUef85ap#cM;#RINyEUcsCR z3SggOW5==2E!;5})nKgb$#phgzU*w4|4rx&C&dy)@A8scEQoY()W|K)PU3AcC_71W`u$hXc%Gs1^>m4h zT9LS?ac+>`o##~-RR0rNDi3yn+a92ZBJ*1EI76GE()JDNZ%D^P(kC5l#TF0{cHaBg zG$ay!dDoS5iT)iaf=wFm+?u%S^;_vfc6vCEfmvS0I4Ry%w)RV+abG*5$xNGlRZ^=( z&gAVVcLe6IpxN2e=kj3V@Hl9)8bcv{F9DXW02iWV)Ln9iKd59~Gh_ux8jh(6ut9Bl z-j-^K;b5fQRjUN=e4gJGOY1C1SPIco72BGOUfk=kb#fB-pUn-IE|q@A%xts{QijTN z$Y@5;8I6W9csYm}R#z)oVN6OGJ!A~2u`{5$h_7gC?IB4bE3?jQ1w2RJ+^ij;?!tUl zF$)9U1ZX!@_T2O9uXC4MuCyk^@{9se7*Aq-?X1C@^4X8OIF74N&fZs9=q5*QzT;KO z94|8)?M>g8VS>Xpc_qQ$(UA;#y#dHur|zQ5SB7xq83hM*i6NhG7=ow8K7U7$g)e+F z+PDCo0p}L4FE2~1o#M>$e{57CE?a-;KqOi5j*gL!AKwZ2O&8-2`g2e7WV*T^2G+xi zglkkq6-t!awJ#O?)nYNJncK%nMlliLeCU3hSa`{9eDND6(x5*q8ri;7g}l~cqdMpK zpH~R2eVs!m+L^a{o@ZMKv$&W5nL6moZL-M-x^+;_=-VgXuv~vw#4Fy zn^lvnRr0C}Pw}#@UGmVJuvJvCBRIM8j$@W$d2_Nf1Fz9jr3m*!v)FehL-|Wn-c0jp z4UVz*`xoo96%TrjaNGz3;?E69(BCCv=qQgoBGEzu>wi$#K3<$a`&Z&RAQ87E8H#Kf zl8|gt_~Et)O=dhy^}4xCx_awZ14Dx=d=G`hXug`NF8Qs+4%Is0v*YzKA26`YZ;qo= zv))!&%ji)K9Q1d{t^#Zf0{SgPI6RQ@@%u2#J&(++eIuRPFYow_w=U1nP^^XwWItT# zmW#wRI3IT|Z;e9YcX&_vQ$d*vV8&FA85~}(QIFMlb1|pTo3oD*@j7;^8nuaZ->$3A z{QC7c5gvi_!c(_#yN52s-()Xk+18V0ngA1DCp zb-zdqczd*M^PE-~{|9(Lhre4U8TGj$<|Rp1?#FSgwXQ0xRKUlN zp;9wiG-Kcq8GL>=;JB03ZF`s4#+59_udav^XSZTt>W z&;M=mE0EM+z}IDWNSU}v4ImvzKGVY9XMQ%2IS^VE@$%cJ)23eM5Lwlg`Rdy;&Xu-B zH(7$HtQ|3Mtgh6rSs_!DowGZD_1jgNFs)#!P@kTh#T^N(*2$CL(G^z}>W^-#Q1e|N zm1t9ljHkL2r&U%Lvp0?T`AQByH-h|8`_!syXMn5;d5(FB! z>?gRx0rQ%gv{@*s!D85rg^-3lRb8ktU1wVH<@L?Q(aCC6maB5Ls-SVPzr2jsRK_Y_ z$8p;|Cd_ak5am|8khk>1ld;db7^0MY$YZ z+HUmZ%jzrB)7BatFkuE9+g(DAkGRY*g}>DNsOW8KCgd5n!|Hj)*YSXlA%b`)j170@ zI*&kLzk^*-!X}h=AfsA(|I)vrQvYcH`TSd?c=r#SFOhR}1j;uJaCO1JK^2~o)yLOm z-3uyDd*(MOAk?5aF+A>J`KhS&8LDDF{kBGQ4W44Lb3r8~3y?HAVT|LqzFH+ejG8cV z5yk&oTpWJy@bUfoWoeq%KZFFUBUYB_MIS^Q?+>U+qN<*Ip|S+(*r)!?N{*f$XI)P4_AD%P~t88%-0Rb9nfpOiU_UrSWDr{DGh0!utixt+n z7%)=!NjUxEE*{>bSoy!73b3nw zyoCF673F>wKt47CHxcb8fuoTw%+-L~K!E@+Yw*ma=wM9X$-dS%t*lA1I9~&gZU!ZW zTE+;#v-kD4UQsUj>1OR+My05v`a>3+1%Z%RxOOOPQPp&c)d&c3&ozAD-DQmY{ebuJ>-h<0ht>n(kO)#F(O>- zGU9C2B`E1l1f1$?IP3}p_SBbNRI4@yff=GjpwRg!C_~@*WQWvFU#*xvDiV+&y!^${ zmwF#w$IDfkum~bb7`5Nah!{Ed*+40e^*fC8u?98yf@R}csh`~Kjeb&nj(BwL%+o3~ zcwO##bw%!##fxV($0YlZ^+np{C*?8%e?yvo!(!cahLZH;A$QF>?WrL+DK#S*R)>-J zO`6d;2GW0|nbV>?zq!8Ne^ZkKs3cIvHw+QJ%EfukJGm~kaF{X=l+Hup9LLvx5&f(> zB>GwL!`x!|9=fyo5U8C%6B5Vy1P5&hQ1CA%<;M9{+4X+Xqjf~1MF0O>7rFe^kqIF; z`MB2=LkXAyq?qc)QFG>-%nlLpk-lAKtqm>~i_=A;(T#?KKjZ*{a<4`xk}%rA?)Q3k z5}a=tbQC1zC;$8`URLx|@Szp3-Y#J3jvBcYqk9P`0GI2Oa*-H8S<7$JYR7zio_2e9 zUc2W=4_zrf<{4<; zO`EqxM&VA_X#n|NoSzc?U1kuMxSZnnE-wG9Ik4*XrNZ**dow zTUsyg>rqFU?&n${MCDZp)9d|y$tTpREQRd>+J*+6$LwY*LF+)t30~7u8~n)EnS&cP9V){Cftgo_mqDx;u1b| z*WW+;6wByeDN7vATFV44_lmc+l$_{}7yeTl@;d*LrfurcbfHZ6Guc#p-WD0@Nh}tV z`Fg(#A?ayNh6To%5~e;5-v>Q0E4)2TXwF2d>%=Tiv2r~lqZ3L~Tr5`Sx0mav=4{s7 zc-MMa;Ur+e^f@iaqMDpv*J&<(e%1hK@~d8}0>q#!5VF8^f5Fh0zOE+G=BHHZ+Q>|o zw~;mqgGhrsK5xaX(vw5!eXbC4w(5`B>M$2w$%IjY(7Bp6kk&C;o;6zZNC1+Wj(THA zXU@A=ly9yN*F|2a+$r0x(W5Nbm=nAUpi@bV8kE_wGkRIiI)Z$D-|fngV9cf)vMs%{ z$u3O{fbXCJct-})-koR=Y`99_?So zEjkqGv5QUG0!G$>L9P+UZ(eBeP0?xEV|RO_N6oL)upb39>qf`T1R1^v0RsCL%}snY z2-0eBtbGXj2{g^kmt}vlFV?R2t^rZabUir~q_~=&neV5aR?y<6uxXgKZEP`G*E$p) zY8|{XNtkvClS<{X!r00Ilj7^HZoP`0H$M(-y19GvOx+s%MaIOPP+W-;tBipp`r9*& zAa(u0mi25BGgy5pIWcG22l8&9ayAjC8roxg<+qDglrSwX8_Q;i+Oh8U@K%Se$EpvT z5YnPZ9-mu}XJ}nP(T~z;a;4>#z}ZQLwrp*w`2;Jbn)xAR{`Mj$$-9Gf#MTFG280w5 zt-%v)r1UO4$%6OH9-X=PcmVlr(D!u68Y{mwB-j#S%DHR+7R7yH)E3C`13*su01|7* zo0{yeuDUhT8h*}WBIJ<(QqRxjMAgnc$1GQX9H2=jBAZdjwAh=wH~&pA=gM%xcod*=+0$E%WYN(8$G zj1_{QjP$nt+}qnbUPhxn+>UIB5*NuExQR{{YXLAy%42eS9}6HK5dmD9X7II2x`b=F zd0Kmb;AOokTAI6N*3QOq^Ox(3MOo!n_e-r^0E_!Y)wJ&64m1e%{qoCCwMx*U`cB>( zZ{Mye4AZc?RW(*QR z9wCzVNEPyiv4eh2hjT238YJxj;)GJ8js*ZRsf0|6&_-9MtaOIv`t4k>cs7GTiJ_bPkAc~&Dt3xd2NjU+Q zvVxVsDlU!)N_k~bKxQubunJaNKq)=KMtRdMd^FNNZiEc8Hl>_a0Sq2`j7G+kTJnZk zpRl!ad9B>#$xA$-Yk<^^tO-y6XHhM(sy4C>8Mxn$it>?S$nF91`41ylC=hUcj1uMg zoiAGgzqIeXH)J#|;}PVfOIlWOG%4@_H_aNzB;f2&6*ePKc+~k#ni%aXhiM||Xt@w{ zhX8WCzb-u8$Vrt5@Mg?5NgVoSrT?E0Kx!XHNR687<`?z>AoP^RGWU|LEqb5c1~jdg2&Fn(cz}v=ldJ zV)>gDzkPn<0Qp?&x0_lNI7eOV1A@rd^As1BshKksf;q+HT-rkekc%d-`B6>>i2H!K zWZ^`?24K%KK1mZ})5$`Fus!IED+4$>h85HsU$;nA|f(mTZHm9?1RMKXsJzJl3c#=*m%l#SFpC9f_hSeiv@8B$- z5@0P&SQyp|<(NOCY;*NLcu!^52#I!DpKHzg;3IbdkSML-UiSdLmQIEiT!eRC(lk52 zYKP>tOGu~autB&g1bG}7Z$Ddk>oT2Li;Eb+0i;Jrg_z?SApje^gkaNCU5g9TzpwUo zD|TFmM7zwdG*j16%BxEN@?Xw)^(RPU!L9%yzCqBE(sRl%(Uai;qy1`-hbWBZ8(*Yb zAp_3{F+kcs?$rp1Jof;Q2UAoeu<&PByGVrFX6R01NVLoNVM$tyhfzyk5oBhMe8Vx# zGAr7QZnl9`{>*->jNsQs1Q~L8W&j(osathDd`gksvmYLbx5wL79(!E?=?nF}gM)Et zNFPlA8Q6KaxpPpV-JQ-|#*k>2_`v?0T&vYvjmTP)wgMTjZ%(Cb#oKWqt(|Ps^Rnwg z=!_lgB3)0s0fKCVE?2N%_j}-Hkn5kO@13zH!|)Z7*=~GWE9k!t}4w#d$jA`1|JPZHBdX zXHY?st-ZEVAFrYTr;pa)1}vkwUE;&MA-iKPMvsIKm~aXKNS$s`<6W-X_~iz3kK)ae zk>NOOJHA4t;U+_rwt#`IjWx_c_luU+xAUSx3U6>D3TIDufg>-d-zF-r2Nj!cX5>mK8l3KEP8~Gt*6hnl!TQX9aCg zk^vxiMp-);@S5J@Cf~-P^P#7K1Mpts#bQQ#*F!VeyEEApM@Zewx;WF*?tF53Wz*ny zo?)4XvZG#BwCnnO@}c9W8m1`2fTeFv`d@T0M~$^jHzCB!Z_-8`EPKCYM%2JBQlmGz zg9!3t&y?qPHbU<1-W@y?)24*XYQnW&{q$qV_5k_(cc*_fIjaK4Bng}YZ60tWWPx(- z6`@8d*tXHd&k6lLl)&`+vJhaa3~L5Jk})FhFhZvgX$q6$gLu;YfWN6-JF$SxRAA>t zlU|B*Cov@2LHqy^0RkXsqv573fKV%dH>t%FM%F}@nC)nw4pih8c37rw+J3TaMeQ*p zc)z-RiPr~dwv+1}CYXG%1IXQ7y+AdcmSbxsi>cxxz0SLF`i!>5N8~Rv?2}+mH0&Az zTrV|M`IDz5f=s29QGps6SivI$MPL%xRwkqM59Bq|J=toI-qGXl5Wj?h<3qP)czpbJ z4YpzRV8g~|RF<1CNaMuEdX0CWD7P&@{;&j%Jv~ z+5gt9huV5hJTzP;113n4QA!8;c>ue(qv?_HxhTFm0bVdRN~xF8vu%l3$pDZ$F@l)7 zvG7?|?x~(Jv|#Rts$U3gYxF9;pifGZIlR5da#w zpNVit1m88xaO}2i?@%jCy7rE*a{s+UdaA6O_!H{9E_!XrT#UA=Kfvx_!RSp?Qn&(` zaC??GJ>YiXA->x7z9J1lqdaUb7Cd!Dfj4JG>M?A3Pptv6pE}{ebVf%$E!pFp-4FJk z?wSxXURE+=Nx5HGz+<)%JA}OdMF6Smj{zPa=;4m2u!9|vC(fR&i3xz?;9=n5I;G&! zrhqUrxO)Nq5GEG^Ojdxj1Q3;|U9suiw0a257@Z=)-aVg^c_j&%5#HTN_-GMwmXG(Z z!5(#a=n#+8=xu(=R=upv0rEE(UuVFp84Br{(EW5#ot1saudPqJ0l;5qG26$FW*ArX z>_EV0UQL*Git|jt_Ek$gZp$T3n2gUFIRogpS+-4x(;yKVmBmOCyG9>UEUN;+*;e&8 zZ*B|aO`$pM$GQa;wy79A5=OS1sYjdF9~%2$FmWHJ-PyDo2KcjoVpOLj4HS72V^+V7 z4L8`l2=C%6Zb|G!#71qmTUT6_nPv3BKaj|D_k<`oQ~*IGh+Kbk-QI)PLw%9vpWx7S z0=4zaIi7NCwI8w}Kt6wrG*(Zfj(}*}%`N*4k{c1gcut9bq&cuwB5Rv(3=X2eToMO* zLjU=BEnA((d0b!X>Yu#1K<7hB#&3Dwr!>9*Z_xWGB~vFt@$CY`AaN}bCZk)0Npk1I z1sWOdy%A}>z=wpg$6VnM`5(lWc3Hl6$@1o`lW4pCE?Ba}L*63shd^1pM32!axH23* zatBw$AfzCY4|qq+@}VB@IXf!K`f_4wLQlt=6M?E2>7WL1_6 z;reS)mM7;I`^&R<9p(8ZsTGVH&N(gWWU%FjCstTU?8cSg#g-7|#h$E)hlF<`JnDbm z34JV)No4Eua-$2HMF_PBY@KDnHe0ySM)-(^b7k?(1-8G(1qUYGb1h;BppqSsYQq>! z9%wpedelV}t-tJFoRn$Wc-u;|>9qNaMVgi;Z}zVrs#r2l0c+M6((VMv&FB0}iDn#T zt}&=A8s}O&up}me3;>xDK|bsq6fT7y0B)Egw=>NxtpKp?Fm{9zFc5kF(*Q#EYk?2P zL7H1w5eCN6Z|86hl)RWbjs0c#y{3{VqV>b|#j0GSqTLd*er>KFNs^}N>dnpaFxL9} z+}eCh63=6HEnN9ff+WON4LJ{rEnpUB+Fw7W;G>Qpdl!voDR|o1AY@-cvI!uoX?QZz z$-$Z>+5h|`fK>5A+jnMR6b2HF9VXEZKu&Izy=CBq-B>5A{F@Q9Ze6*}ruU$4})cH!;6bhMD5tN&vKlJd>fk>M0ioe+)&A8N~aP{^hn zqe5erKHkIX1|=5+AV3mnMRQ)^y~1e#NH>MuHhhO!%ln@Ikk5ZdN-=vJ0IBe1?>q=0 z1=P5oBVFwn#`e^)$dj(qjVU9rQUAMMpIw}!3!ZRvHkh8ve0sWAe7d-f3q3*qd~D4F zC?RK@^`bi8HFVPZc+h1{Nn#w=?ER0#;HUkxKc^&EZ3F>vN1pYs+?fFCEEa&Q)nIq4 zIbgStH|S+W8{z|mP{^fztbHb7af7#@K#d^<=q^qHvX8D9lMFq+fyeT^T%cvu#2AP7 zLBs_Rqh?#DT7P}IIV*CF8*JV_))+k0#JL%${JP9Iw3BQI37PQ=Nu0@7GW^porF$bt z9YppnsC6Nj1d9#`jVSjpl?4e@{TCL9nmzmF7#pE&RH;Yv`&UAXR-q>(QES1kz&C~q zLj$1$LRQ*=$4!#X!K5a55A?PaPUYl& z&9Bs>`S=)rP$0A{VNwaAY@ICU*@CI&EQ08JzP>tdDv!k6e9i54_|;<}8O&qNO`0CN zRl2%3i`G8x>nWsRz;!x|&=l)+^rMv38p+`9jHy_Xo+7#z3`F=prvRjiAO~yqJUJv> z-0A|gHVc*=Zz|3?2Q#w~63xViwwscm=v0EE1jIf!SZ!bsx}9tg&O2wolz)_42@cyJ z7SYvtnIX2&Ct)7BGwYCO4nA^= zM>ItS(dA4udiS^3Z!Ee99|!N~xg+%EXBTB-==TFPa1wL(HGL|6=FIP{oWB0_a&=Ha z1d~v-^6bxoTzoKYhVM;}@H%=T@=X${lQkF@Cg?8E{Nb(x$eu5T>>V$o!mT*2=mL&R zshD<#b}#NQw+@Ns)*k>adXzmdVtW~|N%{!llv#OA68PIe9$UWNU!{p@_auWg?0^#U zpJd==41^^)fOH5dSNjiZO5__cfCk$VKp2e3Vs%iLAaad?aEwRki9JzI2p#LsT4dCV zk0!%9D;!Gg1(l~Mh!Oxu#g{A&3)aDzwVN!RpNbG92s@9VkJC_cECDfjAwGV%21ynxNwRSzs_d5qjhYxpk;C(8# zmIosq3NsAweM`ls=WfMaGasziQ@@;ay(<(W%-uA>=N?rg2nq=`A;)d7p%STrNL=Wt z_d0a;3ovZ(VwBljl^|cr3_*10RvUQ+zF$b^=NTS}cF+7rt>f-P-$ONh001BWNkl!w!U+TtF00*D61+Ff!AGChQJ1Ci-jR!H!?nCYrDJ%QC6U^VE#f5)>K|d}K0HoF`~;H9=esijQRIai!_`nTQbJtTd~q zExn4vvD3VXwZFh~%Y-dXnfM@;?1uNA44+tEcO=KUqpRtAjg!tpbKZU<~ zR`E%HvNH~egpSG+rgoCBh=W>p*}LCO1i8B-UYi>D8o(fRFZYPz|Ghct|yQJG76qNv%! zm%mZEpYS9s{pTQog|;d*l5vU4bugh76X#?le2?94Q0(pOc}_AQd{|F=Yw;gnId~Jh?2C&wmQ|9u1$TvloHZA~jQSfgW?h zW`HD#${4~E8Z=Q~yZX@azuq1k*Fog2znUPj*Wlw{Yx`CSim=`N=3?0QX#8d;7C&iFxygtY1nAS4@Ml)8NajwQUWCe(TZ@s|LM{F&c^Y|j=3ms%%2z5Hm!nU;n zf_95=iOYFfrVu$RM%aslX;FYh-%)~h?%=?f-z*YCzZxD)mSBa^#AYm_njH7&hF)EI z^{%XA>`Gsb> zk`oB|l{M!8UW@?vlWanhr>KBwy8=ucqKY4JGf<<4JwXjBG)f-`?Fm9af;&~BbSDCs z`Rj6Zwf2%1g&jLIM|0gZ`*(ePw2&B)}rogOKLDmIG_XNdvB9K6bm1yBh*fwD3BBTA!UD<}Mz9 z;Jhlq;Q|wRX_mr*NWzx86DFEomdo7ZHUn6kQc@!`nR+~XPc{; zOoLA=glK@#Xh>Ivd{1k*3*`H!_Rdpg0or7TC<|mAZBvGHd&D>Err0SekQ^R9JX9%H zQ~=0%zj#~ZrfV>-hi$z`1#5_JA>{x_N^{&lBpTzlkF~tPmtToQs%>|}m|q)vsWeNk z@-}{Cd}o$q8X2Q38tQIB`AW1^MF($*Na;x1EDL=15x3$?0iGM{d1}}$7zhTl2@++% z$Vu495EJ`5SQl+SpaMw+6PW1p}rd8m-uUTU7OgEybYD@^Y<21uh%J>&EOpH|v0 z2+V(SAh&d#BPX_&kUyNHiPga3TvuFqBm!H5j76CEb0W5iP%o=ou9bpO)nVS`#p8oQ z3MGfDl!!Ip6f2<_6lR?ynbo_t#*5kF&QvpxtTBVyPQ=>4S!pF=;qsp^k}Eq5gNSYevGg(Jzd z%=V`-d)+7s^$1I|aMG>) zHfBHue@QgbiGoeiYeo04P$vsEK0+kXX$z6xHULN)KQ;<#jA;vEvwTXGzoDs$dCTJU zMVcg3$0tKm4Mai0hX-#F;*DC7rN{(!5Q)Q7?2DsA|C@&2f57}a&*3XB7KR#t7>fzz zh$RNUi7kGYCAb-!U@@ceazrvxdmkSN)hhVh$42rJMOwwmM-}$Zucesc$+9A^{_bWt zbxm4-hJ8F$~)9bC3kY9cE@h*mFQ`(<>-GUO}i;(YCS%m^OhE7LMr z3wkDWe6q+E)Zidt6f7~Z$}l=IA}p5>xv!%`Ju!gmDSQb2Y-iv1fyR(cQVf|S+aP2f zKw5mvwz&r(U~nSlWRPuTUIz_6u1`}+86g8PGb+z0-y%yKey~^;0jr2)oY7?o!=LWw zP75sliWM%9&=&;hHQ*3}0tO~z60yh(|HAuN%&1l;315i9^@v+0GBcx4ijpdXq^Gy}1hox4XCyvJ zkD9y~1uMS6amybDN=lu5;Z$ z8QZtT=?1N1vxM>B6G9&+ec&XqxV}9`R*e=RIO$}?gvkQ>kdDt6me+ZbWF&_oPZh&I zVM@O8R_>xaE07Z;eUY_rEI4J(%|wLh_j`~X0zl|=Y~_CWadHHin_oG9Hn@T=Y#Agb zp=JGTkrGM;%byZ5VkRver+>2Pic&5YnYc^S!mMn{5CH!z#l`6^SVB|tS&$CjO$Tflot_-+dRlt0jLUCJ zQLEjajF5Z~Z{8<~Q^0r8V`M*f&Cs*aPAx{}yTWW;rJGlcrszZ4CZjU|Lc(AQ4MZX&p+!YPjdfW3NE~)g zi<>+jm42Ucr)#%u6Nh9ws?$jti3c{Ez;Ah{54qt(<5sMBIP4e5nEZGsWB!yCQx^s)0KZ&FXg2PKfr8_BEBeA(z z4BsjJE|@+^yswEz%3J!(kjVh1vbk6@o# z-+6u;0m$cn=bG{A^n6sp7=!B32Ziz3r$uHdRwcxFi5IO2WgjNYMwx1OVygkU@<{9h zSJmk`fCC;dl0s;FtIKOW6M=otwhQS-Em3a4x_6SZ=MW6bYl3Qi_r@#05#9<*_qZkB%kaL+W8;61h zu{+Dix&=j8i<9&^l5fT~5zo{3tpTzu*(NO$qfYQ%Ey*Vl3rjM=<$gj*-JfnAv=+{l zp4!LUuyMbGmX+L6b94lR7=i)vfBzk6UVrH6kDef+_*vW%;i2eanWmYb^^cPdVgSNO z85z~&#p}2%$_OkCMrOo#N!zyR@WSd1a)(x<e_k^_k;xGc#eN8kPv zsw681*ys$;Ta$YNmr#d97$3m(uV$1(KnF#jrmu|c@(DKIuHHe<1eez&VJ)Pn>fT{NWn1i~R^Dq#1<=I*lC1Rf)Ce8L^VvfDm|KvT~LsmP)<7WLTEV z2-q3W_QUcH&S9jDJN1OuM1m2jU+}) z?1mN=EO!x(4;>QnwF^sR&gh)B^Yn@21m{gIk1kR~tRgLFwr@`MTR2P6r~8hyyX&|& z9^oANUOTf@+ioxijwhg{X4c2g5eVsE1B=0D9M+>%l)q2UFZU-Nthjv#xA*n(_D)NLFtr1BBVL(nLstsR56vRqw z4|2>#KfTGvW}M)7(RKG^quWJ7LIvq$B^IPPXA!R#XO^cmE7n?_tZ(b@lW+3{YhuFg zTbg=T-$P4D7TphtFh3DCoy$nV_h5Mtc)+!NTZK9!Rr{M68;|JySTPiN7+Q<4Y^*YPt zxO~SHCD5%Kl$+yd>TS4dRDC1>sp5y;us{bZr=qUpqI=Y&C%p+qs$bms&Nks|AcYrkQgC#2&nNXER+~yXMatcEXptpsG9zz=R((kQfz9>*dV>?o>@)8NXS4Vu~^{!^<$_-(lq1N&Ixy$$t>Y3Yl@y^mildiQR59lxU^#Uyj_ zauZ<I)|I~Z3-*WHtN^^d!QOY_y>hVD&=q-ia z3`>q;HWsrHVVZJet&+BY7hUP3l{owbKK(MO1MKAfU;Lbi(v=|9zyF8MLH@t3`vbs* zn1@;V1b16d+x-0A!lYibyJ0F=l%|^z8@4KR+$`gDb$u;UaZ1QdsK}yjmNB|7pDI$- z#@@RyOC9Noa`Z?C$Fkz#+{6!RQbPBLNqs~Z0|K!O*HvhRj78F_bjoFHP{SwKxHB^z zL5khpPQ5YYKYWt@znh;onTVTBWNu*AG#i z7wd=p)Z8+$p)%L8PS~JYavDeyt|dg}KO4$o{{Py07lyX2ZEMuIA_uc@)pYAHJ889p zKh9}SHc+B=gUOak^8f$Uwchi!mX-}kc*tq<0Na4QhURO`G5lNEa!Vl{TtsSo7%c!b z*p$0cxtsy9Yk`yG8L>Aul<5}*_(xbu^N?lQWqgT=->r8=8`j(Sadt&htQsMG8ozt| z;L9MF&%rhSWXYPl@9pB)1T<4IX)Q`R8h}#Ya)BE_;z%lUOCU(aGdp zsTlG;D|hznL6X#+UUQ9g+-VtpI_%|Rp(wwMYv^qHA{9&ov7bd7$0~Ej2S5};e6y-? zL^v<(0z?eVmD7n*QiX@*Dp60fuXjj$`i`SGT(SR|ox2b7e>`MX3ro~r`agSStM z?zNu2UiR(l#h25}DFUW)dgl2cT`+dsfz5P(+7e(cyq1Axh2#cO&mu-ojbPX!T?G^~hj*gc_V@J7-AI)`{x_vOWXVTSS3r2Jk z(a6TAVU5yIssFlec5f}_G@93;)#|v?lY9OFDzD;r4J6$QMPHYypokV1b$;hL79-dJ zaa#oKCl@a@`gle79-nQ02KcvcqwwtNCz3?QWd6eZ9NOj{q-;Vsx_?6n)Kc1OGrw=U z0GFqR6fZl+jcWP%3cFys`0_rxbF|f|tp0LA17;glQjb^IRVgv-K849nR{=2{W+?x58G`{797L#Uekd%O}v4G4{5owP9ICC1Pd^w?MJv#Ok?Xaz=g^ z{b{}kljoYDA_NzOTjLl)YE-K%Y8-$dtwML9PQZh%iw}t~VD+zpx>!GzFi}3rXE!Ds zU}~tAVu>GoFo75$SX8_mNSDWn^G6W3EkBav=%B+#{WX_wGRxXi5;#1%YECqRlrWWZ zYCPHZz&b&;041n@QHs^UX(nbnBq0>d1w+isv6U7l^DO3Hm4Cjz!|0&sr_$ z9tjUvw=IJ;JM4Bb*Of1y4|&x@yFsR1WWuhh~jxRYyq-P1DJ)8S1K5%kr8V)jcgm>G>9mc1 zPo3%1Hrc}sFF9byZ?Rnde*5dkM0v>NGOp2XK<+5LC1<83Y7d0f9$dYbs=*IWoEfuw6WE{n(7YeXZ3>W2|RaCNQy ztg)Ta^7?bI+bkhw3cl~gdYr>F_?ykFfHv|gkHgeY#nfy^4haX}GcgWfQxWim)xDsi z#cP*?+7G>2cS|2t_J*oEr5il{sLmcK=o!h8xyV|^1OZfAQo!#+tgOL9 zRDv`}V>O!@pc}+fjU@;I$i|0l!S-+T8NC1pNjZ|5fwZqm@O7)8q~8_nTZ@fz=doJC z#&d~#u8jvjyId8dFx#ZRuamKgrqU+PiCEys6fRe*M7c<{#-(0DkQb(C<5=cnb#Z)s zvMg#`Y;UX8>g3?~;(eBghM91(7KCsV@WlA-dAMsH%!YTSalX#@#er`)jk}Tb06E)L#0mdk6J-r7xyHy@KEw@P|OX*Fc9nBfL#6Xm&hG+(aDbAtewb-!;xk|(|E zIWsF@F12)YDK}l5;KXPVqFh*CYXMg3!j+2_Ui)RMlY%hkg9g zPz;j1u^ntql4{wzgF+J$+f<@w88OBL_^S@VRPi@>r}$H;7MF@7l?-DiF#A_wfYezQ z`a&Tv0?v?8l^~YSOYrpbV0Y_n@hWurRfCc?(>nPz@tnB){T3euj3VQkZM4a9m637p zCGIWY#10`>td{y~Y)^^FxOv1@SgPiXn8tTdL>*2Z$ZfEkb5dA47w!#t&g&F451|Nc zOg+KQ^T*k7c;sM-_kvt7fdIW*39rS@3}vb{%;f_3@B`%PFNE+=2Lyi?l*1HwMdKpu z2*r4*zrX$ z%2{!aZzsCW0f2s^T>GGlwsLJsnJ}}e zglGF7xIb_gs*xDIB#j)#97K z)}}7~>O8Y_a+Wk;s=8)vEY+?Y_RlAVfUx7#V%L<*H<+NZh66wGY;SD z9eeJt1Y5yC3{cNMCt5{wY`l!}Ku~-+N<6x~bikkt%3LnJ+{E^Xl$mo*?6h-tKqsdX zP7W<-w}3XEb0rfrR`b~x6ztFoV!cKW?NsZoZITv!EA z$G&Io>-_*ejeNjOIncTqQ@piiduzRC~q^mVy;pv>fl(< z(vJ%OZz@ryrXYRn`GpTAv#UMLUSSVs zH{e2EFo};zfQ*$o?E2lOW74Ncyt|UG0(Wi-3oLFwD!q?J53mGs$-qJSM6KN!qYy3ET-tmHs=0Gc%S}7BC(pDVT`oM)r5P#h2s@{I}x=Ju(9|ElT|FEiwUR?XV8F~U zfiraA;nen^wBq)g!}5CX z5QmWy!E9IBTrhYYGXP;#g4T^Q#J*T9#kUll+!CR^>3T1{5aoD}4%UxqK7!W!4pXGv zG;*CC3|@HbxoP`XiwJy71LUk@E_!tljr!snNqylMEOB{}=w8*+kBA5|)FHbRTs!-H;Pf3#Z@;ozYi!q_ zn0jEX*}p{O4dTV3)_+$qgip$ur;f9N`}`U7|y{t;&j<*cx4X2#(o3LqV~ zcjB^u56_?`m5Xh6@jAsiIZ9}|sS6@;JAF%2}Gm4WYyat>nG%;bHyTU7lMb5Yb;yi-+9yl=5)uLCDDhWaA1ZndwGV zU4oh%M)jvAyk_FV$iJ^14;Jc$XpuZVhHL`(jWOYf}B^we0ZqPKOQfs*)KF6 zxT`m;!>WZ5`6b!Ol|5yPD{5aS?LkGSRTvWpT#)IxQ|lda9XRLANhd{8Kd?1@J|UFqSk5p};JYJyA&@Yz826Md!rZrW^s42AM zno;@~K|qm7AZ+>F8%a`KAkb(6KQxGRt)Rn}5f^DliNC?wBLk%8_CBJ}8_H83Yo06A>nl9}gKw)R$R|NL-o*w^OF5n3`6#i!&|AYUIWI9ZWi_xI~wLJXf3C<7156rz0y zwWgfm z^^*%?7~!(}T1uJN>`^`tOX{aOT`-K=6Bo%Yc&a6$a*P;6l0Q zyy@&LUmrS^6W5W4lq2waRgAey{n384FJ z3y_7%0mRlUctKK5P}ReY(%t21O@7l(_}B>`bqukpG3z|@>>qZE4;cF?8~}2ga53__ zg=G{w#c@`<9Y`0$e)qNZpGuByPgct>@7c+q{sD55u62NN=NSs>!%bBTbHQeJ*1DCd z{3S1uqU7%IEg$8}=5WrwwqsI7PBP8vzcmqr=SgpRv>#C?}zaY`~};;Y%bsfsrQ&vgqB*^cRR+0uT`l%B7T z7H`W0!6;lxC4WnqaEGw!^*4B2fJ`e}58jjZun41zaP;@RRC^tY%Y?D_lG_!6-X6j0 zqb&D1v~A(>`F7dNPL{_>o*QnS{5tFSj<}$h=v0V}P^g|E*MJM-D(5S~jEQVi>7tLt zl;)h)|KTyjNm^Ok#j-}%zP2mKOK05boI$vvgkgUHf;z(@z>4HwJp>>%FAJxCLe_kP zKor=!R!25}8UWJ1tJ(T`X#u&mJTRoEx|7%1Php26zE{K?`#3D_ zR~des>2M`>3&r-9`r2=sB1Bl4I4)XBDf4Va*a;!|`mbAn6d_JG#44v z{Y#npd~}}Z3XMJ1d{kH(QH?)G3HoYb_ z^H%a0tv(+tcDVi6s4*^KS?FIjl?X`Zo#1Uf} zROo$ygURLCVypp@yMaWqzA3C!aFgC7%2leD?@caF+Q!!=-LxvEiR6eg&t$P1?#vv= zO3QM&C1UlrJe(70W{`94uY%#*!*`q@uk=uaumhhC3ahG`i)E1&Aq_0R!Y)igFvyD_ zRMkr0wN5$3Z|vGi`^1mE03sFT?A*~fpeWNRoKCEKj75=ab^vKW(zq-y?K#x(TB*Nx z$1S=1(sdO!c(BfxY8EYxxx%{RsR@@{rxQB98A8Sj0zu9q32V5CsiYLX8j6j#hiwt! znC3ihLCfK!cduUL5)FzrG>{8&|A46IpW>iV9?De{f0WSeKSfl{C&0G zZ9jmt?g;iPf~p>QgoRtPg-70jVtew3!aKXD%_dW;2DwcV?XZ*A{!`2T-Wxn#XTEBg z?_$VCZEkU=jA}$VvO8y7|8$RO)u|n7BUTq++ zlFt;PpjboqtUIHb;|?XclK0{n*4<$pL2_nn<-#3k)(}==kQq}}^pxl9FxzHh=#?7; zNyvZ>L(LFmB=?me9v0b;O56RYt8X1aTK2oiI{_IrkdZ^I4cZ+R3go}b9w1qNcC$A{ zfi@u@hZJi-$epW>4hD7W`aZ{Nvqa}o=}w5Yh0i$OF?V8=q7)tEz>w=QI#yDs6%ty@ z-yLov2z9}c)rOO%2)W^rMe3CGrvfzRE}B@|m)FJw!14fvmXyMra$4tDZ+lswZLx!X z$zua#U@iuFPvEVr(Z~OdFWwRQ3(@v3H|wN7G20BQFmmIrNY_3!)$xL8_aj~;zDan_ z723G~wNq?#Z}f1EOJED{X~$d3nZcFP4kdER(mc)G;eB0$P}h*0ErJN;QMTm5>=e6O z^}CE9!xpWuk>ZYE;H^$T49>^8wVas5)74#bGS^$!{t8)E|T3DsV^przkG|6r^iBxvqCJn`qD%Sn5V|f=fqUJWTR=Mq~V4TaH z+}6v53Z2;(*23H|y!vg8e!m3>lLj)hTFhRy(j#gHLl-N6D8`78JmE%Cm~utNkQXjx zWDtHkRev7Xvr;mKO+oB=G7xQ+%>Nj)Xxn&HHk_(m4s z>)Tb2k0x2`M1DooklZOYl(u+KB0I|y|h^2ud*e^^L zjOp8tSApb~U3}1w4zLp^NPQc*nzsX3Ps#;nGB%ai)dA#POEuvcno~w2PV8h!JE8s#wZRm4xVp65gK-_# ztU){zbRuEh%|AvdlU@J?`~9i0MGWd$p;K{tQ2*+20Mhrez^Xvdhyv(cox+{=sYdp5 zEAM{UHgJ>VvcMr>0*R69b;bA`A8%KKnM(6~#X*%w;Ty-bI)%(46X|i*jKMiBEkXsc zgyNj&k}-Hr&Ryi~?KXbAyLWV}g~)d6?9Ms4e=n9Kv+7SHeU_ji7bp}=CW8e|E}hh08v6!r^6>^!;Y>{m zq?3v+*lxqk36AZNhV}TV1sZRD=0e+@u0G|=bU>;&jOWpb(S_bdv^a|{H)bNEu)7Qk z^xk*(@3sNtUbu7S%E`wu(^2NZCOqS7B@Ah%1V%#&c$Z1aEf@#`1cT;Y_KhiMOBTLh z1f017C>zTA@)I8!AZ;B2LH&BWtrhC`PQYWtPbczj>ZtjoW@^z#;b>Re0;`>{_X!w<=?_;|Pa%SI-Ch`8 z6r>9u$j&~-3&ur21&06&eRno#J*7ZRlzLkHMMnJ*J}*%WwrW)e;=M#=L!>^On2_6!)1?6G3NaTs!5CDZN9qgSj%J$}M4R zTP({p6-Zrzyt~VDu~(m)$sCt*&xHbhbDyj_U)p|^B62`)OJVFB0(oE3F)tGb`p?X*3#yMCa}4x?H-5 zYy-&seOsdw$4}>kj<(CyqDk)LR&f_Mlhb7>mws%0H&Q~_g6C8i3XLZjp1!YT#y&67 zfnmu&+5TGWrGNEx0dn=%W-+$1aB7Wwr;aX86Bz6N+xbP4VWGJX-R`cRSEKLJM{e<1 zza6VjSx$&c+=P}nS{j#fkuY&7l#$3GWJ#PecGsOSb>rT)Qf%9ChtcM@w>3Zx-+dtJ z3*0?~yHyK;A8xACp{mwW3Tf{GZ}`fr2e=d{iV8(7n3uG(3q&WU94CZ~Z2|-P3Lh(e zJQ_eOZtt#aT~w(RrW4#>@>Z0$iL0~Zr8j`oFJJNHXyi?-4^TFoi`$G@y((ge$jzOH za84~j4KZ~m$s%G?wjtp=qG;_ngOLX>C#+HG-#^sxV;ey}D1&yfCC`^Xa%Gr42Ha|W zP(ona3B++1B?wq*4(%B)X|IvG>X7+iZwr#L1dA+2!MI@i@cH@U1Ej0e$+dz0bcLrA_&nmpQa-OIQ*9WwG-|6N!ZVsV)nvRRI4Hsqoqq%5bnN-iJ4OH)qK zeH}iU@$LW@bda01-212g|L(rIy?e*CuB5Gk6TJsUqj$V#P_Nr6M?$0>UCGLYzJXhE z{pq1)3$&6%=2BI%`lAfQEa>Kn1I7RrkB5)P1IV@xDKNY-C5s32B~xO3of-|A3J%TJ z`Mq-6Gr#hxhqW){wo31hcXqQRG|J|}R4gw>D@&p)=aloflg^lWJT6Bbj9$*naGACo zmn9V}MNb%z0=uq-$Nk}3UhU8pGPP{W<#xTu`}z#ayKippTtlf^TsSU7@v3e5KO#OJ5g=D*|6zkd45_`uF?S>D_>PTrl+_Dwfik7pp!vV7&zFwA z3;`tFbl>yxeP)OP5pM!pUELBpaK@e#mogM3ix`18<*<-DYcJPv##nRb4~Gpt?t2e5 z)2hL-4lnTzb-LeBZxPgEbV=SO?JEFIw*pnPtKJg|*AQi@*0ijE+xh7OMJx3>Nq9_r zJSITeUe?3%CeQpZ=C-ZU-RFaXEWV?rq!f$at4@J2tL1xJa124dSROf@Vlhu#=~9pr z;$hD1G`Y=!6aFAVi)*!O} z=7}uO-elRuDg~`$+=lY@a#O4>vi1zT|5AvrvW+0um9Y%L@sZteHoEY^b-8A^JL*m? zX(VFK;uzDz*$iRX;pJS!w>>`Yov#m_3xsfmRi0e6ME9&ZFT{Ev=#4>Z*$Gl%_0-}4 zsEGl~tsvEk4g43mbTJL!`w)3y|z)Ax5)U zTNqY@!0({^o>L>L^_%~ClgI+Z3B-tcgKvb4%v#3jq9Ei7y^blqX%Pq!s5*SqHTs?7 z-=QBC_yk8bd zlov;NDro;X?sEW_buX#31J#@cI{p}2SyVX@1`1X;?&zl;s_Fdq-Cx1 zdr*jhJ;k*6&p!*o2SXAX##CSdt2ebsX@0sA3Qu*X7Y^2yWfI+&)LHduwYto5spc-p zP14Vnj_RBea!K63x+YXPL`_DTk)3M04=DkioIum4eK zBw}ZyI<`5EYm1Pq*+uW~zUhO|5JB!_ao(J-pGSYFJ1baV6nkZMmPOA`+yZ4L)|%QTeH$+2rDJA zE>IkHW+O!=@1-?GZ#!WR)KC1T0J%E52D0ZZlE+;PL3UUlX)Z1sUsC{vOVBpQ`m?Il z*gh2&bL@IOwt4TAQ*`$Jq^x%iJ-Jm*iL-R$h>RH6Qiu~y299a&INFA_c0TyBZzDC@ zz~jDw$UUuKw6j7ke0xY6+c~zz)mX=0E+u=tZAJ~{c7Gi#Su3`~MkyB6drrsz1xWj* z)&LIW;amGi?K;ZWNg4RGzvlA)SMUi9gl5M^A&66 z-JgYlkK($rEexBJk~PLv#Z9JmoT%hGy$*B78WwPz6akg)Jfe7ZB1e*zRj!X8T?9G2 z)3bW%zeA>;Y@9A>U$y6B>GjGH~F!9fcj_&Xz!0L6LXN`O9I2Qcf(|wiv>T3a{ zofz^ZTrlk)_Gs*SmrBG!3Nj*l*B-3zv#R}ZsxKul!I<{9a}JO@YJ;2A304Zl?^Q;V z7soqHTs%h*Rd`Tvykue9ij6Fp-+WHOO z(j#pA?hS}flvNO+jk5UC6pirX4K{xO1^9brh?F;@~^%=K>96Q0JWl7(pZAi zgk2A6P~Qaz=ULtj`iyydkJYEz4}Do08FjZ%sOE&NwEE}mWwdUCRYXEgRJ2a%Ny+Jm z7$vgZR>!p+WDe&ftDZLoJ~WBdyTdNQa!N%)?k);y77Ks0X3whiL1C-A@m&lioS=G` z{DcpIq8zrhL2I4pkByHd9erH<_UP@auM3bm%NnFkU}^|H6-p3oQ3u)3g483-HBR-n z-%)v9)xkiQNVP%w`^=e>!a9K5mQ4)$@;>A1Ny0aP56B&JYjTWE&ZIu&rY$oBaV9g8 z1%S6*|LU+2Gr8ji?8czqu@awtk805+yI7&IhHeS2u80@drMMgw_ zC_eJ+*Nz=e?&Gmsb4sU&|6)7s&X8eHq7F_ob~#5QsN zBzaXG6ju1~m>3L|w2Uz6pxSPXjZ3DASdNY0mchs>8mcf_zoB0dA72k3gXW?+Cd7~m z=@c(osr1_#rdPmrQs{@OLz9-TT%wgS zyxcXHOR2crN8x3XR_=b7e;hVqSYzpwOE+96O&z4^p%dKx?6N?^nsb~5A`s;fQaYE6 zn*~OiR6?I;>9t$AF*2}uX)77NVtxLV0n%^bQYL37BuQez-t>4>3PbGuqfbmUjT@cU z;^6c8W?}9J7q=NT&7d}I@0Z;rv$)AJOOu^e5d0ZrNi7RxzWwc#D}rS@#ge1Dp5A`g zOPM&?B{OvDNjuspnN+H$cwJZe%$gCGU$}K==AKv#jOYTy^v*c24tdD!O z2!q~o{n@V>KfWqJ>MSb-A`|nFO+i6a(EtD-07*naR9oDo(Utbn$EX@+O&t01&-Ha- z(^YOVN(&+9d>cTzH>#`Bofbi48quR5h&0h;opb(3G=gKES6o0wau~q_@9%)Vox@QKcNJY{@`ZsPm1o6 zSTt*gR4Gf_QMue{cXP_mC4&+t#2%b8ygwW#4imZFCcV0EAups*g--{ol_cZhqC6Tv$RdRDb~!t~}DNL!me&;q93s7!-+vQ|+pZFqERK(##f4I}KKU8jnvDY~% zP!Lg=I+hbYJmcd(+;;*d_jU1cc;74in2yxUOHRn2=DF~;>W1jIyaGX;w~ocfuqP|M zHOJZn_#(&Pbqm&rtQ0#7Bj2$rZ{h34kFO1ou2N57ddxR58^i!4bhVB>zX8o^AMrm3 zQdqoIZCG6-(nzN99;?@dx~i}!jw??qs9EQ`6MhJeI}|Ybq7zVbE?4X+K0@TypKbT5 z4IzgONDe=^obyDuXPlOQkdls_t#0?vbLLu_|eqpwayQpr#NlsMwX#CNpcv0WaBqpHS`*jgVlxzOPRW4lM-V$2>jeR z(79RnEI2|3;PL!FzB@qbN}XM5aL2+Ul#ZeIb#rGt~B zL^R$fwo1V1TPfG#-~R3VbE3B{vNyd|bi0-KDakYiedu|;J$!e6mj_LtoLcH|Vq40Y zzG@U6O~~l*aahmLoBYahine@3=)$cUTlW8|8ve3RZj_ojY1IY+4|~~)%VK%!l=f?s zl*96k@bN7Gvdyvzi>`ygJd4RFqPd8UHiL2GMC-Y8_^501L7CxQqcZyL-5@g>EJ2*s{_*&aHrIuN0_7NsNiU?F zY-=5JB>Nw9xm=jE31L~fgvj?3yD$6=`d8l)AT>e^Yl&zR5Dct|pm#^NB(Vp)v@fyz zhS#JB>3dk0tCV?N7YFMswfma~2$Q|F@rpW=_hR)>3f@{%e(Y zE!10rl%OW?kP1Gctl62X=K!j26+gZmK-w$|M3tTrbAvQka$~w9$t0RLFENX>2x(4S z)sNA~Fta>fCppCtF(Gd?eH-Fn4Us!L)Hquk-i7ic_xA1K{SY_qyAV=WAs+&+p3ZVG z4p?Qso~Q(?4;~0*y31>>Tn`9L%waM13sPv>P5yoL@&Iymwn&5g$>;#UIBza@eaoE^&P>4{`2DXr4 zDYuJQa@V-3-PbXr3mf-s6YKE)&gIcJ7s%oU0&kwR1xP@GJOxN66#;cQNLkYW&cuqLI7guIN zkfBmnDHevb92A8L1BJ@O%ml$EMX(PqFA{pqy;~m`3+zbdCCng!ZqMGeM|+Eqx6L^3 z?HyB~66u+f5?giXXb2@78x$pXyVV{h`CZ-`Rive#!n;?KL?mPy9w1^qSd=;ZhW)GW z0g%Bh8d9q@g+|aoKNBU5O_-&AOr0`MAJ7hLDqA#~h1_T$6y1-$z;x`xSzyZYvuU-j+7hYxSJ zaii_y4nVl?u+n|(UDM8b_tr({Q-)=NxLd!0p41G*>ZZVnJPN((R*0e)`Yc+S%HxE- zIWvoI9zVVVKpKRI7YzLk+2C-{vtx)Jh@o-O1FIC=R^U{A_h?lRd~{X`>87|{Qy&Cp zOvUSg!ZwK9_gDVI-aN45PccbbE!z)u^FRy&t@G_*JxBEEJw<=4pM~Cr52P(dSF=wx_iA|>=ghc zuG@<;O+sIRB0>pHU(5!PML{thnAk-fLWViT`&D6nuf=UbrLFuV!7OhF8QXx-rcZ}` zInt3v4oP3?UCmu@`0FH)w3G8z8jiywiXKn4KU^47jfhDUI0A$>M% zW=f^sXNQkh5kb_%(0AgaRz)P6OU@usVTjY%Vuexwi3Rg+&-1 zgTg|LEGE!)Z9ip1Px95TC`z5vrmyq&w~rp*4Ip$sB=xFYp#cDt(7@@{5!4F@UflHw zZyiDgRo>GT=-}0;H{4Xz|HHZ9mh6Xm(Qqu)H8}dDsw+8$c2&z*sh6-0-+r)mYMpbQ zW!|aMor5f^s#}Ag$jh~Ix^boZBA^F;|Rq*z^Ky)nr9rGdd#z2W4j zBJm@%MBb(U+hU|gM<+$nLZb^SEw}N0sMWh6$o7x7J)4X60^Ck4UT0e#xV}KIs^h8o zAnvf`MjPm0ad$<9UUtHaa#iP>=)*lZfOL9Uo)t|r7YDl!Z4@Lh7=IW%*s`HFmuS5{ z`w8075^Te_+A_E5MRwKkOLE5H?Kz2eclCt)U8kn|?w+o89QHk|8Yb^Lth}q~z;`An zTr4nzou~P@8XwEJx({MlymGBJJVNx3NdUe%zvL+Zq(?|_yyrdYYFrqpWLk=WVX669 zUDKpkTvqKtN{%Qo3F$UOon&Q>iYzjCaDFa1;vYWLHAOcP>9(KlM|F~W8c^PTpzD8> zu;n5O3{uf&t`ij%_jY~#QR5>G&M+WSWS_OCBrCX-Yl%p>iD>j~z9&AuBS5xUmOUd! z&e_GOf%yc{agzKXCnG&VzSQYcJ?dMZpd81feQ#y)XH_|mLJ1oq=8l_cHe9P;-nE_I zuJ_xZV{C5KjFdaap2#uzX*Ur{7zf{HHqw2(s%{#5gtnkCc2r1X0y8b(h=VcC1fK8v z)gRv(Agyk1sC$b$=DJg?E3_8YZ018-r#D6*+4@}O-Mw8*9cYfT%DIVo9dWE>*Y1H` z^0qHMeyRV_l2Dx5Fm!68%IPvk*744k#3Fyq>IK`QM!^KE%8;GjGJ<}^R{*W$T0lWF z8Pu0Bl_sD+Tz#Jg@An7Du%`}IsbO(Sa3_e!Gz`E)dMH)vzOB>WG;6ilN6AfsetDQz z^L}tRW_n;Ll8&C!PRqM_q0NK_d3y?fOPl|+Th?TI3h$G0U4qa{q+O4(kWG&8*k_I5R#m4x$T|;=A zie+vhd~jc9XI0z&5`sv>J0bk;3|$qYx5f4xnY&L{eKI zu-FFZzpt)da|EfgEG;gH-Z|fH>udIX%Snc5FAxXi>a>w&I9;N#ztaPxTs7=?(z{CJ z;+|s$x7-(GO4yniQMrlMt~1nwoHL~$MuqC?wkQkhxWhOr!YRyvur+6MLRr_tuw?~= zWzu^aj0E5BkB{#Tkh+((k^1^JLoux6i#xP?`wnklklPlkg4?&^ln zqArZ7CrECR2AOZ$sGCd4UM@G>2VHK6>oP+UFSe@e^Ua`84LbK3CG|>MiPr>$!BhmB zd!;^xB+vc+`1t++;k+!P*qGYg2^q9u04ZGMQ5E#<=auR%xo{6%ZnsS);EP35SP^3 zqP#xJvOH1q564w|Wtr{~&ei@PRC7dSOU@}_68cvq;Lh+-U2Mw_%CQ0Ew1%3K~|y-W9LUtwQWayyC~Urc>63#l?L z2BQj53|`==o8deK9V4>s@1D&7;V}eamOtX@y#_hnlS89Sl}Sld9<0~NA4N(AzJm?I zsJ@KFO^uKw_srrrDT-r(n%w5fN5^UNXzo_PTgQQwlw6kiRrUUQkiSCf^vevZ6o#Cp z2c)cGN&&|_{I`F+K#JQJJ$Acyi2Q06c}V&u1%yIb1$LYtD0m6)`Z8yN(77hJa(W! z1`3e)YHR%xp!1SKnwyn`d$RcLY6gfGA((3JnrF7Y&y6!prtC#=^~d_3%ihBiK!lPp z)ZC1s*N#|oGG%Li_IZ^+o!QCFBC6B0Dsw^|-jP0*98!+ONLBq>cdq~@C{*73vs6PR zV1EaZpOwJ84yeH)&_%4~Zcn5BctQYCy{w2L9lcv0yVFv}HwqPNce%XypKIbUMa~3E zG0K~D#R0Rre_dDrx)#(&CEkF(E%u$uchEYRs0R1VpT+W@|5yOxRug*9)<`E@(LK07R^y6N*YLQr!+ej&7EPjM!-K zOG-O(jK2+kfH1omUZ!rb!0PpOgZ8n+@BBHR4nCd^K(7A6!ARCOLdR(sSUL^5m>fg8 zt?$cnJV=Yp{}uq2={3)3Xl>3Aznc0v`t=pEI#G)`%!`^aXwY>K|7#KzzL{FqaH*uTX(8BGv(U zrcwNIQ*_v+I&-L12#Vj2Dq@*VPp=a?@VPJ`pjUaGk~P)@N)Vz6Bm=;*{(h_!8JWL) zc7AlTQt1`xVvQ?KB8&_e0U;}0^7{yawrFYzPBkCG)Ev>Lgpa2L5T*v?lU?!^=UVqY zYIl_F-J*gdk_($$>oFV@pq{B$V_%lhJxJtGt)_gG4pM#F!M}sm^=BtNdXVtuzQMtj`Yp3%&U9YzBxQA!s^tp_g=pHae!> zSDgG3sCt`T2Uki5FPE29HI~z(EUA+QJ5Dx*v$1H&hkx{W6k8~#8JpOVay*3aZm_F` zOHSM76~I)iMbWM*^^03t|3J&_R;F5|cyQvxJ*ppNn^K{#mkC_V z8ui}+M)rfXq#`!5iq&yd(Xm6$h8fPYM((oSTE{h5>7X&H{u(al1S36$=y_YDQ^d43mh4zhp&Q^g1OS*YVpMI@x%bq&D7Nh1g0^9kvSDj zeFH06m~!p1KxQTuMT+9!sB*%NFn3OC_mY6pO+4Bd^np+=$f#EjHG zjuNkui|a)>rTPjb8S9z37RrHONhTpMHqA?enxNl|aeeR!;^V0Sgd)VZMim6XCN}DT zrSxYZ#^+>c8aFh0i;MG%D$jCFE@aIrQYvKQgoIh44WUG_M4a(tr1{Io@m=)DlcSsE zio!#eU**W7p=3qxOK6UiAh2UqN(ReA_Rw*({SC{o52X)S_X~6!UHGk zd7JBCvAV4)EluTwd$}W|l(BzH81k8;n}|cS$@C(+BZCxY(Y>|+`L)ij0;LqBsb_ry zJGpOu$I_rB7|#xDD+*fnie^(k&G_*I0m9UP3F(w?pXSs zwH3^SzprM1?8(cD%%4nOLo|6LK`Wl|HyHO(Ko1ddxCVmS_bFF5^%7M;`q1T^K4|WK z7&|7;)c+i9?!MN`f|YW^(C<+c*ZrmQsyCB$`XD@QACGV*g`4}`9(4^=v?U9zgGF0YqG z8f-%~^KPi~PC>XbFBUL%wAqTS=9aLb7NCS3j4GB-Z$9|M0n+ob;Gsccr!A_9^ozzc z#6ScY$f;#4A6etCJNz$6;VULWqqC!o*poB-0-A>eOU#iUpmY++$^6hdF4EWEe1Jq*RcMU|OF zf@74Bc1q|(PuPixeAW>X*?pXIX2UGYj<(UGoM_mA`LS}}YZ0WWe=Vov@nw9-;;F`u zrwfp)vrSatfDs@Go(BIOmQB@Cwj`L2^6-@9+Lfo$=5!V{M6%3UB9t1TblB%cg2`Z?AgAcq6m(D|^?xhu1l=h)V*TPw=>)WFw z6S{6WlLL~uQkQULe5HeYdSJ#2g!~$CGngV3l+hO)+2JkyZ%l7c-|aa=U$brB-hW)p z0C_a#BD<(#3^II&7{Nn#-y^iha>etF6~+1OuT|aCa&mg;hRs=7gAbKTCWPbKEG%WSI1LTbAWx>ve82tnk+QIMef`HR+Fltu4eDe{s z>P`QlqFCNsR8__G5ZyQ*Z$OZdB`V8pM}vpE8zj~BQmIs^Ye8u?7|;g)bR3GuV>uQ( zkUr`9{24@$=t@1JOKWdbVfuSzZcnR)Y^xzl$KM%_00+~e4f2T0qDN_xcUrt z;ryVde>F#t$Eehq{iVDq$wi~th>9VCd*yB@ z60GqA;6#_L&9oLxHIi3;pAhQdnK`w~o@ry8CdIm3;qK=*X8M8YPRjbBXJ|v|)1H4k zBYqy<_Z4^X5NK!)mPa(Jvy=R|iG0`u&z{jJUw+23!JwwSsD#6GS|1-AG&n*s9J z2muH+5z%Imm}LiP*dQ3nR~Tqt)dz1gMS1kJfCM|ET{bPs>*J%E%a|FCo=(^%IBxdA z4Qp=;^q+cV3FGPr`v3qS07*naREYbBf*n7N{OXWCkN(y30*GHx&QkzHjlFgv^;-El z`t$9uLmUx7uWjCzpH4@s^-LS5GtV}sJl0!jp9^C7VWynEDH1*oIHrki-3a6v;p6!L zq-C8z`tX~eVGNYivK#T0UX}?8krdQ~UzuA;;uu&gzdDSZe5#TxH$2l_&r8gNM2ArTq+2?r`@Q_%{W#Cg z+|%dW-^@LuL3`(7aCXo71gnh_wNBsnh8X=vm69s?i4;uXj%j}~;oj-s*8Bm&ei(B0 zNUqEqxG{J1vi)%0w>Y+I^|YL1GYP#xv1nZJG6EZ)r3&$|A{<1)g*N^J+jbGlBK^AJ zQIzw}RcH1AH5aidjFx@{YE(%Q^nqcfhF)ZR-~%_f;O_1MQC787=8SN9 zFUw}lYeGnguPU8i+^0SgR&DA`vx2n@O4Cfd%Y&Vn6;MR2f@k$ekxO&&*xsS`K|3Di2N=0jVOwulETq?xP<9kj`-B#s}rc9)E}oA zF&8=eh7ASt=;H_Mfz9r|ShLPt85FE1M3OQ~Y-zC{e}&I3+20CFj`q=a(1T+j4_+{swzQPwH!<0 zFHP@m;vUXVEV>QyvwE;zE#e%E(B{^ab&2?xqUA(@di)(t(YeE!2}PBwA5Qa8uT-z{ z7`UaPQL5%pYqjw*Chw>uT=r&nGjumaSJ>F^Opg$0d{a`x<%KY{*{1uqvs!-*&&>A9 zrd?r2OGPS|EL|w2H@K9QF!=96j5D%@N`eANrt=JZg0Ah*LJy$gO1R(_rgi7`J z-admLWT5FJUQA&zfPX(3P0V@}ILip%ZRFr%GA=C568a0S^lck|%}*@6Tp#6>Wv2xT z8yt_InTy!hYT3&-$ju6V*}moPiZCR@defBu9@UxqFqp1CVAjD@z%63m(8c*v(B%?T ziC*G`ec7x1TQ*o_00pe?1=ja-)*^&KIQ*AtLcB#szv@W!cWIYjGMc?$a6$2tEltyC|KZgGRS>zZu_AhEUEQ! zD0I&yO?=og$|ErZxzY}AWG?~L%yf1vLT|ai))y+2!?6yx=RnRq+aH1=h`ETbw4i@% z3ST%Us6vU*YvU3{!4M(PU8oZ8ZcssCMs#2?5C@=jW+Xsokpr#gyKm}ZURQo*g-MHe zAQNIq^CEBC4vXtI6M!TdnMYDgN}D$HD|<>~g9qR5MT@2m{9p&CSvu3C6o+@)y0%LM zlmnk-pR@+p=t*{E<_59RfJi#Im3>#wx62)2@f2B&Tf&|<+g(N1L-aEABh{_KS9 zfAI!572E0tlQ}OQ&(9yJWeb*=j&ORc3ypPP`(sh>WQ$a(_CPg?pk{l`Dtlk|oUg@k z{tof#zO28)%RSgQP&W%?RhjkE5gljvvVP^Uif4y*cFV_7wAZ>&qlocwc+JFy;UWgA z892rEbg51jd6T?vYEnq;8|Ig+5@8`M4YlH`IKonQ8D@yD)%NSw^yk>ehWrvU7j-e;G11cKVo=)mzpVL~9HW#ByJx@l7KtS1b;n{Y)NNiWRUo z#t_M}MW|str5HsD1qJl!%}gi51mQ@}WX{cl5`xHJ+c!_ki7AvSmaJX!Y)s2=BopFA zp}f%5KEz&~FTOSbe@}CGD9gWF@~^`6$=sYOxubBbaUn&1kNaB1X2gpYHStmOydS>s z*i>be45oZG`#Ce9O`knm= z`dlI?mZh3n4LX{(^hZpWpXLs!A!7a5CQ}3y7>iAbI35MG=SLm_=UcR}CVQqEnmh#_ zDJ+Z;&A}FqWXH`L5`iDAmPYJgYg-f$z>B>0F4f4)0g0QbDWF1rxtO)Z{qg$V%{PIT|CUhFx^4K-?#R@ipJ2WGE{&v~B2uvj-t5G)dSg`{7ku z(qq<>4<0k(k5U_3QozCI(l_O1^%b*l7vk#qVTtg?D(iP9DBbyu55`v_1q`1~c7k_NC;v7Ah&z{9wln%U=V=?4K6L^l>8n)j@{?ER`+q+( zRVwVbVqys?7xo$XgV_dA+k@8m=nM2voU^GS@OjjvuBT_qd(L{!&U;{{sQON03_P+P zG^0!4`o>wbPpRe4{$4+7Ggpe5!;x1ean;1Blc+k$(l?*n2Qy%Ri3`2YB>_xq0X?ob z3VUIt`}Q-zL5ntyivw2SkaJN~w4gGp5?8z)hQQo??j>Svt-pR`*IZNMviMd<;j`qY zA`<%hR%B5<-7%c)aB2joj`sY7Uu?^pRE^E{>uQ7iV5yVOUcUte5)5_AV25gUXHo)< z-VPe3A*I(-%joXEFZ22>|J={5+XnV(1N-Sb0Ui3()pYFwE;y~ivdOMznr3zNpv(j&Dq zN>UXCskVF&QKWTx2m~p0b#@qiY$*R7q9EbYK22C`L`>BgB!%FAIUs8FGJIM|0ZwO! zq%L9Xu?SD2Ot|Dx1qqekfv&z%I7ijfy^jo}E{?{ky=rjZXOr_#N1B#ZXka!e4KCwQ z7hINpTMi95_hkQwO4NAh%fScHOvGn! za*`x|bA|cJ_%0b+zQgA1oN8-uB#NS9>8(`AKe@IIe4wKM|K#d?yveOuy)v^MQ!nZE z)-mTS+O8PpH_ItVm*Ba@b8P(a-A--wE z9FD(XjVyxP0*vy5@~ZN4`^8A9^8QbhsA1?Qx#Ysh9{5kH{zQQnUXDC4r`AEzOfA_< zo%6TnMzD@^m$ivxlV`m4kkJG+Qr1g4x>n?jkQFHvjn3mQ#|Ql1&*q=?ve*#C{Lrop z`2J-6^O8CB3b8r7*G1NTx(4dki8{=485p3?^?dN}UjE|_9jqi@ZdE_lw^eaL-NxEM z%U@4u3ouuZ%&#A;`=nUq{IHRVRAXk@sdy=@n&K6n#ArK z%$C7=6R8Is{23QSNZE+kxgCq=Ot{33R3iHx-ZVV~SLJD%O^;JVk5i09eG0$rX@LRn zgC6nvcFn@ij9{`(dI>}~_c}#>;PO#jW|beBQ*m*d)%8Q?=e6#?he$##Ut-y!vTr?L zrmR^#kf~KOs_?`q=$O!g-(GU7n2IC#jT9(872_Np`;f9oMI^zcI=#d1#g?krwPo$- zkCD#o{R8dvK!mArMTd5lZqvRCmWKKeBb-ejjCI3(dCFgmJ)R1qn05KE&&}&@K(e)W z2u&jUC%Svn;q2A+)o&)kad`lny6O~(ocbNrnIVr*yKMQc7Fk7IAr^%#&BAjFWqDwB z^ZO44EZjf5DeVO=mt<$F4n_tC<=@B_G?&yCN9$HTScdbD-C*+CLl?zr#!1sI67-?%#$+Mgl{JYu6{NQJo(-OIe>KZ~}6+ie^jWLChSHV&!93oI_p6nM|4%r1l zULJL-+B{irn%cGnK0p1rIz@EeD6l;zp$xh!&MQmNRC3R^rMzI$X+!dAL-Mo1iO+|Q zMC_0ZFx4t~rDqKw*Q}9|g_Xas$nCi}h@Vs!A{RqpN_YrKq&#sju?RU@@(nt4yrVU@139nwHD8I>x+4on6 za4r_=u|@jX&36!bwP6D7^E^t5_O%Op_P|y|m$`D>;)F=Q@(MJw*Os%%)ZLTc7T#2p z#l)<3x?k*EPZtLsUi@`zsMx~j4qJ0oRp9aJK+isgx!nMWK^v(xs(R3)XH>XhmY6K2 zA*dMTTbkN>yv_fBi}tSXmeE+0MUK=a*cv(LBATh&-;$!WA%orIIe&bdw+lYoiwY~m$CCfaQF>_-SlH2?SEr{Z76n>Zo$J(F&aA&`ok^4A zdDrJ7X*sC`UOR~WuVx%xSq&vUbFLD@kqpIe?)jG+68fXLZm&CzSj6PbGizlg;*Lc)DeS(Di6m^<=fiasvFU zVr<6^vhF^JR$Ojqw5rBa6$*J33dP4pz9)~g89ONQ(_b`J%+-t{8S0vO_nHR87BOTr zp32{=FC8TGVqSy1d&0Yi+T09FqT^*-(7c8 zHItLVOlQx3E6+7VSGFhm&>6tKrac(AouwPGmGed+81v~*RK4`?ATZGv8HB7V-E2QUfn#*fKEdnwjy<_TH}7J9UJu1Z!yj5Vf0(wIjJ zEuh+UkEEyaKd5nwN~Fc*d&t8FgEEr`oDO#ui3yR61@`AHlQ1+Ie@6!Om9Re*Id3}n z+&l-JZ87x$L=CZH`M+r>zb+FyLiy%v6d5?7o~$vhj)7kGBk539-C@S-pae;FmSA7& zCQ>rxcY_kthibU)iX3rq#g=>j#AxDr_9$lphPaNI24cNtq!4Df>8auWcrJQ)C8)*c zTz1{)GWSSZ9)DbA<7w?PGPiIou_8Qd`*2>?zINSsESiDk^LTsiYv+gO{4}7lr`6+I zbnBJ{Q?r5-6cY}e?bhY__)QAxYZtOq{C474^QniHtY_7=-PK@Y zBf0M{FY&&epN%8YRkfWDWw28eCch7y_=*lfYlww7Zj7MI2educa}}s0jrmVf_E()= zIfuy@suG4h_O@MCm%eQzJ`d>Fiz6P+Umjv)<3GP`XGLLwueRoyrQ1Q4Z8WQC<+0Vq zhZnISUs`1gRvUw=9xqXcp3GlW`FItbxwXR>MmT={b~QQar^<~#;x+hoN+AbNbo?4C zqNM<_ioeri42Gk*oxjG6FFJY11uJ0yy04AF*!t8d(Wuz4`26mx+$VX`p32HwgQwYZ zpk{JL_FwsCL5=2I-`bpE=_MW;i9;!wT_}7}pqUv)08d5{jm~F=2B#GtTqQ+rhZLq8 zY6JG%ZPNJYKV9As`zx(UiJZdZW}T~dwQc9|APHWwnVMbFW;12ZK}mNt3n?*9df_by zB1*P3?nlOVeLbGq;po+7=U1+#Ua zC1yezFc-Iw0o?FswtL+UCHL5zW<;1VaS`<)FeU!#F&502-F2AtY82R1X_2kF4@TemBiQe$L~_>1atObe8dT<^Tujh?XetsRWd0 z8$1%Xe*as(qYs>QSXsrVaITd1@R^!CqhXbwG7`Ejf%8a=EB4FNxk-HS%Wa~EeNn+b zv!K7YU3?V=9ivNu!)(a+Ge))T3SrGXK8=@S+RlY9-6eB1C*pkYS9FdPf3J<3gwTc0 z4+-{FCtw!fDYvncjHb-aWg$8a^>1NR;T*Tss15Kt=CKQe50QI(#u&Yov8Z?Njgi76 zkq1T*M`{kD&4wXrsoi2p(bH{m99sqI=-QaQV%=PiF;(d~{P2B55|f@@zvs*gY_JS1 zQ*cD^bH8k>4#%*bbh|#&Kfr8>+qY`e4~LXKwbxIwz3JF`Cu-)0(9(Xtr)c+?SR{)X z*C3Am-TiyF%xtjj&WW9=Afdt{O<&|zh-hr2@969xI(F+46I(_4-kX8(7G98o#1l*A z;zR`Rdi48+rRPe=9_hSEq3f!tW?vroz64XLOd0eaYSY9-1ImpMn&qyG{Mm1Td6lVN zEp{v0zPoko@O^=C(cW+wxP7Y;Jz>^Oz7czJ9$nIZSvy+cBO7hVF{KC5ugp%bc?V;O zDR@OR(Z$ySqzs}Vcpt$|P72cue&XyW3O3^sQ4tZ9i@T3N3|B)>YZ6S^uytX(n^b=4 zo0kSDA~NSVGhU+;Z_lMO#oNEiPQMKd-6c?YbEwMqXziG{QT&+fNh490*B`Dvg-O+N18R5V+ja&(LJ&9TG zdbKEviz1>?_mM)L*vXrApB9NJT1~XdB!X6J24XDn1_C6SmyQxE_Epf3_G0;8AAb~p zT__S#hKpQ+V`RnR>6VSx2sae#st>`8O1pZK&Gt`Xk?F;D#Y(YcJ9-qf!nt}m}; z!PeS0y2kN0N_kK_`Yw-!gyx}@5;;XRU@`s1p(ToU+8LZj79BlaA*S%8l5{JLHE}^F zLVxQk7$Ri)S+5p#0Mq0#gXUw7T?{#w7@2Zu?ANX=r@|*|%&4lyKnw8)R^d+9`Km1V zA@sO*oLUYN+GPo9An5E5i9iY(#0q3x@R+v zzbDE2uPnw+k9^8vn3+Bh`&`Jn!9mK9nV&O%0qUe8S{zYx^5KEs#%XCUq~&G+rAxnC z>MDf)TLF*J3x__0e0OWKELwOd%xw152dpzW0!JYF?dLQ{`p6!Xt@}28)dP-uM*i1r z>IHyw#LgT?i@^@Oe>j?c;hbo>{kuJqFz^wCo4_|otmBgY!vE33lW z9)!h9qjv~CQ~ltVRM>y1E<!GK=_v;va!Y$`9j#IX-pG5$t8Zn+6-RF?+Y)$oPs};1CFvf zmQme3@PUc(U6P15;pAhs?e&znt3{C+`S$#ChdCx@Qiutb62`wt@_k$b!gwz?OY})a9 zr?2wXule+bBHK(zDs10K1WcUv1u0yIJMEkUe*2KJknabq=oP8!rm10t7m5dzu-!kH zO9a4vuRxGK#WNf!8;bRA?47~2Xb$W@3?o@r%24mr z(@XYV*0ONWCUSwfTqNQzA5p6gU~_0uYfjIkEc_F=>7o9dg7U)xLd(l*5ZTU9Kj3ek z6zoRwfB#Xregu_V7tz+5(IP=K^QHixnJb80%bKTbmG;jfB?H*cw+LkD!SCK3V)DrSh5dZLUP8miv< zwY3fZokicpH|yq&`783y^lPM?U=+Cp}MdE$oUS4rQ+O z#JP91@o*A|BI#7lT%rz0L(`=aNUN$`7BcgLj5MD+@FlWfGOsoOn29t9y)7YLx3xIM z+?YmIh40rbUET}Y`m0&3bz&}vwHhI-h2pm*`TqiQgGD$XA240qm39s$Pje>l;(-4M zgxFXV#h6VHxqheyGwp)t)fesfc%RD2UpaCAge+cXe|RXD=j+}_JsUGR)Kyi%xpz8# z3;3TJ_U2aIsnKGHNWY$ZCG5vaqfQFZ!_#pXcgEW$!QPG|G3%>|wy)-nYG-+emdFp-zS}{53C@gq993X)!O2#szRx}+3 ztK^vgXE*`-n8cr(_Nu{)GiNyJ)aXPnLa%yLJu&tFZjk3{kLp4XVvs>IHIEFzAuC&a z>VC;u3k8;JOlhF5BNc{s+vX_J|FC;D9~RnO0n{qn3p11~cr^EU11J{Q+tCgS{Z-74QRBkF)BXbpngxLO7L!R# z?&u$%DDCZEET(|fGJ7+95q zamgIbp00sWR7&J&#fFX#LAxq>mc#R%>95&3Tbqr^F*C+^;E5Op2L4n|Qe17707q_@ zXTS9)(tojSf;~iRef?o~$0Ui6C5yQqYjyMq$Ziw0nEts*=2rg*lOTX-(+HlII|0lL zjKjI{EmFiAmt_*WJ}&*?6{>-d2B;1Qme?SDw@k=y{wZ`S128qff$-5(g?q831hG7+ zFP7uYf8kQfL@NWPmy{ zvqhFp9@wAmJ|ghj{S*koE`p0Bg`Yk`)AJ@?tt>WUoLzDOzjc5&2X{;4ny`ouv0vET2!KW@ua1=0*vXr4 z0a2@$#Oic-br3xR^lng^Yp=TGU~Ka<@TgBXaMF*;tk%D%>;(@afhilvuq&ew^3xT~ zQCl+bYbD9n_$d@0e54mxXWb0$ebswa;U^6et@k8fE_{yBIb8d>!3KMG{=W3H0VEHv~GS17Uv^%qIdnzD22tht1x!sbARnfu0j_F zVg+8cA8~;FLeZzZxiWeOpe}zhP4AArn!j8C1oMVmwlNdS_X$#tK92(=nWHblSkATQ_y|XZ5tILBkxTg?*{Ac|xSIQo0{dgvDju&n%H3N%G|6;f zhtkO#Q2T5^fOpG@X(@|N#bK;Kz$i?b{aCgjUSjzMoan?}DzKtpP_CNet9(p4zB9|a zZH!+4oLoc?V$XG^cMWPOIB=~2Zoajsv-Eu}>L95tF^_7IyKqD$B8wkQWG#@%TNzDR1Jn(XA_>X2q=H zniwRwd;N&dB6m1!Pc7&6qq>2bUnwT9rnS;V&)V;LKqfbs+sZ?aLsRJA$3K5B)s_7VRz9|*Sfk-4PiH5^yd>l00pH1uql?)f|AfNL z@whm5dLXxkp-Z@HWH!GTubORe6iAny8L_$8_KThWeg0Ph|KAeeRdOl%nhfV8rR@p; zAfW%(z~(mt{s90a0BJE{HLpJx{z#(hZH*qXJ0UKkEiK5uW>WWah*8@NB0w$0P{oif| zf9*#b`p8OE)xH)G%!Ti<-}&KcVPs}Iz|Z&dVwAXxf z6pd0c=pX*c^SLBEthWNBWJFr?yH0XbAm1OIuYrF%ReP99uWqI}>K$upJngy%s0 zQUcjT;@h3B;nDwSU}feBh_rF+>=$x7#yvTo7jb1Sy_6s3l%N%G`LYBO2*SXC*K^%4 z&IDy3zySBF_BuyV7No(}kruz*t0v-s<4?=a-)3O#ZM zzCj>vku{Ikw$VXk3b~LTLsj$T+&5vcxFS?UQww2ca+Fq|ga7nDdh*Oz#du&F;Xo7? zqLhNsZ{!E|j{p4cXZ3Xfao(2FAzudXM>+K=R=tCoU6?HR9uZlyVIwsGXv)#wW zcnJ89Pq7N#k7_pF5m5c(~koFlU7$+#`5>9d>V_Q)|NzBk~xn)^Z?7rdM3_3A|Y&s5Z-bMe;o(%0Th z1z0UR!SNGgpkG2(T;3fuvzHQPTaF)|Ltl_aq8XBgU`ctrI27i;B&(RMfKm#2;-0&u zee`^=?S3IB7Nw|n6{uI|&}su#{Dt-1)Z<*n@^`QMLJRS^o8z+Hd7i0g6#99jn=pux zt#|j>L|U?6FOK0!y$C{LNFHmodegjskd?FFUp5dRq5j=}{xB|wsSo9)H!$$&;R`8c zJR^~z+`B|S`UFgXzP5nKnl2wxf)(oipLJIW+r57L;0G&QU+At0iuX88$drwp&07%X zzmHw+48>5+0y6Dg1j0;zR6&&1b^yGmy_JNF1Q+0dhEb0*;XU{RG(ei@<97y|te%%& zb2m4VS1|GK`bx$~IYDFEs0Z>VP_NO=pGar#AB}+a*SiJJCm)UBv=HHoYJoaYbv+E8 zA^D_xuvC0>D}SxmfKOj{$k7@1uBs}=L|{i|XXs+YM8T%vCF*@Mlew?3YX9lKZrphl!=Zk1)Wk!eSG+Vc8M@ZQwU;HJDRSx~fZ55^>m&ig< z;<7ZUyD}{J;Im1D(ADS--2eN^K)2WranZK+nMXt+eBPu$xOt(6h^0__-}(35fDp_j zasT{!`)r~x5Z{M?o@2d!EDi^^od=wPmZ!&A4AF>zII@GFqcZs8kXZ>9;=Mp} zU|oEprSVq}5g7VdUvd(S)baPlJkjh!xjQXQvi*4v)b22lACT8rZJ?kYsH<0FLlF zF>X$56HiN1(}PpxFP1e_y@g+?<3G~@AQ+C{$P>;+->n;(41BZ;2*h{vJ z16}ODhivXQI;hd5PQ?P%KEIjTJ%{s_-aA_O5x`lA(@Bod{*PyWWY}Kp+IJmI$)H53 zm(Fd$V`5sJ4_7rK&mIb#UfUUbs(|}`H)vQULNCU<07FZNTl_>Sr#pCu_FzX-Vh|wlX%Rbj z{l2)0$g`=aYFITqS~W*r2SLKY^SEzu!g=h}=6;18MFQ(ZqABRyxMKv1)$ghz@~tBh zHmUAmg)ZuAL97$60tlZmUG^ZzJ5p>&{qKpQOy!?mB>MO|R!FZ~pt5#^*8n62q|h4K zt@ad6mAl=kU52VBUqbl5OHK}>dFgQT85G&w-42wLKGclA4XU?V3VxwZV3U{c-L)-| zgOeM64u65)^@yW&Ev-z502>Zp0|nQiP(s?3uAHprR#1S6B&4$3u74zR(7%zd6YIvEJJpxQH{E)hkAQ0kIE#Y=O%=|U|!MpSMj_}oLh0p#=n(RKP{N?Xk zLE!fwzoZjpBrKarNOlG*SdJ-U@rpMZlF|0KKQOmo9?c;6;ER9pVzTPZ6bilX=jYqd zBr2X9Eh8_!p{E7nUN*lE0cQk_JE^X+Cb`$cEA-BAhgGk#7#0WSuq zE5)pB*Cy`z!ZM#K>^NeMZ}1@FUV^qpWU(R1XHvVG?@4nvAhr{AE{xYn9L@KKSDBXq zBRbqJp!x4j&^k~ADtV?iFfRM?jgpe*?2)kDe1@JU&Mv3C1VIaP9kZXc7q@TQVtk8j zxm034QAn-;gkYrOVBpq=$X-EH?DVfSA@IWn|KP0Bf%{yW3&RtShuQ`*h{p{rGWjXp z@8q9F+5BaB5R8=w3K8h4gu|$*GVM%;cuxGBS|gQkXJkaMZm&G)yRzGeVa4ba)CRC_ zl<_9;J5QszzW~%>#j|!QJRvq6V+T=5`e&lRwwu^j9S30sTc}s%1rP#ZQ+FZ8( z$wu0aC?dAdPN6?sVNenRC^}yjXw)HkA22^#Z;!@eA}FKA0PcqbP5`lo%8#8G zyu-uW#9ZlD^z*#r(gpAD_3zUpVF20rNeGK*2A|T20F4u_*-lZv41Q2e9+cl`DaWWa zLtqfA)^IO;rH|$-|Zq7)p=fJbYSozq5G%`3|0x9|1CTi2DkpPDZlgJU&C*_dbCZIupk@TehRoEKqEuari^89w_KY@#11lzW!9-) ze?&E$Zvdg5fLE=jfW0d^XljoL|08P4@IqU@MB}9_{jJ_w0yl41)I1`o4~j`b6%b(_ z#8C&QlsA*89G&j@8P+!2tU>`g_c!VknvLvXgyu5#9&pU*UVGaXKm@o zL=0jqnA^Rhi-kPF`-4HES+Ld0gK1QtjF(Q))mY-MN&_0R^I)Zek|_Kf^EK-h&CF>$ z!BQw9oh~+B@sIdd=LrKfx^n#z@pCUET-W8vn}l1iUNnX!H~vWvRVr8I@En)UawY=@ zCnjUP6Q0bE1T)-Ks_2fl4<@y6cC)-Y=+c86&$bVRcw)0I)G$i1#eV?3Hd%F zL@?*0NLR2rmybz9@s=ylS4BgHVs$g*K^=7`Rw1M8=Y4pEWaqhqBINE*F8EI`cj_QN zX_jhryF6mp@R)$p>XT=K<}S>6m&Z1r4(aG(sm7eLA^ohM0=RBEr)T&GJLj;Fj)(oa zE8sj_+;LJ2job&_sPhmc*IUPzcIbiE@|YaVk+g71QSv+c=HGT%uu-M+r|H-xrmlnE z>v}Xb>9jOYFYo!mTk)GZ-;xVZ(1~zU}R0#Ydd7(zay6hI6aES#U5Phk!3QkLAAJtqduT!RH(L?+(ex zALuO;-5@6Q&NKlj(#ESbmQThz+>au+MG1<_@Y1E?3;bjh5DNHYX1+cNFWN|D3Juem zND|R$4IiiAEvtBtgg~tjr;VggtU7K=M-~QGIC0P@5dYBGyll%T0o7#f0ecOHphtP* z+a>Q@vH{;)uHE4OA)9D~1-(CJ!hR%4>s6zXMM-&lRPT~XSrBi)#|HSdG2Fa2ok7r2 z{Yd$%Y8C_wfsk8+!OKTth1DwjU77T<*{Gs{Lz;?-TzaNelC&pfe4JKRVVL?A9_H`U z!J`YNNM;9}l+Rc~oio_&H%0QM%axMNBtBV4oa*|zM!T*Elo!pR#WbG5S^<()$+_;z z-PTx*^-iuaL5l`B2zg%1-VvzL?@G^}&Rj}dSSsX?=4VhS7Z87I!Y0SZ%+u{oymcdT zx6@K)DfQ2_|AYhUYurxA4SWzJoB2oYh&5TjZsTEUtS0oShPL5_X5idLpwM%z>{z`q zUrqTOPEk*G9(+C>%|`F9h!_uGdroUhQ@C_$3R;G2Y)l zrntM#ae~h%y{=A2Z^1{G-kjh=kA1h8e+|To3eAdJ=V;Pq{uh6~fIVi8FV6-ZmUL}vnW*K8IbFg1vlIz&e6zo9J(2$A>HdhKun%Y4nrl)_?JOVq%a=Qy1dih^K zR(Zo5Pcnh@;#@fLk7%|~?!IMrd>tmJ4xD84Y6?MNhAe0cP1H9wd?Bqu_3^yiuKTpW zQ6e*|Ec?lGk)XTi!UP%s8qYyvZp4#+X5GeC0d{k8{FVC6dI)%}M}!=2gl7ZbwzgL{ z%5h@>l5D>-2`1$0zGuX-(c0VaVmBu?yB?k<6G4A{9E(;9P7|Y(RRGJlENGv9p^DF_ ziF_~PL>@*Lq$dsz8}7`1gDs^eG%G6hu#A|Ww6`g3X6Y!&4j~IJHjBytSw9o)a^i=t zwF2s|y_-&D*VcaimJHqg8sbe&J`r$@dT+;))wOpy%Qt-FIU%;cdD$ny<=d1omfNn6 zlx$ujs)c>Q3JxwcHI2U$%C_!6jxY4_95S~;6D*~J>!RS4Q{o>C)gA@MtGz+d@f<;B zLLFP3%-vie!a&{TEm(~L@psFu_7+bogP+P9L%kIniKHO$0dt_v27#a>=k`NJBGn3u z$N&qB&y(f%l<|ZvlseC?Dr1K1#jlre?P~|z-b_u zD}nWwgY!gaV7I|lTCdB*LlK~09EL~snAywH)eoqpqeHXXHkaXuzh?4y2qX@ZMWP`f zU@AQRo?@%N?g685)DPj>7W~jGKeR<3NrmiXj(wPa`LOK%49Iy)n+SnW-r(YLx@XS)!^6-R8uEiL}Q6Ce#$2|ul zxFCwE<8*joNeaMJ83NA_a7dOFZJ2z1YVM(2*B3wlF7g-QD&W35$&1XHW@3%J=oM61 zsZWXm@Md~y63bDV^0u>V=N>l=TVT{8&PKD*B1+Qw^)d7B-g6i2`!`)$At2n1t&KcR zqR5qNgDsz*v(OkHX@-8~KzCA3e)np?V_OmScRb)GZanU`~+mkXOF?I@Fg^9&enL@=d z>B3mPDKJH+Wzdj$pKl2L&!`7s|0uuh!95T{z^^T+DtBS6-POB2j%&*l8kQ(cG$mpx zMJBcyc;U-3&>Byvwt4C>e4*vf^n0<>sB zqe`^Ne9AEmrWp&8i~lZ=U?FJpr&`wsFZ|kV?obRiItJ|O^c^{9&=JgLAsgwyqH&C7 zpj4nkZAg2sws3-G7Hwa2Nz^SA12`)4oBhfsj9w}dO{&#Mtq{7k(g|kewX4?iE)o{g zk^w3GQ=6q5AIBQN1KRAUA0{NZZkIbG>>IH}Gxiq-53}!L-z}Rm$~qt-se~Hm^l6~+ z$M(U09@=SNi*hycO+)+cy4u47x{#4w9whgN$Q%;Zm?V)P?RRltA-@lq$|eW#2ir9@ zDm^G^W@jA!Ry~SAsc>&>ffxR5Zp05LWwx1^!ylwzV9!R9TDF#; z0a$XCJyh*jvxNC;(jE*!P4Qb?AqV}uaO7t`DJ%2fuclk$)Fpq|kuAP%4bpOQ(l<~T zb}(eTOJ`>fO_{6I8hAGRLa*G+d>C}pu<$%-^mTCKUX}f9unh=b5ZDQe_)FV(AKerQ z0`H9|c|(&{3|y?NR;g-m^i8W~t#bzxXRJaCJfv45;}zV)QTr>x0Mq$^vPoUeVkHrA znKdntDLdSBDC1DXQh~)XaZstj>?ZmHLC>1kB29Ra9c*R`8lrFR7PP69E>DEM*LKC! ztgG5wZVjZcsenDOb9q0&qu3xNm2SzM#-qK5@@aeOBQkcffEuT2LnBgnBd6X`;>S@1 zl@_5p@!i4Ld2<_?@FWr-{)egq1 zO<6Or7$C+!mQNQ%GSqoYj>$vPs3`;{vlg_&aP29_M#7w-)vl#^F2z&w!p}z;eTD5- z{dBe%&tS#>V3U=%8RM@q6ku*sP@+Pb(*8R_bR{WR17^?Y4~|raq2)FBT(&A7(bQl^ zGH}ooF3C=Rq;K5RZZpNk{ocT~*(Fz@f8=_2`3GIGG?Z z@Ei;m=yuMi<=>%+MeXMHXp_p;u)w*Bg}RA=68uZ5NyCg`h#z8NeH{H;kPNg=WQexL zQ}WZ!GxT5WcdJ~oZEoq3vTOiKgNKMVOJd4*0k3DeH%?>IYP)N(Czw$#ZMkFp0AvTv zNc?UH#-9##N7)B1Iy)Bwno-kj=7G?p!0E?WlXI%o1Dx52HDc5nS#Zt*TA6pRs>H*0 zAhmcS3Dxj09A3#FJt{#IN@DtsXEgiI9M9FC*)|+;lvr|=XO#_teLa1zv#8}*qx)Yj z+3d<^w?;g9sJhv^KIC!#YO}G_Pm4Aa(GKP z=T7xdZLw78m*04!8#Em>$lkDvL9|=jU1oP5cqND@Jfv!h1RZr45h(k0N}#{_61FupDD5d8<^+(_8)BO0@4cR?3-KD<8i`(O+<;B7_Pz# zSNHWCMWVFQvS_mVe&h?%%5}lEiAGP?w?w9tLz>i#;~0txlH|Ci>d^z|6m!L;CsodI zjU~sb>Q{qtLye`trKTke#l3G2q+162)HKP5L$Tf@y1j;RTlArAwCivNJM8a?>-tbe zU{(|RsInlvBzD-=G+c=(GSPLP#Y9-$A#Kqs8fd86Gj+iAjAm6DK**gUM*M*x;e6=f z;bCIp2Nw~sBQf#k(__zTFV7%36BEk~ z-%0zqfP5>qa^aF<;v4(N23RN=vJ2MIlx#zFTTV$*WmSLeR)2rU?dlL{y&&^AJ(YU; zNCG4AtmMX%eCAa`#cGHdd|$uv=(IT zSAvycZLN%|Ckf8vU!)@}o~OS@%x5OKZKV{JOkh4^z{A7$jr`c*>5nb@MmOQjT`;qj z+wX^rg{U=F31UlM?)^cZCOG6c1vZs%roUdogJ7Dnadr%qrUpnch94%~o=`u<0#oL{ zDA)z?Y&ICO?C)HnfTvt-G%_JC{`r%63;Y>f7xAx3!{=QcPhzk0MdlF4Qjh3XQpf*B z?<4PcsszhuaDt$Vy^MuMGD5|9@Q>P#;P#agc=oR&?233IX<|<7WY2l8CtCnXaDt8n zOt-$Kucgq+ScH6l>K#VQkiF4ygWt7!PT99cSTlrI1bUOEI-+#6C9ECemtPNMizJ#2 z?66OG?q_rMCI7D$00=7`-%Skz8?(Aj7x^P@>Qn18I&;Nv&$v9$G2i+lifWljM-Z;_ z6m%jeB212Fd^|ISA}R0d&kr07i}hM(d5z=}%W}Ne(#TQKZqwvMSng@g)6rY?alRvH zxry7Vt_cib*CthYc~y6|F!%fmpijuLeDM;I1Y1Uxt~QC*oo1^u5r@ar0UKhYSBj8fcnZj42lXCS-(m- z$;U7YQs}p`)+;kTabq~g;={``D}{pP2<^Nk-VCN#6H0GDqE)pD(d82YtpgFCXXr;bK zop5Gal4ZC!Sp6B>HhuU)hT>Kp38l0?c?n^QJ6 z{uz<~DUkdcA+?WA6Ib;Epb}Od6LWsv>iF5;wl=p&dK$j%*HjbX3=aZxHZTdkX$#x; z8^Ua3^rNV=C=0F4SNE*R=s_d2ep$C^21YIFHEetdCFgTw9deVWyW2`-+tX!JapZw6 z=es&pVq%3t`|He*FQ*s^(+S-MbLs5)W*tQjG#Zd%sRn*jbaR$DU=6HJM4daiX>1}e zxq39(xnT_@8TS>nmX62GAj2+TyskK8Jun{$Kw9nKnFKBnvxZ=a>Jz=twzTj zPDpgBW&|8aeYP@W$xPQ-aHlgzIX=(l4)Z2Z6K0yF)1{^uJ9A0CH3CF155R%PvLb?| zi?(_9%Zmx&V6AR9Krz-|FeJ~OmZpV0bfIHO#yIyjUX|scmll^Dw^yDr;J$VrBipO8 zuN5|6ho$b z%t5=%nwztzZHLB1%UDsSc3S`A{c;^$v;UAc4k{q|dSG0S&x9MBNdvzrs!TE_7j=To z@7qCe!uUXk?h~NeYUSop9*8{sL)${@GCvyBA3B)xX?Iu~s9hKVc?^&Qxb%=>Gv>)NpbA z82WqONX=8ubC3iE8c~B2?e6(3myuPsT1A4S`-X4RRW$u`9&SWkQJq{GeV8;+_E=(h zM4D8g2;du2?coq+;GHF~$fQQivslZ{nE&9AI_nMmT%AXd|C|4Zq7i4JnT8PP=Wl?B zItk5&Y?0HBu0NcwsV#~d;@dE|A}=n&w?qcbZu!*Ro2n7A$-3r&1orNsCdSc_dBqv$ zzt!*kXV&=D!Dvv6H!Jm+W%`{v<8u6kp z*K*Q2FJdHbO>?r z(AC*~kkgqzLeDD#O9bZ6nCjKD1hR7Qq>;0mSQcOYaq15d zr^i`n#Wo)fV5sL+>Uy_2+En1c#9SaL>BIg+r@6+31!?$$DIC_V3Ty9Q+X+=z1rTEU zFQm+NUfy!^4X3bYZ87BALx{3vdI~a7)tu~MM5YQ({c^+9MUFqGMdXilsT5@Hb zzsZ^jv|Krzrq&Kg$8S9Atup64>VQnn*+mA^+Og)7@3Qq}#IycKbB0OH1r;9+x3@IT zNJ$v$KOA*V`6hYA6y#5oT+@R68U+RdPgbr;A;~1>+eZ#>x5%_hlF5ms@ntqxM2tSs-A<`vg5b^kp+fGcQ!V zf(eppfJq!l=0?Qkai;!mSbyuR@Z+bbB1zzoJRe~ckID>ghm#S?Y1QOWfgpX;l|mVq z77wzg=}(v_4J@n5nNvgF(2AkI3&wjS0cp{>Pd|@+k}zyCn4o=&{J`pOxhFa%ixQAe zyPlejPybAa;IGftd1s72zrFGIQ_?(aV(*l#kkHrmNg$Z)5olSp(~r$LYE}-Ph!=34 zUV381&`eBCxy`PjvwEF;ibazU|c2&cW zi&~7#mcON!?)q1EE8^~-JGwVaXX>R$oGuPsSB#jgYH`^M5S2;F$Er@OVbp!w)#S1w zX@JGe3ZVMPYMtVCj|brdhROxz6j&t^NEshL8(AwXVAsLNR^S`_x5T7oI$k+-vd18A zy9Ql^t4sT}*kO-VTVvaONj&XNCM@~l)r=?-8*(2x^7zq!Zf@_kK<(;AJ6-zG)T6epoX+O&MO^;+n08(i*XgChZZE16nwPx=qQ`#OYBLbHR|K3ugf; zKcjo@x>U$5sWM8+;-Kd$k}iCpFYj&KfGB_Q%}tDjPVR^51OB0&)4Hq`bQyNH8TN21lDD}tgF#zf(HjPyo{%c1hf8At#_Zp!wq=IB^ZI{SbIi~YvUU=g`;b@h z%$x*RuGkaXH#B`bsaAOXJ;Yz4Kei15_Ds~Ya{(W zO-xqSULe-33x^5#=e6^(7OyfSkdpPYX|-~EJOOi#=3}|6)%LSxExepbb4Z8=YW zMZX%cTcmGm@Ikj9!w1aM*iG+x7$*uc1s;<;{g!lV7?dku5K+x1_>dyiT)1Zb#fPz6 z&F$Y_%Tk}J22uNQ^<|(My&()iW+Rg}dXjbm`q^ME;IW;u@H+Ndurxs@mayGm@r2ca zQid;le|s8d89DY+8=JfQS)CF)$o5|O{Z_{J7_dSBDdz;g4Ib>cp=t?a65>4ucmexI&2wjA6NfH7 z`wfbKr;Xz;>D7)hBLH6C$=IU%2<~e}E^@;bQj0*aJAv{3UnOkjO{o!1v6n}OoKGW( zw?O@T@d0j-HTmjuJ|&YPbaKAFV$fxgsb=7X^W)i{qv7f_`pz7J_pZF9C}d9vi)a++ zFyniIw`)k@x{RA=eFtqr?!@y)?Bct^OxD_xHK+RX+&q23xL^1O_eZy}m#IyAQ!D8a zb}Lv%cD1yh^$iWQuJW^ZNLeInB4J| zhI1YEc5tn61#AhVTP_?07q!tpan8Tg=dsg!I+$#eiHt&x%b!H*`C9`ph}1##?f{YB zNXAk{!c@?xaOSjS#pM^ZD<`am$>(eqo)FGIeuG{{zTC-E%r2mh19)cvp1O@~JK%&QwwO&>OeK#Rzuumma*(4i(lZQ?bmAG>ABQMOk|Yb+;#* zj~C2gseaH!(*rlUfo~&S4U;FzEj^x;o;f2zKEt|7l8q)MRb!GL&X*kPpwAUa8O3y8 zs%Sfl&8F=o2-2Gjs=^iBNj`@(#7R8T(QWRpGG#gCzaSAOutQP?QkhFJm>!6~elOat zancZ&xKzm&fGJZ<5CJvY(fnCL9p9G@js%Szbj)FIGg-RCc|f=77x6fvtVs|FL;f&vTaEHV~& z8<9OF7ACXt7|E;Gze-Av;_z4BfgKHvm0#S65@eG)<6^YS9l5mwX=&Y)M}+$}1j>p} zU@8?QWGsi-xswD;%ZcwT>^j4{koStcOhHh?7j_TwQGqz`sfgA(BUnxQI8&#BgDnc(oyv0ey z-kR)H9HPw5GO<4fOfsC+!@9`x!cwfsSndraqG}+GeEL`d5wVuy$|OEW{O=4zTrWe} zQshN`i4Em-qR3|WY)YeCYuEK0$Z+4hXK{c6Z!)j6Y--NldcNLND-ZE*dB|uD2uf?j zdi|C}8pE``;3RUE9UVMs!Z$N#fnYcSNc{J~o*GVOOxR7-*0UY;qoQvOC%w0>s{cK8u58Y0D zB)znlH1w_3_;JCEp}a=8z*m07mmb!-#24*;TjD_i zAVihRz%u(0+VfKnDKRrxWO$1H7u9!eM6|LV1h{KcIqY}5bNOlt4EDSb z6i#pULnzsL{)urdD|}fud@me~8qF2R(e{b;)G%eM0-!QTs0TwP!eAeoG^0~GaChhL zK({(SzvATkY|5OjJae}=tx*JG zs@tibg>v>y-5gpMA0JiF7IL<;E=+b-wM{W}X8uuq1uNqxZztO%a(y{x`A zoiSart&dvWxsiEc*;8yB0`O_zHc9t5S=aHuM?GWapn?axuYQB$ZPs;48rLUpTjfSG zr)vOee~)iVM2TN$YN#fg;dokNiEuU3E2heCP$sPL5IM$U8Wad=rlPj|g{r}WC%U_u zPeyq&W>8^Fm*VL6EBl@LHVV~jKX;5}<;#KZXttjQ(rb;%Z@P7^aFAc6nds* zpD-0LzB_eK|7J?ZCx+L7G0gc$bDy?muwaVpTa{;uoYl38Lw#Cxf|9J8iw1V7dGP_~ z@c3qT{g%61vg}H+~Y<7c4G>CEVDb6ijJvnJuIBUSWm$eJ;q^}YQ z(>HA~;+c(A6fV!1sgseFBtFNptuW5M&Ka#q##UDCIae!D46F+jI5&Pa{MuHQ2F4no z86mlJrRlFWzs$TeSMS`krp}2WR$25lcu%_(va$&nBLN5*SW6}Uk^YvW@Jt7_94*bj zu52kDdsru>HDn?i*!QuwX$0|>Hy1fDsr@OL#zPlpfA2ugr$EnygcU3vS_B5tEKT{I z&e3Fv!zmCyaU%Ty*O0Hc4%D!LlTjYlQyRMa1Oqt}HY}<5tg%QR4FGjKDZw6ztQCX{ z_j;v@g;g;smCi8K3Xrr!@G-u*b0F9xi*mb9zhVxRa((=_AfQTFAnA4&P{AQ3)1gh2 zTnZZEm30}5P}V)-MOzn6ZkQltA)91)X#&B;Wc{+^4AmN|-&NQ+3SS@nQE*NevV(+D zAOc7wg^ zjA1hJ)pz|{PkNQ=!A4o5A`)(Hf0TCI2c5Jwa(@)!1V~*ECZ_W9V@e0w!<0`#F1l5S zT<>aL-mJMKzWnw^&o9j342`6;%Y0e_?~$h~92pS-2%&M0ssl03V{9Zzi6cSw86+L> z{(=QQj_#qwwY_w=?k9bbzD z852p|p3W~C19L4|z*Jgio&UH_`;I#}Sv>J?5S`GMBA*TYdGitoy825GQ<7={1_ysM z*p-HQ=Pi_(1L9&ZfGzBg-Wljy@(Z3f** zAkNVsmQX>myo>7cZKYWm#9t7*><)ytRNm}TUjDW^qQzvW>3A6%8Pt@DBkD$bX7}z z4l8`}&A?C@X!Zqe*d*lyeFksEFeQl!M;SxdVim&UZ=*mnZPbHg0#>`-gcWNu`qa zWdt$-4}Wimzf4K3#09GTJ5sO`9lmd(VZ&NN&USs zDtcP!aix+EKp5Qn6S)#vPAo;!&L!(h1<7fR)lqXt!9rDY>p<|c#ZNZ_`U8Bgdl?iG z2nh1FVjoz8Q~=)4U<3g6{1Jw94n;FQpSM)^H#7Oaj(w8oN=lf`S-D5?hXAN#gGiT= zOZP=Jday*7#EvZ~?ik8Fq{XR4=j9pOO_y^+n)G>GxUuT_;2_$37ZpY8va^{TfOm&! ztc`BF@A|_c&}WYknbV8NS5QjI1xb}HUW_k$gGN2c@@Wc3)$T#2V{!d1+#8A zCambovloE6J7hzZZJnIAViMkqA7h950sgj$ONZ=&hC{NybeFrxIfWe~Qrw$g&jgnH zql~B+Z1i$QX{nS-{x_&3!V9YSOp!C*)`Xw!=Y}%^NFhpr#hn9Bq>Z$x79V(bm(K2 zbt%UvYVAdAFRtI41>kM6K|uwlqb)2X96G_*7oeK9i+I~%oKL_IlL}c?)|`?a9fS;B z8MfD0rnUq?>*QMMFlj&~I!_8oHFPi`)l%jAIy-mLe3eOEJYBkrb73U^AQiNVsHo4; zW3C+!QnDP5!#SsDf%fju%+V@jd-A3F0GYB@S&YOd? zS8I`Qhw`di3E7*PN57YRZ{n^i5>X1WR)KU*Pq9zF1syU`xLXTWP>j>j;Xb@mQ(Ih6 zuX$6AqBSky8bE_4iHU!}R|`GX*!oS?+!5do6#_y9AXoz$x5(1G8+l-*&M4Azo@5g5 z7X|FBzJpLM%gOTQj>*L?&qjj>%36P9Azo;PTwHJ6IvU5?pb#i~3tj1k(4EDLSS;s5 zXua3hF)FQ@5lu}qEXhjUXM4W@1m z4n=5g{4VOGZ-0qq`#U&!E74xGg6yjhK?%5rnOPV!u8}Qwvg3U=WM|c4CO$uL%GwC6 zt)Ffr0}FPj7ADmQUBbKEB@whojXbLy@f}E!9Q6%;gr(-LpG+$VTRJ3Q_PpAp*|%8T zBR@bFg_d~aSCl&uul9|-w3b@#9?O7$f~M~xDmaguu<>XiH1StHXu75g-2LxPttptp z?YgkH7J+1ONpk-YUo3z1*Uy|GndZz!aa!2o3GrVYPs%VkM5OpSK1*dQAIh!`xSk0V z&mL3<5Z*qZjQLdqX&r%TGT#OVMtKAJ67CCYOFaCr=HOXdx6XX4V=bx#JQ!dvWa*v;r&8OJz)qhT&hxESJB}Rbp9MLm;Hbm#zu=->@+am)9iR*^pal2bnClz^y&Ehql~UttG2M=?yJ{2cA)zMok$Kp;37o1bBGvs0C z#KGwsQOlu&ZDe^5YIQNV#o?BjqH(1^AtyOc%w`~x8iUix>BupA*a!O^jZBKF{o-}M zJMabQOuEfMuNw#u+=yhaEpNR-eCS9fSf7xxk=vrq>UU2s2;Cz6snJB4E>c!vsH)>X zJK5#wdreYHJ&Hp}yyyatq>eqbVD(sK{Uez}@vrZKk)&-P=uDB4sIGLPrqQ{}e}48a zz19e9#c*0BF9+&TzKQ~#C&%cas$CF$+46jJ-=;=s85y+vJegK3DGG7jf^KoAx4tMA zYNn9LH48MYtn&>>gCcLLw!}7ZX%i^q8aV4p(=s3}oJ|1Uj|pKv2%&b1;MTO#eDH$l z_2lnRGxQ^auzm~SB7!>7YGvwv`1~Z!QgQEWdqd;80 zq3{79karh%kHPm3ufoIv)=O|WzYC0$gS1&txP8I8iolxa3N68fIWRU|-bB_Q#goW2 zF`=T z??bi#03ZNKL_t&mYAVIbyU1Y>k*#<=f&JCVbB#r!+~K6SEA;pMn$uE`>}pC%or?q04}^0u-EvBJN>Z z*b-Lopl)8j*g}vRy^bMR|Ib6CCkS*jmYrSR6wv{)dYFS%339Da_DCccx~ri3nN0%_ zxBUUH4IXey?u3vdVkyJ#So|X7Op4Og89h(;H`!h{Z3%{A~xcVFQfjOH`ljs&!1(25#fQAmRb9FF~ z1ii7N4KD%RkCq$4{GCgrpOo>)fkJTb`amz;=|W|EQ*^;sNb)Y|pnT5aYmjj!lT89v zyn@_N)Pbblq0h*MKBD$X=USo49q6vF%?rC;Gf?*118tPcRLFsPji$gG=5Y3s6wx`z zI9W~S%;vN1%?Xti+_{U<1T7<=WejloMY`?yin|}AKiFv-o1tr%fyZZ~;R$-7E}(tT z{N(f?0Lku4)zyE@f-$ypw+fsQn>I8o4qQkWivU>zXibg8wT7&psL#a2c(ecX5bX~@?ahr48S1E7i=PDt zzMie1ID55~(a=m)o@$YcOq?lfj|N zaf3W)$r9|&py7n9JeUHh5VDx=s1O&ZgXwW__E2eu9RkQSaMm65aj0A@79rSU&EE#^ zg&*(`XB3@5#s>pP_E=7Gd)k64<#T&c{ycW65JN(8YO8v zs=%Pv4dumf{|dm@R))3$c|M#1sQ|K=sZ%x-31)`zs2} zU0N`9Gp_vWlA<%s09zDl{j%t-r8=G1CX8>wt2{StME9XwsuU6+QEUkH;p92SmY4NF zCKemSrW%A|V@|5t;djU(nUuGqVtl|OTTV;9Nk8Cu2(1XtgAOi^eP!B~2UoEP%mcJP z=mvGdIs0t94E#BWMr{QEIZLB=mTDVWtJ|{VdPlDZZTG+z4=L$FZ6AtWdbHPtqx%hl zJ{k);%No=Lz-ga|bj=}tR%4Q$T|Q;wg91dV5UpAOdc;9R+JQij>G0^qSz4C^1ehOe zM#}ai8aoiUM7lINN}<2FtuPH=Foe+faW&g zU~!N=6U!~F0D37H$om!50*j5+Zz1qJolLHu;^*s;=Q+*b4Y&~<29$!{1idn_*yMSc72|^fq$slG^`uN2wdOi0J?I0_X}R?j zJ#!?~3_p#zA0&;k?!1#rwf;wRs5a|nYjMuX*`iV)2L^~xAky@?VGeDCBu5#OP zoFUYzQ3%vSLdTq>j1KQv z4b$0U1|&DFh719f2(h?TO;{fFP}$M@UO-zLCDm!L{fl>gFiXqlRW?ozu0Q0*7uix6 zS&X=Zfo7zH5i#gT@&i;eidxlVvoPYqLSZCPO;P7&(iTMQdc`15=hG&~XRUCqbT+9SQ zkOU0~El(V_k*Z7kKzI?D;vp(4MzXO$;fA6Xzl64NK%{@B;oqE7F2IsKEN+t5f{sRq ztS-yBT?COiu8U-Ih{uB~sQh7j$l}$Z{T-fubO%C-{b9TL4AGMCrVWon8(9@X?#~#N zr*m(q72efP@weM5&B9>;(&|w-T+k_)njMUOpd=tKqLkvRQXn$%{cc_%1Ott0OFMws zMFIgP&G0n$nB4=Dbf*q?ZgLtF7L$wKHVq{9pFKAJr^H9`ifpVxsE};2u4aw>?$F)O z*#C6lBhcxGc!5HPRFg2G%X7C|*BI`$->D zLl@J@7+Hf{^>gzEHdX06f%HCe^qV)i^4NU3IP5N4Q>DeXCAb(_;5OFgH-rBqQYvRV zPjnjF#Ih9?&IeE(8do>CokC}Vp{q2*ih#^sUMoJvNwWOsoPiM>?vafkv2~>DCh&6~ zcaNw50S}2A03t3qiZI|sZ5>$U<*UUV4dQ zEf@(Eh)UJV{aWtD`umj_S(1hfK0$#<2iOfLuazg?#A9XiI@ad(Qoq!RxnyQ=Mq~?G^AT8o9LliqWK`S4@WeautrRiLB%5h%m ziG)WHSBH!)PI|erfczJ6EnvT8}kD%U8v^+!Oof}x6HDfZYV z&gPCdBC~k0Ipli62#!$7SOWDqg4Ef|uXAh7=d;`nLefL_I@9m&0Sh#6^B-teHw1LF z@syPhu65jtB1SdXYV9)}nbXBYUwp#k@if z%`u3h19}m^Znkw=&K4tA11n4Z@2oohZ#t*}BOhwu|ECwvZ#c+?=fYsnuocEq+OwU2l#^Jq?q}p>`8aYWAjQq)*_^TR?0;{1s1PrTUm--g zviL#e8TM8_(C6I;ck@CBk?q0&!FVRLuzvqJ;k>+GWv&agD4rfGd@wkB%)D7hQE~jI z8xKEmBC0sZa*OC(<*+pnxIPK`8pmkY{Xjs4V_I?49fheOtqeS=1$v4V#Vlf9f@9Pl z`Ptnv%UpLzRcrfJgdh* zb|-c(v3aF`JQc|DeM3LquxLl->w)rKdaLjvR~avWsv z{e(s^nQOeMv4v*n#*cQ&AC zW9&W|wx~%<6nZYXm>dMtfbc+CED20*uJ*NHkm&)%>Dc7$vhhN>(twrR-3RPpnfU?a z>E%oqX)syb6g~(Mt#!_r*C6ex^j$rHhCv5)7;k$jY86G5f5zR}%VVaRFoO3XRFKfA zS#iE~vBug2}(H?EapX4@*yuoh@e|>O7QFKY)yro0n4H1Im{h$$(sWNRg~w zCUxq2Kf4ol9EF%~$JoJ&?o&2a70|cekR<6>aWn|%LJtA830NXgJDB7x?=H5!8mu6B zj`mNv^Dtx6<+4cD!3ZaoezTZ?;2;%1JiWY6Z%ZLMS^3f=bUB|V%N{p89UT=cZtbki z&|+(#U3E54LyZB}T2wbL3*)5-7)Z2V3h%>2u!#^>1fkFXZOq9M(9oe$rg2ys`6yvm1|ODPxo?P2h4AuGA{*E zUHWQqGS8_S43&u`Z10d`%z$mi7j4V9OB#2KS$lr4{}zi#sU}x-*&p6FevUyxABq=? zg*>0L@=ShJ$D}z*rrs3+6b&UVmz_N%S<)~N=hazJY`JYo0L0J6T0P4eJ~01nQ5e^-O$K-(@wpz?^e%eH}eM?>U5t<*xIPbkCZgDd;589-Xe> zF?;y!@$s@cUM^o=E??>&Z}0C;CjNRv)WABq-r&O{3~^aX$t`NZ`z;L3rG;b= z0>Z)*=C$o<^&riB;cNCI>FZH=djc&1$c8D9}V5q4rs? zH23Hx)^26R&`pB1zC6&OWdC;t<=uIbY0U3JlyiQWFsG|&{QJr(?k+1-%6}OsoLqXD zSmW$`I+xePP8L~+QdvfBs92h!67eWA)=!zr^CC&WS++>I)f6HH3a?^vkpA9Xw9Sq& zfTxsmoJ~Zns=_pfcXMZ}uwo!k8CdpZgr}x-at=;o0GXG zIzVM$^{Wz>EGzjBvSY%%r-^kwtGj)$$wk(uxK<(dhRh8#UGoGJm5xlfOp->0IK(v! z-Pm(WL-yAlDD1ZzSgYY0)FMu7kA0uRwMbj^^&{_ea`Ku$4 zWr}*wM(9HRGbxG7$_(_+Ub zoV}C>e;v74FfbI{&R=o#g)M}ZEdMdj>B*LL%xj|TvsSnPq+|dh;3)Fly)?*6*^u<| ze%Z5Xc2WmbbnrkG73QK{sl|hwT*a2Fwfn%l#n%Rh(^nf<66V~~x z28f|JPLe%4X%G}K!n?i;Qpnb_UXUV;;ghYHJjqTU;!fw!qX5@4(;);qqb-e6)&Rt$ zL6XIUnLN8B1_J6pmnu}|uxz5WfxZgm=JgT~3dOShgU@HX8l+H@<>wD9-_(Vt_<5VN z_B&RWrN~vsI$P1l%{#hnlARdyGtycrL>5~_n-66RkxGMTExTs_R+348^z}XQ@G-VZ z@5XfVGLs{2aQdPBNCtI;plGH{1rZq~BiXN;gtM~0z!u?a;lx6e7wM%zM)&iz26eW_#P-!I){m!>kBeYuBi$CVUf0=dO2&K`^4uHQ}|1 zWvs{}Oe|x13~yiW{A7`x_6Eq)^V*^j*@|A7Ci23i207^ukkjglh*f}qqCuKe;R+zk zi&le@n1Crwg*(aSXeQQ%q^mZ(L=2v)Y97LDx#b{Q4YI|z-84p?mye^~;#y>yl(iEJ z*zCo}#L8B8ADaE-eREB=DkLQ_bZp$b&zXg!3tt@zkvK(tm%W80#3t!i0a8r@jFD2k z@=X#(F&;abSlUmTPtOB%T1%cDN)abSn|*C=TMeCmn~z58KrsYC9{*WHJ^|RS28hhv-C@ET?4?VP=!Z zC$Fj~4)MaY$D&eJDTBo^&?6wxFYt zZArS$kF^c}sM5K3o1aU2e{mB4AldSyYz(BdeDopx+4-~y?NtD|9wog2QdCA;X|*=D zdyZ3+iB-#^)BYwFI5VmikDIa>ra=9 z6(oNPTO8zk2O!Ed)Nl}>IeJqzyBLiF^raOmhu1lO>DlwrBi~)t)v9lpmu~|Aq^ML# zW%t?Pv5A8`nW=k6?S}mGENiB||8^SPcgO+a*|3-(^T~%hA!NzJCNQ|gK(hyTls67hQ^VFNyqsKv&lI8-K9 zVoo&~FFS!keWaJkLb}CGe+}|(2sHL5)pm?1$0;*<2QVZw)X?=rqq(NEO#%T}S9P3~<($oTt1fZgc(Ke&mAoIMLgVaOQ1t!? zNmkEiY)#UcPw~;@=`CY?9g>(XlK^h4LR3m2w+u;bCRVLM=G%#`r)*xbMkN zxA)J}i2@=RC|(Zwzawv$V#-vHJm-Wb0$O_-&UIc1ZfzlxkuRrnB@> zQuF{O)@mvDncQsTw^v3GH$YYH%p_Mvf1-uDdwy$ zz$nXGp1+-vTDAulzlV&2__%t}_5g3;<6)8ARN_2oYWbat+KJif`lL+xmZUGO0I5tY zPUIlvtS-ho?yEsgi}QL_)D(O2@|3u1ko)=08Loo>WISH3rgLV42iha)+i=fj@e7gm zvU(D=EywbGiAdHevZuvA_J|LvGQhk8>e|GwG*WfZ;6|1{-;cYHL>B}MrK#J^Q!t$KdLrs`i zg*BswHG3h1CHa)?w^OOj)yg#f$An~LgbPNB=y>zRJ1rjCVlyh z1|zt6i*+s*7>z^}KC#L5GSlX)xLGpWt*Dg-IlFh)Aj#^1ZBz(jy~{Ri{8-EBoKkX{ zWMb`Xn5uOC?J6sjM>4ul1So-`)t&4tI2Z>>?TH#;4^eV=yxIC(?9t4uGP3v{2QfA9 zlNv-5zuBu7C!D+@k+&F|!j4o8@=~(37mKH253lR#vgN~eP4V(Bhz60nLjGBrJ5IsY z#Igb8w2&I4?nHG`>HK|h*6czkWUG_zhIqX#<=U7>8A6L*-F@AXD?)-ID=&4lR+b5D zWUB-S!OhF;$d<`@qKZe5b(n}iI@>koGuIP~tdQ-Mic1T_(#N9Q3d3E(jGDDr+DZCy ztwBT$lvP$JT!1oMGV0V2#{pIjKZuDXs=McGFlU?+A#A24r2-&tn|z51Aa*zJsvAjH zW{y=9|AVC-r|(IhUFQ+V7BQ>k`!@$jZrW&OhJI@1=sJeBpRd6UhXP&f#ufRdFLStx+4 zi4WHPPmg4*YDw+DI?S&0#&)~g>!$;X%-Z_0!5Rk{ubmN1rR$FVDAsEHLYXBAHW28O z6$$b6XvvC_q<8N{m5UVwB%t{w#}XW0Xnl56_#$^`YMI1Zrr9I8$Ks^~RpLigfNpuS6-@P#Q#}Jh7di=gGo(Px;g3 zuGP-!YV$=1j4Ue>0%+#~X=P%KsTxGIL1}jc-pSaJ06|vd-uDs>v<~i9tcY zP}@+lO|56<+Rg^u5?^G0u_`8q4UHpK-9F4VE;M;EvwP#41c0WSzRua$DQQs;PsB4F#^z8w4QRN?}Gzr_vy{O(;orI$OsH1%%gO-J%U; z0T5=eu$&6>0x3C|$15E7MOn0AuwXjYy^WOoyw)JswHK@AAOw=mIH4BC{3H|wDO$A* z#Nu)7!X~N}?W_e>zLi-VK>#Ak24g$-U(w&L6dQf58bo&DZPLZo7FOp%D-(-#w@f>C zQ-9?egd13TNOv!+Q%E`yr=r#%wTZ<^*}THU61iC15-4Oa4aU*OqP|Yu$Gz!Q{pc$H zv+NG`c)sZ476u>{hm(y*x&;=XooccoaFDX*(6tdL)rVpSbfrOnI|m1MT+iGMCp>Z+ z=+uOW0aVF+cBR5N7v;g2Qq$G$rMcNxF!GM08_`#X8gN ze`qwwyve_{ck&Q1yWI|Q?R1&-D2r5yP>}}dh~5R`{4R5ILY-!HliY2laeZ}RG{~aU z77A73xuj_jxuuW^H}AS#WT6Czj`D!nE^dJ!c+nhjG6s~2mv|&H8S&J#8CecgpE+lgQ(#E03ZNKL_t(7 zVr4F>vj&mfbJmk4;5WJW&qy9mn`5=A{ymMJvM2e=_VK4twp#t?W4T)jl9#nZI}AXs zOKmxC*mLvRj7}Lz7t)h$+`Q_cs{!JX?9SCdAg~brsyIkUPZmO6Dm6$05E)5NB|_#i zt7|q}(jw`cv4?Y6*uDQEJk9R*i$nwa{Pwr|$NR_I+sE6tZ*Rr%SpT?}zu(@zmEX-H z&$qYV*q(`1mu(1xkJUdIYnS*zWuS0n8;wma7GHa@#(E8cNQ|93Y7c@O@$X^*_ z;)(hIfW3OioT*#4J3}|gR_DK!%r47Ol5~rYFd1)(SF??qS3M%TZeH|^{}CXyGt~#` zay#I`*CvT{^PXx+h)7nHFHY_0?u9h5xD_5K%bcFPy04$Ls;azB!{*E!3c zBsN}d@1_$5rlJktl@f(Lg@nQeN7?sw6O@6i;D)sj z7urVfu(mkAuXL)5!FMW3?N!iNRX4C)T;AS2OlOnIh-197R5d~Ml9cXVZZ*hhVdfwX z+5s%Dv@ge~Wq;B@punwHwR?}deo<34Z?VbdO@#)r))gR^9+mT4**TSn6$O}Qv+2X# z-Q(ru^X89L`u@O`C2>aWJzbH>L`E;yJjzv4Z0RIjJ5JUiVi(nKPawJ>c3G1 zjO&-j=jVqL0gX9`a_d~KXC*DieFstXk(5ATL(=7jDU*pcC;F}+*ELaZYZ-$YiV84YpO!V z?cLpUHmi_c-AH9sr4`TNH2K}s6t)KnWh6b#cR7e54gyYg6<8hs%i4+=2f=*;vfcg| zrp5^Pz_KXFDr^t0p;nbuBTlmAMMqG8YeFjAe%r& zbq)}YDe(`QpLPF?QWA2pg6HBzF#oW9!QS99xZ4(4ZE|Mo%<>u-H#eiF)k><2+xzE- z=}Co*xd4W^2cB|novzL@6B@+gS(cIXnoHS8`gGp@AeSNxkUPA1{h}|?Bk4ounedGU zIWcIEdOyfI4kB`~tZ@*&zo~g&OCv$0h!s#R;%XU7jWVq?%H?$hl*+yrbbei~xk=_- zUT*WrMPs^fZb zeSKPgyT6z82>fzwIayv0WvR87axB;21({j4JkBag17F)VQcs zQ!d=coP*u-h^7TYzgf6$7>bbdr@|lt{%M+ zN8LALbhCFn?fq4EL#ckQp3c)9?;D$*FD1zs-3VY@Twgv`8lwWn886w=UMDA=F<73eiD@L9VL)1N+$~U^0*60puOz9wwkQ7y_nTEK^;q z>}9)Q%1+XEI0)#}2P!Wb8*h*B&f?Zn3u||jz=$wqn23*8mQ$rrDvDCc{{Q~Qc5->k z=T+1AQ1peB9Ho%I33GAd1KS8+Nw^`;iREfeS+nf+! z?|=L4AJUepj44*i&*Sn-c7o8j(;YKtVOMX8J?SRpyy=s^A?c?k4l?IG3;*bCEmW(J zchNLRn(uBnf}xPHeR6(sZ8ov$!f`SeE1__ZJ+;ky1EoU>Ij>!~((T1yyF&}to29gi zOj}|#d0L#zw+mp~@i%Xv!FkP$xO%CeU5}%FQjl5~Yrc(x7$WJ(6jEzRd9Z3V2S&p9 zpRoY)^*!{0zFnaMnWT^FNP4rQa859>cC&f8`#s<$s)qI)8A;}AwsFxO zJVXXNt+FDkz2LQ*SI5Y4an3+NuCA{SlRee0{IaHU`JhryZru#HzhmjF5}v8c9bzCiD(DtT>L9OW+-|oq zVg#(5)`h!#w*ju*sAyDbTq}^kA%UQYZo%5|#R-)ai*+_H6Fa(2wJIcAPKixCJF#-U zBY;eeb=v7#EEYhn{h1+r68S z8c%~pZe?xWbuO0G z&AVK?d94=%xizH`O~K#x+ju#-?^}u_TRoIbCvqf67obyM>qIbHB)!<0fNMAJ*pQ2r z?(h5QfP|@_?qZ?y7DUV3e zz|AV)l@b5cx9ee%t)^wVxjrCxoxz}*Nvsey93-Pf($`)rJsT7zR!WwU#2~DB{lT|C zq5!;0no9qW-nRag7HQ6^enTT z2xVzO?EwLsL93Y;es)JG`_s4xp{`40+)-$CNAuj^)N-@1DuBc@u|9g&{qaJU;2;Ko z)Fu|so4Qz(KItZFmgd}{+z8)SB$IM#ZGveJhGb6{lagU;If3aiffN?ex+~U379kF@ zpfIxp3S}gncNU6I zWCuEW#}tqkJ0za^HY^ZDjw%~V?WqN`G*V>sflF|T&|&ISH1TZQyyc~#aF^g9P7ON2 z79_F3gTcpm0QsaUNCckdlYMTGGh?7I*=)I`S9k9&3oyjO!FC^DpXkcMT4sH_rU`&N zJ=Pk;t^X@@Zxvh?XVb)!QnaDrAh*UHg%7MTi+ctF=-!5i0QutT3URq>RGixgkaeJt zllFrM4Z^#!2Mp#17()!XiqNq3<6h0U`An(Zs6vq~}`=V&@>6swU9k4|X|*8b2tQ?H7>Uulie9m5r6XExQJjCZ9x`7u(jB zHp@lS#k#lc2NCTL*iMf^Q!ZA?!FQGT`G+C`N5^cia1a>>smVNH!_>0P zLBQa{vCkTqqaZsAc6y%4S`9rwA_0SRz>wHj#8KKpG9g z$&wNjo_YFF8FXLb0pu#pdl$sAf&}RtoIs;j$$jDr~agDh2%bX0gAg6+CbzeWVeztIU8=%zi| zV4F2uX&So$G|i5B1w`2NU(2VZz{t9$NwROh*9q;$EmKLd z%ofiRVEW-i3t~Y}In1d~#M-=!Qdv=u^vx$=ZrLzT4Qgt{uq3D~y^07Bk&HE5h)_+^ z6B7qcpD+M+FkdD{X6%Oax$?=7w+eH;WxF?fYS z)YjZhQ*LRhgWOq!yTAL)TV_Ut0VUwI&jVJ4jrY!sL@D&_UlISw+DxS{^50k~QLzR4 zh|-tD_5lRq2vPZiA0qht`Q6Pw)A8Sb{J4=3rtg#gPKiig znRzt{Q@0s|qy_SMR}?}lk_g+BETt_&v04IT2}cRTB4kfK=Y2D7Zh}l%VEzrGh(+xH zGWqxacrDvK?^ct1u^-7#_Qn3*6ZV<@i|o^%qPY!W|K@)s+l#Hzeb{%tEC0!UyJbBQ z_^-(quPV*@IcET2^IgD!PyN#O`uI2dV1sXR^S^huw`qeNKC{v{;5DoH+hrFaE-LvX z{G5n5Vb)$M`RkTsr%L#)qPj2a(?havdvW0)E{E**`*;7oHw6OZ{Xx<$qq?#`X)}ie ze`$9V)+Hs-7o`BLS5TXUw>>35=HT0pPT7L>`SZ`eKKq`#JCXO*vGZ_Gx_y`eWkzfe_XR2F8IdzwioP6Y?i;sKQ1n^&+BXc z^XB^cI{hQr=b!(1d-v9MjQ9ut_VF!m1akLpb}Hfwvva>GUrc&QVuRA@U0h_>RJy|A z`WqwP`#SkdFX#F{Mk}vS(s_*pLuJLES;AECuP>j(_{~25@uw)X+}<|`GNXLkNRyTT z8MI>%)LvCUuD`s0xKGv6$>jdw{g4P_fU*5SS;R7N2ovR-;|u?k|0DmNZuRA^vax(W z$za%E3ixc2eB>Pki!a%jWZyqdlKD4DPX5c=yCaM*jSFjB*4vN9NB{?(&+OQiq#DFL#f;Cu;axVT_{@%tgUr;~JsC$r)GMG6pJ zoA<3=#G+R157#LO4g_B z4OvSAUjIWh{>b25!gYH2vvh;3g$P%9i<98-=}~CS_3a_QFXkfpRgrBL~TXX zDBI3vD@yi%J=~XPNeU2#576YK7a~>^SOhCpr(xQHV^sMq{bf}A=9B;l7mUo%#w=xp4&)ULzPuS#rq1O4 zA{Vhtu~;;1;%O?KK2uhl(t>GZhMM+Rqw)l9Td$$~ZIsXE`bmuB_#4?^w0`oV;;vam zknyrVnH5W0_UG>BK4p-b-&OC*X!3u5?x~~@9JN}CRfN*6Dpp&7@Ujh&J%QMWUF71! z*Gk6rL{vCtTX7vkDPleR&hkN0E0)2X)j8bpDqEbWYMvk6J6%EElmXLrq@Fd_6I?EmI*!S#4f(hpF4NcPd{{FPD&8`+r zJgdfD3Xkzg0Wx<~(#;G)_N;f`sN%6m7=&<5POF3PP!ld=*|dS46+(4CoXEohBRm$1 zOF5L78t4#;Wd@lQLCb$<(b?8!Dt*ZfF6~TD3y=-_oIyY+A-5(ao$zk5JRfBA!q@RL!T3z!-zb6=wIbF% z>rt4Qd8^`E#vpn#DYZ~UN*JS?(*h)ZL@7XMEAfi&nF3^%=cLX=+L_*pmFJ{0H%R75 z@8|y$@n5Aj?x)&QA;XC0&vu`+oy)j@=ku4;e4 zb&xL=E7qvz2>0>U1|jB=)x{!aCHr-y8N$N@e{H3CUWJd*@8~q?zu;Rttq}M@?B3@Y)V<{>tQiC7lo(D-F zD;HLF6!Itk_ouzHjT97BjJSz6nL^7`17sb5Zw9&Gh1E)vH!a|bMjhmLZpE_FL1yO< zl-Zea2am_M@E(;Cri>z1n(O=d!`BLdFcE7{+NFZX_hCB7>eK)UcfRup$;F2^mDxSw zrVf6sw-;Y#BejV2rJPYXGxi~$&3YDTr=uJ187upf7TVVaD~_0OkXo@Sp(dPLq-p6MQwjs}=bP&KKjMA5(omDHdMg&SZQ{vxNfh}sp+m%VXP4+5PGN_@ouH@a<&8iYJNCP_3g-Sg~j+7E8O* zO(v5!_ir9150m@J!+kO){NsMazKJnOztZoM>@(S>{7>=fWRku#$v2;f|Btex-&YPj zDGoBpKk{SeTju}ZU-^E;UJuy@#YvCK`~L1)*)Gmb%yvgR`$mf%{%-3-~abZJ8J*_xBMUf{`I5u*AM=ceE;!7vh$DHfh6xz zJB1&W|Nkic_9Oi(dq@6;KmJ|3$X@$@Kll$e#3nz=@)i%`Pkp)AMcXC*xw}Cp6$c` zm;RIgpa1f%v~RLivHvaqU-1sN`D^T8;v@Sv|0Kzugr8dWPUSP>CsDll{#|~;V)J)w zUw)d&rsSPC&~0`Nd>e6ucf||oIi>GF_-o1KvJX~8h3)^pe}6TQb5^|CtfX_{fKP?b z%MaD$_+O%!4YmYFv*It}xU~_hJwVn0wh*V#z#$|EZa&|z&t!ZK0zy*}%f^ajTUqgc zth!BtIx2qfZ&CWI_>^l@eg3wtI@Y%hq?SJQn!6r0Mn&0Z{@6yGMj!0eRME1~=h*armU-T%9vnalp9 ztr-j{w>&3ZY&g8QD3@jlNIqznL|y6j4W` z{N*UE_#fn7QT7u1n+lX?M~aHQizA5ti!-475aNT?d=s0JO286LPn%ZC`q5H-KXJMF zq4~9BFP2UqIq*BH+Ps26h=mT4ReekcV=MmDsb}FGFQZb9y!QvmqR3HWh z$<4fA(dBmX{g#kQwN1P9HEq+$qLL?xs)vQj}N z-olEtFZW4Tw_wZbVhQ}E7fPbQRr3JzB8oBERCw13VsjY8y53qG4Ru_P*h;KBg z$KI%e2rwl;GWtR8y8;AGf-UTNj^0m`^+`9F2(xHj$U{w(I>=8#!PD|%dKo(yu{r=` zJw)m=U{Q04n$n|rK8P^$URW^5_bvbdU-1t%hd|je;22=DI+y+T`;nC=okqs8KO@E< zs5uMjes5KYx7a~P?*I^{rJrap>(p114w9OAjXH=6gMjzt7^3qSZJyo!*S$qf`mI$} zllz}4T^!mWLwl|5b@VO(nT{zv27gp;lQ_~|(;sA(w_u~XHVI`B3uvo}is>hIpOf7V zfvw&Yqgu~AbUPSLlyqb5{JYP#8HJjpL0N548vw~8P9i+4p8_E9{G<$GDqb!6q+43C zTxKe^{ujDVaMZkpp0tx@q>{x^F;&vW6lOZeN1Z2~7|x&Sbiz7mfVNQYJbn^@=(Kcd0eA=g z*26lYK|A>kov5FYNH`rY@R?%!$)#|6;-7COl; z!Qg2CA`0}nPXKh@iU%udMXan(`o+B|+?_EJ&QB2Ue60JU#&JjT2l+H-$=P zRxC7m(u-il)&@YE=Foht?xKQp0*Jd3g6*E*nx=M^LR>p$07-T~%0IJriEsVR47W-JK%4I20)EP~5$E@x|R8io3hD#ogWAt!P_l zq5ppWxj8qD_YXv_ zMdJ@N$QDYd&)+aI1GrApO`00~zmTCx<_jImHG8Sx5Qs213LiRm*xfomaBBAM&pcTl zrMm5k=d=zxr+L|3=NA>y@NYBkaY)f&{dWeC3XkNr1sc7${-QlzNrA+jfj^{T#)}o_ z+^=18=5PYEX9%%wqVlQ3EEA-p@9dL07v_gB;_X@CWhUh>;>?LDyP{s=K0dsqtSSKbX~JpcI0N{{RJPHm z%|9n$?)2j3?r}a!=q<&#a@>TTEyu92O){v_KVDk}H2E71u6Z3!K-{3ZbNi<^is!Na z0w>HvK{B{a3QbxN=lEd!p-W*{)M=2ivfcA?McdWzt!xKD=y^d(vEc}s^%pdR4p*qX zL{se*SRZ?79N%jUhxeh$Y+BAGHanm2@^F-$dWdx^fbkA$`jlYvdl;Kd!0S7?yGMv~ zeN7bllKHz0j#b-HkS}{iRrUC`K-vZZ7^4`FD;qjM>#q?!^;C!Mv|z$M^(7~5GY$e@ zRQfTCw3IZqOcu@~dyiQfquq!>s{&c)Pw&DS zXDm?HYBg<%ABKO3TXqb~;F5Oe%p!Dm6_HrW!)FyjHSz$q5Z2tFs2gK0Gt-=OwZwlR z0YL!?*XrEAA@0a-9t0~ZiW|#$8zBnwZh=q}dD-`1Ek^nau~eh{W=sLIZHH;krklWS zj}WAHDUsbzSZ>e%+1-bSfABg9-*cJYJyYsw=_o%yz%{)u?E@moD7NWBw|>80Af5)0 zJz8^863Yzca~V5EMEMx4R54010q}jRRKwp8EZoaFl}1{c43-Y9vI{9JL05Lr5{?BE z8!0{K+-Ehg!xFE-cxQ@43(H2|ZP5>IffShssRvGQSu_E^v(&L{G&A2$_y_DH!u|z> z5wAs*_yj2g=$3{&r3~u>_F}wL<$?g6s2ZKQicI9@b{TJy6+cn>V z&$tb(xCc56g)~ABs#i*h@HR;wVB#<&i)4ixHU^?R-W~yFGaiXj%`uRh$Nd}gnI65S zK6ah8ArB84jM_UKJuS`-8sR7-v7#qnylDK1wFw60P!7b}TR+qA@(C^t8+hCn|Bl=@ z0AMNG`tl_{ez@~1kKUcmV|bSU+j&b0A%^9!cfXf};=o){o%rNHJPuw6TF!e`nTP<2 zr(pFj3QiBse8)&hAEoM~VFvxwyVapB7sG%%x=$hq~l2S3^MJG28|6HPc zwTCs--04VzAnP|O!Mu&Qv|kN25Zhjfd1~4?*4bpDjN1MRKW+q9Gts;F2~MFmSnz#{ zCo;1}Bi{pFY?@(xX=V;Nc{x@0r-Efp5=AQw56%x7Pc4EJwtEx!_DGYwTgF%NkH*e6 zWzCWs*=FyHr&qfl1Ak&Ai3nim+Xlp^9Bz^EqQe{}R>Q2iI*8-$4w-jY3+q+d424MJ z!U~$UE>lPjB1jXNN>k#nVgsZO--SG~CZtrRPS@%+>BUBD5Rz_#Rl}$9%lu*Sp(Rc; z`xNH$kZ|oNNt{;Vlno&^Fvq9h5qT*GR(3fro*RQtRUS0*@7Q#16j5NAJbbb#?k`Q3 z$%>z!0b!Ak#S>q*RHYhN&KZ$e{(^LrM0s}H*<%D9%Ke(te@_Ljux6{BFIVKo;1W`M z{WgC=zQ?&kSkHWzC{?Wj3`Yn)gM25P02|nvd{oo1&6+|pcArW z`0Eu^wQOI{z@&MX`CqXc+zJ=Wj!LI$#4K}Cn`4q{^Kh9HC*DptAt@9o$z9B3+Z;_B&Fzu&Q&PUOe}WpD65lcPAMd zhLlJ9x~vSJ!Vw&|w;2VegaHn>g~_BQoJSM87P!_H(-NtP($SrL8_HH3$e-9U@=Lg{ z)jK=R)T5M2+S46?X+&R+%8{Wh@M8-~GL4VW<#J4mB#b(ye1SPLe4fUr;RzDNCBFWb zUbcV(I~ilz3TE=ZpWiAFz@;+=hH>h{V*FD|Cn(w3owRx`G_3D6&6&m z+fHZfEIMfaR_`jAXH3^PvP$Nb!R~xMx{Pp=XtXj&XN@8mG7&RDreG)3YPgb(?vDEO zYnL@#uc#0@5pJbP?4b1=EARi2ac0}zIQ8T z*!Wyn3BdXrs+vm?C1_<~}`MhH?#yZ7j*mZA|c8RH9?YeZodh zNb_;>CN3LoY;BZUhe2nE@jzPTOKOy!*pkdN=rjI1aBk{UK4?E1&JwIW5~Mr+-r8%K zZ|p0uiJ7=*E0j?Ccto!ho}wHoGZCa^(#LN^47Ed$V$vf+MT}%C5=Om-Tn$T{tW|+G~(t9m_G!N%nWgoQlbO!9(cjJ7Cd~}DM ztf5*%&DGQI35xyDO^4iCDN9>~^Q!Bi%;o_DvRW#hg>AXTF}OK~v6U*wBA_-cdn*Qt z+AD;rY;SAr?R*AhJ1Aj|lHVkR@DAWZSU?HJ6G(1vF%b}|BhP4U^OYY<`dpuMr@eOhc#P8y}jEop281PSpF$y`F@fdbF?;10^jjxnPbOl z`@VGXDfH58r2GnDjdE6Xbk53ycq!18uvWAmhq5|CwWfRNzW#m@bU{!tZK#VK-k@G9 z8EmTOM$TaiIf;9@Bg|iK*u;2ZyR+HqBVe@q!8&I2R6XC=w7zHFZ=Dplyp;*u5oZSS`aK-eUiQgN>D0nV_sxdy;G2IlcGd0cSbf&S=w_?RX3rnE zXdilSD5#5=}}C192joXZuINPwAAt078QdcKO%@~e&C>rS6n zq4SpL+h(JA^6N*JQmTY?%lo%K5?_t^u@reOK+`=~{a)8+@Y)xk=vEfrf~u&p@k4#N zp_E_-(Wrrfaqln9c#|b!=3jpVtNrpLJb6b)pLFaC zPj3=UIv0lQHG=W=>$8URSlqs;AnDhC@-r*?>=|@mypyh+>d+EWXrU5{ItvX(5~r`& zj?&j&j_6_d!H*;(c*t(2wz4uY1KtxPmgXxE=N5b#q3^r&0J9QK(}2$QnB(QqEVb{cJIOB)YZzZND{VUi(C=K|RhD=| zo55^R5s=?nFnH3jb-mvOQV`ZVtIhZ6dfcdAzrMY4cTvaV<$O6h+<#3>X&;68wnWF28=wT+j**&9 z)+z&_LcNJ)9CM`VTTWww?FGN#B<6FlIJ^9P!Q}Z9A6tfMe=Z>`2`XCj&!9lx-#K7< zxN#YO`ote^Z@-XePWTCIy9x$e1KI&*KUKJT;ikhwk~U{0Z+3Q>4)+67{Kd9*zyG`a zGb>(Hnw0MN7qrWV8~d5ygi#_;%W9|E6Bvz0y9a5Dc2>c~V5q4cm~x;o7f}(R)m-@D zq?CBVBn5q)ZrJty8_huHYl$X$^UZ%3N|R?0G_zz%{iFmcfa7JdleksSqdEF{@^b1e z82I}9`e*iwBv(pVWeTNUyEzMH9QBW&*W^r=V%xa&WP>JUEzWq?qjhRgjM(&S-D%L0 z?ZmQ1gynpFXc(i?i%fvc^JK|Z>Wm2e{LN1x;@zOYf9YbaNAs`QVlA`u(+2X9;S1lQ zsF5!pkQ691MWA+LAnfC!y+W*xpyHx z$O`IX8&F3ET>fA#CAgyT3Wa`rbWtKqUh_MwmW5(Q+$Ifph*JL)$SLj72SkizTRMqo zY;ay3qlSO3%AsUfBUJPwE@40lg+(EXJC^GY1pf@xcgn8|mi0+Wg7oQRhcj!sz@*fKtiVm6$k&wLK^Q}sma*^YyX z_(Nka9GvuWeUFP6wJro|toI8izDKCj<(H~UZKS!stKm_YW|WJka<%!W&v!v0c#4(e zv$%k38}wbl>PwEbpSoU?Ru0U``j2pw(lA<&`NPu!hfXF?kuCoW(AA37n;fgxdg!>A zvmTDk%fmMoZVHsW_S~3C;Q7)xnDZ_$Zk7VHpCL2fq$pz_ZV7!t85h^67Vi3JF~1dM z<2~yHpyi5DDu3zYUw^*L>)qe-W27*TCyZU$C7`QV@KD)Ngd4brcpO|R1L%txZXgxI zjWvx(^Cw$yDQc)9DcP$dc#g^Lx!el-7W0s)1$zLh%iHGI7>W}~ep?C9 zs=&iQ!?Uuuv}CGL&JNsCv_>DF%5w^hWBg?_loFd6zr^#e=1frRbFlD|(0O%+fcCe| zT#d%!6o`x+UxB}gRg&w|?@u7YrqU0d_Ptokl=F>~8o1>Nf;#M_t)-ZYBc#$*d6*g3 zGk`c++(MIF3?*yaiS5AeJ8PB%C$vOfW(hi@O&@4F9_kA{cpP|3-$KUo>)oeq4;{(Qr!}g~yt}-RE|~(BduHLNI05QceKR zNL)2@a`M={M|cjFEo6vuT%u3DT7sJ)z#4w+HC_}mS+qW`-huJSc|a5$e8A8xjnEsd zCzj=1KFiEbR%=dVhgV-NZC&Qle$C1g1;rkiB+Nwgeaoep@v!TO2$n$^2Mp-%H5#eL zHd%g|bZWCf;MLx@*Dvi0yF4OlMD#37+&s_t(Q$N`1W*4VE5}Zj-9Svkqt?>=8E*INFK%;{hTQocM(#ZF z#5>K~FMsJ7?4~h7DJCjbvzTdW#ChsTGJxg0AprtmZtzKsCyV=j@$n_MZ{-AH8`Bn; z^*`$^fMe zz`z2HsBh)Q&HHII&6e@OL~#~^jbU2-<8b3Na<>Rx24hb7OW9hP1&URpH6K)C8FnTH zaT_3OtQ@+K2m6G5#lg;R`$C<9_IL)VrJ3)q&YIi#K!@pO!+`mh0R6C8WY9jmA-)3> zwb--c62v+>O4d%r2Ws>^o%I}jNOjunzAJ7xs9~nJQ80PXx{0e(E=B76c6MA=%b?xDSdH;N4LVhEW8}A;RMkqGL{uUAn zv7Gt)qWrhLUOpGR4v0`jW}d!sd5DOTWq;%p0Y{LM@g$u~_mK-6g_aq5XQx5VuG^Zf zW{+<8qCxhHj^7SFMDRi=&_FpUXHF|PttexWLUhI&XY9C5fyo1@5oJ*aY#hl>S13oKhBKI9T?!9$xBNlnZ&K@xFk z1Ou0aVq3<+&7OtqMd#{NNAe7SDni2T6_V2K03QJ--l*{C(APgo2_Z63w0N4Q?Rbsw zQ&}hcxrk6x#EyS+#M(K>>$a+E;F1%h@-++>4zv%*Nz-tNgvsS_3bYmhz9iGu_F>9Y zZ?s$M%E!OnHR1@^9YLpDYA&wD=2<2HRa7sVr^rws`FN-ZdSncdBlAQ0G)r2Uzbi*9 zzC?oN1c8zQ6`Qz2HK_K;Sv~}fJa^qgC3|ER6BaEwTLX}S$DaOt*6yDqW%GDF4n2aa z_QHg(MyiEN3V2GNZd`aTTIsWUaD1&)2Q}quFLq=R9wQ0MM)Xp#U&AaSYa?=`U|Z!J z(N}CQHvgkca8u*WY>6oKxUXGUDVCTLU&Zie&+Op}kaBkJoS^pD%tEuf%XayX;jf!F z#Fh@7L;$l`XCYUIUBh_2X5}Ww3&@!RXnKNH=J+I7!LPvc*0h62*F+CWOp|0V6k{3g zt1~>&NyY!ReaHn*4yN>9`)KP z2wm5OZ0vEGAhrxafn%SKqj3yLw6?5~3FD8D!w1o&I=yMNR35`FhGDhLC*>`$^Nqd> zGPF$zWxS-!r6K5Feg=O2a&=6?&5wWGaKS5ocTN10a8I8R!c=fr_3kHS@OuB@+c}CR3GjoJPW5PVUT!v&h zqlalj(b-nALbdwP(MKt(Uy&Y+!Ki3dC>qGmbia<0UWY4wxxBsoxm+Dz9lyF%_E(W; zj*0#l7+@_BFvmy0F4q|Ig$^tj8CAeeU-Kx2`uz7{F%rl7#}9q=@0RqEH#avD{?DUd z?6NhmY zD9zGC#%A7Ue>XSdxZKO!+}ziKbTdr;iUD&XT|7D#rTz_I(+XspxRd1c1Zt2seo{^9 zZ=k)P{tc6jDjPq)h&g_lo)=%Y8d|89i(mchKX`L9d-=tm{=3n~ zE&qBS)P5@BGy2HofSW5XBc}ou@IW_42o(mM+KOqobeOIg{ne-0K-{*;I55K!O-Umf zFxb9o*N(-h?ZWy?>fQ2&;t(s2z67dR1hRM%g3JQI8DrRP!8+*6Z4-qj=^V(kBQvpe zhM^`?Z_A`L$Y}50(dys68{fn4Yz!op5o@P`c7z};+JstLG-?7eQ6=YL zRwqL4=s4|8%kP8&f5D_W$3|AGJJY{OBn^XwO9A@ZTvrjyxjh`qkUmw#4+L;{S}F0J zc(lDK>Gbj3TMVpE26iX1&>Cf0^H-kCXw~?q%Bs+?#PoNYOO_hJV?Q{?*|>2PrGM(A z?x@K3@9&W!gjJ~Kk9>?WhQOk*ej3#k`B^OEE*^4fBJvY8LcS_Cq*_CWz=qJwo!}LHUzkoI~U1eeM9edbNdl`{)1s*0Kpzo$jY7<=GsWcYG)c ztd?dda2RD=3O~p%ezkIgm1_0$exPQGcOpX_@vDk5p1T;tJUY$A&<{oEX;=8QM$JiA z)G>m&;cE1$h{+hgxaz%0zFSXc*PA~tDpHc>nf4zk^OxI3wpf{_m)hAqT&S% zWtXX)D|W!5FA}nqB8aC0oCdKy8wvQx*{qI%wt^2ia06s%3Z=vgjrY#B%S+)Zl$P(D z5pW258N5UsNpnKwSsp)`2Z!w!ed5kZ)&7c40jY-SiK2InV%6IZ5PZ1Bs-|I%GFq`*^ilfD8^h6=yestB-+jIn3w#5Zd0NuS zsuuh*^unYptu56RSg49)r+Lx&CCmN8a9Uv0QSwv#Dk=e3@i>9)P^H1=`$J2lwfH_^ zl?1-yR5$zaiWMB|JNL@_^L2;hTSU%*R5%&E=2}pw;0OyB9{I$_)G$`N>0YyV_>}Z- zjG`(b$gM;d-;QMEF7kM7Lg09mgOsW0)0u|w-BNu{` zT1VGMn8`r)Bn*32Eh2qt<1ZO3fGBl^>EShzwft+&;4#-)$ak*re}OV^tGyN9Li1(% zLD z<2aiSRSC0Xvi6V7%Zx=^6q1#1)vZL)cpO8Ej%R>DW7J0iaF#%_+#5P!t_k?_w`ymr zNsxvlYU-aRXJdUF2Sp|F71Jm|!zY3^U(XRW2V~qIn#(vzV;(?*`9mwrgV?*GmcqPq zPThSBgs9STtZTo)eje+x9_muED_SH}=`pKx?zc)gS3bCack#za3nPQqa>9>D4aTa+yY%_+-tR zg_YZX)>oe^)2WR}!Cv_Q)OvGwH8}wZwNQ4%jij_XI zwqerR$FHO%^?!ld-{N<03h+5I%=Z>5eC=sAO06%Xpc_8XSyWe`g+`?tHgzLuLt+bP z+^_Mx_G1whI)}z4)lj?VRK7`dMU}OgFH>oeG#;F*JLO~7q^o8~Ev1QBT~dW-&=T=6 zOIPurPV~-NU83zKkVvV3C$~Yw1qNXsS-j)|KG&XN0)M%GU4bVS9=GbghSyi^_UEtD z+fN!>NEztn9Fb*5gX(>0Apn`R$d33$;%c2W*yUiusM7|LsAqo<41N{&a+d37$h~j` z76EYa&we9p{>vOAL3I4IFj&M*1OeK|HAs~v>lJ6n_(e=B6Z=Yx{Y