diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..be177c22 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git +.idea +.tx +.env +*.yml +.*ignore +*.log + +**/*.pyc \ No newline at end of file diff --git a/.editorconfig b/.editorconfig index 03b9eff4..62cbbc4e 100644 --- a/.editorconfig +++ b/.editorconfig @@ -16,3 +16,7 @@ indent_size = 4 [**.{yml,yaml}] indent_size = 2 + +[**.sh] +indent_size = 4 +trim_trailing_whitespace = true diff --git a/.env.template b/.env.template new file mode 100644 index 00000000..28cf0f5b --- /dev/null +++ b/.env.template @@ -0,0 +1,19 @@ +DJANGO_SETTINGS_MODULE=volunteer_planner.settings.production + +DATABASE_ENGINE=django.db.backends.postgresql_psycopg2 +DATABASE_NAME=volunteer_planner +DATABASE_USER=vp +DATABASE_PW=volunteer_planner + +ALLOWED_HOSTS=localhost +SECRET_KEY= + +ADMIN_EMAIL= +SENDER_EMAIL= +FROM_EMAIL= +SERVER_EMAIL= +CONTACT_EMAIL= + +EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend +SMTP_HOST=localhost +SMTP_PORT=8025 diff --git a/.flake8 b/.flake8 new file mode 100644 index 00000000..4cdc9c07 --- /dev/null +++ b/.flake8 @@ -0,0 +1,5 @@ +[flake8] +per-file-ignores = + volunteer_planner/settings/*.py: F401, F403, F405, + +max-line-length = 88 diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000..a8e3e054 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,5 @@ +# To permanently auto-ignore the revs in this file during `git blame`: +# $ git config blame.ignoreRevsFile .git-blame-ignore-revs + +# initial re-formatting with black +d7a57193f9e8c9cd4c6ed00d2f1e960ef5a5042c diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 00000000..160740ee --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: bug +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 00000000..55b58f4e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Idea / Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your idea or feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..731d0790 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "pip" # See documentation for possible values + directory: "/requirements" # Location of package manifests + schedule: + interval: "daily" diff --git a/.github/workflows/pytest.yml b/.github/workflows/pytest.yml new file mode 100644 index 00000000..0b04624c --- /dev/null +++ b/.github/workflows/pytest.yml @@ -0,0 +1,136 @@ +name: Check & Test + +on: + push: + branches: + - develop + - main + - master + - release/* + pull_request: + +jobs: + check-migrations: + name: Check Migrations + runs-on: ubuntu-latest + env: + DJANGO_SETTINGS_MODULE: volunteer_planner.settings.tests + steps: + # Checkout the GitHub repo + - uses: actions/checkout@v2 + + # Install Python 3.9.6 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: "3.9.6" + cache: "pip" + cache-dependency-path: 'requirements/base.txt' + + # Pip install project dependencies + - name: Install python packages with pip + run: | + python -m pip install --upgrade pip + pip install -r requirements/base.txt + + # Check for missing Django migrations + - name: Check for missing Django migrations + run: python manage.py makemigrations --check + + check-messages: + name: Check Translations + runs-on: ubuntu-latest + env: + DJANGO_SETTINGS_MODULE: volunteer_planner.settings.tests + steps: + # Checkout the GitHub repo + - uses: actions/checkout@v2 + + # Install Python 3.9.6 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: "3.9.6" + cache: "pip" + cache-dependency-path: 'requirements/base.txt' + + # apt install system dependencies + - name: Install apt packages + run: | + sudo apt install -y gettext + + # Pip install project dependencies + - name: Install python packages with pip + run: | + python -m pip install --upgrade pip + pip install -r requirements/base.txt + + # makemessages + - name: Run Django management command `makemessages` + run: ./scripts/makemessages.sh --all + + # checkdiffs + - name: Check for uncommitted changes (in .po files) + run: ./scripts/checkdiffs.sh + + # Check for fuzzy translations in .po files + - name: Check for fuzzy translations in .po files + run: ./scripts/checkfuzzy.sh + + # compilemessages + - name: Run Django management command `compilemessages` + run: ./scripts/compilemessages.sh + + black: + name: Check Code Style (black) + runs-on: ubuntu-latest + env: + DJANGO_SETTINGS_MODULE: volunteer_planner.settings.tests + steps: + # Checkout the GitHub repo + - uses: actions/checkout@v2 + + # Run black + - uses: psf/black@stable + with: + options: "--check --target-version py39" + + flake8: + runs-on: ubuntu-latest + name: Lint with flake8 + steps: + - name: Check out source repository + uses: actions/checkout@v2 + - name: flake8 Lint + uses: py-actions/flake8@v2 + + pytest: + name: Unit Tests + needs: + - check-migrations + - check-messages + # Run on a Ubuntu VM + runs-on: ubuntu-latest + env: + DJANGO_SETTINGS_MODULE: volunteer_planner.settings.tests + steps: + # Checkout the GitHub repo + - uses: actions/checkout@v2 + + # Install Python 3.9.6 + - name: Set up Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: "3.9.6" + cache: "pip" + cache-dependency-path: 'requirements/base.txt' + + # Pip install project dependencies + - name: Install python packages with pip + run: | + python -m pip install --upgrade pip + pip install -r requirements/tests.txt + + # Run pytest + - name: Test with pytest + run: pytest -vv diff --git a/.gitignore b/.gitignore index 2890893d..78260a00 100644 --- a/.gitignore +++ b/.gitignore @@ -13,5 +13,9 @@ db.sqlite3 /.coverage *.log .cache -fabfile.py /var +.env +.ash_history +.python_history +.venv +.python-version diff --git a/.tx/config b/.tx/config index 76918ef0..e97ebeb3 100644 --- a/.tx/config +++ b/.tx/config @@ -3,7 +3,7 @@ host = https://www.transifex.com [volunteer-planner.django] file_filter = locale//LC_MESSAGES/django.po +minimum_perc = 0 source_file = locale/en/LC_MESSAGES/django.po source_lang = en type = PO - diff --git a/CHANGELOG.md b/CHANGELOG.md index 9b69fcba..16bfb8da 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -29,7 +29,7 @@ All notable changes to this project will be documented in this file. - [UI] Display a warning when joining overlapping shifts #395 - [UI] shift managers can see the e-mail address of approved and pending facility members to contact them - enhancements to the excel document that is sent to shift managers -- Some javascript files from different CDN are now included in Volunteer Planner distribution. +- Some javascript files from different CDN are now included in Volunteer Planner distribution. - [development] .editorconfig (PEP8 style) - [development] new docstrings to source code - [development] support for Docker containers for the test/development environment @@ -38,7 +38,7 @@ All notable changes to this project will be documented in this file. ### Changed - [UI] better alignment of page -- [UI] Additional information - if shifts span over midnight there is need of additional information to differentiate between shifts that start today and shifts that started yesterday. In these cases the date is shown in the field where the time is shown. +- [UI] Additional information - if shifts span over midnight there is need of additional information to differentiate between shifts that start today and shifts that started yesterday. In these cases the date is shown in the field where the time is shown. - fixed issue 360: From field of emails is now DEFAULT_FROM_EMAIL and not anymore the fake from email of the shift manager. - All used CSS and Javascript files are delivered by Volunteer Planner (instead of using some CDNs) - text of HTTP 500 error was shortened. diff --git a/Dockerfile b/Dockerfile index d74376fd..0542736a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,21 +1,61 @@ -FROM python:2.7-alpine -ENV PYTHONUNBUFFERED=1 user=vp vpbasedir=/opt/vpcode/ +#FROM python:3.6-alpine3.7 +FROM alpine:3.14 +ARG vpbasedir=/opt/vp/ +ARG DJANGO_SETTINGS_MODULE=volunteer_planner.settings.production +ARG SECRET_KEY=local +ARG DATABASE_ENGINE=django.db.backends.postgresql +ARG BETA="" +ARG django_static_root=${vpbasedir}/static + +ENV PYTHONUNBUFFERED=1 user=vp +ENV STATIC_ROOT=${django_static_root} WORKDIR ${vpbasedir} RUN addgroup -g 1000 ${user} && \ - adduser -G vp -u 1000 -D -h ${vpbasedir} ${user} && \ - chown ${user}:${user} ${vpbasedir} + adduser -G ${user} -u 1000 -D -h ${vpbasedir} ${user} && \ + chown ${user}:${user} ${vpbasedir} && \ + mkdir -p /run/vp ${STATIC_ROOT} && \ + chown -R vp:vp /run/vp ${vpbasedir} ${STATIC_ROOT} -ADD requirements/*.txt ${vpbasedir} +ADD ./requirements ${vpbasedir}/requirements -RUN apk update && apk add musl-dev mariadb mariadb-client-libs mariadb-libs mariadb-dev postgresql postgresql-dev gcc && \ - pip install -r dev_mysql.txt -r dev_postgres.txt && \ - apk del --purge gcc mariadb-dev mariadb musl-dev && \ - /bin/rm -rf /var/cache/apk/* +RUN apk update && \ + apk add --virtual .build-deps \ + gcc \ + jpeg-dev \ + musl-dev \ + postgresql-dev \ + python3-dev \ + zlib-dev \ + && \ + apk add \ + gettext \ + gettext-lang \ + jpeg \ + jq \ + git \ + postgresql \ + libffi-dev \ + py3-pip \ + uwsgi \ + uwsgi-cache \ + uwsgi-http \ + uwsgi-python3 \ + && \ + pip3 install --upgrade --quiet pip setuptools uwsgitop && \ + pip3 install -r requirements/postgres.txt ${BETA:+-r requirements/dev.txt} && \ + apk del --purge .build-deps && \ + /bin/rm -rf /var/cache/apk/* /root/.cache ADD django-entrypoint.sh / RUN chmod 0755 /django-entrypoint.sh USER ${user} -CMD ["/bin/sh"] +ADD --chown=1000:1000 ./ ${vpbasedir} +RUN python3 manage.py compilemessages --use-fuzzy --no-color --traceback && \ + echo "Translations compiled" && \ + python3 manage.py collectstatic --clear --no-input --traceback --verbosity 0 && \ + echo "Static files collected" + +ENTRYPOINT [ "/django-entrypoint.sh" ] diff --git a/README.md b/README.md index e72693e9..df7c1ab2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,4 @@ -[![Build Status](https://travis-ci.org/coders4help/volunteer_planner.svg?branch=master)](https://travis-ci.org/coders4help/volunteer_planner) - -# volunteer-planner.org +# Volunteer Planner Volunteer Planner is a platform to schedule shifts of volunteers. Volunteers register at the platform and choose shifts. The admin of the website can easily add new organizations, places and shifts. The software has a location based @@ -8,15 +6,14 @@ Volunteer Planner is a platform to schedule shifts of volunteers. Volunteers reg workplaces) - it can be used for a variety of purposes. ## Status -The project is currently running at https://volunteer-planner.org/. +This code has been used from 2015 to 2018 and since March 2022 at volunteer-planner.org. ## Work in progress There are some feature requests to be implemented in the future. The software currently needs a centralized administration of the shifts, but it is one of the main goals of the current development to empower organizations to schedule shifts for their facilities on their own. -If you are interested to join the development team, just make pull requests or come to a meeting in Berlin/Germany: -http://www.meetup.com/de/coders4help/ +If you are interested to contribute, join the [developer Slack channel](https://join.slack.com/t/coders4help/shared_invite/zt-1520v8cef-DytzxhO~ubmTrX0CdVcpxQ) or create a feature or fix pull request directly. ## System context **User**: The volunteers and administrators just need a (modern) web browser to use the volunteer-planner application. @@ -89,7 +86,7 @@ If you have questions concerning our workflow please read the #### 2.1. Create a virtual env -Please refer to the canonical [virtualenv guide](http://docs.python-guide.org/en/latest/dev/virtualenvs/) for installation. We suggest you create a virtualenv named vp - so you can easily switch to your environment via +Please refer to the canonical [virtualenv guide](http://docs.python-guide.org/en/latest/dev/virtualenvs/) for installation. We suggest you create a virtualenv named vp - so you can easily switch to your environment via workon vp diff --git a/README_DOCKER.md b/README_DOCKER.md index 69783c89..66d888e6 100644 --- a/README_DOCKER.md +++ b/README_DOCKER.md @@ -20,17 +20,17 @@ By default, the application will be using MySQL. If you prefer PostgreSQL, edit the `Dockerfile` and `docker-compose.yml` files, uncommenting the PostgreSQL related parts, and commenting out the MySQL related ones. -#### 2.1 Initialize the DB container +#### 2.1 Initialize docker network, volumes and the DB container -Run `docker-compose up db`, and wait for the initialization to be over. You can now kill the container with `CTRL-c`. +Execute `docker-compose up --no-start db`. #### 2.3 Initalize the web container and run migrate management command to setup non-existing tables - $ docker-compose run --rm web migrate + $ docker-compose run --rm django migrate #### 2.4 Add a superuser - $ docker-compose run --entrypoint=python --rm web manage.py createsuperuser --username admin --email admin@localhost + $ docker-compose run --entrypoint=python --rm django manage.py createsuperuser --username admin --email admin@localhost You will be asked for password twice. Remember that password. (Sorry for the lengthy command line, but our work to make the Django app shut down properly removes it's TTY access when using the default entrypoint.) @@ -66,14 +66,14 @@ The final step is to update-initialize the database. $ docker-compose rm -a -v -f $ docker-compose create --force-recreate $ docker-compose start db - $ docker-compose run --rm web migrate + $ docker-compose run --rm django migrate If you haven't created the superuser in the new database environment, you need to execute the command from above to create it. ## Create dummy data If you want to create dummy data you can run: - $ docker-compose run --rm web create_dummy_data 5 --flush True + $ docker-compose run --rm django create_dummy_data 5 --flush True to get 5 days of dummy data and delete tables in advance. diff --git a/accounts/__init__.py b/accounts/__init__.py index 6dc654c2..2c1480fe 100644 --- a/accounts/__init__.py +++ b/accounts/__init__.py @@ -1,2 +1,2 @@ # coding=utf-8 -default_app_config = 'accounts.apps.AccountsConfig' +default_app_config = "accounts.apps.AccountsConfig" diff --git a/accounts/admin.py b/accounts/admin.py index 25aafe58..7ddb57ee 100644 --- a/accounts/admin.py +++ b/accounts/admin.py @@ -1,47 +1,115 @@ # coding: utf-8 +import logging from django.contrib import admin -from django.utils.translation import ugettext_lazy as _ +from django.contrib.auth.models import User +from django.contrib.sessions.models import Session +from django.utils.html import format_html +from django.utils.translation import gettext_lazy as _ +from registration.admin import RegistrationAdmin +from registration.models import RegistrationProfile from .models import UserAccount +logger = logging.getLogger(__name__) + @admin.register(UserAccount) class UserAccountAdmin(admin.ModelAdmin): - def get_user_first_name(self, obj): return obj.user.first_name - get_user_first_name.short_description = _(u'first name') - get_user_first_name.admin_order_field = 'user__first_name' + get_user_first_name.short_description = _("first name") + get_user_first_name.admin_order_field = "user__first_name" def get_user_last_name(self, obj): return obj.user.last_name - get_user_last_name.short_description = _(u'first name') - get_user_last_name.admin_order_field = 'user__last_name' + get_user_last_name.short_description = _("last name") + get_user_last_name.admin_order_field = "user__last_name" + + list_display = ( + "user", + "get_user_first_name", + "get_user_last_name", + ) + raw_id_fields = ("user",) + search_fields = ( + "user__username", + "user__email", + ) - def get_user_email(self, obj): + list_filter = ( + "user__is_active", + "user__is_staff", + ) + + +class RegistrationProfileAdmin(RegistrationAdmin): + def user_email(self, obj): return obj.user.email - get_user_email.short_description = _(u'email') - get_user_email.admin_order_field = 'user__email' + user_email.short_description = _("email") + user_email.admin_order_field = "user__email" + + def user_date_joined(self, obj): + return obj.user.date_joined + + user_date_joined.short_description = _("date joined") + user_date_joined.admin_order_field = "user__date_joined" + + def user_last_login(self, obj): + return obj.user.last_login + + user_last_login.short_description = _("last login") + user_last_login.admin_order_field = "user__last_login" + + date_hierarchy = "user__date_joined" list_display = ( - 'user', - 'get_user_email', - 'get_user_first_name', - 'get_user_last_name' - ) - raw_id_fields = ('user',) - search_fields = ( - 'user__username', - 'user__email', - 'user__last_name', - 'user__first_name' + "user", + "user_email", + "activated", + "activation_key_expired", + "user_date_joined", + "user_last_login", ) list_filter = ( - 'user__is_active', - 'user__is_staff', + "user__is_active", + "user__is_staff", + "user__last_login", ) + + search_fields = ( + "user__username", + "user__email", + ) + + +admin.site.unregister(RegistrationProfile) +admin.site.register(RegistrationProfile, RegistrationProfileAdmin) + + +@admin.register(Session) +class SessionAdmin(admin.ModelAdmin): + def _session_data(self, obj): + _session_data = "" + decoded = obj.get_decoded() + for key in sorted(decoded): + _session_data += "" + key + ": " + decoded.get(key) + if "_auth_user_id" == key: + try: + user = User.objects.get(id=decoded.get(key)) + _session_data += " (" + user.username + ")" + except Exception: + pass + _session_data += "
" + return format_html(_session_data) + + _session_data.allow_tags = True + list_display = ["session_key", "_session_data", "expire_date"] + readonly_fields = ["_session_data"] + exclude = ["session_data"] + date_hierarchy = "expire_date" + ordering = ["expire_date"] diff --git a/accounts/apps.py b/accounts/apps.py index 29b11ce9..5a38560c 100644 --- a/accounts/apps.py +++ b/accounts/apps.py @@ -1,16 +1,16 @@ # coding=utf-8 from django.apps import AppConfig -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class AccountsConfig(AppConfig): - name = 'accounts' - verbose_name = _('Accounts') + name = "accounts" + verbose_name = _("Accounts") def ready(self): - import accounts.signals + from . import signals # noqa class RegistrationConfig(AppConfig): - name = 'registration' - verbose_name = _('Accounts') + name = "registration" + verbose_name = _("Accounts") diff --git a/accounts/auth.py b/accounts/auth.py new file mode 100644 index 00000000..0885fdab --- /dev/null +++ b/accounts/auth.py @@ -0,0 +1,22 @@ +import logging + +from django.contrib.auth.backends import ModelBackend, UserModel + +logger = logging.getLogger(__name__) + + +class EmailAsUsernameModelBackend(ModelBackend): + def authenticate(self, request, username=None, password=None, **kwargs): + if username and "@" in username: + try: + user = UserModel._default_manager.get(email__iexact=username) + return super().authenticate(request, user.username, password, **kwargs) + except UserModel.DoesNotExist: + logger.debug('No user with email address "%s"', username) + except UserModel.MultipleObjectsReturned: + logger.warning( + 'Found %s users with email address "%s"', + UserModel._default_manager.filter(email=username).count(), + username, + ) + return None diff --git a/accounts/forms.py b/accounts/forms.py new file mode 100644 index 00000000..ea4ab386 --- /dev/null +++ b/accounts/forms.py @@ -0,0 +1,41 @@ +from django import forms +from django.core.validators import RegexValidator +from django.utils.text import gettext_lazy as _ + +from registration.forms import RegistrationFormUniqueEmail + +username_validator = RegexValidator( + r"[^\w.]", + _('Invalid username. Allowed characters are letters, numbers, "." and "_".'), + inverse_match=True, +) +username_first_char_validator = RegexValidator( + r"^[\d_.]", _("Username must start with a letter."), inverse_match=True +) +username_last_char_validator = RegexValidator( + r"[\w]$", _('Username must end with a letter, a number or "_".') +) +no_consequtive = RegexValidator( + r"[_.]{2,}", + _('Username must not contain consecutive "." or "_" characters.'), + inverse_match=True, +) + + +class RegistrationForm(RegistrationFormUniqueEmail): + + username = forms.CharField( + max_length=32, + min_length=3, + strip=False, + validators=[ + username_validator, + username_first_char_validator, + username_last_char_validator, + no_consequtive, + ], + ) + + accept_privacy_policy = forms.BooleanField( + required=True, initial=False, label=_("Accept privacy policy") + ) diff --git a/accounts/management/commands/clean_expired.py b/accounts/management/commands/clean_expired.py index e5d1eca9..a68f93fd 100644 --- a/accounts/management/commands/clean_expired.py +++ b/accounts/management/commands/clean_expired.py @@ -1,28 +1,32 @@ # coding=utf-8 -from django.conf import settings -from django.core.management.base import BaseCommand - from datetime import date, timedelta +from django.conf import settings +from django.core.management.base import BaseCommand from registration.models import RegistrationProfile class Command(BaseCommand): - help = 'Cleanup expired registrations' + help = "Cleanup expired registrations" def handle(self, *args, **options): - profiles = RegistrationProfile.objects \ - .exclude(activation_key=RegistrationProfile.ACTIVATED) \ - .prefetch_related('user', 'user__account') \ - .exclude(user__is_active=True) \ - .filter(user__date_joined__lt=(date.today() - timedelta(settings.ACCOUNT_ACTIVATION_DAYS))) + profiles = ( + RegistrationProfile.objects.exclude(activated=True) + .prefetch_related("user", "user__account") + .exclude(user__is_active=True) + .filter( + user__date_joined__lt=( + date.today() - timedelta(settings.ACCOUNT_ACTIVATION_DAYS) + ) + ) + ) if settings.DEBUG: - self.stderr.write(u'SQL: {}'.format(profiles.query)) + self.stderr.write("SQL: {}".format(profiles.query)) for profile in profiles: - if hasattr(profile, 'user'): - if hasattr(profile.user, 'account'): + if hasattr(profile, "user"): + if hasattr(profile.user, "account"): profile.user.account.delete() profile.user.delete() profile.delete() diff --git a/accounts/migrations/0001_initial.py b/accounts/migrations/0001_initial.py index f64ca352..de8145da 100644 --- a/accounts/migrations/0001_initial.py +++ b/accounts/migrations/0001_initial.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,14 +13,29 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='UserAccount', + name="UserAccount", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('user', models.OneToOneField(related_name='account', to=settings.AUTH_USER_MODEL)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "user", + models.OneToOneField( + related_name="account", + to=settings.AUTH_USER_MODEL, + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'user account', - 'verbose_name_plural': 'user accounts', + "verbose_name": "user account", + "verbose_name_plural": "user accounts", }, ), ] diff --git a/accounts/models.py b/accounts/models.py index 42b122fa..f01af532 100644 --- a/accounts/models.py +++ b/accounts/models.py @@ -2,19 +2,24 @@ from django.conf import settings from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class UserAccount(models.Model): """ A user account. Used to store any information related to users. """ - user = models.OneToOneField(settings.AUTH_USER_MODEL, - related_name='account') + + user = models.OneToOneField( + settings.AUTH_USER_MODEL, models.CASCADE, related_name="account" + ) class Meta: - verbose_name = _('user account') - verbose_name_plural = _('user accounts') + verbose_name = _("user account") + verbose_name_plural = _("user accounts") def __unicode__(self): - return u'{}'.format(self.user.username) + return "{}".format(self.user.username) + + def __str__(self): + return self.__unicode__() diff --git a/accounts/templates/shift_list.html b/accounts/templates/shift_list.html index 3b6dd2b3..ef2e0bc4 100644 --- a/accounts/templates/shift_list.html +++ b/accounts/templates/shift_list.html @@ -9,60 +9,60 @@ - {% trans 'Show my work shifts in the past' %} + {% translate 'Show my work shifts in the past' %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/accounts/templates/shift_list_done.html b/accounts/templates/shift_list_done.html index 0063f5d7..ffe0d191 100644 --- a/accounts/templates/shift_list_done.html +++ b/accounts/templates/shift_list_done.html @@ -9,15 +9,15 @@ - {% trans 'Show my work shifts in the future' %} + {% translate 'Show my work shifts in the future' %} -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/accounts/templates/user_account_delete.html b/accounts/templates/user_account_delete.html index 8ebd7757..fe62d3f3 100644 --- a/accounts/templates/user_account_delete.html +++ b/accounts/templates/user_account_delete.html @@ -7,15 +7,15 @@ {% block content %}
- {% trans 'If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore.' %} - {% trans 'Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account.' %} + {% translate 'If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore.' %} + {% translate 'Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account.' %}
- {% trans 'Delete Account (no additional warning)' %} + {% translate 'Delete Account (no additional warning)' %}
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/accounts/templates/user_account_edit.html b/accounts/templates/user_account_edit.html index 767e9aed..5017a96d 100644 --- a/accounts/templates/user_account_edit.html +++ b/accounts/templates/user_account_edit.html @@ -9,7 +9,7 @@
{% csrf_token %} {{ form.as_p }} - +
{% endblock %} diff --git a/accounts/templates/user_detail.html b/accounts/templates/user_detail.html index 8aaf5439..53aa119f 100644 --- a/accounts/templates/user_detail.html +++ b/accounts/templates/user_detail.html @@ -7,14 +7,14 @@ {% block content %}
- {% trans 'Edit Account' %} - {% trans 'Delete Account' %} + {% translate 'Edit Account' %} + {% translate 'Delete Account' %}
{% endblock %} diff --git a/accounts/templates/user_detail_deleted.html b/accounts/templates/user_detail_deleted.html index 1db55b36..91d1f136 100644 --- a/accounts/templates/user_detail_deleted.html +++ b/accounts/templates/user_detail_deleted.html @@ -3,6 +3,6 @@ {% block content %}
- {% trans 'Your user account has been deleted.' %} + {% translate 'Your user account has been deleted.' %}
{% endblock %} diff --git a/accounts/urls.py b/accounts/urls.py index c292c4f6..43486d69 100644 --- a/accounts/urls.py +++ b/accounts/urls.py @@ -1,15 +1,21 @@ # coding: utf-8 -from django.conf.urls import url +from django.urls import re_path - -from .views import user_account_detail, AccountUpdateView, AccountDeleteView, account_delete_final, shift_list_active, shift_list_done +from .views import ( + account_delete_final, + AccountDeleteView, + AccountUpdateView, + shift_list_active, + shift_list_done, + user_account_detail, +) urlpatterns = [ - url(r'^edit/$', AccountUpdateView.as_view(), name="account_edit"), - url(r'^myshifts/$', shift_list_active, name="shift_list_active"), - url(r'^myshiftsdone/$', shift_list_done, name="shift_list_done"), - url(r'^delete/$', AccountDeleteView.as_view(), name="account_delete"), - url(r'^delete_final/$', account_delete_final, name="account_delete_final"), - url(r'^', user_account_detail, name="account_detail"), + re_path(r"^edit/$", AccountUpdateView.as_view(), name="account_edit"), + re_path(r"^myshifts/$", shift_list_active, name="shift_list_active"), + re_path(r"^myshiftsdone/$", shift_list_done, name="shift_list_done"), + re_path(r"^delete/$", AccountDeleteView.as_view(), name="account_delete"), + re_path(r"^delete_final/$", account_delete_final, name="account_delete_final"), + re_path(r"^", user_account_detail, name="account_detail"), ] diff --git a/accounts/views.py b/accounts/views.py index 6667b900..32039d03 100644 --- a/accounts/views.py +++ b/accounts/views.py @@ -1,19 +1,19 @@ -# coding: utf-8 import random import string +from datetime import date, datetime, timedelta -from django.contrib.auth import logout -from django.shortcuts import render +from django.contrib.admin.models import DELETION, LogEntry +from django.contrib.auth import logout, models from django.contrib.auth.decorators import login_required +from django.contrib.contenttypes.models import ContentType +from django.db import transaction +from django.shortcuts import render +from django.urls import reverse_lazy from django.views.generic.edit import UpdateView -from django.core.urlresolvers import reverse_lazy -from django.contrib.auth import models - -from datetime import date, timedelta -from volunteer_planner.utils import LoginRequiredMixin -from scheduler.models import ShiftHelper from accounts.models import UserAccount +from scheduler.models import ShiftHelper +from volunteer_planner.utils import LoginRequiredMixin @login_required() @@ -22,10 +22,11 @@ def user_account_detail(request): Just shows the user profile. :param request: http request - :return: return value can be used in urls.py: url(r'^', user_account_detail, name="account_detail") + :return: return value can be used in urls.py: + url(r'^', user_account_detail, name="account_detail") """ user = request.user - return render(request, 'user_detail.html', {'user': user}) + return render(request, "user_detail.html", {"user": user}) def random_string(length=30): @@ -34,38 +35,65 @@ def random_string(length=30): :param length: (optional, default is 30) length of the string to be created """ - return u''.join(random.choice(string.ascii_letters) for x in range(length)) + return "".join(random.choice(string.ascii_letters) for x in range(length)) + + +@transaction.atomic +def unsub_user_from_future_shifts(user): + subscribed_shifts = ShiftHelper.objects.filter( + user_account=user, shift__starting_time__gt=datetime.now() + ) + for sh in subscribed_shifts: + LogEntry.objects.log_action( + user_id=user.id, + content_type_id=ContentType.objects.get_for_model(ShiftHelper).id, + object_id=sh.id, + object_repr=f"User '{user}' @ shift '{sh.shift}'", + action_flag=DELETION, + change_message=f"Initially joined: {sh.joined_shift_at.isoformat()}", + ) + sh.delete() @login_required() +@transaction.atomic def account_delete_final(request): """ This randomizes/anonymises the user profile. The account is set inactive. - (regarding to django documentation setting inactive is preferred to deleting an account.) + (regarding to django documentation setting inactive is preferred to deleting an + account.) :param request: http request :return http response of user_detail_deleted-template that confirms deletion. """ user = models.User.objects.get_by_natural_key(request.user.username) + + unsub_user_from_future_shifts(user.account) + user.username = random_string() user.first_name = "Deleted" user.last_name = "User" - user.email = random_string(24)+"@yy.yy" + user.email = random_string(24) + "@yy.yy" user.password = random_string(20) user.is_active = False + user.is_staff = False + user.is_superuser = False + user.user_permissions.clear() + user.groups.clear() user.save() logout(request) - return render(request, 'user_detail_deleted.html') + return render(request, "user_detail_deleted.html") class AccountUpdateView(LoginRequiredMixin, UpdateView): """ Allows a user to update his/her profile. """ - fields = ['first_name', 'last_name', 'username'] + + fields = ["first_name", "last_name", "username"] template_name = "user_account_edit.html" - success_url = reverse_lazy('account_detail') + success_url = reverse_lazy("account_detail") def get_object(self, queryset=None): return self.request.user @@ -73,9 +101,11 @@ def get_object(self, queryset=None): class AccountDeleteView(LoginRequiredMixin, UpdateView): """ - Allows a user to confirm he/she wants to delete the profile. This offers the last warning. + Allows a user to confirm he/she wants to delete the profile. This offers the last + warning. """ - fields = ['first_name', 'last_name', 'username'] + + fields = ["first_name", "last_name", "username"] template_name = "user_account_delete.html" def get_object(self, queryset=None): @@ -93,47 +123,61 @@ def shift_list_active(request): shifts_further_future. """ user = request.user - shifthelper = ShiftHelper.objects.filter(user_account=UserAccount.objects.get(user=user)) - shifts_today = shifthelper \ - .filter(shift__starting_time__day=date.today().day, - shift__starting_time__month=date.today().month, - shift__starting_time__year=date.today().year) \ - .order_by("shift__starting_time") - shifts_tomorrow = shifthelper \ - .filter(shift__starting_time__day=date.today().day + 1, - shift__starting_time__month=date.today().month, - shift__starting_time__year=date.today().year) \ - .order_by("shift__starting_time") - shifts_day_after_tomorrow = shifthelper \ - .filter(shift__starting_time__day=date.today().day + 2, - shift__starting_time__month=date.today().month, - shift__starting_time__year=date.today().year) \ - .order_by("shift__starting_time") - shifts_further_future = shifthelper \ - .filter(shift__starting_time__gt=date.today() + timedelta(days=3)) \ - .order_by("shift__starting_time") - - return render(request, 'shift_list.html', {'user': user, - 'shifts_today': shifts_today, - 'shifts_tomorrow': shifts_tomorrow, - 'shifts_day_after_tomorrow': shifts_day_after_tomorrow, - 'shifts_further_future': shifts_further_future}) + shifthelper = ShiftHelper.objects.filter( + user_account=UserAccount.objects.get(user=user) + ) + shifts_today = shifthelper.filter( + shift__starting_time__day=date.today().day, + shift__starting_time__month=date.today().month, + shift__starting_time__year=date.today().year, + ).order_by("shift__starting_time") + shifts_tomorrow = shifthelper.filter( + shift__starting_time__day=date.today().day + 1, + shift__starting_time__month=date.today().month, + shift__starting_time__year=date.today().year, + ).order_by("shift__starting_time") + shifts_day_after_tomorrow = shifthelper.filter( + shift__starting_time__day=date.today().day + 2, + shift__starting_time__month=date.today().month, + shift__starting_time__year=date.today().year, + ).order_by("shift__starting_time") + shifts_further_future = shifthelper.filter( + shift__starting_time__gt=date.today() + timedelta(days=3) + ).order_by("shift__starting_time") + + return render( + request, + "shift_list.html", + { + "user": user, + "shifts_today": shifts_today, + "shifts_tomorrow": shifts_tomorrow, + "shifts_day_after_tomorrow": shifts_day_after_tomorrow, + "shifts_further_future": shifts_further_future, + }, + ) @login_required() def shift_list_done(request): """ - Delivers the list of shifts, a user has signed up in the past (starting from yesterday). + Delivers the list of shifts, a user has signed up in the past (starting from + yesterday). :param request: http request :return: http response of rendered shift_list_done-template and user-date, - ie.: user and shifts_past. + ie.: user and shifts_past. """ user = request.user - shifthelper = ShiftHelper.objects.filter(user_account=UserAccount.objects.get(user=user)) - shifts_past = shifthelper.filter(shift__ending_time__lt=date.today()).order_by("shift__starting_time").reverse() - - return render(request, 'shift_list_done.html', {'user': user, - 'shifts_past': shifts_past}) - + shifthelper = ShiftHelper.objects.filter( + user_account=UserAccount.objects.get(user=user) + ) + shifts_past = ( + shifthelper.filter(shift__ending_time__lt=date.today()) + .order_by("shift__starting_time") + .reverse() + ) + return render( + request, "shift_list_done.html", {"user": user, "shifts_past": shifts_past} + ) diff --git a/blueprint/migrations/0001_initial.py b/blueprint/migrations/0001_initial.py index bf33d6f5..26faaaa3 100644 --- a/blueprint/migrations/0001_initial.py +++ b/blueprint/migrations/0001_initial.py @@ -1,44 +1,85 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0009_auto_20150823_1546'), + ("scheduler", "0009_auto_20150823_1546"), ] operations = [ migrations.CreateModel( - name='BluePrintCreator', + name="BluePrintCreator", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=255, verbose_name=b'Name der Vorlage')), - ('location', models.ForeignKey(verbose_name=b'Ort', to='scheduler.Location')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "title", + models.CharField(max_length=255, verbose_name=b"Name der Vorlage"), + ), + ( + "location", + models.ForeignKey( + verbose_name=b"Ort", + to="scheduler.Location", + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'Vorlage', - 'verbose_name_plural': 'Vorlagen', + "verbose_name": "Vorlage", + "verbose_name_plural": "Vorlagen", }, ), migrations.CreateModel( - name='NeedBluePrint', + name="NeedBluePrint", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('from_time', models.CharField(max_length=5, verbose_name=b'Uhrzeit von')), - ('to_time', models.CharField(max_length=5, verbose_name=b'Uhrzeit bis')), - ('topic', models.ForeignKey(verbose_name=b'Hilfetyp', to='scheduler.Topics')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "from_time", + models.CharField(max_length=5, verbose_name=b"Uhrzeit von"), + ), + ( + "to_time", + models.CharField(max_length=5, verbose_name=b"Uhrzeit bis"), + ), + ( + "topic", + models.ForeignKey( + verbose_name=b"Hilfetyp", + to="scheduler.Topics", + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'Schicht Vorlage', - 'verbose_name_plural': 'Schicht Vorlagen', + "verbose_name": "Schicht Vorlage", + "verbose_name_plural": "Schicht Vorlagen", }, ), migrations.AddField( - model_name='blueprintcreator', - name='needs', - field=models.ManyToManyField(to='blueprint.NeedBluePrint', verbose_name=b'Schichten'), + model_name="blueprintcreator", + name="needs", + field=models.ManyToManyField( + to="blueprint.NeedBluePrint", verbose_name=b"Schichten" + ), ), ] diff --git a/blueprint/migrations/0001_squashed_0005_demolish_blueprints.py b/blueprint/migrations/0001_squashed_0005_demolish_blueprints.py index 390c0ba6..1b400580 100644 --- a/blueprint/migrations/0001_squashed_0005_demolish_blueprints.py +++ b/blueprint/migrations/0001_squashed_0005_demolish_blueprints.py @@ -5,18 +5,18 @@ class Migration(migrations.Migration): - replaces = [(b'blueprint', '0001_initial'), - (b'blueprint', '0002_needblueprint_slots'), - (b'blueprint', '0003_auto_20151006_1341'), - (b'blueprint', '0003_auto_20151003_2033'), - (b'blueprint', '0004_merge'), - (b'blueprint', '0005_demolish_blueprints')] + replaces = [ + ("blueprint", "0001_initial"), + ("blueprint", "0002_needblueprint_slots"), + ("blueprint", "0003_auto_20151006_1341"), + ("blueprint", "0003_auto_20151003_2033"), + ("blueprint", "0004_merge"), + ("blueprint", "0005_demolish_blueprints"), + ] dependencies = [ - ('scheduler', '0009_auto_20150823_1546'), - ('organizations', '0002_migrate_locations_to_facilities'), + ("scheduler", "0009_auto_20150823_1546"), + ("organizations", "0002_migrate_locations_to_facilities"), ] - operations = [ - - ] + operations = [] diff --git a/blueprint/migrations/0002_needblueprint_slots.py b/blueprint/migrations/0002_needblueprint_slots.py index 494980d5..8deef642 100644 --- a/blueprint/migrations/0002_needblueprint_slots.py +++ b/blueprint/migrations/0002_needblueprint_slots.py @@ -1,20 +1,22 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('blueprint', '0001_initial'), + ("blueprint", "0001_initial"), ] operations = [ migrations.AddField( - model_name='needblueprint', - name='slots', - field=models.IntegerField(default=4, verbose_name=b'Anz. benoetigter Freiwillige'), + model_name="needblueprint", + name="slots", + field=models.IntegerField( + default=4, verbose_name=b"Anz. benoetigter Freiwillige" + ), preserve_default=False, ), ] diff --git a/blueprint/migrations/0003_auto_20151003_2033.py b/blueprint/migrations/0003_auto_20151003_2033.py index 1d58ac07..000fb83d 100644 --- a/blueprint/migrations/0003_auto_20151003_2033.py +++ b/blueprint/migrations/0003_auto_20151003_2033.py @@ -1,30 +1,36 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0002_migrate_locations_to_facilities'), - ('blueprint', '0002_needblueprint_slots'), + ("organizations", "0002_migrate_locations_to_facilities"), + ("blueprint", "0002_needblueprint_slots"), ] operations = [ migrations.AlterField( - model_name='blueprintcreator', - name='location', - field=models.ForeignKey(verbose_name='facility', to='organizations.Facility'), + model_name="blueprintcreator", + name="location", + field=models.ForeignKey( + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), ), migrations.RenameField( - model_name='blueprintcreator', - old_name='location', - new_name='facility', + model_name="blueprintcreator", + old_name="location", + new_name="facility", ), migrations.AlterField( - model_name='blueprintcreator', - name='needs', - field=models.ManyToManyField(to='blueprint.NeedBluePrint', verbose_name='shifts'), + model_name="blueprintcreator", + name="needs", + field=models.ManyToManyField( + to="blueprint.NeedBluePrint", verbose_name="shifts" + ), ), ] diff --git a/blueprint/migrations/0003_auto_20151006_1341.py b/blueprint/migrations/0003_auto_20151006_1341.py index 0a76c1a0..d3cae794 100644 --- a/blueprint/migrations/0003_auto_20151006_1341.py +++ b/blueprint/migrations/0003_auto_20151006_1341.py @@ -1,57 +1,68 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('blueprint', '0002_needblueprint_slots'), + ("blueprint", "0002_needblueprint_slots"), ] operations = [ migrations.AlterModelOptions( - name='blueprintcreator', - options={'verbose_name': 'Blueprint', 'verbose_name_plural': 'Blueprints'}, + name="blueprintcreator", + options={"verbose_name": "Blueprint", "verbose_name_plural": "Blueprints"}, ), migrations.AlterModelOptions( - name='needblueprint', - options={'verbose_name': 'Blueprint Item', 'verbose_name_plural': 'Blueprint Items'}, + name="needblueprint", + options={ + "verbose_name": "Blueprint Item", + "verbose_name_plural": "Blueprint Items", + }, ), migrations.AlterField( - model_name='blueprintcreator', - name='location', - field=models.ForeignKey(verbose_name='location', to='scheduler.Location'), + model_name="blueprintcreator", + name="location", + field=models.ForeignKey( + verbose_name="location", + to="scheduler.Location", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='blueprintcreator', - name='needs', - field=models.ManyToManyField(to='blueprint.NeedBluePrint', verbose_name='shifts'), + model_name="blueprintcreator", + name="needs", + field=models.ManyToManyField( + to="blueprint.NeedBluePrint", verbose_name="shifts" + ), ), migrations.AlterField( - model_name='blueprintcreator', - name='title', - field=models.CharField(max_length=255, verbose_name='blueprint title'), + model_name="blueprintcreator", + name="title", + field=models.CharField(max_length=255, verbose_name="blueprint title"), ), migrations.AlterField( - model_name='needblueprint', - name='from_time', - field=models.CharField(max_length=5, verbose_name='from hh:mm'), + model_name="needblueprint", + name="from_time", + field=models.CharField(max_length=5, verbose_name="from hh:mm"), ), migrations.AlterField( - model_name='needblueprint', - name='slots', - field=models.IntegerField(verbose_name='number of volunteers needed'), + model_name="needblueprint", + name="slots", + field=models.IntegerField(verbose_name="number of volunteers needed"), ), migrations.AlterField( - model_name='needblueprint', - name='to_time', - field=models.CharField(max_length=5, verbose_name='until hh:mm'), + model_name="needblueprint", + name="to_time", + field=models.CharField(max_length=5, verbose_name="until hh:mm"), ), migrations.AlterField( - model_name='needblueprint', - name='topic', - field=models.ForeignKey(verbose_name='topic', to='scheduler.Topics'), + model_name="needblueprint", + name="topic", + field=models.ForeignKey( + verbose_name="topic", to="scheduler.Topics", on_delete=models.CASCADE + ), ), ] diff --git a/blueprint/migrations/0004_merge.py b/blueprint/migrations/0004_merge.py index 4df1b115..2d5f3f17 100644 --- a/blueprint/migrations/0004_merge.py +++ b/blueprint/migrations/0004_merge.py @@ -1,15 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('blueprint', '0003_auto_20151006_1341'), - ('blueprint', '0003_auto_20151003_2033'), + ("blueprint", "0003_auto_20151006_1341"), + ("blueprint", "0003_auto_20151003_2033"), ] - operations = [ - ] + operations = [] diff --git a/blueprint/migrations/0005_demolish_blueprints.py b/blueprint/migrations/0005_demolish_blueprints.py index 263b67c0..ab12c1a6 100644 --- a/blueprint/migrations/0005_demolish_blueprints.py +++ b/blueprint/migrations/0005_demolish_blueprints.py @@ -1,32 +1,32 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('blueprint', '0004_merge'), + ("blueprint", "0004_merge"), ] operations = [ migrations.RemoveField( - model_name='blueprintcreator', - name='facility', + model_name="blueprintcreator", + name="facility", ), migrations.RemoveField( - model_name='blueprintcreator', - name='needs', + model_name="blueprintcreator", + name="needs", ), migrations.RemoveField( - model_name='needblueprint', - name='topic', + model_name="needblueprint", + name="topic", ), migrations.DeleteModel( - name='BluePrintCreator', + name="BluePrintCreator", ), migrations.DeleteModel( - name='NeedBluePrint', + name="NeedBluePrint", ), ] diff --git a/checkmessages.sh b/checkmessages.sh new file mode 100755 index 00000000..2ee2e1f1 --- /dev/null +++ b/checkmessages.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +#set -e + +./scripts/makemessages.sh "${@}" +./scripts/checkdiffs.sh +./scripts/checkfuzzy.sh +./scripts/compilemessages.sh "${@}" diff --git a/common/admin.py b/common/admin.py index b53e2c33..41531f87 100644 --- a/common/admin.py +++ b/common/admin.py @@ -1,2 +1,45 @@ -# coding=utf-8 -# Register your models here. +import logging + +from django.contrib import messages +from django.core.exceptions import PermissionDenied +from django.http import HttpResponseRedirect +from django.urls import reverse +from django.utils.html import escape +from django.utils.safestring import mark_safe +from django.utils.translation import gettext_lazy as _ + +logger = logging.getLogger(__name__) + + +class RedirectOnAdminPermissionDenied403: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + response = self.get_response(request) + return response + + def process_exception(self, request, exception): + admin_index = reverse("admin:index") + if ( + hasattr(request, "user") + and getattr(request.user, "is_authenticated", False) + and getattr(request.user, "is_staff", False) + and request.path != admin_index + and request.path.startswith(admin_index) + and isinstance(exception, PermissionDenied) + ): + redirect_path = admin_index + error_code = 403 + error = _("Error {error_code}").format(error_code=error_code) + permission_denied = _("Permission denied") + error = f"{error}: {permission_denied}" + note = _( + "You are not allowed to do this and have been redirected to {redirect_path}." # noqa: E501 + ).format(redirect_path=redirect_path) + messages.error( + request, + mark_safe(f"{note}
{error} - ") + + escape(f"{request.method} {request.path}"), + ) + return HttpResponseRedirect(redirect_path) diff --git a/common/conf_loader.py b/common/conf_loader.py index e78d3f06..630b2719 100644 --- a/common/conf_loader.py +++ b/common/conf_loader.py @@ -10,10 +10,11 @@ def __init__(self, key): @property def message(self): - return u"ConfigNotFound: {}".format(self.key) + return "ConfigNotFound: {}".format(self.key) - def __init__(self, settings=None, env_fmt=None, env=True, - raise_missing=True, **defaults): + def __init__( + self, settings=None, env_fmt=None, env=True, raise_missing=True, **defaults + ): self._defaults = defaults or {} self.env = env self.env_fmt = env_fmt or "{}" diff --git a/common/management/commands/check_db_connection.py b/common/management/commands/check_db_connection.py index 4d3bd092..0f7d3e7c 100644 --- a/common/management/commands/check_db_connection.py +++ b/common/management/commands/check_db_connection.py @@ -7,31 +7,47 @@ class Command(BaseCommand): - help = 'This command checks availability of configured database.' + help = "This command checks availability of configured database." requires_system_checks = False def add_arguments(self, parser): - parser.add_argument('--count', type=int, default=5, help='Number of connections attempts before failing') - parser.add_argument('--sleep', type=int, default=1, help='Seconds to wait after every failed attempt') + parser.add_argument( + "--count", + type=int, + default=5, + help="Number of connections attempts before failing", + ) + parser.add_argument( + "--sleep", + type=int, + default=1, + help="Seconds to wait after every failed attempt", + ) def handle(self, *args, **options): - if 0 > options['count']: - raise CommandError(u'No negative count allowed. ' - u'It''s not I''m picky, but I simply don''t now, how to handle it.') - if 0 > options['sleep']: - raise CommandError(u'No negative sleep allowed. Bear with me, but I forgot my time machine.') + if 0 > options["count"]: + raise CommandError( + "No negative count allowed. It's not I'm picky, " + "but I simply don't now, how to handle it." + ) + if 0 > options["sleep"]: + raise CommandError( + "No negative sleep allowed. Bear with me, but I forgot my time machine." + ) success = False - db_conn = connections['default'] - for i in range(0, options['count']): + db_conn = connections["default"] + for i in range(0, options["count"]): try: - c = db_conn.cursor() + db_conn.cursor() success = True break except OperationalError as e: - self.stderr.write(self.style.WARNING(u'Database connection failed: %s' % e)) - sleep(options['sleep']) + self.stderr.write( + self.style.WARNING("Database connection failed: %s" % e) + ) + sleep(options["sleep"]) if not success: - raise CommandError(u'Database connection check failed') + raise CommandError("Database connection check failed") diff --git a/common/models.py b/common/models.py index 6ec9881a..a309ba4a 100644 --- a/common/models.py +++ b/common/models.py @@ -1,4 +1,3 @@ # coding=utf-8 -from django.db import models # Create your models here. diff --git a/common/static_file_compressor.py b/common/static_file_compressor.py new file mode 100644 index 00000000..c6f4cf53 --- /dev/null +++ b/common/static_file_compressor.py @@ -0,0 +1,84 @@ +# coding: utf-8 +import gzip +import io +import re +import shutil +from importlib import import_module + +from django.contrib.staticfiles.storage import StaticFilesStorage + + +class CompressedStaticFilesStorage(StaticFilesStorage): + EXTENSIONS = ["js", "css"] + EXT_LOOKUP = {} + + def __init__(self, location=None, base_url=None, *args, **kwargs): + super().__init__(location, base_url, *args, **kwargs) + for ext in self.EXTENSIONS: + self.EXT_LOOKUP[ext] = re.compile(r".*\.{}\Z".format(ext)) + + def post_process(self, paths, dry_run=False, **kwargs): + processing_files = [] + for name in paths: + ext = self.filename_matches(name) + if ext: + processing_files.append((name, self.path(name), ext)) + + for name, path, ext in processing_files: + yield self._post_process(name, path, ext, dry_run) + + def _post_process(self, name, path, ext, dry_run): + processed = False + if dry_run: + return name, path, False + try: + func_name = "_minify_{}".format(ext) + func = getattr(self, func_name) + if func: + processed = func(path) + except AttributeError: + processed = False + except io.UnsupportedOperation: + # raise explicitly + raise + + return name, path, processed + + def filename_matches(self, name): + for ext in self.EXT_LOOKUP: + regexp = self.EXT_LOOKUP[ext] + if regexp.match(name): + return ext + + return None + + @staticmethod + def _minify_js(path): + return __class__._generic_minify(path, "rjsmin", "jsmin") + + @staticmethod + def _minify_css(path): + return __class__._generic_minify(path, "rcssmin", "cssmin") + + @staticmethod + def _generic_minify(path, module, func): + try: + f = getattr(import_module(module), func) + with open(path) as f_in: + input = f_in.read() + with open(path, "w") as f_out: + f_out.write(f(input)) + __class__._gzip(path) + + return True + except Exception: + return False + + @staticmethod + def _gzip(path): + try: + with open(path, "rb") as f_in: + with gzip.open("{}.gz".format(path), "wb") as f_out: + shutil.copyfileobj(f_in, f_out) + except Exception: + pass diff --git a/common/templatetags/site.py b/common/templatetags/site.py index e6970df5..5961b3d8 100644 --- a/common/templatetags/site.py +++ b/common/templatetags/site.py @@ -9,6 +9,6 @@ register = template.Library() -@register.assignment_tag +@register.simple_tag def request_site(request): return get_current_site(request_site) diff --git a/common/templatetags/volunteer_stats.py b/common/templatetags/volunteer_stats.py index f5ee4606..72bcbfeb 100644 --- a/common/templatetags/volunteer_stats.py +++ b/common/templatetags/volunteer_stats.py @@ -13,15 +13,15 @@ register = template.Library() -@register.assignment_tag +@register.simple_tag def get_facility_count(): """ Returns the number of total volunteer hours worked. """ - return Facility.objects.filter().count() + return Facility.objects.with_open_shifts().count() -@register.assignment_tag +@register.simple_tag def get_volunteer_number(): """ Returns the number of active volunteer accounts (accounts are active). @@ -29,22 +29,25 @@ def get_volunteer_number(): return User.objects.filter(is_active=True).count() -@register.assignment_tag +@register.simple_tag def get_volunteer_deleted_number(): """ - Returns the number of deleted volunteer accounts (accounts are inactive and anonymized) + Returns the number of deleted volunteer accounts. + + Accounts are inactive and anonymized. """ return User.objects.filter(is_active=False).count() -@register.assignment_tag +@register.simple_tag def get_volunteer_hours(): """ Returns the number of total volunteer hours worked. """ - finished_shifts = Shift.objects.filter( - starting_time__lte=timezone.now()).annotate( - slots_done=Count('helpers')) + now = timezone.now() + finished_shifts = Shift.objects.filter(starting_time__lte=now).annotate( + slots_done=Count("helpers") + ) delta = timedelta() for shift in finished_shifts: delta += shift.slots_done * (shift.ending_time - shift.starting_time) @@ -52,14 +55,14 @@ def get_volunteer_hours(): return hours -@register.assignment_tag +@register.simple_tag def get_volunteer_stats(): """ Returns all statistics concerning users, facilities and their shifts. """ return { - 'volunteer_count': get_volunteer_number(), - 'volunteer_deleted_count': get_volunteer_deleted_number(), - 'facility_count': get_facility_count(), - 'volunteer_hours': get_volunteer_hours(), + "volunteer_count": get_volunteer_number(), + "volunteer_deleted_count": get_volunteer_deleted_number(), + "facility_count": get_facility_count(), + "volunteer_hours": get_volunteer_hours(), } diff --git a/common/templatetags/vpfilters.py b/common/templatetags/vpfilters.py index 8a30ede0..aae3516e 100644 --- a/common/templatetags/vpfilters.py +++ b/common/templatetags/vpfilters.py @@ -27,7 +27,7 @@ def contains(enumeratable, obj): @register.filter -def split(value, separator=' '): +def split(value, separator=" "): return value.split(separator) diff --git a/common/views.py b/common/views.py index 8f5fbe68..9f0e7b1c 100644 --- a/common/views.py +++ b/common/views.py @@ -1,4 +1,3 @@ # coding=utf-8 -from django.shortcuts import render # Create your views here. diff --git a/content/admin.py b/content/admin.py index 3e1c6c44..37954d1a 100644 --- a/content/admin.py +++ b/content/admin.py @@ -1,27 +1,26 @@ # coding: utf-8 from django.conf import settings - from django.contrib import admin from django.contrib.flatpages.admin import FlatPageAdmin from django.contrib.flatpages.models import FlatPage from django.utils.html import format_html -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ -from . import models, forms +from . import forms, models class FlatPageStyleInline(admin.StackedInline): model = models.FlatPageExtraStyle - verbose_name = _('additional CSS') - verbose_name_plural = _('additional CSS') - template = 'flatpages/additional_flat_page_style_inline.html' + verbose_name = _("additional CSS") + verbose_name_plural = _("additional CSS") + template = "flatpages/additional_flat_page_style_inline.html" class FlatPageTranslationInline(admin.StackedInline): model = models.FlatPageTranslation form = forms.FlatPageTranslationFormWithHTMLEditor - verbose_name = _('translation') - verbose_name_plural = _('translations') + verbose_name = _("translation") + verbose_name_plural = _("translations") extra = 0 @@ -32,35 +31,37 @@ class FlatPageTranslationAdmin(FlatPageAdmin): ] form = forms.FlatPageFormWithHTMLEditor - list_filter = ('sites', 'registration_required',) + list_filter = ( + "sites", + "registration_required", + ) list_display = ( - 'title', - 'url', - 'registration_required', - 'get_translations', + "title", + "url", + "registration_required", + "get_translations", ) - search_fields = ('url', 'title') + search_fields = ("url", "title") def get_translations(self, obj): translations = list(obj.translations.all()) trans_list = None if translations: - translations = sorted( - t.get_language_display() for t in translations) + translations = sorted(t.get_language_display() for t in translations) - trans_list = u''.format( - u'\n'.join(u'
  • {}
  • '.format(t) for t in translations) + trans_list = "".format( + "\n".join("
  • {}
  • ".format(t) for t in translations) ) return format_html( - u'{}/{}:
    {}'.format( + "{}/{}:
    {}".format( len(translations), len(settings.LANGUAGES), - trans_list or _('No translation available') + trans_list or _("No translation available"), ) ) get_translations.allow_tags = True - get_translations.short_description = _('translations') + get_translations.short_description = _("translations") admin.site.unregister(FlatPage) diff --git a/content/forms.py b/content/forms.py index b402331e..a86eed8f 100644 --- a/content/forms.py +++ b/content/forms.py @@ -1,7 +1,7 @@ # coding: utf-8 from ckeditor.widgets import CKEditorWidget -from django.contrib.flatpages.forms import FlatpageForm from django import forms +from django.contrib.flatpages.forms import FlatpageForm from content.models import FlatPageTranslation @@ -10,7 +10,7 @@ class FlatPageTranslationFormWithHTMLEditor(forms.ModelForm): content = forms.CharField(widget=CKEditorWidget()) class Meta: - fields = '__all__' + fields = "__all__" model = FlatPageTranslation diff --git a/content/migrations/0001_initial.py b/content/migrations/0001_initial.py index d5a02711..924dd9e9 100644 --- a/content/migrations/0001_initial.py +++ b/content/migrations/0001_initial.py @@ -1,44 +1,91 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('flatpages', '0001_initial'), + ("flatpages", "0001_initial"), ] operations = [ migrations.CreateModel( - name='FlatPageExtraStyle', + name="FlatPageExtraStyle", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('css', models.TextField(verbose_name='additional CSS', blank=True)), - ('flatpage', models.OneToOneField(related_name='extra_style', verbose_name='additional style', to='flatpages.FlatPage')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("css", models.TextField(verbose_name="additional CSS", blank=True)), + ( + "flatpage", + models.OneToOneField( + related_name="extra_style", + verbose_name="additional style", + to="flatpages.FlatPage", + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'additional flat page style', - 'verbose_name_plural': 'additional flat page styles', + "verbose_name": "additional flat page style", + "verbose_name_plural": "additional flat page styles", }, ), migrations.CreateModel( - name='FlatPageTranslation', + name="FlatPageTranslation", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('language', models.CharField(max_length=20, verbose_name='language', choices=[(b'de', 'German'), (b'en', 'English'), (b'hu', 'Hungarian'), (b'sv', 'Swedish')])), - ('title', models.CharField(max_length=200, verbose_name='title', blank=True)), - ('content', models.TextField(verbose_name='content', blank=True)), - ('flatpage', models.ForeignKey(related_name='translations', verbose_name='flat page', to='flatpages.FlatPage')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "language", + models.CharField( + max_length=20, + verbose_name="language", + choices=[ + (b"de", "German"), + (b"en", "English"), + (b"hu", "Hungarian"), + (b"sv", "Swedish"), + ], + ), + ), + ( + "title", + models.CharField(max_length=200, verbose_name="title", blank=True), + ), + ("content", models.TextField(verbose_name="content", blank=True)), + ( + "flatpage", + models.ForeignKey( + related_name="translations", + verbose_name="flat page", + to="flatpages.FlatPage", + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'flat page translation', - 'verbose_name_plural': 'flat page translations', + "verbose_name": "flat page translation", + "verbose_name_plural": "flat page translations", }, ), migrations.AlterUniqueTogether( - name='flatpagetranslation', - unique_together=set([('flatpage', 'language')]), + name="flatpagetranslation", + unique_together=set([("flatpage", "language")]), ), ] diff --git a/content/migrations/0002_add_greek_language.py b/content/migrations/0002_add_greek_language.py index 17258b78..eaf904cf 100644 --- a/content/migrations/0002_add_greek_language.py +++ b/content/migrations/0002_add_greek_language.py @@ -1,19 +1,29 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('content', '0001_initial'), + ("content", "0001_initial"), ] operations = [ migrations.AlterField( - model_name='flatpagetranslation', - name='language', - field=models.CharField(max_length=20, verbose_name='language', choices=[(b'en', 'English'), (b'de', 'German'), (b'el', 'Greek'), (b'hu', 'Hungarian'), (b'sv', 'Swedish')]), + model_name="flatpagetranslation", + name="language", + field=models.CharField( + max_length=20, + verbose_name="language", + choices=[ + (b"en", "English"), + (b"de", "German"), + (b"el", "Greek"), + (b"hu", "Hungarian"), + (b"sv", "Swedish"), + ], + ), ), ] diff --git a/content/migrations/0003_add_french_turkish_portugues_language.py b/content/migrations/0003_add_french_turkish_portugues_language.py new file mode 100644 index 00000000..dd08f309 --- /dev/null +++ b/content/migrations/0003_add_french_turkish_portugues_language.py @@ -0,0 +1,31 @@ +# Generated by Django 2.0.5 on 2019-07-18 22:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("content", "0002_add_greek_language"), + ] + + operations = [ + migrations.AlterField( + model_name="flatpagetranslation", + name="language", + field=models.CharField( + choices=[ + ("en", "English"), + ("de", "German"), + ("fr", "French"), + ("el", "Greek"), + ("hu", "Hungarian"), + ("sv", "Swedish"), + ("pt", "Portuguese"), + ("tr", "Turkish"), + ], + max_length=20, + verbose_name="language", + ), + ), + ] diff --git a/content/migrations/0004_alter_flatpagetranslation_language.py b/content/migrations/0004_alter_flatpagetranslation_language.py new file mode 100644 index 00000000..b63a6af3 --- /dev/null +++ b/content/migrations/0004_alter_flatpagetranslation_language.py @@ -0,0 +1,33 @@ +# Generated by Django 4.0.3 on 2022-03-14 11:17 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("content", "0003_add_french_turkish_portugues_language"), + ] + + operations = [ + migrations.AlterField( + model_name="flatpagetranslation", + name="language", + field=models.CharField( + choices=[ + ("en", "English"), + ("de", "German"), + ("fr", "French"), + ("el", "Greek"), + ("hu", "Hungarian"), + ("pl", "Polish"), + ("pt", "Portuguese"), + ("ru", "Russian"), + ("sv", "Swedish"), + ("tr", "Turkish"), + ], + max_length=20, + verbose_name="language", + ), + ), + ] diff --git a/content/migrations/0005_alter_flatpagetranslation_language.py b/content/migrations/0005_alter_flatpagetranslation_language.py new file mode 100644 index 00000000..2eaaed38 --- /dev/null +++ b/content/migrations/0005_alter_flatpagetranslation_language.py @@ -0,0 +1,35 @@ +# Generated by Django 4.0.3 on 2022-03-30 08:42 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("content", "0004_alter_flatpagetranslation_language"), + ] + + operations = [ + migrations.AlterField( + model_name="flatpagetranslation", + name="language", + field=models.CharField( + choices=[ + ("uk", "Ukrainian"), + ("en", "English"), + ("de", "German"), + ("cs", "Czech"), + ("el", "Greek"), + ("fr", "French"), + ("hu", "Hungarian"), + ("pl", "Polish"), + ("pt", "Portuguese"), + ("ru", "Russian"), + ("sv", "Swedish"), + ("tr", "Turkish"), + ], + max_length=20, + verbose_name="language", + ), + ), + ] diff --git a/content/models.py b/content/models.py index 4db2d43e..e0ff6e94 100644 --- a/content/models.py +++ b/content/models.py @@ -1,40 +1,41 @@ # coding: utf-8 -from django.db import models -from django.utils.translation import ugettext_lazy as _ from django.conf import settings from django.contrib.flatpages.models import FlatPage +from django.db import models +from django.utils.translation import gettext_lazy as _ class FlatPageExtraStyle(models.Model): - flatpage = models.OneToOneField(FlatPage, - related_name='extra_style', - verbose_name=_('additional style'), - ) + flatpage = models.OneToOneField( + FlatPage, + models.CASCADE, + related_name="extra_style", + verbose_name=_("additional style"), + ) - css = models.TextField(_('additional CSS'), blank=True) + css = models.TextField(_("additional CSS"), blank=True) class Meta: - verbose_name = _('additional flat page style') - verbose_name_plural = _('additional flat page styles') + verbose_name = _("additional flat page style") + verbose_name_plural = _("additional flat page styles") class FlatPageTranslation(models.Model): - flatpage = models.ForeignKey(FlatPage, - related_name='translations', - verbose_name=_('flat page'), - ) + flatpage = models.ForeignKey( + FlatPage, + models.CASCADE, + related_name="translations", + verbose_name=_("flat page"), + ) - language = models.CharField(_('language'), - max_length=20, - choices=settings.LANGUAGES) + language = models.CharField( + _("language"), max_length=20, choices=settings.LANGUAGES + ) - title = models.CharField(_('title'), - max_length=200, - blank=True) + title = models.CharField(_("title"), max_length=200, blank=True) - content = models.TextField(_('content'), - blank=True) + content = models.TextField(_("content"), blank=True) def save(self, *args, **kwargs): if not self.title: @@ -42,6 +43,6 @@ def save(self, *args, **kwargs): super(FlatPageTranslation, self).save(*args, **kwargs) class Meta: - unique_together = ('flatpage', 'language') - verbose_name = _('flat page translation') - verbose_name_plural = _('flat page translations') + unique_together = ("flatpage", "language") + verbose_name = _("flat page translation") + verbose_name_plural = _("flat page translations") diff --git a/content/templates/flatpages/additional_flat_page_style_inline.html b/content/templates/flatpages/additional_flat_page_style_inline.html index 02854bd7..ffa5fa14 100644 --- a/content/templates/flatpages/additional_flat_page_style_inline.html +++ b/content/templates/flatpages/additional_flat_page_style_inline.html @@ -1,4 +1,4 @@ -{% load i18n admin_urls admin_static %} +{% load i18n admin_urls static %}

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    {{ inline_admin_formset.formset.management_form }} @@ -9,7 +9,7 @@

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    id="{{ inline_admin_formset.formset.prefix }}- {% if not forloop.last %}{{ forloop.counter0 }}{% else %}empty{% endif %}"> {% if inline_admin_form.show_url %} - {% trans "View on site" %}{% endif %} + {% translate "View on site" %}{% endif %} {% if inline_admin_formset.formset.can_delete and inline_admin_form.original %} {{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }}{% endif %} @@ -29,8 +29,8 @@

    {{ inline_admin_formset.opts.verbose_name_plural|capfirst }}

    $("#{{ inline_admin_formset.formset.prefix }}-group .inline-related").stackedFormset({ prefix: '{{ inline_admin_formset.formset.prefix }}', adminStaticPrefix: '{% static "admin/" %}', - deleteText: "{% trans "Remove" %}", - addText: "{% blocktrans with verbose_name=inline_admin_formset.opts.verbose_name|capfirst %}Add another {{ verbose_name }}{% endblocktrans %}" + deleteText: "{% translate "Remove" %}", + addText: "{% blocktranslate with verbose_name=inline_admin_formset.opts.verbose_name|capfirst %}Add another {{ verbose_name }}{% endblocktranslate %}" }); })(django.jQuery); diff --git a/content/templates/flatpages/default.html b/content/templates/flatpages/default.html index 9e4091d4..f41673f3 100644 --- a/content/templates/flatpages/default.html +++ b/content/templates/flatpages/default.html @@ -20,7 +20,7 @@ {% if perms.flatpages.can_change_page %}
    - {% trans "Edit this page" %} + {% translate "Edit this page" %} {% endif %} {% endblock %} diff --git a/content/tests.py b/content/tests.py index 7ce503c2..a39b155a 100644 --- a/content/tests.py +++ b/content/tests.py @@ -1,3 +1 @@ -from django.test import TestCase - # Create your tests here. diff --git a/content/urls.py b/content/urls.py index 3117685a..57d631c3 100644 --- a/content/urls.py +++ b/content/urls.py @@ -1,2 +1 @@ # coding: utf-8 - diff --git a/content/views.py b/content/views.py index 16dde9d9..cbbf7392 100644 --- a/content/views.py +++ b/content/views.py @@ -2,14 +2,13 @@ from django.contrib.flatpages.models import FlatPage from django.contrib.flatpages.views import render_flatpage from django.contrib.sites.shortcuts import get_current_site -from django.http import Http404, HttpResponse, HttpResponsePermanentRedirect +from django.http import Http404, HttpResponsePermanentRedirect from django.shortcuts import get_object_or_404 -from django.template import loader -from django.utils.safestring import mark_safe from django.views.decorators.csrf import csrf_protect + from content.models import FlatPageTranslation -DEFAULT_TEMPLATE = 'flatpages/default.html' +DEFAULT_TEMPLATE = "flatpages/default.html" # This view is called from FlatpageFallbackMiddleware.process_response @@ -33,18 +32,16 @@ def translated_flatpage(request, url): flatpage `flatpages.flatpages` object """ - if not url.startswith('/'): - url = '/' + url + if not url.startswith("/"): + url = "/" + url site_id = get_current_site(request).id try: - f = get_object_or_404(FlatPage, - url=url, sites=site_id) + f = get_object_or_404(FlatPage, url=url, sites=site_id) except Http404: - if not url.endswith('/') and settings.APPEND_SLASH: - url += '/' - f = get_object_or_404(FlatPage, - url=url, sites=site_id) - return HttpResponsePermanentRedirect('%s/' % request.path) + if not url.endswith("/") and settings.APPEND_SLASH: + url += "/" + f = get_object_or_404(FlatPage, url=url, sites=site_id) + return HttpResponsePermanentRedirect("%s/" % request.path) else: raise return render_translated_flatpage(request, f) @@ -57,7 +54,9 @@ def render_translated_flatpage(request, f): f.title = translation.title f.content = translation.content except FlatPageTranslation.DoesNotExist: - print(u'no translation for page "{flatpage}" for language {lang}'.format( - flatpage=f.url, - lang=request.LANGUAGE_CODE)) + print( + 'no translation for page "{flatpage}" for language {lang}'.format( + flatpage=f.url, lang=request.LANGUAGE_CODE + ) + ) return render_flatpage(request, f) diff --git a/django-entrypoint.sh b/django-entrypoint.sh index d5439dfc..1db40676 100755 --- a/django-entrypoint.sh +++ b/django-entrypoint.sh @@ -1,25 +1,62 @@ #!/bin/sh pid=0 +_exit=0 shutdown() { - echo "Got shutdown signal" >&2 + echo "Got signal ${*}" >&2 + _exit=1 if [ 0 -ne ${pid} ] then - kill -TERM ${pid} - wait ${pid} - exit 0 + kill "-${1:-INT}" ${pid} + case "${1:-INT}" in + "HUP"|"FPE"|"SEGV"|"USR1"|"USR2") + echo "Non terminal signal received." >&2 + _exit=0 + ;; + *) + echo "Waiting for child process ${pid} to exit." >&2 + wait ${pid} + echo "Child exited. Bye." >&2 + exit 0 + ;; + esac + else + echo "No specific child PID known. Terminating all." >&2 + killall -INT + echo "Waiting for all children to exit." >&2 + wait + exit 1 fi - killall -TERM - wait - exit 1 } -trap shutdown TERM INT QUIT +for sig in HUP INT QUIT FPE SEGV TERM USR1 USR2 +do + trap "shutdown ${sig}" "${sig}" +done + +# determine about-to-run proccess +case "${1}x" in + /*) + echo "Absolute command given. Replacing Entrypoint with ${*}" >&2 + exec ${@} + # if we reach here, something wicked happened, therefore we exit + exit 1 + ;; + *) + if [ -z "${1}" ] + then + set -- /usr/sbin/uwsgi --ini uwsgi.ini + else + set -- python3 manage.py "${@}" + fi + ;; +esac -if [ -z ${NO_CHECK} ] +if [ -z "${NO_CHECK}" ] then - /usr/local/bin/python manage.py check_db_connection + echo "Checking django database connection." >&2 + python3 manage.py check_db_connection --sleep 5 --count 5 retval=$? if [ 0 -ne ${retval} ] @@ -28,8 +65,16 @@ then fi fi -/usr/local/bin/python manage.py $@ & +echo "Starting main command ${*}" >&2 +"${@}" & pid=$! -wait +echo "Waiting for children to finish." >&2 +while [ 0 -eq ${_exit} ] +do + wait + _exit=1 +done + +echo "End of entrypoint. Bye." >&2 exit 0 diff --git a/docker-compose.yml b/docker-compose.yml index 03a150e2..ae196baf 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,55 +1,130 @@ -version: '2' +version: '2.3' +# inspiration by https://github.com/dockerfiles/django-uwsgi-nginx volumes: ### MySQL ### - data_volume_mysql: - config_volume_mysql: + # data_volume_mysql: + # config_volume_mysql: ### PostgreSQL ### - # data_volume_pg: + data_volume_pg: + backup_volume_pg: services: db: - ### MySQL ### - image: tarzan79/alpine-mysql ### PostgreSQL ### - # image: kiasaki/alpine-postgres - environment: - MYSQL_ALLOW_EMPTY_PASSWORD: "true" - MYSQL_DATABASE: volunteer_planner - MYSQL_USER: vp - MYSQL_PASSWORD: volunteer_planner - - POSTGRES_DB: volunteer_planner - POSTGRES_USER: vp - POSTGRES_PASSWORD: volunteer_planner + image: vp_pg:latest + build: + context: docker/db/ + args: + - DATABASE_NAME + - DATABASE_USER + - DATABASE_PW + ### MySQL ### + # image: tarzan79/alpine-mysql + ##environment: + ## MYSQL_ALLOW_EMPTY_PASSWORD: "true" + ## MYSQL_DATABASE: volunteer_planner + ## MYSQL_USER: vp + ## MYSQL_PASSWORD: volunteer_planner + volumes: ### MySQL ### - - data_volume_mysql:/var/lib/mysql - - config_volume_mysql:/etc/mysql + # - data_volume_mysql:/var/lib/mysql + # - config_volume_mysql:/etc/mysql ### PostgreSQL ### - # - data_volume_pg:/var/lib/postgresql/data + - data_volume_pg:/var/lib/postgresql/data + - backup_volume_pg:/pg_backup hostname: db mem_limit: 1G memswap_limit: 2G - #cpuset: "0" + stop_grace_period: 30s - web: - build: . - # Attention, we're checking if database container is available before starting django, unless NO_CHECK env is set - entrypoint: ["/django-entrypoint.sh"] - command: ["runserver", "0.0.0.0:8000"] - volumes: - - .:/opt/vpcode - ports: - - "8000:8000" + healthcheck: + test: ["CMD", "psql", "-1wXnqx", "-U", "postgres", "-c", "SELECT 1 AS check"] + interval: 30s + timeout: 5s + retries: 2 + start_period: 10s + + django: + image: vp_django:latest + build: + context: . + args: + - vpbasedir=${VP_BASE_DIR:-/opt/vp} links: - db + ports: + - "8001:8181" + + hostname: django + mem_limit: 1G + memswap_limit: 2G + stop_grace_period: 15s + + healthcheck: + test: ["CMD-SHELL", "uwsgi --connect-and-read /run/vp/stats 2>&1 | jq -cMe '.workers[0].accepting | select(. >= 0)'"] + interval: 10s + timeout: 5s + retries: 2 + start_period: 10s + environment: - ### MySQL ### - DJANGO_SETTINGS_MODULE: "volunteer_planner.settings.docker_mysql" + DJANGO_SETTINGS_MODULE: ${DJANGO_SETTINGS_MODULE-volunteer_planner.settings.production} + #STATIC_ROOT: ${VP_BASE_DIR:-/opt/vp}/static ### PostgreSQL ### - # DJANGO_SETTINGS_MODULE: "volunteer_planner.settings.docker_postgres" + ### Make POstgreSQL the docker default ### + DATABASE_ENGINE: ${DATABASE_ENGINE:-django.db.backends.postgresql} + DATABASE_HOST: db + DATABASE_NAME: ${DATABASE_NAME} + DATABASE_USER: ${DATABASE_USER} + DATABASE_PW: ${DATABASE_PW} + ### Django settings ### + ALLOWED_HOSTS: ${ALLOWED_HOSTS-localhost} + SECRET_KEY: ${SECRET_KEY:?Please set djangos SECRET_KEY in .env or build environment} + ### VP settings ### + ADMIN_EMAIL: ${ADMIN_EMAIL:-admin@localhost} + SENDER_EMAIL: ${SENDER_EMAIL:-admin@localhost} + FROM_EMAIL: ${FROM_EMAIL:-admin@localhost} + SERVER_EMAIL: ${SERVER_EMAIL:-admin@localhost} + CONTACT_EMAIL: ${CONTACT_EMAIL:-admin@localhost} + EMAIL_BACKEND: ${EMAIL_BACKEND:-django.core.mail.backends.console.EmailBackend} + SMTP_HOST: ${SMTP_HOST:-localhost} + SMTP_PORT: ${SMTP_PORT:-25} + ### Attention, we're checking if database container is available before starting django, unless NO_CHECK env is set + NO_CHECK: + ##command: ["runserver", "0.0.0.0:8000"] + ##volumes: + ## - .:/opt/vpcode + ##ports: + ## - "8000:8000" + ##environment: + ## ### MySQL ### + ## # DJANGO_SETTINGS_MODULE: "volunteer_planner.settings.docker_mysql" + ## ### PostgreSQL ### + ## DJANGO_SETTINGS_MODULE: "volunteer_planner.settings.docker_postgres" + + volumes: + - .:/opt/vp + + web: + image: vp_web:latest + build: + context: docker/web/ + args: + - vpbasedir=${VP_BASE_DIR:-/opt/vp} + links: + - django + ports: + - "8000:8181" + hostname: web - mem_limit: 1G - memswap_limit: 2G - #cpuset: "1" + mem_limit: 32M + memswap_limit: 128M + + healthcheck: + test: ["CMD", "curl", "--fail-early", "--silent", "-I", "-o", "/dev/null", "-w", "{\"http_status\":%{http_code},\"duration\":%{time_total}}", "http://localhost:8181/"] + interval: 15s + timeout: 5s + retries: 1 + start_period: 5s diff --git a/docker/db/Dockerfile b/docker/db/Dockerfile new file mode 100644 index 00000000..b4fb1dd6 --- /dev/null +++ b/docker/db/Dockerfile @@ -0,0 +1,17 @@ +FROM postgres:9-alpine +ARG DATABASE_NAME=volunteer_planner +ARG DATABASE_USER=vp +ARG DATABASE_PW=volunteer_planner + +ENV POSTGRES_SECRETS="${POSTGRES_SECRETS:-/var/lib/postgresql/secrets}" +ENV POSTGRES_DB_FILE="${POSTGRES_SECRETS}/db" \ + POSTGRES_USER_FILE="${POSTGRES_SECRETS}/db_user" \ + POSTGRES_PASSWORD_FILE="${POSTGRES_SECRETS}/db_password" + +VOLUME ["/pg_backup"] + +RUN chown postgres /pg_backup && \ + mkdir -p "${POSTGRES_SECRETS}" && \ + printf "${DATABASE_NAME}" > ${POSTGRES_DB_FILE} && \ + printf "${DATABASE_USER}" > ${POSTGRES_USER_FILE} && \ + printf "${DATABASE_PW}" > ${POSTGRES_PASSWORD_FILE} diff --git a/docker/web/Dockerfile b/docker/web/Dockerfile new file mode 100644 index 00000000..7df3746f --- /dev/null +++ b/docker/web/Dockerfile @@ -0,0 +1,10 @@ +FROM nginx:1.17-alpine +ARG vpbasedir=/opt/vp +RUN mkdir -p /opt/vp/static && \ + apk update && \ + apk add \ + curl \ + && \ + /bin/rm -rf /var/cache/apk/* /root/.cache +COPY --from=vp_django:latest ${vpbasedir}/static /opt/vp/static +ADD nginx.conf /etc/nginx/conf.d/default.conf diff --git a/docker/web/nginx.conf b/docker/web/nginx.conf new file mode 100644 index 00000000..ee201979 --- /dev/null +++ b/docker/web/nginx.conf @@ -0,0 +1,33 @@ +upstream django { + server django:8080; +} + +server { + listen 8181 default_server; + server_name vp; + + charset utf-8; + + location /status { + stub_status on; + access_log off; + # loopback + allow 127.0.0.0/8; + # known private use networks + allow 10.0.0.0/8; + allow 172.16.0.0/12; + allow 192.168.0.0/16 + deny all; + } + + location /static { + alias /opt/vp/static; + gzip_static on; + } + + location / { + gzip on; + uwsgi_pass django; + include uwsgi_params; + } +} diff --git a/google_tools/__init__.py b/google_tools/__init__.py deleted file mode 100644 index 57d631c3..00000000 --- a/google_tools/__init__.py +++ /dev/null @@ -1 +0,0 @@ -# coding: utf-8 diff --git a/google_tools/context_processors.py b/google_tools/context_processors.py deleted file mode 100644 index 473a48e4..00000000 --- a/google_tools/context_processors.py +++ /dev/null @@ -1,22 +0,0 @@ -# coding: utf-8 - -from django.conf import settings - -from common.conf_loader import ConfLoader - - -def google_tools_config(request): - config = ConfLoader(settings, raise_missing=False) - - google_tools = dict() - - if config.GOOGLE_SITE_VERIFICATION: # and not settings.DEBUG: - google_tools['site_verification'] = config.GOOGLE_SITE_VERIFICATION - - if config.GOOGLE_ANALYTICS_TRACKING_ID: # and not settings.DEBUG: - google_tools['analytics'] = { - 'tracking_id': config.GOOGLE_ANALYTICS_TRACKING_ID, - 'domain': config.GOOGLE_ANALYTICS_DOMAIN - } - - return dict(google_tools=google_tools) diff --git a/google_tools/templates/google_headers.html b/google_tools/templates/google_headers.html deleted file mode 100644 index e0005a22..00000000 --- a/google_tools/templates/google_headers.html +++ /dev/null @@ -1,32 +0,0 @@ -{% if google_tools %} - {% if google_tools.site_verification %} - - {% endif %} - {% if google_tools.analytics %} - - {% endif %} -{% endif %} diff --git a/locale/ar/LC_MESSAGES/django.po b/locale/ar/LC_MESSAGES/django.po new file mode 100644 index 00000000..2426b94a --- /dev/null +++ b/locale/ar/LC_MESSAGES/django.po @@ -0,0 +1,1369 @@ +# +# Translators: +# Ahmad Sghaier, 2016,2019 +# Ahmad Sghaier, 2016,2019 +# Maha Abdulkaream Mohammad Sharaf, 2022 +# Maha Abdulkaream Mohammad Sharaf, 2022 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2022-03-15 17:56+0000\n" +"Last-Translator: Christoph Meißner\n" +"Language-Team: Arabic (http://www.transifex.com/coders4help/volunteer-planner/language/ar/)\n" +"Language: ar\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +msgid "first name" +msgstr "الإسم الأول " + +msgid "last name" +msgstr "اللقب" + +msgid "email" +msgstr "البريد الإلكتروني " + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "الحسابات " + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "حساب المستخدم" + +msgid "user accounts" +msgstr "حسابات المستخدمين" + +msgid "My shifts today:" +msgstr "جدولي اليوم" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "إسم المستخدم " + +msgid "First name" +msgstr "الإسم الأول " + +msgid "Last name" +msgstr "اللقب" + +msgid "Email" +msgstr "البريد الإلكتروني" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "مسح الحساب (التحذير الأخير)" + +msgid "Save" +msgstr "حفظ" + +msgid "Edit Account" +msgstr "تعديل بيانات الحساب" + +msgid "Delete Account" +msgstr "مسح الحساب" + +msgid "Your user account has been deleted." +msgstr "لقد تم مسح حسابك" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "ترجمة" + +msgid "translations" +msgstr "الترجمات" + +msgid "No translation available" +msgstr "لا توجد أي ترجمة متاحة" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "اللغة" + +msgid "title" +msgstr "العنوان" + +msgid "content" +msgstr "المحتوى" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "ازالة" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "تعديل هذه الصفحة" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "الصفحة الرئيسية" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "عرض المزيد" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" +msgstr[4] "" +msgstr[5] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "الأيام " + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "الصفحة الرئيسية " + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "الأعضاء " + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "المساعدة" + +msgid "Logout" +msgstr "تسجيل الخروج" + +msgid "Admin" +msgstr "مسؤول الصفحة" + +msgid "Regions" +msgstr "المناطق " + +msgid "Activation complete" +msgstr "تم التفعيل" + +msgid "Activation problem" +msgstr "اشكالية اثناء التفعيل" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "تسجيل الدخول " + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "شكرا %(account)s، تفعيل الحساب قد تم بنجاح. يمكنك الآن %(login_link)s واستخدام اسم المستخدم وكلمة المرور التي اخترتها عند التسجيل." + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "خطأ. اما انك قد فعلت حسابك في السابق او ان مفتاح التفعيل غير صحيحة او فاقدة للصلاحية" + +msgid "Activation successful!" +msgstr "تم التفعيل بنجاح" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "شكرا للتسجيل" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "بامكانك تسجيل الدخول هنا" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "البريد الإلكتروني " + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "كلمة المرور " + +msgid "Forgot your password?" +msgstr "هل نسيت كلمة المرور " + +msgid "Help and sign-up" +msgstr "المساعدة وانشاء حساب" + +msgid "Password changed" +msgstr "كلمة المرور تغيرت" + +msgid "Password successfully changed!" +msgstr "تم تغيير كلمة المرور بنجاح " + +msgid "Change Password" +msgstr "قم بتغيير كلمة المرور " + +msgid "Change password" +msgstr "تغيير كلمة المرور" + +msgid "Password reset complete" +msgstr "اعادة تعيين كلمة المرور تم بنجاح" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "تسجيل الدخول" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "ادخل كلمة مرور جديدة" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/bg/LC_MESSAGES/django.po b/locale/bg/LC_MESSAGES/django.po new file mode 100644 index 00000000..ecb433aa --- /dev/null +++ b/locale/bg/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2022-03-15 17:56+0000\n" +"Last-Translator: Christoph Meißner\n" +"Language-Team: Bulgarian (http://www.transifex.com/coders4help/volunteer-planner/language/bg/)\n" +"Language: bg\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/cs/LC_MESSAGES/django.po b/locale/cs/LC_MESSAGES/django.po new file mode 100644 index 00000000..ed17b4f8 --- /dev/null +++ b/locale/cs/LC_MESSAGES/django.po @@ -0,0 +1,1423 @@ +# +# Translators: +# trendspotter , 2022 +# trendspotter , 2019 +# trendspotter , 2019,2022 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:50+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: trendspotter , 2019,2022\n" +"Language-Team: Czech (http://www.transifex.com/coders4help/volunteer-planner/language/cs/)\n" +"Language: cs\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" + +msgid "first name" +msgstr "křestní jméno" + +msgid "last name" +msgstr "Příjmení" + +msgid "email" +msgstr "e-mail" + +msgid "date joined" +msgstr "datum připojení" + +msgid "last login" +msgstr "poslední přihlášení" + +msgid "Accounts" +msgstr "Účty" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "Neplatné uživatelské jméno. Povolené znaky jsou písmena, číslice, \".\" a \"_\"." + +msgid "Username must start with a letter." +msgstr "Uživatelské jméno musí začínat písmenem." + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "Uživatelské jméno musí končit písmenem, číslicí nebo znakem \"_\"." + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "Uživatelské jméno nesmí obsahovat po sobě jdoucí znaky \".\" nebo \"_\"." + +msgid "Accept privacy policy" +msgstr "Přijmout zásady ochrany osobních údajů" + +msgid "user account" +msgstr "uživatelský účet" + +msgid "user accounts" +msgstr "uživatelské účty" + +msgid "My shifts today:" +msgstr "Moje dnešní směny:" + +msgid "No shifts today." +msgstr "Dnes žádné směny." + +msgid "Show this work shift" +msgstr "Zobrazit tuto pracovní směnu" + +msgid "My shifts tomorrow:" +msgstr "Moje směny zítra:" + +msgid "No shifts tomorrow." +msgstr "Žádné směny zítra." + +msgid "My shifts the day after tomorrow:" +msgstr "Moje směny pozítří:" + +msgid "No shifts the day after tomorrow." +msgstr "Žádné směny pozítří." + +msgid "Further shifts:" +msgstr "Další směny:" + +msgid "No further shifts." +msgstr "Žádné další směny." + +msgid "Show my work shifts in the past" +msgstr "Ukažte své pracovní směny v minulosti" + +msgid "My work shifts in the past:" +msgstr "Moje předchozí pracovní směny:" + +msgid "No work shifts in the past days yet." +msgstr "Poslední dny nebyly žádné pracovní směny." + +msgid "Show my work shifts in the future" +msgstr "Zobrazit moje budoucí pracovní směny" + +msgid "Username" +msgstr "Uživatelské jméno" + +msgid "First name" +msgstr "Křestní jméno" + +msgid "Last name" +msgstr "Příjmení" + +msgid "Email" +msgstr "E-mail" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "Pokud účet zrušíte, budou tyto informace anonymizovány a nebudete se již moci přihlásit do programu Volunteer-Planner." + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "Není možné tyto informace obnovit. Pokud chcete znovu pracovat jako dobrovolník, budete muset vytvořit nový účet." + +msgid "Delete Account (no additional warning)" +msgstr "Odstranit účet (bez dalšího upozornění)" + +msgid "Save" +msgstr "Uložit" + +msgid "Edit Account" +msgstr "Upravit účet" + +msgid "Delete Account" +msgstr "Smazat účet" + +msgid "Your user account has been deleted." +msgstr "Váš uživatelský účet byl smazán." + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "další CSS" + +msgid "translation" +msgstr "překlad" + +msgid "translations" +msgstr "překlady" + +msgid "No translation available" +msgstr "Nejsou k dispozici překlady" + +msgid "additional style" +msgstr "další styl" + +msgid "additional flat page style" +msgstr "další styl ploché stránky" + +msgid "additional flat page styles" +msgstr "další ploché styly stránek" + +msgid "flat page" +msgstr "plochá strana" + +msgid "language" +msgstr "jazyk" + +msgid "title" +msgstr "nadpis" + +msgid "content" +msgstr "obsah" + +msgid "flat page translation" +msgstr "překlad ploché stránky" + +msgid "flat page translations" +msgstr "překlady plochých stránek" + +msgid "View on site" +msgstr "Zobrazit na webu" + +msgid "Remove" +msgstr "Odstranit" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Přidat další %(verbose_name)s" + +msgid "Edit this page" +msgstr "Upravit tuto stranu" + +msgid "subtitle" +msgstr "podtitulek" + +msgid "articletext" +msgstr "text článku" + +msgid "creation date" +msgstr "datum vytvoření" + +msgid "news entry" +msgstr "zapsání novinky" + +msgid "news entries" +msgstr "zapsané novinky" + +msgid "Page not found" +msgstr "Stránka nenalezena" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Omlouváme se, ale požadovaná stránka nebyla nalezena." + +msgid "server error" +msgstr "Chyba serveru" + +msgid "Server Error (500)" +msgstr "Chyba serveru (500)" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "Došlo k chybě. Byla hlášena správcům webu e-mailem a měla by být opravena brzy. Děkujeme za trpělivost." + +msgid "Login" +msgstr "Přihlášení" + +msgid "Start helping" +msgstr "Začněte pomáhat" + +msgid "Main page" +msgstr "Hlavní strana" + +msgid "Imprint" +msgstr "Impresum" + +msgid "About" +msgstr "O nás" + +msgid "Supporter" +msgstr "Podporovatel" + +msgid "Press" +msgstr "Media" + +msgid "Contact" +msgstr "Kontakt" + +msgid "FAQ" +msgstr "FAQ" + +msgid "I want to help!" +msgstr "Chci pomoci!" + +msgid "Register and see where you can help" +msgstr "Zaregistrujte se a zjistěte, kde můžete pomoci" + +msgid "Organize volunteers!" +msgstr "Organizujte dobrovolníky!" + +msgid "Register a shelter and organize volunteers" +msgstr "Zaregistrujte přístřeší a organizujte dobrovolníky" + +msgid "Places to help" +msgstr "Místa k pomoci" + +msgid "Registered Volunteers" +msgstr "Registrovaní dobrovolníci" + +msgid "Worked Hours" +msgstr "Pracovní hodiny" + +msgid "What is it all about?" +msgstr "O čem to celé je?" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "Jste dobrovolník a chcete pomáhat? Dobrovolník - Planner.org vám ukáže, kde, kdy a jak přímo pomáhat v terénu." + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "Tato platforma je nekomerční a bez reklam. Mezinárodní tým terénních pracovníků, programátoři, projektoví manažeři a projektanti jsou pro tento projekt dobrovolně a přinášejí svou odbornou zkušenost, aby přinesli změnu." + +msgid "You can help at these locations:" +msgstr "Na těchto místech můžete pomoci:" + +msgid "There are currently no places in need of help." +msgstr "V současné době neexistují místa, která by potřebovala pomoc." + +msgid "Privacy Policy" +msgstr "Zásady ochrany osobních údajů" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "Rozsah" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "Tyto zásady ochrany osobních údajů informují uživatele o shromažďování a používání osobních údajů na tomto webu (dále jen \"služba\") poskytovatelem služeb, Benefit e.V. (Wollankstr. 2, 13187 Berlín)." + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "Právním základem pro politiku ochrany osobních údajů je německý zákon o ochraně osobních údajů (Bundesdatenschutzgesetz, BDSG) a německý zákon Telemedia (Telemediengesetz, TMG)." + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "Přístup k souborům protokolů dat / serveru" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "Poskytovatel služby (nebo poskytovatel jeho webového prostoru) shromažďuje data o každém přístupu k této službě a ukládá tato přístupová data do takzvaných souborů protokolu serveru. Přístupová data zahrnují název navštíveného webu, které soubory jsou přístupné, datum a čas přístupu, přenesená data, oznámení o úspěšném přístupu, číslo typu a verze webového prohlížeče uživatele, operační systém uživatele, adresu URL odkazujícího uživatele (tj. web, který uživatel navštívil dříve), adresu IP uživatele a jméno poskytovatele internetového připojení uživatele." + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "Poskytovatel služeb používá protokolové soubory serveru pro statistické účely a pouze pro provoz, zabezpečení a vylepšení poskytované služby. Poskytovatel služby si nicméně vyhrazuje právo kdykoli přehodnotit soubory protokolu, pokud existují určité náznaky nezákonného používání služby." + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "Použití osobních údajů" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "Osobní údaje jsou informace, které lze použít k identifikaci osoby, tj. Veškeré údaje, které lze vysledovat zpět na určitou osobu. Osobní údaje zahrnují jméno, e-mailovou adresu nebo telefonní číslo uživatele. Dokonce i údaje o osobních preferencích, koníčcích, členství nebo navštívených webových stránkách se považují za osobní údaje." + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "Poskytovatel služeb shromažďuje, používá a sdílí osobní údaje s třetími stranami pouze tehdy, je-li ze zákona oprávněn tak učinit, nebo pokud uživatel dal jeho svolení." + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "Kontakt" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "Při kontaktování poskytovatele služeb (například prostřednictvím e-mailu nebo prostřednictvím formuláře pro kontakt na web) jsou data poskytnutá uživatelem uložena pro zpracování žádosti a pro případné následné dotazy v budoucnu." + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "Cookies" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "Cookies jsou malé soubory, které jsou ukládány na zařízení uživatele (osobní počítač, smartphone nebo podobně) s informacemi specifickými pro toto zařízení. Mohou být použity k různým účelům: Cookies mohou být použity ke zlepšení uživatelské zkušenosti (např. Ukládáním, a tudíž i \"zapamatováním\" přihlašovacích pověření). Soubory cookie mohou být také použity ke shromažďování statistických údajů, které umožňují poskytovateli služeb analyzovat využití uživatele webové stránky s cílem zlepšit službu." + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "Uživatel může přizpůsobit používání souborů cookie. Většina webových prohlížečů nabízí nastavení, která omezují nebo dokonce zcela zabraňují ukládání souborů cookie. Poskytovatel služeb však bere na vědomí, že tato omezení mohou negativně ovlivnit uživatelskou zkušenost a funkčnost webových stránek." + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "Uživatel může spravovat používání souborů cookie od mnoha inzerentů na internetu buď na americkém webu %(us_url)s nebo na evropském webu %(eu_url)s." + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "Registrace" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "Data poskytovaná uživatelem při registraci umožňují využití služby. Poskytovatel služeb může uživateli prostřednictvím e-mailu informovat o informacích týkajících se služby nebo o registraci, například informace o změnách, které služba prochází, nebo technické informace (viz také další část)." + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "Formuláře registrace a uživatelského profilu ukazují, která data se shromažďují a ukládají. Zahrnují - nikoli však pouze - jméno, příjmení a e-mailovou adresu uživatele." + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "E-mailové upozornění / Newsletter" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "Při registraci účtu u služby poskytuje uživatel povolení k přijímání e-mailových upozornění, stejně jako e-mailů se zpravodajem." + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "E-mailové upozornění informují uživatele o určitých událostech týkajících se užívání služby uživatelem. Pomocí zpravodaje poskytovatel služeb zašle uživateli obecné informace o poskytovateli a jeho nabízené službě(ách)." + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "Pokud si uživatel přeje zrušit své oprávnění k přijímání e-mailů, musí svůj uživatelský účet smazat." + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "Google Analytics" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "Tento web používá službu Google Analytics, webovou službu pro analýzu poskytovanou společností Google, Inc. (\"Google\"). Google Analytics používá \"cookies\", které jsou textové soubory umístěné na zařízení uživatele, aby pomohly webové stránce analyzovat, jak uživatelé stránky používají. Informace vygenerované cookie o užívání webových stránek uživatelem budou předány a uloženy společností Google na serverech ve Spojených státech." + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "V případě, že je na této webové stránce aktivována IP anonymita, bude IP adresa uživatele zkrácena v oblasti členských států Evropské unie nebo jiných stran Dohody o Evropském hospodářském prostoru. Pouze ve výjimečných případech bude celá IP adresa nejprve převedena na server Google v USA a zkrácena. Na této webové stránce je aktivní anonymita IP." + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "Společnost Google tyto informace použije jménem provozovatele této webové stránky za účelem vyhodnocení vašeho používání webových stránek, sestavování zpráv o činnosti webových stránek pro provozovatele webových stránek a poskytováním dalších služeb souvisejících s činností webových stránek a využíváním internetu." + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "Adresa IP, kterou prohlížeč uživatele sděluje v rámci služby Google Analytics, nebude spojena s jinými údaji, které společnost Google drží. Uživatel může odmítnout použití souborů cookie výběrem příslušných nastavení v prohlížeči, nicméně je třeba poznamenat, že pokud to uživatel provede, nemusí být schopen používat plnou funkcionalitu tohoto webu. Může se také odhlásit ze sledování služby Google Analytics s účinkem do budoucna tím, že stáhne a nainstaluje doplněk prohlížeče pro odmítnutí služby Google Analytics pro svůj aktuální webový prohlížeč: %(optout_plugin_url)s." + +msgid "click this link" +msgstr "klikněte na tento odkaz" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "Jako alternativu k doplňkům prohlížeče nebo v prohlížečích v mobilních zařízeních může uživatel %(optout_javascript)s pro odhlášení ze služby Google Analytics v rámci tohoto webu v budoucnu sledovat (výjimka platí pouze pro prohlížeč v němž uživatel nastavuje a v rámci této domény). Soubor cookie pro odhlášení se uloží na zařízení uživatele, což znamená, že uživatel bude muset kliknout na tento odkaz znovu, pokud odstraní soubory cookie." + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "Zrušení, změny, opravy a aktualizace" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "Uživatel má právo být na požádání a bezplatně informován, jaké osobní údaje o něm byly uloženy. Kromě toho může uživatel požádat o opravu nesprávných údajů, jakož i o pozastavení nebo dokonce smazání jeho osobních údajů, pokud neexistuje žádná právní povinnost tyto údaje uchovávat." + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "Na základě vzoru ochrany soukromí advokáta Thomase Schwenkeho - I LAW it" + +msgid "advantages" +msgstr "výhody" + +msgid "save time" +msgstr "šetřit čas" + +msgid "improve selforganization of the volunteers" +msgstr "zlepšit vlastní organizaci dobrovolníků" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" +"\n" +" dobrovolníci se rozdělují efektivněji na směny, \n" +"dočasné zkratky lze očekávat samotnými pomocníky" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" +"\n" +" plány směn mohou být poskytovány bezpečnostnímu personálu nebo koordinátorům automatickým mailerem každé ráno" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" +"\n" +" čím více úkrytů a táborů jsou s námi organizovány, tím více dobrovolníků se připojí a všechny zařízení budou mít prospěch ze společného fondu motivovaných dobrovolníků" + +msgid "for free without costs" +msgstr "zdarma bez nákladů" + +msgid "The right help at the right time at the right place" +msgstr "Správná pomoc v pravý čas na správném místě" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" +"\n" +"

    Mnoho lidí chce pomoci! Ale často není tak snadné zjistit, kde a kdy a jak se dá pomoci. \n" +"volunteer-planner se snaží tento problém vyřešit!
    \n" +"

    " + +msgid "for free, ad free" +msgstr "zdarma, bez reklam" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" +"\n" +"

    Platforma byla sestavena skupinou dobrovolnických odborníků v oblasti vývoje softwaru, projektového řízení, designu a marketingu. Kód je otevřený pro nekomerční použití. Soukromé údaje (e-mail, data profilu apod.) nebudou poskytovány žádné třetí straně

    " + +msgid "contact us!" +msgstr "kontaktujte nás!" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" +"\n" +" ...třeba s přiloženým návrhem směn, které chcete vidět v plánovači dobrovolníků. Napište prosím na onboarding@volunteer-planner.org\n" +" " + +msgid "edit" +msgstr "upravit" + +msgid "description" +msgstr "popis" + +msgid "contact info" +msgstr "kontakty" + +msgid "organizations" +msgstr "organizace" + +msgid "by invitation" +msgstr "na pozvání" + +msgid "anyone (approved by manager)" +msgstr "kdokoliv (schválen správcem)" + +msgid "anyone" +msgstr "kdokoliv" + +msgid "rejected" +msgstr "odmítnut" + +msgid "pending" +msgstr "čeká" + +msgid "approved" +msgstr "schválen" + +msgid "admin" +msgstr "administrátor" + +msgid "manager" +msgstr "manažer" + +msgid "member" +msgstr "člen" + +msgid "role" +msgstr "role" + +msgid "status" +msgstr "stav" + +msgid "name" +msgstr "jméno" + +msgid "address" +msgstr "adresa" + +msgid "slug" +msgstr "slug" + +msgid "join mode" +msgstr "join mód" + +msgid "Who can join this organization?" +msgstr "Kdo se může připojit k této organizaci?" + +msgid "organization" +msgstr "organizace" + +msgid "disabled" +msgstr "vypnuto" + +msgid "enabled (collapsed)" +msgstr "zapnuto (sbaleno)" + +msgid "enabled" +msgstr "zapnuto" + +msgid "place" +msgstr "místo" + +msgid "postal code" +msgstr "PSČ" + +msgid "Show on map of all facilities" +msgstr "Zobrazit mapu všech zařízení" + +msgid "latitude" +msgstr "zeměpisná šířka" + +msgid "longitude" +msgstr "zeměpisná délka" + +msgid "timeline" +msgstr "časová osa" + +msgid "Who can join this facility?" +msgstr "Kdo se může připojit k tomuto zařízení?" + +msgid "facility" +msgstr "zařízení" + +msgid "facilities" +msgstr "zařízení" + +msgid "organization member" +msgstr "člen organizace" + +msgid "organization members" +msgstr "členové organizace" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "{username} v {organization_name} ({user_role})" + +msgid "facility member" +msgstr "člen zařízení" + +msgid "facility members" +msgstr "členové zařízení" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "{username} v {facility_name} ({user_role})" + +msgid "priority" +msgstr "priorita" + +msgid "Higher value = higher priority" +msgstr "Vyšší hodnota = vyšší priorita" + +msgid "workplace" +msgstr "pracoviště" + +msgid "workplaces" +msgstr "pracoviště" + +msgid "task" +msgstr "úloha" + +msgid "tasks" +msgstr "úlohy" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "Byl změněn status správce zařízení/organizace uživatele '{user}'. " + +#, python-format +msgid "Hello %(username)s," +msgstr "Ahoj %(username)s," + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "Vaše žádost o členství v %(facility_name)s byla schválena. Nyní se můžete v tomto zařízení registrovat na omezené směny." + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" +"Váš tým,\n" +"volunteer-planner.org" + +msgid "Helpdesk" +msgstr "Centrum nápovědy" + +msgid "Show on map" +msgstr "Ukázat na mapě" + +msgid "Open Shifts" +msgstr "Otevřené směny" + +msgid "News" +msgstr "Novinky" + +msgid "Error" +msgstr "Chyba" + +msgid "You are not allowed to do this." +msgstr "Nemáte povoleno to udělat." + +#, python-format +msgid "Members in %(facility)s" +msgstr "Členové v %(facility)s" + +msgid "Role" +msgstr "Role" + +msgid "Actions" +msgstr "Akce" + +msgid "Block" +msgstr "Blokovat" + +msgid "Accept" +msgstr "Přijmout" + +msgid "Facilities" +msgstr "Zařízení" + +msgid "Show details" +msgstr "Zobrazit detaily" + +msgid "volunteer-planner.org: Membership approved" +msgstr "volunteer-planner.org: Členství schváleno" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "https://www.openstreetmap.org/search?query={location}" + +msgid "country" +msgstr "země" + +msgid "countries" +msgstr "státy" + +msgid "region" +msgstr "region" + +msgid "regions" +msgstr "regiony" + +msgid "area" +msgstr "oblast" + +msgid "areas" +msgstr "oblasti" + +msgid "places" +msgstr "místa" + +msgid "Facilities do not match." +msgstr "Zařízení neodpovídají." + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "\"{object.name}\" patří do zařízení \"{object.facility.name}\", ale směna probíhá v zařízení \"{facility.name}\"." + +msgid "No start time given." +msgstr "Čas zahájení není uveden." + +msgid "No end time given." +msgstr "Čas ukončení není uveden." + +msgid "Start time in the past." +msgstr "Čas zahájení v minulosti." + +msgid "Shift ends before it starts." +msgstr "Směna končí dřív, než začne." + +msgid "number of volunteers" +msgstr "počet dobrovolníků" + +msgid "volunteers" +msgstr "dobrovolníci" + +msgid "scheduler" +msgstr "Plánovač" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "sloty" + +msgid "number of needed volunteers" +msgstr "počet potřebných dobrovolníků" + +msgid "starting time" +msgstr "počáteční čas" + +msgid "ending time" +msgstr "konečný čas" + +msgid "members only" +msgstr "pouze členové" + +msgid "allow only members to help" +msgstr "povolit pouze členům, aby vám pomohli" + +msgid "shift" +msgstr "směna" + +msgid "shifts" +msgstr "směny" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "další den" +msgstr[1] "další dny" +msgstr[2] "další dny" +msgstr[3] "po {number_of_days} dnech" + +msgid "shift helper" +msgstr "pomocník směn" + +msgid "shift helpers" +msgstr "pomocníci směn" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "směna" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "směny" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "Nejsou k dispozici žádné nadcházející směny pro %(geographical_name)s." + +msgid "You can help in the following facilities" +msgstr "Můžete pomoci v následujících zařízeních" + +msgid "see more" +msgstr "zobrazit víc" + +msgid "news" +msgstr "novinky" + +msgid "open shifts" +msgstr "otevřené směny" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "Plán pro %(facility_name)s" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "%(starting_time)s - %(ending_time)s" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "Plán pro %(schedule_date)s" + +msgid "Toggle Timeline" +msgstr "Přepnout časovou osu" + +msgid "Link" +msgstr "Odkaz" + +msgid "Time" +msgstr "Čas" + +msgid "Helpers" +msgstr "Pomocníci" + +msgid "Start" +msgstr "Začátek" + +msgid "End" +msgstr "Konec" + +msgid "Required" +msgstr "Vyžadováno" + +msgid "Status" +msgstr "Stav" + +msgid "Users" +msgstr "Uživatelé" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "Vy" + +#, python-format +msgid "%(slots_left)s more" +msgstr "%(slots_left)s víc" + +msgid "Covered" +msgstr "Pokryto" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "Opuštěno" + +msgid "Sign up" +msgstr "Přihlásit se" + +msgid "Membership pending" +msgstr "Členství čeká na schválení" + +msgid "Membership rejected" +msgstr "Členství bylo zamítnuto" + +msgid "Become member" +msgstr "Staňte se členem" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Ahoj, \n" +"Je nám líto, ale na žádost organizátoru jsme museli zrušit následující směny : \n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s od %(from_time)s do %(to_time)s hodin\n" +" Toto je automaticky generovaný e-mail. Máte-li jakékoli dotazy, kontaktujte prosím přímo zařízení. Váš tým.\n" + +msgid "Members only" +msgstr "Pouze členové" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Ahoj, \n" +"Je nám líto, ale na žádost organizátora jsme museli změnit čas následující směny: \n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s od %(old_from_time)s do %(old_to_time)s hodin\n" +"\n" +"Nový čas směny je: \n" +"%(from_date)s od %(from_time)s do %(to_time)s hodin.\n" +"\n" +"Pokud nemůžete pomoci v novém termínu, zrušte prosím svou účast na webu. \n" +"\n" +"Toto je automaticky generovaný e-mail. Máte-li jakékoli dotazy, kontaktujte prosím přímo zařízení. \n" +"\n" +"Váš, involunteer-planner.org tým \n" + +msgid "The submitted data was invalid." +msgstr "Odeslaná data byla neplatná." + +msgid "User account does not exist." +msgstr "Uživatelský účet neexistuje." + +msgid "A membership request has been sent." +msgstr "Byla odeslána žádost o členství." + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "Nemůžeme vás přidat k této směně, protože jste již souhlasili s dalšími směnami ve stejnou dobu:" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "Nemůžeme vás přidat k této směně, protože už nezbývají další volné sloty." + +msgid "You were successfully added to this shift." +msgstr "Byli jste úspěšně přidáni k této směně." + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "Směna, do které jste nastoupili, se překrývá s jinými směnami, do kterých jste již nastoupili. Zkontrolujte, zda nedochází ke konfliktům:" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "Již jste se zaregistrovali na tuto směnu v {date_time}." + +msgid "You successfully left this shift." +msgstr "Úspěšně jste opustili tuto směnu." + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "Směna již existuje na {date}" +msgstr[1] "Směny již existují na {date}" +msgstr[2] "Směny již existují na {date}" +msgstr[3] "{num_shifts} směny již existují v {date}" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "{num_shifts} směna byla přidána do {date}" +msgstr[1] "{num_shifts} směny byly přidány do {date}" +msgstr[2] "{num_shifts} směn bylo přidáno do {date}" +msgstr[3] "{num_shifts} směn bylo přidáno do {date}" + +msgid "Something didn't work. Sorry about that." +msgstr "Něco nefunguje. Omlouvám se za to." + +msgid "from" +msgstr "ok" + +msgid "to" +msgstr "komu" + +msgid "schedule templates" +msgstr "šablony plánů" + +msgid "schedule template" +msgstr "šablona plánu" + +msgid "days" +msgstr "dní" + +msgid "shift templates" +msgstr "šablony směn" + +msgid "shift template" +msgstr "šablona směny" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "{task_name} - {workplace_name}" + +msgid "Home" +msgstr "Hlavní strana" + +msgid "Apply Template" +msgstr "Použít šablonu" + +msgid "no workplace" +msgstr "žádné pracoviště" + +msgid "apply" +msgstr "použít" + +msgid "Select a date" +msgstr "Zvolit datum" + +msgid "Continue" +msgstr "Pokračovat" + +msgid "Select shift templates" +msgstr "Vybrat šablony směn" + +msgid "Please review and confirm shifts to create" +msgstr "Zkontrolujte a potvrďte směny, které chcete vytvořit" + +msgid "Apply" +msgstr "Použít" + +msgid "Apply and select new date" +msgstr "Použít a vybrat nové datum" + +msgid "Save and apply template" +msgstr "Uložit a použít šablonu" + +msgid "Delete" +msgstr "Smazat" + +msgid "Save as new" +msgstr "Uložit jako nový" + +msgid "Save and add another" +msgstr "Uložit a přidat další" + +msgid "Save and continue editing" +msgstr "Uložit a pokračovat v úpravách" + +msgid "Delete?" +msgstr "Smazat?" + +msgid "Change" +msgstr "Změnit" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "Otázky? Napište: %(mailto_link)s" + +msgid "Manage" +msgstr "Spravovat" + +msgid "Members" +msgstr "Členové" + +msgid "Toggle navigation" +msgstr "Přepnout navigaci" + +msgid "Account" +msgstr "Účet" + +msgid "My work shifts" +msgstr "Moje pracovní směny" + +msgid "Help" +msgstr "Nápověda" + +msgid "Logout" +msgstr "Odhlášení" + +msgid "Admin" +msgstr "Administrátor" + +msgid "Regions" +msgstr "Regiony" + +msgid "Activation complete" +msgstr "Aktivace dokončena" + +msgid "Activation problem" +msgstr "Problém s aktivací" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "přihlášení" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "Díky %(account)s, aktivace je dokončena! Nyní se můžete přihlásit %(login_link)s s použitím uživatelského jména a hesla nastaveného při registraci." + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "Jejda – Buď již aktivujete svůj aktivní účet nebo je aktivační klíč neplatný, nebo jeho platnost vypršela." + +msgid "Activation successful!" +msgstr "Aktivace byla úspěšná!" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "Děkujeme, že jste se zaregistrovali." + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "Zde se můžete přihlásit." + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Ahoj %(user)s, \n" +"moc děkujeme, že chcete pomoci! Ještě jeden krok a budete připraveni zahájit dobrovolnou činnost. \n" +"\n" +"Klikněte na následující odkaz a dokončete svou registraci.\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +" Platnost tohoto odkazu vyprší za %(expiration_days)s dny.\n" +"\n" +"Váš tým \n" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Ahoj %(user)s\n" +"Děkujeme velice, že chcete pomoci! Ještě jeden krok a budete připraveni zahájit dobrovolnou činnost. Klikněte na následující odkaz a dokončete svou registraci na adrese: \n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +" Platnost tohoto odkazu vyprší za %(expiration_days)s dny. \n" +"\n" +"Váš tým\n" + +msgid "Your volunteer-planner.org registration" +msgstr "Registrace dobrovolníka" + +msgid "admin approval" +msgstr "schválení administrátorem" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "Váš účet je nyní schválen. Nyní se můžete přihlásit." + +msgid "Your account is now approved. You can log in using the following link" +msgstr "Váš účet je nyní schválen. Přihlásit se můžete pomocí následujícího odkazu" + +msgid "Email address" +msgstr "Emailová adresa" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "%(email_trans)s / %(username_trans)s" + +msgid "Password" +msgstr "Heslo" + +msgid "Forgot your password?" +msgstr "Zapomněli jste heslo?" + +msgid "Help and sign-up" +msgstr "Nápověda a registrace" + +msgid "Password changed" +msgstr "Heslo změněno" + +msgid "Password successfully changed!" +msgstr "Heslo úspěšně změněno!" + +msgid "Change Password" +msgstr "Změnit heslo" + +msgid "Change password" +msgstr "Změnit heslo" + +msgid "Password reset complete" +msgstr "Resetování hesla dokončeno" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "přihlášení" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "Vaše heslo bylo resetováno! Nyní se můžete znovu přihlásit na %(login_link)s." + +msgid "Enter new password" +msgstr "Zadejte nové heslo" + +msgid "Enter your new password below to reset your password" +msgstr "Zadejte nové heslo pro resetování hesla" + +msgid "Password reset" +msgstr "Resetovat heslo" + +msgid "We sent you an email with a link to reset your password." +msgstr "Poslali jsme vám e-mail s odkazem na obnovení hesla." + +msgid "Please check your email and click the link to continue." +msgstr "Zkontrolujte e-mail a pokračujte kliknutím na odkaz." + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" +"Tento e-mail obdržíte, protože jste (vy nebo někdo kdo předstírá, že jste vy) požádali o obnovení hesla na webu %(domain)s. Pokud nechcete obnovit heslo, ignorujte tuto zprávu. \n" +"\n" +"Chcete-li obnovit heslo, klikněte na následující odkaz nebo jej zkopírujte a vložte do svého webového prohlížeče:" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" +"\n" +"Vaše uživatelské jméno v případě, že jste ho zapomněli: %(username)s\n" +"\n" +"S pozdravem \n" +"Správci %(site_name)s\n" + +msgid "Reset password" +msgstr "Obnovit heslo" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "Žádný problém! Pošleme vám pokyny, jak obnovit heslo." + +msgid "Activation email sent" +msgstr "Aktivační e-mail odeslán" + +msgid "An activation mail will be sent to you email address." +msgstr "Aktivační e-mail vám bude zaslán na e-mailovou adresu." + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "Potvrďte prosím registraci s odkazem v e-mailu. Pokud jste jej neobdrželi do 10 minut, podívejte se do složky spam." + +msgid "Register for an account" +msgstr "Zaregistrujte se na účet" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "Zde můžete vytvořit nový uživatelský účet. Pokud již máte uživatelský účet, klikněte v pravém horním rohu na položku PŘIHLÁŠENÍ." + +msgid "Create a new account" +msgstr "Vytvořit nový účet" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "Plánovač dobrovolníků a úkrytů vám pošlou e-maily týkající se vašich směn." + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "Vaše uživatelské jméno bude viditelné ostatním uživatelům. Nepoužívejte mezery nebo speciální znaky." + +msgid "Repeat password" +msgstr "Zopakovat heslo" + +msgid "I have read and agree to the Privacy Policy." +msgstr "Přečetl/a jsem si Zásady ochrany osobních údajů a souhlasím s nimi." + +msgid "This must be checked." +msgstr "To je nutné zaškrtnout." + +msgid "Sign-up" +msgstr "Přihlásit se" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "Angličtina" + +msgid "German" +msgstr "Němčina" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "Řečtina" + +msgid "French" +msgstr "Francouzština" + +msgid "Hungarian" +msgstr "Maďarština" + +msgid "Polish" +msgstr "Polština" + +msgid "Portuguese" +msgstr "Portugalština" + +msgid "Russian" +msgstr "Ruština" + +msgid "Swedish" +msgstr "Švédština" + +msgid "Turkish" +msgstr "Turečtina" diff --git a/locale/da/LC_MESSAGES/django.po b/locale/da/LC_MESSAGES/django.po new file mode 100644 index 00000000..49d96b3f --- /dev/null +++ b/locale/da/LC_MESSAGES/django.po @@ -0,0 +1,1350 @@ +# +# Translators: +# Camilla Zuleger , 2015 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2017-09-22 15:35+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Danish (http://www.transifex.com/coders4help/volunteer-planner/language/da/)\n" +"Language: da\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "Efternavn" + +msgid "email" +msgstr "email" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "Brugerkonto" + +msgid "user accounts" +msgstr "Brugerkonti" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "Brugernavn" + +msgid "First name" +msgstr "Fornavn" + +msgid "Last name" +msgstr "Efternavn" + +msgid "Email" +msgstr "Email" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "Gem" + +msgid "Edit Account" +msgstr "Ændre konto" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "Login" + +msgid "Start helping" +msgstr "Begynd at hjælpe" + +msgid "Main page" +msgstr "Hovedside" + +msgid "Imprint" +msgstr "Impressum" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "Kontakt" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "Privatlivspolitik" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "Kontakt" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "Hjem" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index 7d8d6c27..ffb09f3b 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -1,28 +1,27 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. # # Translators: # audrey liehn , 2015 # Caroline Elis , 2015 # Christoph, 2015 -# Christoph, 2015 -# Christoph, 2015 -# Dorian Cantzen , 2015-2016 +# Christoph Meißner, 2015,2022 +# Christoph Meißner, 2015,2022 +# Christoph Meißner, 2015 +# Dorian Cantzen , 2015-2016,2022 # Fabian Lindenberg, 2015 # Fabian Lindenberg, 2015 # Franziska Böttger , 2015 # Jan Mewes , 2015 # Martin Dix , 2016 -# Peter Palmreuther , 2015 +# Maxi Krause , 2017 +# Peter Palmreuther , 2015,2022 # Sönke Klinger , 2016 msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" -"PO-Revision-Date: 2016-11-21 18:24+0000\n" -"Last-Translator: Sönke Klinger \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Christoph Meißner, 2015,2022\n" "Language-Team: German (http://www.transifex.com/coders4help/volunteer-planner/language/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" @@ -30,519 +29,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "Vorname" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Nachname" + msgid "email" msgstr "E-Mail" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "Mitglied seit" + +msgid "last login" +msgstr "Letzte Anmeldung" + msgid "Accounts" msgstr "Benutzerkonten" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "Ungültiger Benutzername. Erlaubte Zeichen sind Buchstaben, Ziffern, \".\" and \"_\"." + +msgid "Username must start with a letter." +msgstr "Benutzername muss mit einem Buchstaben anfangen." + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "Benutzername muss mit einem Buchstaben, einer Ziffer oder \"_\" enden." + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "Benutzername darf keine aufeinanderfolgenden \".\" and \"_\" enthalten." + +msgid "Accept privacy policy" +msgstr "Einwilligung (nach Art 6 Abs 1 Satz 1 a DSGVO)" + msgid "user account" msgstr "Benutzerkonto" -#: accounts/models.py:17 msgid "user accounts" msgstr "Benutzerkonten" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "Meine Schichten heute" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "keine Schichten heute" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "Schicht anzeigen" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" -msgstr "Meine schichten morgen" +msgstr "Meine Schichten morgen" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "keine Schichten morgen" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "meine Schichten übermorgen" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "keine Schichten übermorgen" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "mehr Schichten" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "keine weiteren Schichten" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" -msgstr "frührere Schichten" +msgstr "frühere Schichten" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "teilgenommene Schichten" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "noch an keinen Schichten teilgenommen" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "meine zukünftigen Schichten" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Benutzername" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Vorname" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Nachname" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "E-Mail Adresse" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "Wenn Du deinen Benutzerkonto löschst werden Deine Daten anonymisiert und du kannst Dich nicht mehr einloggen." -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "Es ist nicht möglich das Benutzerkonto wiederherzustellen. Wenn Du später nochmal als Freiwillige/r helfen willst, mußt Du Dich nochmal registrieren." -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "Mein Benutzerkonto löschen!" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Speichern" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Account bearbeiten" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "Benutzerkonto löschen" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "Dein Benutzerkonto wurde gelöscht." -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "Fehler {error_code}" + +msgid "Permission denied" +msgstr "Keine Berechtigung" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "Du kannst diese Aktion nicht ausführen und wurdest stattdessen nach {redirect_path} umgeleitet." + msgid "additional CSS" msgstr "zusätzliches CSS" -#: content/admin.py:23 msgid "translation" msgstr "Übersetzung" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "Übersetzungen" -#: content/admin.py:58 msgid "No translation available" msgstr "Keine Übersetzung verfügbar" -#: content/models.py:12 msgid "additional style" msgstr "zusätzlicher Style" -#: content/models.py:18 msgid "additional flat page style" msgstr "zusätzlicher Seiten-Style" -#: content/models.py:19 msgid "additional flat page styles" msgstr "zusätzliche Seiten-Styles" -#: content/models.py:25 msgid "flat page" msgstr "Seite" -#: content/models.py:28 msgid "language" msgstr "Sprache" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "Titel" -#: content/models.py:36 msgid "content" msgstr "Inhalt" -#: content/models.py:46 msgid "flat page translation" msgstr "Seitenübersetzung" -#: content/models.py:47 msgid "flat page translations" msgstr "Seitenübersetzungen" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Auf der Seite anzeigen" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Entfernen" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "%(verbose_name)s erstellen" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "Diese Seite bearbeiten" -#: news/models.py:17 msgid "subtitle" msgstr "Untertitel" -#: news/models.py:21 msgid "articletext" msgstr "Artikeltext" -#: news/models.py:26 msgid "creation date" msgstr "Datum" -#: news/models.py:39 msgid "news entry" msgstr "Nachrichtenartikel" -#: news/models.py:40 msgid "news entries" msgstr "Nachrichtenartikel" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "Seite nicht gefunden" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "Sorry, die angeforderte Seite konnte nicht gefunden werden." -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "Serverfehler" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "Serverfehler (500)" -#: non_logged_in_area/templates/500.html:10 -#, fuzzy -#| msgid "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience." -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "Es hat einen Fehler gegeben. Er wurde an die Siteadministratoren berichtet und wird in Kürze behoben. Danke für Deine Geduld." -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Login" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Hilf mit" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Startseite" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Impressum" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "Über Uns" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "Unterstützer" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "Presse" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Kontakt" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "F.A.Q." -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Ich will helfen!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Registriere Dich und erfahre wo du helfen kannst" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Freiwillige organisieren!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Registriere eine Einrichtung und organisiere Freiwillige" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Orte zum Helfen" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Registrierte Freiwillige" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Gearbeitete Stunden" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Was ist volunteer-planner.org?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "Du willst Flüchtlingen helfen? volunteer-planner.org zeigt Dir wo, wann und wie du helfen kannst: direkt vor Ort." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "

    Die Plattform ist werbefrei und gemeinnützig. Ein internationales Team von Helfern vor Ort, Programmierern, Projektmanagern und Designern helfen freiwillig und unentgeltlich um den volunteer-planner voranzubringen.

    " -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "Du kannst in folgenden Einrichtungen helfen:" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "Es gibt derzeit keine Einrichtungen, die Hilfe brauchen." -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Privatsphäre" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "Geltungsbereich" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "Diese Datenschutzerklärung klärt den Nutzer über die Art, den Umfang und Zwecke der Erhebung und Verwendung personenbezogener Daten durch den verantwortlichen Anbieter - der Benefit e.V. (Wollankstr. 2, 13187 Berlin) - auf dieser Website (im folgenden „Angebot“) auf." -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "Die rechtlichen Grundlagen des Datenschutzes finden sich im Bundesdatenschutzgesetz (BDSG) und dem Telemediengesetz (TMG)." -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "Zugriffsdaten / Server-Logfiles" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "Der Anbieter (beziehungsweise sein Webspace-Provider) erhebt Daten über jeden Zugriff auf das Angebot und speichert sie in so genannten Server-Logfiles. Zu den Zugriffsdaten gehören: Name der abgerufenen Webseite, Datei, Datum und Uhrzeit des Abrufs, übertragene Datenmenge, Meldung über erfolgreichen Abruf, Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite), IP-Adresse und der anfragende Provider." -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "Der Anbieter verwendet die Protokolldaten nur für statistische Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung des Angebotes. Der Anbieter behält sich jedoch vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund konkreter Anhaltspunkte der berechtigte Verdacht einer rechtswidrigen Nutzung besteht." -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "Umgang mit personenbezogenen Daten" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "Personenbezogene Daten sind Informationen, mit deren Hilfe eine Person bestimmbar ist, also Angaben, die zurück zu einer Person verfolgt werden können. Dazu gehören der Name, die E-Mail-Adresse oder die Telefonnummer des Nutzers. Aber auch Daten über Vorlieben, Hobbies, Mitgliedschaften oder welche Webseiten von jemandem angesehen wurden zählen zu personenbezogenen Daten." -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "Personenbezogene Daten werden von dem Anbieter nur dann erhoben, genutzt und weiter gegeben, wenn dies gesetzlich erlaubt ist oder der Nutzer in die Datenerhebung und -verwendung einwilligt." -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Kontaktaufnahme" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "Bei der Kontaktaufnahme mit dem Anbieter (zum Beispiel per Kontaktformular oder E-Mail) werden die Angaben des Nutzers zwecks Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen, gespeichert." -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "Cookies sind kleine Dateien, die es ermöglichen, auf dem Zugriffsgerät des Nutzers (PC, Smartphone o.ä.) spezifische, auf das Gerät bezogene Informationen zu speichern. Sie dienen zum einem der Benutzerfreundlichkeit von Webseiten und damit dem Nutzer (z.B. Speicherung von Logindaten). Zum anderen dienen sie, um statistische Daten der Webseitennutzung zu erfassen und sie zwecks Verbesserung des Angebotes analysieren zu können." -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "Der Nutzer kann auf den Einsatz der Cookies Einfluss nehmen. Die meisten Browser verfügen eine Option mit der das Speichern von Cookies eingeschränkt oder komplett verhindert wird. Allerdings wird darauf hingewiesen, dass die Nutzung und insbesondere der Nutzungskomfort ohne Cookies eingeschränkt werden." -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "Der Nutzer kann viele Online-Anzeigen-Cookies von Unternehmen über die US-amerikanische Seite %(us_url)s oder die EU-Seite %(eu_url)s verwalten." -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Registrierung" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "Die im Rahmen der Registrierung eingegebenen Daten werden für die Zwecke der Nutzung des Angebotes verwendet. Der Nutzer kann über angebots- oder registrierungsrelevante Informationen, wie Änderungen des Angebotsumfangs oder technische Umstände per E-Mail informiert werden (siehe auch nächster Abschnitt)." -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "Die erhobenen Daten sind aus den Eingabemasken im Rahmen der Registrierung und in der Nutzerprofilverwaltung ersichtlich. Dazu gehören unter anderem Vorname, Nachname und E-Mail-Adresse des Nutzers." -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "E-Mail Benachrichtigungen / Newsletter" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "Mit der Registrierung eines Benutzerkontos erklärt sich der Nutzer mit dem Empfang von E-Mail-Benachrichtigungen und Newsletter-Mails einverstanden." -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "E-Mail-Benachrichtigungen informieren den Nutzer über bestimmte Ereignisse, die mit der Nutzung des Angebots durch den Nutzer in Bezug stehen. Mit dem Newsletter informiert der Anbieter den Nutzer über sich und sein(e) Angebot(e)." -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "Seine Einwilligung E-Mail-Benachrichtigungen und Newsletter-Mails zu empfangen kann der Nutzer widerrufen, indem er sein Benutzerkonto löscht." -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Google Analytics" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "Dieses Angebot benutzt Google Analytics, einen Webanalysedienst der Google Inc. („Google“). Google Analytics verwendet sog. „Cookies“, Textdateien, die auf dem Gerät des Nutzers gespeichert werden und die eine Analyse der Benutzung der Website durch sie ermöglichen. Die durch den Cookie erzeugten Informationen über Benutzung dieser Website durch den Nutzer werden in der Regel an einen Server von Google in den USA übertragen und dort gespeichert." -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "Im Falle der Aktivierung der IP-Anonymisierung auf dieser Webseite, wird die IP-Adresse des Nutzers von Google jedoch innerhalb von Mitgliedstaaten der Europäischen Union oder in anderen Vertragsstaaten des Abkommens über den Europäischen Wirtschaftsraum zuvor gekürzt. Nur in Ausnahmefällen wird die volle IP-Adresse an einen Server von Google in den USA übertragen und dort gekürzt. Die IP-Anonymisierung ist auf dieser Website aktiv." -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "Im Auftrag des Betreibers dieser Website wird Google diese Informationen benutzen, um die Nutzung der Website durch die Nutzer auszuwerten, um Reports über die Websiteaktivitäten zusammenzustellen und um weitere mit der Websitenutzung und der Internetnutzung verbundene Dienstleistungen gegenüber dem Websitebetreiber zu erbringen." -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "Die im Rahmen von Google Analytics vom Browser des Nutzers übermittelte IP-Adresse wird nicht mit anderen Daten von Google zusammengeführt. Der Nutzer kann die Speicherung der Cookies durch eine entsprechende Einstellung seiner Browser-Software verhindern; Der Anbieter weist den Nutzer jedoch darauf hin, dass er in diesem Fall gegebenenfalls nicht sämtliche Funktionen dieser Website vollumfänglich wird nutzen können. Der Nutzer kann darüber hinaus die Erfassung der durch das Cookie erzeugten und auf seine Nutzung der Website bezogenen Daten, inkl. seiner IP-Adresse, an Google sowie die Verarbeitung dieser Daten durch Google verhindern, indem er das unter dem folgenden Link verfügbare Browser-Plugin herunterlädt und installiert: %(optout_plugin_url)s" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "diesen Link klicken" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "Alternativ zum Browser-Add-On oder innerhalb von Browsern auf mobilen Geräten, kann der Nutzer %(optout_javascript)s, um die Erfassung durch Google Analytics innerhalb dieser Website zukünftig zu verhindern. Dabei wird ein Opt-Out-Cookie in den Browsers des Nutzers abgelegt. Löscht der Nutzer seine Cookies, muss er diesen Link erneut klicken." -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "Widerruf, Änderungen, Berichtigungen und Aktualisierungen" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "Der Nutzer hat das Recht, auf Antrag unentgeltlich Auskunft zu erhalten über die personenbezogenen Daten, die über ihn gespeichert wurden. Zusätzlich hat der Nutzer das Recht auf Berichtigung unrichtiger Daten, Sperrung und Löschung seiner personenbezogenen Daten, soweit dem keine gesetzliche Aufbewahrungspflicht entgegensteht." -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "Basierend auf dem Datenschutz-Muster von Rechtsanwalt Thomas Schwenke - I LAW it" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "Vorteile" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "Zeitersparnis" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "Helfer_innen wird schnell und einfach gezeigt wie sie helfen können." -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -552,7 +447,6 @@ msgstr "" "\n" "Helfer_innen verteilen sich besser über die Schichten, temporärem Über- und Unterangebot an Helfer_innen wird entgegengewirkt." -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -563,7 +457,6 @@ msgstr "" "\n" "Schichtpläne können an Security-Personal weitergegeben werden, falls in der Einrichtung der Einlass reguliert ist." -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -573,15 +466,12 @@ msgstr "" "\n" "Je mehr Einrichtungen die Plattform nutzen, desto bekannter wird sie. Je bekannter sie wird, desto mehr Freiwillige werden darauf aufmerksam und bieten ihre Unterstützung an." -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "kostenlos" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "Die richtige Hilfe zur Richtigen Zeit." -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -590,13 +480,11 @@ msgid "" " " msgstr "" "\n" -"

    Sehr viele Menschen wollen helfen. Das ist super! Leider ist oft nicht klar, wie wann und wo geholfen werden kann. Das möchten wir ändern! Über volunteer-planner.org können die Koordinator_innen der Flüchtlingseinrichtungen übersichtlich auflisten wo wann welche Hilfe benötigt wird. Freiwillige können dann auf einem Blick sehen wie sie helfen können und sich sofort für eine Schicht eintragen

    " +"

    Sehr viele Menschen wollen helfen. Das ist super! Leider ist oft nicht klar, wie wann und wo geholfen werden kann. Das möchten wir ändern! Über volunteer-planner.org können Organisationen und soziale Einrichtungen übersichtlich auflisten, wo wann welche Hilfe benötigt wird. Freiwillige können dann auf einem Blick sehen wie sie helfen können und sich sofort für eine Schicht eintragen

    " -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "Kostenlos. Werbefrei." -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -606,17 +494,9 @@ msgstr "" "\n" "

    Die Plattform wird von einer Gruppe von Freiwilligen aufgebaut, betreut und weiterentwickelt. Sie steht kostenlos und werbefrei zur Verfügung. Sämtliche Daten werden nicht weitergegeben oder weiterverkauft.

    " -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "Schreib uns!" -#: non_logged_in_area/templates/shelters_need_help.html:72 -#, fuzzy -#| msgid "" -#| "\n" -#| " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" -#| " " msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" href=\"mailto:onboarding@volunteer-planner.org\">onboarding@volunteer-planner.org\n" " " -#: organizations/admin.py:128 organizations/admin.py:130 msgid "edit" msgstr "bearbeiten" -#: organizations/admin.py:202 organizations/admin.py:239 -#: organizations/models.py:79 organizations/models.py:148 -msgid "short description" -msgstr "Kurzbeschreibung" - -#: organizations/admin.py:208 organizations/admin.py:245 -#: organizations/admin.py:311 organizations/admin.py:335 -#: organizations/models.py:82 organizations/models.py:151 -#: organizations/models.py:291 organizations/models.py:316 msgid "description" msgstr "Beschreibung" -#: organizations/admin.py:214 organizations/admin.py:251 -#: organizations/models.py:85 organizations/models.py:154 msgid "contact info" msgstr "Kontaktinfo" -#: organizations/models.py:29 +msgid "organizations" +msgstr "Organisationen" + msgid "by invitation" msgstr "auf Einladung" -#: organizations/models.py:30 msgid "anyone (approved by manager)" msgstr "jeder (genehmigt vom Manager)" -#: organizations/models.py:31 msgid "anyone" msgstr "jeder" -#: organizations/models.py:37 msgid "rejected" msgstr "abgelehnt" -#: organizations/models.py:38 msgid "pending" msgstr "ausstehend" -#: organizations/models.py:39 msgid "approved" msgstr "genehmigt" -#: organizations/models.py:45 msgid "admin" msgstr "Admin" -#: organizations/models.py:46 msgid "manager" msgstr "Manager" -#: organizations/models.py:47 msgid "member" msgstr "Mitglied" -#: organizations/models.py:52 msgid "role" msgstr "Rolle" -#: organizations/models.py:56 msgid "status" msgstr "Status" -#: organizations/models.py:74 organizations/models.py:143 -#: organizations/models.py:288 organizations/models.py:313 places/models.py:20 -#: scheduletemplates/models.py:13 msgid "name" msgstr "Name" -#: organizations/models.py:88 organizations/models.py:169 msgid "address" msgstr "Adresse" -#: organizations/models.py:97 organizations/models.py:185 places/models.py:21 msgid "slug" msgstr "Slug" -#: organizations/models.py:102 organizations/models.py:195 msgid "join mode" msgstr "Zugangstyp" -#: organizations/models.py:103 msgid "Who can join this organization?" msgstr "Wer kann der Organisation beitreten?" -#: organizations/models.py:106 organizations/models.py:139 -#: organizations/models.py:232 msgid "organization" msgstr "Organisation" -#: organizations/models.py:107 -msgid "organizations" -msgstr "Organisationen" - -#: organizations/models.py:111 organizations/models.py:214 -#: organizations/models.py:299 organizations/models.py:324 -#, python-brace-format -msgid "{name}" -msgstr "{name}" - -#: organizations/models.py:132 msgid "disabled" msgstr "deaktiviert" -#: organizations/models.py:133 msgid "enabled (collapsed)" msgstr "aktiviert (verborgen)" -#: organizations/models.py:134 msgid "enabled" msgstr "aktiviert" -#: organizations/models.py:165 places/models.py:132 msgid "place" msgstr "Ort" -#: organizations/models.py:174 msgid "postal code" msgstr "Postleitzahl" -#: organizations/models.py:179 msgid "Show on map of all facilities" msgstr "Auf Karte mit allen Einrichtungen anzeigen" -#: organizations/models.py:181 msgid "latitude" msgstr "Breite" -#: organizations/models.py:183 msgid "longitude" msgstr "Länge" -#: organizations/models.py:190 msgid "timeline" msgstr "Zeitstrahl" -#: organizations/models.py:196 msgid "Who can join this facility?" msgstr "Wer kann der Einrichtung beitreten?" -#: organizations/models.py:199 organizations/models.py:258 -#: organizations/models.py:283 organizations/models.py:309 -#: scheduler/models.py:51 scheduletemplates/models.py:16 msgid "facility" msgstr "Einrichtung" -#: organizations/models.py:200 msgid "facilities" msgstr "Einrichtungen" -#: organizations/models.py:237 msgid "organization member" msgstr "Organisationsmitglied" -#: organizations/models.py:238 msgid "organization members" msgstr "Organisationsmitglieder" -#: organizations/models.py:242 #, python-brace-format msgid "{username} at {organization_name} ({user_role})" msgstr "{username} bei {organization_name} ({user_role})" -#: organizations/models.py:264 msgid "facility member" msgstr "Einrichtungsmitglied" -#: organizations/models.py:265 msgid "facility members" msgstr "Einrichtungsmitglieder" -#: organizations/models.py:269 #, python-brace-format msgid "{username} at {facility_name} ({user_role})" msgstr "{username} bei {facility_name} ({user_role})" -#: organizations/models.py:294 scheduler/models.py:46 -#: scheduletemplates/models.py:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:55 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:42 +msgid "priority" +msgstr "Priorität" + +msgid "Higher value = higher priority" +msgstr "Höherer Wert = höhere Priorität" + msgid "workplace" msgstr "Arbeitsplatz" -#: organizations/models.py:295 msgid "workplaces" msgstr "Arbeitsplätze" -#: organizations/models.py:319 scheduler/models.py:44 -#: scheduletemplates/models.py:37 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:41 msgid "task" msgstr "Aufgabe" -#: organizations/models.py:320 msgid "tasks" msgstr "Aufgaben" -#: organizations/templates/emails/membership_approved.txt:2 +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "Manager-Status von Benutzer '{user}' wurde geändert. " + #, python-format msgid "Hello %(username)s," msgstr "Hallo %(username)s," -#: organizations/templates/emails/membership_approved.txt:6 #, python-format msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." msgstr "Dein Antrag auf Mitgliedschaft in der Einrichtung %(facility_name)s wurde bestätigt! Du kannst Dich ab sofort für zugangsbeschränkte Schichten eintragen. " -#: organizations/templates/emails/membership_approved.txt:10 msgid "" "Yours,\n" "the volunteer-planner.org Team" msgstr "Dein Volunteer-Planner.org Team" -#: organizations/templates/facility.html:9 -#: organizations/templates/organization.html:9 -#: scheduler/templates/helpdesk_breadcrumps.html:6 -#: scheduler/templates/helpdesk_single.html:144 -#: scheduler/templates/shift_details.html:33 msgid "Helpdesk" msgstr "Helpdesk" -#: organizations/templates/facility.html:41 -#: organizations/templates/partials/compact_facility.html:31 +msgid "Show on map" +msgstr "Auf der Karte anzeigen" + msgid "Open Shifts" msgstr "Offene Schichten" -#: organizations/templates/facility.html:50 -#: scheduler/templates/helpdesk.html:70 msgid "News" msgstr "Nachrichten" -#: organizations/templates/manage_members.html:18 msgid "Error" msgstr "Fehler" -#: organizations/templates/manage_members.html:18 msgid "You are not allowed to do this." msgstr "Du hast nicht die benötigten Berechtigungen um diese Aktion auszuführen." -#: organizations/templates/manage_members.html:43 #, python-format msgid "Members in %(facility)s" msgstr "Mitglieder in %(facility)s" -#: organizations/templates/manage_members.html:70 msgid "Role" msgstr "Rolle" -#: organizations/templates/manage_members.html:73 msgid "Actions" msgstr "Aktionen" -#: organizations/templates/manage_members.html:98 -#: organizations/templates/manage_members.html:105 msgid "Block" msgstr "Blockiert" -#: organizations/templates/manage_members.html:102 msgid "Accept" msgstr "Akzeptiert" -#: organizations/templates/organization.html:26 msgid "Facilities" msgstr "Einrichtungen" -#: organizations/templates/partials/compact_facility.html:23 -#: scheduler/templates/geographic_helpdesk.html:76 -#: scheduler/templates/helpdesk.html:68 msgid "Show details" msgstr "Details anzeigen" -#: organizations/views.py:137 msgid "volunteer-planner.org: Membership approved" msgstr "volunteer-planner.org: Mitgliedschaft bestätigt" -#: osm_tools/templatetags/osm_links.py:17 #, python-brace-format msgctxt "maps search url pattern" msgid "https://www.openstreetmap.org/search?query={location}" msgstr "https://www.openstreetmap.org/search?query={location}" -#: places/models.py:69 places/models.py:84 msgid "country" msgstr "Land" -#: places/models.py:70 msgid "countries" msgstr "Länder" -#: places/models.py:87 places/models.py:106 msgid "region" msgstr "Region" -#: places/models.py:88 msgid "regions" msgstr "Regionen" -#: places/models.py:109 places/models.py:129 msgid "area" msgstr "Gebiet" -#: places/models.py:110 msgid "areas" msgstr "Gebiete" -#: places/models.py:133 msgid "places" msgstr "Orte" -#: scheduler/admin.py:28 +msgid "Facilities do not match." +msgstr "Einrichtungen stimmen nicht überein." + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "\"{object.name}\" gehört zur Einrichtung \"{object.facility.name}\", die Schicht ist aber für \"{facility.name}\" angelegt." + +msgid "No start time given." +msgstr "Keine Startzeit angegeben." + +msgid "No end time given." +msgstr "Keine Endzeit angegeben." + +msgid "Start time in the past." +msgstr "Startzeit liegt in der Vergangenheit." + +msgid "Shift ends before it starts." +msgstr "Schichtende liegt vor Schichtanfang." + msgid "number of volunteers" msgstr "Anzahl der Freiwilligen" -#: scheduler/admin.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:40 msgid "volunteers" msgstr "Freiwillige" -#: scheduler/apps.py:8 -msgid "Scheduler" +msgid "scheduler" msgstr "Schichtplaner" -#: scheduler/models.py:41 scheduletemplates/models.py:34 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:53 +msgid "Write a message" +msgstr "Nachricht schreiben" + +msgid "slots" +msgstr "Plätze" + msgid "number of needed volunteers" msgstr "Anz. benötigter Freiwillige" -#: scheduler/models.py:53 scheduletemplates/admin.py:33 -#: scheduletemplates/models.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:56 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:43 msgid "starting time" msgstr "Beginn" -#: scheduler/models.py:55 scheduletemplates/admin.py:36 -#: scheduletemplates/models.py:47 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:57 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:44 msgid "ending time" msgstr "Ende" -#: scheduler/models.py:63 scheduletemplates/models.py:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:58 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:45 msgid "members only" msgstr "Zugangsbeschränkt" -#: scheduler/models.py:65 scheduletemplates/models.py:56 msgid "allow only members to help" msgstr "erlaube nur Mitglieder zu helfen" -#: scheduler/models.py:71 msgid "shift" msgstr "Schicht" -#: scheduler/models.py:72 scheduletemplates/admin.py:283 msgid "shifts" msgstr "Schichten" -#: scheduler/models.py:86 scheduletemplates/models.py:77 #, python-brace-format msgid "the next day" msgid_plural "after {number_of_days} days" msgstr[0] "am nächsten Tag" msgstr[1] "nach {number_of_days} Tagen" -#: scheduler/models.py:130 msgid "shift helper" msgstr "Schichthelfer" -#: scheduler/models.py:131 msgid "shift helpers" msgstr "Schichthelfer" -#: scheduler/templates/geographic_helpdesk.html:69 -msgid "Show on map" -msgstr "Auf der Karte anzeigen" +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "Schichtbenachrichtigung" +msgstr[1] "Schichtbenachrichtigungen" + +msgid "Message" +msgstr "Nachricht" + +msgid "sender" +msgstr "Absender" + +msgid "send date" +msgstr "Absendezeitpunkt" + +msgid "Shift" +msgstr "Schicht" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "Volunteer-Planner: Nachricht von der Schichtleitung {shift_title}" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" +"Hallo %(recipient)s,\n" +"Die Schichtleitung der Schicht %(shift_title)s am Ort %(location)s hat folgende Nachricht für Dich:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Bitte wende Dich an %(sender_email)s falls Du Fragen haben solltest.\n" +"\n" +"\n" +"Viele Grüße,\n" +"Dein volunteer-planner.org Team\n" -#: scheduler/templates/geographic_helpdesk.html:81 msgctxt "helpdesk shifts heading" msgid "shifts" msgstr "Schichten" -#: scheduler/templates/geographic_helpdesk.html:113 #, python-format msgid "There are no upcoming shifts available for %(geographical_name)s." msgstr "Derzeit sind keine Schichten geplant für %(geographical_name)s." -#: scheduler/templates/helpdesk.html:39 msgid "You can help in the following facilities" msgstr "Du kannst in folgenden Einrichtungen helfen" -#: scheduler/templates/helpdesk.html:43 -msgid "filter" -msgstr "filtern" - -#: scheduler/templates/helpdesk.html:59 msgid "see more" msgstr "mehr anzeigen" -#: scheduler/templates/helpdesk.html:82 +msgid "news" +msgstr "Nachrichten" + msgid "open shifts" msgstr "offene Schichten" -#: scheduler/templates/helpdesk_single.html:6 -#: scheduler/templates/shift_details.html:24 #, python-format msgctxt "title with facility" msgid "Schedule for %(facility_name)s" msgstr "Schichtplan für %(facility_name)s" -#: scheduler/templates/helpdesk_single.html:60 #, python-format msgid "%(starting_time)s - %(ending_time)s" msgstr "%(starting_time)s - %(ending_time)s" -#: scheduler/templates/helpdesk_single.html:172 #, python-format msgctxt "title with date" msgid "Schedule for %(schedule_date)s" msgstr "Schichtplan für den %(schedule_date)s" -#: scheduler/templates/helpdesk_single.html:185 msgid "Toggle Timeline" msgstr "Zeitstrahl ein-/ausblenden" -#: scheduler/templates/helpdesk_single.html:237 msgid "Link" msgstr "Link" -#: scheduler/templates/helpdesk_single.html:240 msgid "Time" msgstr "Zeit" -#: scheduler/templates/helpdesk_single.html:243 msgid "Helpers" msgstr "Helfer" -#: scheduler/templates/helpdesk_single.html:254 msgid "Start" msgstr "Von" -#: scheduler/templates/helpdesk_single.html:257 msgid "End" msgstr "Bis" -#: scheduler/templates/helpdesk_single.html:260 msgid "Required" msgstr "Benötigt" -#: scheduler/templates/helpdesk_single.html:263 msgid "Status" msgstr "Status" -#: scheduler/templates/helpdesk_single.html:266 msgid "Users" msgstr "Benutzer" -#: scheduler/templates/helpdesk_single.html:269 +msgid "Send message" +msgstr "Nachricht senden" + msgid "You" msgstr "Du" -#: scheduler/templates/helpdesk_single.html:321 #, python-format msgid "%(slots_left)s more" msgstr "noch %(slots_left)s" -#: scheduler/templates/helpdesk_single.html:325 -#: scheduler/templates/helpdesk_single.html:406 -#: scheduler/templates/shift_details.html:134 msgid "Covered" msgstr "Abgedeckt" -#: scheduler/templates/helpdesk_single.html:350 -#: scheduler/templates/shift_details.html:95 +msgid "Send email to all volunteers" +msgstr "Alle Helfer_innen benachrichtigen" + msgid "Drop out" msgstr "Absagen" -#: scheduler/templates/helpdesk_single.html:360 -#: scheduler/templates/shift_details.html:105 msgid "Sign up" msgstr "Mitmachen" -#: scheduler/templates/helpdesk_single.html:371 msgid "Membership pending" msgstr "Anfrage wird geprüft" -#: scheduler/templates/helpdesk_single.html:378 msgid "Membership rejected" msgstr "Mitgliedsanfrage zurückgewiesen" -#: scheduler/templates/helpdesk_single.html:385 msgid "Become member" msgstr "Werde Mitglied" -#: scheduler/templates/shift_cancellation_notification.html:1 +msgid "send" +msgstr "senden" + +msgid "cancel" +msgstr "abbrechen" + #, python-format msgid "" "\n" @@ -1161,11 +978,34 @@ msgstr "" "\n" "\n" -#: scheduler/templates/shift_details.html:108 msgid "Members only" msgstr "Zugangsbeschränkt" -#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" +"Hallo %(recipient)s,\n" +"Die Schichtleitung der Schicht %(shift_title)s am Ort %(location)s hat folgende Nachricht für Dich:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Bitte wende Dich an %(sender_email)s falls Du Fragen haben solltest.\n" +"\n" +"\n" +"Viele Grüße,\n" +"Dein volunteer-planner.org Team\n" + #, python-format msgid "" "\n" @@ -1191,300 +1031,205 @@ msgstr "" "\n" "Hallo,\n" "\n" -"es tut uns leid, aber wir mussten die Zeiten der folgenden Schicht auf Wunsch der Schichtleitung ändern.:\n" +"es tut uns leid, aber wir mussten die Zeiten der folgenden Schicht auf Wunsch der Schichtleitung ändern:\n" "\n" "%(shift_title)s, %(location)s\n" -"%(old_from_date)s von %(old_from_time)s auf %(old_to_time)s o'clock\n" -"\n" +"%(old_from_date)s von %(old_from_time)s auf %(old_to_time)s Uhr\n" "\n" "Die neue Schicht ist wie folgt geplant:\n" "\n" -"%(from_date)s von %(from_time)s bis %(to_time)s o'clock\n" +"%(from_date)s von %(from_time)s bis %(to_time)s Uhr\n" "\n" "Wenn Du zu dieser Zeit nicht zur Verfügung stehen kannst, dann sage bitte im Volunteer-Planner deine Schichtteilnahme ab.\n" "\n" -"Dies ist eine automatisch erstellte E-Mail. Bei Rückfragen wende Dich bitte an die Kontaktadresse, die bei der Unterkunft angegeben ist..\n" -" \n" -"Dein\n" +"Dies ist eine automatisch erstellte E-Mail. Bei Rückfragen wende Dich bitte an die Kontaktadresse, die bei der Unterkunft angegeben ist.\n" "\n" -"Volunteer-planner.org Team\n" +"Dein Volunteer-planner.org Team\n" -#: scheduler/views.py:169 msgid "The submitted data was invalid." msgstr "Die eingegebenen Daten sind ungültig." -#: scheduler/views.py:177 msgid "User account does not exist." msgstr "Benutzerkonto existiert nicht." -#: scheduler/views.py:201 msgid "A membership request has been sent." msgstr "Ein Antrag auf Mitgliedschaft wurde gestellt." -#: scheduler/views.py:214 msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" msgstr "Wir konnten Dich nicht für die Schicht eintragen, da Du zur gleichen Zeit schon an mindestens einer anderen teilnimmst:" -#: scheduler/views.py:223 msgid "We can't add you to this shift because there are no more slots left." msgstr "Wir können Dich nicht zu dieser Schicht hinzufügen, da alle Plätze bereits belegt sind." -#: scheduler/views.py:230 msgid "You were successfully added to this shift." msgstr "Du hast Dich erfolgreich für die Schicht angemeldet." -#: scheduler/views.py:234 -msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" -msgstr "" +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "Die Schicht, der Du eigetreten bist, überschneidet sich zeitlich mit einer anderen Schicht. Bitte überprüfe die Überschneidungen:" -#: scheduler/views.py:244 #, python-brace-format msgid "You already signed up for this shift at {date_time}." msgstr "Du hast Dich bereits am {date_time} für diese Schicht eingetragen." -#: scheduler/views.py:256 msgid "You successfully left this shift." msgstr "Du hast Deine Teilnahme abgesagt." -#: scheduletemplates/admin.py:176 +msgid "You have no permissions to send emails!" +msgstr "Du hast keine Erlaubnis um Emails zu senden!" + +msgid "Email has been sent." +msgstr "Email wurde gesendet." + #, python-brace-format msgid "A shift already exists at {date}" msgid_plural "{num_shifts} shifts already exists at {date}" msgstr[0] "Am {date} gibt es bereits eine Schicht" msgstr[1] "Am {date} gibt es bereits {num_shifts} Schichten" -#: scheduletemplates/admin.py:232 #, python-brace-format msgid "{num_shifts} shift was added to {date}" msgid_plural "{num_shifts} shifts were added to {date}" msgstr[0] "{num_shifts} Schicht wurde am {date} hinzugefügt" msgstr[1] "{num_shifts} Schichten wurden am {date} hinzugefügt" -#: scheduletemplates/admin.py:244 msgid "Something didn't work. Sorry about that." msgstr "Entschuldigung, etwas hat nicht funktioniert." -#: scheduletemplates/admin.py:277 -msgid "slots" -msgstr "Plätze" - -#: scheduletemplates/admin.py:289 msgid "from" msgstr "von" -#: scheduletemplates/admin.py:302 msgid "to" msgstr "bis" -#: scheduletemplates/models.py:21 msgid "schedule templates" msgstr "Schichtplanvorlagen" -#: scheduletemplates/models.py:22 scheduletemplates/models.py:30 msgid "schedule template" msgstr "Schichtplanvorlage" -#: scheduletemplates/models.py:50 msgid "days" msgstr "Tage" -#: scheduletemplates/models.py:62 msgid "shift templates" msgstr "Schichtvorlagen" -#: scheduletemplates/models.py:63 msgid "shift template" msgstr "Schichtvorlage" -#: scheduletemplates/models.py:97 #, python-brace-format msgid "{task_name} - {workplace_name}" msgstr "{task_name} - {workplace_name}" -#: scheduletemplates/models.py:101 -#, python-brace-format -msgid "{task_name}" -msgstr "{task_name}" - -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:32 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:6 msgid "Home" msgstr "Start" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:46 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:14 msgid "Apply Template" msgstr "Vorlage anwenden" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:51 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:38 msgid "no workplace" msgstr "ohne Arbeitsplatz" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:52 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:39 msgid "apply" msgstr "anwenden" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:61 msgid "Select a date" msgstr "Wähle ein Datum" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:66 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:125 msgid "Continue" msgstr "weiter" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:70 msgid "Select shift templates" msgstr "Schichtvorlagen auswählen" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:22 msgid "Please review and confirm shifts to create" -msgstr "Bitte kontrolliere und bestätige die Schichten zum erstellen" +msgstr "Bitte kontrolliere und bestätige die Schichten zum Erstellen" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:118 msgid "Apply" msgstr "anwenden" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:120 msgid "Apply and select new date" msgstr "anwenden und neues Datum wählen" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save and apply template" msgstr "Vorlage speichern und anwenden" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:4 msgid "Delete" msgstr "Löschen" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:5 msgid "Save as new" msgstr "Als neu speichern" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:6 msgid "Save and add another" msgstr "Speichern und neu hinzufügen" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:7 msgid "Save and continue editing" msgstr "Speichern und weiter bearbeiten" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:17 msgid "Delete?" msgstr "Löschen?" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:31 msgid "Change" msgstr "Ändern" -#: shiftmailer/models.py:10 -msgid "last name" -msgstr "Nachname" - -#: shiftmailer/models.py:11 -msgid "position" -msgstr "Position" - -#: shiftmailer/models.py:12 -msgid "organisation" -msgstr "Organisation" - -#: shiftmailer/templates/shifts_today.html:1 -#, python-format -msgctxt "shift today title" -msgid "Schedule for %(organization_name)s on %(date)s" -msgstr "Schichtplan für %(organization_name)s am %(date)s" - -#: shiftmailer/templates/shifts_today.html:6 -msgid "All data is private and not supposed to be given away!" -msgstr "Alle Daten sind vertraulich und nicht zur Weitergabe an Dritte bestimmt!" - -#: shiftmailer/templates/shifts_today.html:15 -#, python-format -msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" -msgstr "folgende %(volunteer_count)s Freiwilligen haben sich für %(start_time)s bis %(end_time)s Uhr angemeldet:" - -#: templates/partials/footer.html:17 #, python-format msgid "Questions? Get in touch: %(mailto_link)s" msgstr "Fragen? Schreib' uns: %(mailto_link)s" -#: templates/partials/management_tools.html:13 msgid "Manage" msgstr "Verwaltung" -#: templates/partials/management_tools.html:28 msgid "Members" msgstr "Mitglieder" -#: templates/partials/navigation_bar.html:11 msgid "Toggle navigation" msgstr "Navigation umschalten" -#: templates/partials/navigation_bar.html:46 msgid "Account" msgstr "Benutzerkonto" -#: templates/partials/navigation_bar.html:51 msgid "My work shifts" msgstr "Meine Schichten" -#: templates/partials/navigation_bar.html:56 msgid "Help" msgstr "Hilfe" -#: templates/partials/navigation_bar.html:59 msgid "Logout" msgstr "Ausloggen" -#: templates/partials/navigation_bar.html:63 msgid "Admin" msgstr "Verwaltung" -#: templates/partials/region_selection.html:18 msgid "Regions" msgstr "Regionen" -#: templates/registration/activate.html:5 msgid "Activation complete" msgstr "Benutzeraccout aktiviert" -#: templates/registration/activate.html:7 msgid "Activation problem" msgstr "Benutzeraccount konnte nicht aktiviert werden" -#: templates/registration/activate.html:15 msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" msgid "login" msgstr "einloggen" -#: templates/registration/activate.html:17 #, python-format msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." msgstr "Danke %(account)s, die Aktivierung ist abgeschlossen! Du kannst dich jetzt mit deinem Benutzernamen und Passwort %(login_link)s." -#: templates/registration/activate.html:25 msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." msgstr "Uuppss – Entweder dein Account wurde bereits aktiviert oder der Aktivierungschlüssel ist ungültig oder abgelaufen." -#: templates/registration/activation_complete.html:3 msgid "Activation successful!" msgstr "Aktivierung erfolgreich!" -#: templates/registration/activation_complete.html:9 msgctxt "Activation successful page" msgid "Thank you for signing up." msgstr "Schön, dass Du dabei bist." -#: templates/registration/activation_complete.html:12 msgctxt "Login link text on activation success page" msgid "You can login here." msgstr "Du kannst Dich hier einloggen." -#: templates/registration/activation_email.html:2 #, python-format msgid "" "\n" @@ -1517,7 +1262,6 @@ msgstr "" "\n" "Dein Team vom Volunteer Planner\n" -#: templates/registration/activation_email.txt:2 #, python-format msgid "" "\n" @@ -1550,89 +1294,74 @@ msgstr "" "\n" "Dein Team vom Volunteer Planner\n" -#: templates/registration/activation_email_subject.txt:1 msgid "Your volunteer-planner.org registration" msgstr "Dein Benutzeraccount bei volunteer-planner.org" -#: templates/registration/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Benutzername und Passwort ungültig. Bitte versuche es erneut." +msgid "admin approval" +msgstr "Bestätigung durch Administrator" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "Dein Account ist jetzt bestätigt. Du kannst Dich jetzt hier anmelden." + +msgid "Your account is now approved. You can log in using the following link" +msgstr "Dein Account ist jetzt bestätigt. Du kannst Dich unter folgendem Link anmelden" + +msgid "Email address" +msgstr "E-Mailadresse" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "%(email_trans)s / %(username_trans)s" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Passwort" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Passwort vergessen?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Hilfe und Anmeldung" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Passwort geändert" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Passwurd wurde erfolgreich geändert!" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Passwort ändern" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "E-Mailadresse" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Passwort ändern" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "Passwort wurde geändert" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "einloggen" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "Dein Passwort wurde geändert. Du kannst dich jetzt wieder %(login_link)s." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Neues Passwort festlegen" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "Bitte gib dein neues Passwort ein" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Passwort zurückgesetzt" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Wir haben Dir eine E-Mail mit der Anleitung zum Ändern des Passwortes geschickt." -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Bitte prüfe Deine E-Mails und folge der Anleitung um fortzufahren." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1648,7 +1377,6 @@ msgstr "" "\n" "Um Dein Passwort zu ändern, klicke bitte folgenden Link:" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1663,105 +1391,80 @@ msgstr "" "Viele Grüße,\n" "das %(site_name)s-Team\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Passwort zurücksetzen" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Kein Problem! Wir schicken Dir eine E-Mail mit der Anleitung wie Du Dein Passwort zurücksetzen kannst." -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Aktivierungsemail wurde versandt" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Dir wird jetzt eine Aktivierungs-E-Mail zugesendet." -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Bitte bestätige Deine Anmeldung, indem Du den entsprechenden Link in der E-Mail anklickst. Wenn Du in 10 Minuten noch keine E-Mail bekommen haben solltest, schaue bitte in Deinem Spamordner nach." -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Erstelle ein Account" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "Du kannst hier einen neues Benutzerkonto erstellen. Wenn Du bereits registriert bist bitte einloggen (oben rechts)." -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "Ein neues Benutzerkonto erstellen" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "Volunteer-Planner und die Unterkunftskoordination werden Dir Emails schicken, die Deine Schicht betreffen." -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Dieser Benutzername ist bereits vergeben. Bitte wähle einen anderen aus." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." -msgstr "Achtung! Der Benutzername ist sichtbar für andere Benutzer! Bitte keine Leerzeilen oder Sonderzeichen benutzen." - -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "Die Passwörter stimmen nicht überein." +msgstr "Achtung! Der Benutzername ist sichtbar für andere Benutzer! Bitte keine Leerzeichen oder Sonderzeichen benutzen." -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Passwort wiederholen" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Eintragen" +msgid "I have read and agree to the Privacy Policy." +msgstr "Ich habe die Datenschutzbestimmungen gelesen und stimme ihnen zu (Einwilligung nach Art 6 Abs 1 Satz 1 a DSGVO)." -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Dieses Feld ist zwingend erforderlich." +msgid "This must be checked." +msgstr "Du musst diesen Haken setzen." -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Bitte einen gültigen Benutzernamen wählen (erlaubte Sonderzeichen: @/./+/-/_)." +msgid "Sign-up" +msgstr "Eintragen" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Es gibt bereits einen Benutzer mit diesem Benutzernamen." +msgid "Ukrainian" +msgstr "Ukrainisch" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Englisch" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Deutsch" -#: volunteer_planner/settings/base.py:144 -msgid "French" -msgstr "" +msgid "Czech" +msgstr "Tschechisch" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "Griechisch" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "Französisch" + msgid "Hungarian" msgstr "Ungarisch" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Schwedisch" +msgid "Polish" +msgstr "Polnisch" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" -msgstr "" +msgstr "Portugiesisch" + +msgid "Russian" +msgstr "Russisch" + +msgid "Swedish" +msgstr "Schwedisch" -#: volunteer_planner/settings/base.py:149 msgid "Turkish" -msgstr "" +msgstr "Türkisch" diff --git a/locale/el/LC_MESSAGES/django.po b/locale/el/LC_MESSAGES/django.po index e1701b30..e77f97c9 100644 --- a/locale/el/LC_MESSAGES/django.po +++ b/locale/el/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-01-29 08:23+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: Greek (http://www.transifex.com/coders4help/volunteer-planner/language/el/)\n" @@ -19,517 +19,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "Όνομα" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Επώνυμο" + msgid "email" msgstr "Ηλεκτρονική διεύθυνση αλληλογραφίας (email)" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "Λογαριασμοί" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "Λογαριασμός Χρήστη" -#: accounts/models.py:17 msgid "user accounts" msgstr "Λογαριασμοί Χρηστών" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Όνομα Χρήστη" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Όνομα" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Επώνυμο" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "Email" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Αποθήκευση" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Τροποποίηση λογαριασμού" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "επιπλέον CSS" -#: content/admin.py:23 msgid "translation" msgstr "μετάφραση" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "μεταφράσεις" -#: content/admin.py:58 msgid "No translation available" msgstr "Δεν υπάρχει διαθέσιμη μετάφραση" -#: content/models.py:12 msgid "additional style" msgstr "επιπλέον στυλ" -#: content/models.py:18 msgid "additional flat page style" msgstr "επιπλέον στυλ επίπεδης σελίδας" -#: content/models.py:19 msgid "additional flat page styles" msgstr "επιπλέον στυλ επίπεδων σελίδων" -#: content/models.py:25 msgid "flat page" msgstr "επίπεδη σελίδα" -#: content/models.py:28 msgid "language" msgstr "γλώσσα" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "Τίτλος" -#: content/models.py:36 msgid "content" msgstr "περιεχόμενο" -#: content/models.py:46 msgid "flat page translation" msgstr "μετάφραση επίπεδης σελίδας" -#: content/models.py:47 msgid "flat page translations" msgstr "μεταφράσεις επίπεδων σελίδων" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Δες στο site." -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Απομάκρυνση" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "Πρόσθεσε άλλο ένα %(verbose_name)s" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "τροποποίηση αυτής της σελίδας" -#: news/models.py:17 msgid "subtitle" msgstr "Υποτίτλος" -#: news/models.py:21 msgid "articletext" msgstr "Κείμενο του άρθρου" -#: news/models.py:26 msgid "creation date" msgstr "Δημιουργήθηκε την" -#: news/models.py:39 msgid "news entry" msgstr "εισαγωγή νέων" -#: news/models.py:40 msgid "news entries" msgstr "εισαγωγές νέων" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Σύνδεση" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Θέλω να βοηθήσω" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Κύρια Σελίδα" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Imprint" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "Σχετικά" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "Υποστηρικτής" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "Τύπος" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Επικοινωνία" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "Συχνές ερωτήσεις" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Θέλω να βοηθήσω!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Εγγράψου και δες πού μπορείς να βοηθήσεις!" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Οργάνωσε τους εθελοντές!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Καταχώρησε ένα κέντρο φιλοξενίας/βοήθειας και οργάνωσε τους εθελοντές!" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Τοποθεσίες στις οποίες μπορείς να βοηθήσεις" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Εγγεγραμένοι εθελοντές" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Δεδουλευμένες ώρες" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Περί τίνος πρόκειται;" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "Είσαι εθελοντής και θέλεις να βοηθήσεις πρόσφυγες; Το Volunteer-Planner.org σου δείχνει πού, πότε και πώς να βοηθήσεις." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "Αυτή η πλατφόρμα είναι μη εμπορική και χωρίς διαφημίσεις. Μια ομάδα από εργαζόμενους σε χώρους φιλοξενίας, προγραμματιστές, διαχειριστές έργου και σχεδιαστές από διαφορετικές χώρες δουλεύουν για το volunteer-planner εθελοντικά και χρησιμοποιούν την επαγγελματική τους εμπειρία για να μπορέσουν να κάνουν τη διαφορά." -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "Μπορείς να βηθήσεις στις ακόλουθες τοποθεσίες:" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "Αυτή τη στιγμή δεν υπάρχουν τοποθεσίες που να χρειάζονται εθελοντές." -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Πολιτική Προστασίας Προσωπικών Δεδομένων" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "εύρος" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "Η πολιτική προστασίας προσωπικών δεδομένων που έχουμε ενημερώνει το χρήστη για τη συλλογή και τη χρήση προσωπικών δεδομένων σε αυτή την ιστοσελίδα (στο εξής \"Υπηρεσία\") από τον πάροχο υπηρεσιών, την Benefit e.V. (Wollankstr. 2, 13187 Berlin) " -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "Η νομική βάση της πολιτικής προστασίας προσωπικών δεδομένων είναι η Γερμανικός Νόμος Προστασίας Δεδομένων (Bundesdatenschutzgesetz, BDSG) και ο γερμανικός νόμος τηλεδεδομένων (Telemediengesetz, TMG)" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "Δεδομένα πρόσβασης/ αρχεία καταγραφής (log files)" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "Ο πάροχος υπηρεσιών (ή ο πάροχος αυτού του ιστοχώρου) συλλέγει δεδομένα σε κάθε πρόσβαση και αποθηκεύει αυτά τα δεδομένα σε αρχεία καταγραφής (log files). Δεδομένα πρόσβασης είναι το όνομα της ιστοσελίδας που επισκέπτεται ο χρήστης, τα αρχεία που ανήγει, η ημερομηνία και ώρα πρόσβασης, η μεταφορά αρχείων, ειδοποίηση επιτυχημένης πρόσβασης, το πρόγραμμα περιήγησης του χρήστη και η έκδοσή του, το λειτουργικό σύστημα του χρήστη, η ηλεκτρονική διεύθυνση που χρησιμοποίησε ο χρήστης νωρίτερα, η διεύθυνση IP του χρήστη, και ο πάροχος υπηρεσιών Διαδικτύου του χρήστη." -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "Ο πάροχος υπηρεσιών χρησιμοποιεί τα αρχεία καταγραφής για στατιστικούς σκοπούς και για τη λειτουργία, την ασφάλεια και τη βελτίωση των υπηρεσιών που παρέχονται αποκλειστικά. Ωστόσο, ο πάροχος έχει το δικαίωμα να επαναξιολογήσει τα αρχεία καταγραφής οποιαδήποτε στιγμή εάν υπάρχουν ενδείξεις για παράνομη χρήση των υπηρεσιών. " -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "Χρήση προσωπικών δεδομένων" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "Προσωπικά δεδομένα είναι οι πληροφορίες που μπορούν να χρησιμοποιηθούν για την αναγνώριση ενός ατόμου, δηλαδή πληροφορίες που μπορούν να οδηγήσουν στο συγκεκριμένο άτομο. Προσωπικά δεδομένα είναι το όνομα, η ηλεκτρονική διεύθυνση ή το τηλέφωνο του χρήστη. Ακόμα και πληροφορίες σχετικά με τις προσωπικές προτιμήσεις, δραστηριότητες ή επισκέψεις σε ιστοσελίδες θεωρούνται προσωπικά δεδομένα." -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "Ο πάροχος υπηρεσιών συλλέγει, χρησιμοποιεί και μοιράζεται προσωπικά δεδομένα με τρίτους μόνο εάν επιτρέπεται βάσει νόμου ή εάν ο χρήστης έχει δώσει την άδειά του." -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Επικοινωνία" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "Σε περίπτωση επικοινωνίας με τον πάροχο υπηρεσιών (π.χ μέσω email ή χρησιμοποιώντας την ηλεκτρονική φόρμα επικοινωνίας), τα δεδομένα που λαμβάνονται από τον χρήστη αποθηκεύονται για την επεξεργασία του αιτήματος και για την απάντηση αιτημάτων που μπορεί να ακολουθήσουν." -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "Τα Cookies είναι μικρά αρχεία που αποθηκεύονται στη συσκευή του χρήστη (υπολογιστή, smartphone κλπ) με πληροφορίες που αφορούν την συγκεκριμένη συσκευή. Χρησιμοποιούνται για διαφορετικούς σκοπούς: μπορουν να χρησιμοποιηθούν για τη διευκόλυνση του χρήστη (πχ αποθηκεύοντας την εντολή σύνδεσης ). Τα cookies μπορούν επίσης να χρησιμποιηθούν για τη συλλογή στατιστικών δεδομένων που επιτρέπουν στον πάροχο υπηρεσιών να αναλύσει τον τρόπο χρήσης της ιστοσελίδας από τον χρήστη, με σκοπό τη βελτίωση των υπηρεσιών." -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "Ο χρήστης μπορεί να προσαρμόσει τη χρήση των cookies. Τα περισσότερα προγράμματα περιήγησης προσφέρουν στις ρυθμίσεις τους περιορισμούς ή ακόμα και την απαγόρευση αποθήκευσης cookies. Ωστόσο, ο πάροχος υπηρεσιών σημειώνει ότι τέτοιοι περιορισμοί ίσως να επηρεάσουν αρνητικά την εμπειρία του χρήστη και και τη λειτουργικότητα της ιστοσελίδας." -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "Ο χρήστης μπορεί να διαχειριστεί τη χρήση των cookies μέσω διαδικτύου από την αμερικανική ιστοσελίδα %(us_url)s ή την ευρωπαϊκή %(eu_url)s." -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Εγγραφή" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "Τα δεδομένα που δίνει ο χρήστης κατά την εγγραφή επιτρέπουν τη χρήση των υπηρεσιών. Ο πάροχος των υπηρεσιών μπορεί να ενημερώσει τον χρήστη μέσω email σχετικά με πληροφορίες που αφορούν τις υπηρεσίες ή την εγγραφή, όπως για παράδειγμα αλλαγές των υπηρεσιών ή τεχνικές πληροφορίες (δες επόμενη παράγραφο)." -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "Η φόρμα εγγραφής και το προφίλ του χρήστη δείχνουν ποια δεδομένα συκγεντρώνονται και αποθηκεύονται. Σ'αυτά συμπεριλαμβάνονται το ονοματεπώνυμο του χρήστη και η ηλεκτρονική διεύθυνση αλληλογραφίας. " -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "Ειδοποιήσεις/ ενημερωτικά email- newsletters " -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "Κατά τη δημιουργία λογαριασμού με την υπηρεσία ο χρήστης συμφωνεί να δέχεται ειδοποιήσεις μέσω email και ενημερωτικά email/ newsletters." -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "Ειδοποιήσεις μέσω email ενημερώνουν τον χρήστη για συγκεκριμένα events που αφορούν τη χρήση των υπηρεσιών. Με τα newsletters ο πάροχος υπηρεσιών στέλνει στο χρήστη γενικές πληροφορίες σχετικά με τον πάροχο και τις προτεινόμενες υπηρεσίες." -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "Εάν ο χρήστης δεν επιθυμεί να δέχεται emails, πρέπει να διαγράψει τον λογαριασμό του." -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Google Analytics" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "Η ιστοσελίδα χρησιμοποιεί την υπηρεσία Google Analytics, (“Google”). Η υπηρεσία αυτή χρησιμοποιεί \"cookies\", τα οποία είναι αρχεία κειμένου που αποθηκεύονται στη συσκευή του χρήστη για να επιτέψουν στην ιστοσελίδα να αναλύσει τον τρόπο που οι χρήστες την χρησιμοποιούν . Οι πληροφορίες που δημιουργούνται από τα cookies σχετικά με τη χρήση της ιστοσελίδας από τους χρήστες μεταδίδονται και αποθηκεύονται από την Google σε κεντρικούς υπολογιστές στις ΗΠΑ." -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "Σε περίπτωση που ενεργοποιηθεί η ανωνυμοποίηση διευθύνσεων IP στην ιστοσελίδα, η διεύθυνση IP του χρήστη θα περικοπεί στην περιοχή ........... Μόνο σε εξαιρετικές περιπτώσεις μεταφέρεται αρχικά ολόκληρη η διεύθυνση IP σε έναν server της Google στις ΗΠΑ και ... εκεί. Η IP- ανωνυμοποίηση είναι ενεργή σ'αυτήν την ιστοσελίδα." -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "Η Google χρησιμοποιεί αυτές τις πληροφορίες για τον website operator με σκοπό την αξιολόγηση της χρήσης της ιστοσελίδας, συγκεντρώνοντας/ επεξεργάζοντας σχετικά με τη δραστηριότητα στην ιστοσελίδα και παρέχοντας διαφορετικές υπηρεσίες σχετικά με τη δραστηριότητα στην ιστοσελίδα και και τη διαδικτυακή χρήση. " -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "Η διεύθυνση IP, που μεταφέρεται εντός του πεδίου εφαρμογής της Google Analytics, δε σχετίζεται με δεδομένα της Google. Ο χρήστης μπορεί να αρνηθεί τη χρήση cookies επιλέγοντας τις κατάλληλες ρυθμίσεις στο πρόγραμμα περιήγησης που χρησιμοποιεί, ωστόσο πρέπει να σημειωθεί ότι εάν ο χρήστης κάνει αυτήν την επιλογή ίσως να μην έχει τη δυνατότητα πλήρης χρήσης της ιστοσελίδας. Υπάρχει επίσης η δυνατότητα να εξαιρεθεί από την 'παρακολούθηση' Google Analytics κάνοντας εγκατάσταση του Google Analytics Opt-out Browser Addon για το πρόγραμμα περιήγησης που χρησιμοποιεί: %(optout_plugin_url)s." -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "Κάνε κλικ στον σύνδεσμο" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "Αντί για την εγκατάστση του browser Addon ο χρήστης μπορεί να %(optout_javascript)s ώστε να εξαιρεθεί από την συλλογή δεδομένων της Google Analytics για αυτήν την ιστοσελίδα (η εξαίρεση ισχύει μόνο for the browser in which the user sets it and within this domain). Ένα opt-out cookie αποθηκεύεται στη συσκευή του χρήστη, που σημαίνει ότι σε περίπτωση που σβηστεί ο χρήστης θα πρέπει να ξαναπατήσει στον σύνδεσμο. " -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "Ανάκληση, Αλλαγές, Διορθώσεις και Ενημερώσεις" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "Κατόπιν αιτήματος και χωρίς οικονομική επιβάρυνση ο χρήστης έχει το δικαίωμα να ενημερώνεται σχετικά με το ποια προσωπικά δεδομένα έχουν αποθηκευτεί. Επιπλέον, ο χρήστης μπορεί να ζητήσει τη διόρθωση λανθασμένων στοιχείων, όπως επίσης την διαραφή των προσωπικών του δεδομένων, εφόσων δεν υπάρχει νομική υποχρέωση για τη διατήρηση αυτών των δεδομένων." -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "Βασισμένο στο δείγμα κανονισμού προστασίας προσωπικών δεδομένων του δικηγόρου Thomas Schwenke - I LAW it" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "πλεονεκτήματα" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "εξοικονόμηση χρόνου" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "Βελτιώστε την αυτοοργάνωση των εθελοντών" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -541,7 +439,6 @@ msgstr "" " temporary shortcuts can be anticipated by helpers themselves more easily\n" " " -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -553,7 +450,6 @@ msgstr "" " το πρόγραμμα βαρδιών μπορεί να δωθεί σε προσωπικό ασφαλείας\n" " ή στους διαχειριστές από ένα αυτόματο email κάθε πρωί" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -565,15 +461,12 @@ msgstr "" " και όλοι οι χώροι φιλοξενίας έχουν να κερδίσουν από ένα κοινό σύνολο κινητοποιημένων εθελοντών\n" " " -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "Δωρεάν, χωρίς κόστος" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "Η κατάλληλη βοήθεια την σωστή στιγμή στο σωστό μέρος" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -587,11 +480,9 @@ msgstr "" "

    \n" " " -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "Δωρεάν, και χωρίς διαφημίσεις" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -604,17 +495,9 @@ msgstr "" "σχεδίασης και μάρκετινγκ. Ο κώδικας είναι διαθέσιμος και ανοιχτός για μη εμπορική χρηση. Προσωπικά δεδομένα (email, δεδομένα προφίλ) δεν θα δοθούν σε τρίτους.

    \n" " " -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "Επικοινώνησε μαζί μας!" -#: non_logged_in_area/templates/shelters_need_help.html:72 -#, fuzzy -#| msgid "" -#| "\n" -#| " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" -#| " " msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" href=\"mailto:onboarding@volunteer-planner.org\">onboarding@volunteer-planner.org\n" " " -#: organizations/admin.py:128 organizations/admin.py:130 msgid "edit" msgstr "τροποποίηση" -#: organizations/admin.py:202 organizations/admin.py:239 -#: organizations/models.py:79 organizations/models.py:148 -msgid "short description" -msgstr "σύντομη περιγραφή" - -#: organizations/admin.py:208 organizations/admin.py:245 -#: organizations/admin.py:311 organizations/admin.py:335 -#: organizations/models.py:82 organizations/models.py:151 -#: organizations/models.py:291 organizations/models.py:316 msgid "description" msgstr "περιγραφή" -#: organizations/admin.py:214 organizations/admin.py:251 -#: organizations/models.py:85 organizations/models.py:154 msgid "contact info" msgstr "πληροφορίες επαφής" -#: organizations/models.py:29 +msgid "organizations" +msgstr "οργανισμοί" + msgid "by invitation" msgstr "από πρόσκληση" -#: organizations/models.py:30 msgid "anyone (approved by manager)" msgstr "οποιοσδήποτε (εγκρινόμενο από τον διαχειριστή)" -#: organizations/models.py:31 msgid "anyone" msgstr "οποιοσδήποτε" -#: organizations/models.py:37 msgid "rejected" msgstr "απορρίφθηκε" -#: organizations/models.py:38 msgid "pending" msgstr "σε αναμονή" -#: organizations/models.py:39 msgid "approved" msgstr "εγκρίθηκε" -#: organizations/models.py:45 msgid "admin" msgstr "admin" -#: organizations/models.py:46 msgid "manager" msgstr "διαχειριστής" -#: organizations/models.py:47 msgid "member" msgstr "μέλος" -#: organizations/models.py:52 msgid "role" msgstr "ρόλος" -#: organizations/models.py:56 msgid "status" msgstr "κατάσταση" -#: organizations/models.py:74 organizations/models.py:143 -#: organizations/models.py:288 organizations/models.py:313 places/models.py:20 -#: scheduletemplates/models.py:13 msgid "name" msgstr "όνομα" -#: organizations/models.py:88 organizations/models.py:169 msgid "address" msgstr "διεύθυνση" -#: organizations/models.py:97 organizations/models.py:185 places/models.py:21 msgid "slug" msgstr "slug" -#: organizations/models.py:102 organizations/models.py:195 msgid "join mode" msgstr "τρόπος συμμετοχής" -#: organizations/models.py:103 msgid "Who can join this organization?" msgstr "Ποιός μπορεί να συμμετέχει στον οργανισμό;" -#: organizations/models.py:106 organizations/models.py:139 -#: organizations/models.py:232 msgid "organization" msgstr "οργανισμός" -#: organizations/models.py:107 -msgid "organizations" -msgstr "οργανισμοί" - -#: organizations/models.py:111 organizations/models.py:214 -#: organizations/models.py:299 organizations/models.py:324 -#, python-brace-format -msgid "{name}" -msgstr "{name}" - -#: organizations/models.py:132 msgid "disabled" msgstr "Απενεργοποιημένο" -#: organizations/models.py:133 msgid "enabled (collapsed)" msgstr "ενεργοποιημένο(σε έκταση)" -#: organizations/models.py:134 msgid "enabled" msgstr "ενεργοποιημένο" -#: organizations/models.py:165 places/models.py:132 msgid "place" msgstr "Τοποθεσία" -#: organizations/models.py:174 msgid "postal code" msgstr "ΤΚ" -#: organizations/models.py:179 msgid "Show on map of all facilities" msgstr "Δες τον χάρτη με όλες τις εγκαταστάσεις" -#: organizations/models.py:181 msgid "latitude" msgstr "γεωγραφικό πλάτος" -#: organizations/models.py:183 msgid "longitude" msgstr "γεωγραφικό μήκος" -#: organizations/models.py:190 msgid "timeline" msgstr "χρονοδιάγραμμα" -#: organizations/models.py:196 msgid "Who can join this facility?" msgstr "Ποιός μπορεί να συμμετέχει σε αυτή την εγκατάσταση?" -#: organizations/models.py:199 organizations/models.py:258 -#: organizations/models.py:283 organizations/models.py:309 -#: scheduler/models.py:51 scheduletemplates/models.py:16 msgid "facility" msgstr "εγκατάσταση" -#: organizations/models.py:200 msgid "facilities" msgstr "εγκαταστάσεις" -#: organizations/models.py:237 msgid "organization member" msgstr "μέλος οργανισμού" -#: organizations/models.py:238 msgid "organization members" msgstr "μέλη οργανισμού" -#: organizations/models.py:242 #, python-brace-format msgid "{username} at {organization_name} ({user_role})" msgstr "{username} στο {organization_name} ({user_role})" -#: organizations/models.py:264 msgid "facility member" msgstr "μέλος δραστηριοποιούμενο στην εγκατάσταση" -#: organizations/models.py:265 msgid "facility members" msgstr "μέλη που δραστηριοποιούνται στην εγκατάσταση" -#: organizations/models.py:269 #, python-brace-format msgid "{username} at {facility_name} ({user_role})" msgstr "{username} στο {facility_name} ({user_role})" -#: organizations/models.py:294 scheduler/models.py:46 -#: scheduletemplates/models.py:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:55 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:42 +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + msgid "workplace" msgstr "τοποθεσία εργασίας" -#: organizations/models.py:295 msgid "workplaces" msgstr "τοποθεσίες εργασιών" -#: organizations/models.py:319 scheduler/models.py:44 -#: scheduletemplates/models.py:37 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:41 msgid "task" msgstr "εργασία" -#: organizations/models.py:320 msgid "tasks" msgstr "εργασίες" -#: organizations/templates/emails/membership_approved.txt:2 +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + #, python-format msgid "Hello %(username)s," msgstr "Γειά σου %(username)s," -#: organizations/templates/emails/membership_approved.txt:6 #, python-format msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." msgstr "Η αίτησή σου στο %(facility_name)s εγκρίθηκε. Μπορείς τώρα να εγγραφείς σε κάποιες βάρδιες σε αυτή την εγκατάσταση ." -#: organizations/templates/emails/membership_approved.txt:10 msgid "" "Yours,\n" "the volunteer-planner.org Team" @@ -844,289 +665,278 @@ msgstr "" "Με φιλικούς χαιρετισμούς,\n" "η ομάδα του volunteer planner" -#: organizations/templates/facility.html:9 -#: organizations/templates/organization.html:9 -#: scheduler/templates/helpdesk_breadcrumps.html:6 -#: scheduler/templates/helpdesk_single.html:144 -#: scheduler/templates/shift_details.html:33 msgid "Helpdesk" msgstr "Κέντρο βοήθειας" -#: organizations/templates/facility.html:41 -#: organizations/templates/partials/compact_facility.html:31 +msgid "Show on map" +msgstr "" + msgid "Open Shifts" msgstr "Ακάλυπτες βάρδιες" -#: organizations/templates/facility.html:50 -#: scheduler/templates/helpdesk.html:70 msgid "News" msgstr "Νέα" -#: organizations/templates/manage_members.html:18 msgid "Error" msgstr "Σφάλμα" -#: organizations/templates/manage_members.html:18 msgid "You are not allowed to do this." msgstr "Δεν επιτρέπεται αυτή η ενέργεια" -#: organizations/templates/manage_members.html:43 #, python-format msgid "Members in %(facility)s" msgstr "Μέλη σε %(facility)s" -#: organizations/templates/manage_members.html:70 msgid "Role" msgstr "Ρόλος" -#: organizations/templates/manage_members.html:73 msgid "Actions" msgstr "Ενέργειες" -#: organizations/templates/manage_members.html:98 -#: organizations/templates/manage_members.html:105 msgid "Block" msgstr "Μπλοκάρισε" -#: organizations/templates/manage_members.html:102 msgid "Accept" msgstr "Αποδοχή" -#: organizations/templates/organization.html:26 msgid "Facilities" msgstr "Εγκαταστάσεις" -#: organizations/templates/partials/compact_facility.html:23 -#: scheduler/templates/geographic_helpdesk.html:76 -#: scheduler/templates/helpdesk.html:68 msgid "Show details" msgstr "Δείξε λεπτομέρειες" -#: organizations/views.py:137 msgid "volunteer-planner.org: Membership approved" msgstr "volunteer-planner.org: Η εγγραφή μέλους έγινε αποδεκτή" -#: osm_tools/templatetags/osm_links.py:17 #, python-brace-format msgctxt "maps search url pattern" msgid "https://www.openstreetmap.org/search?query={location}" msgstr "" -#: places/models.py:69 places/models.py:84 msgid "country" msgstr "χώρα" -#: places/models.py:70 msgid "countries" msgstr "χώρες" -#: places/models.py:87 places/models.py:106 msgid "region" msgstr "νομός" -#: places/models.py:88 msgid "regions" msgstr "νομοί" -#: places/models.py:109 places/models.py:129 msgid "area" msgstr "περιοχή" -#: places/models.py:110 msgid "areas" msgstr "περιοχές" -#: places/models.py:133 msgid "places" msgstr "Τοποθεσίες" -#: scheduler/admin.py:28 +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + msgid "number of volunteers" msgstr "αριθμός εθελοντών" -#: scheduler/admin.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:40 msgid "volunteers" msgstr "Εθελοντές." -#: scheduler/apps.py:8 -msgid "Scheduler" +msgid "scheduler" msgstr "Προγραμματιστής" -#: scheduler/models.py:41 scheduletemplates/models.py:34 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:53 +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "Βάρδιες" + msgid "number of needed volunteers" msgstr "Αριθμός εθελοντών που χρειάζεσαι" -#: scheduler/models.py:53 scheduletemplates/admin.py:33 -#: scheduletemplates/models.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:56 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:43 msgid "starting time" msgstr "Από τις" -#: scheduler/models.py:55 scheduletemplates/admin.py:36 -#: scheduletemplates/models.py:47 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:57 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:44 msgid "ending time" msgstr "Μέχρι τις" -#: scheduler/models.py:63 scheduletemplates/models.py:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:58 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:45 msgid "members only" msgstr "Μόνο μέλη" -#: scheduler/models.py:65 scheduletemplates/models.py:56 msgid "allow only members to help" msgstr "Επιτρέψτε να βοηθήσουν μόνο μέλη" -#: scheduler/models.py:71 msgid "shift" msgstr "Βάρδια" -#: scheduler/models.py:72 scheduletemplates/admin.py:283 msgid "shifts" msgstr "Βάρδιες" -#: scheduler/models.py:86 scheduletemplates/models.py:77 #, python-brace-format msgid "the next day" msgid_plural "after {number_of_days} days" msgstr[0] "Την επόμενη μέρα" msgstr[1] "Μετά από {number_of_days} μέρες" -#: scheduler/models.py:130 msgid "shift helper" msgstr "Εθελοντής βάρδιας" -#: scheduler/models.py:131 msgid "shift helpers" msgstr "Εθελοντές της βάρδιας" -#: scheduler/templates/geographic_helpdesk.html:69 -msgid "Show on map" +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "Βάρδια" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" msgstr "" -#: scheduler/templates/geographic_helpdesk.html:81 msgctxt "helpdesk shifts heading" msgid "shifts" msgstr "Βάρδιες" -#: scheduler/templates/geographic_helpdesk.html:113 #, python-format msgid "There are no upcoming shifts available for %(geographical_name)s." msgstr "Δεν υπάρχουν διαθέσιμες βάρδιες σε: %(geographical_name)s;" -#: scheduler/templates/helpdesk.html:39 msgid "You can help in the following facilities" msgstr "Μπορείς να βοηθήσεις στις ακόλουθες τοποθεσίες" -#: scheduler/templates/helpdesk.html:43 -msgid "filter" -msgstr "Φιλτράρισε" - -#: scheduler/templates/helpdesk.html:59 msgid "see more" msgstr "Δες περισότερα" -#: scheduler/templates/helpdesk.html:82 +msgid "news" +msgstr "" + msgid "open shifts" msgstr "διαθέσιμες βάρδιες" -#: scheduler/templates/helpdesk_single.html:6 -#: scheduler/templates/shift_details.html:24 #, python-format msgctxt "title with facility" msgid "Schedule for %(facility_name)s" msgstr "Πρόγραμμα για %(facility_name)s" -#: scheduler/templates/helpdesk_single.html:60 #, python-format msgid "%(starting_time)s - %(ending_time)s" msgstr "%(starting_time)s - %(ending_time)s" -#: scheduler/templates/helpdesk_single.html:172 #, python-format msgctxt "title with date" msgid "Schedule for %(schedule_date)s" msgstr "Πρόγραμμα για %(schedule_date)s" -#: scheduler/templates/helpdesk_single.html:185 msgid "Toggle Timeline" msgstr "Εναλλαγή Timeline" -#: scheduler/templates/helpdesk_single.html:237 msgid "Link" msgstr "Σύνδεσμος" -#: scheduler/templates/helpdesk_single.html:240 msgid "Time" msgstr "Ώρα" -#: scheduler/templates/helpdesk_single.html:243 msgid "Helpers" msgstr "Εθελοντές" -#: scheduler/templates/helpdesk_single.html:254 msgid "Start" msgstr "Αρχή" -#: scheduler/templates/helpdesk_single.html:257 msgid "End" msgstr "Τέλος" -#: scheduler/templates/helpdesk_single.html:260 msgid "Required" msgstr "Απαιτούμενο" -#: scheduler/templates/helpdesk_single.html:263 msgid "Status" msgstr "Κατάσταση" -#: scheduler/templates/helpdesk_single.html:266 msgid "Users" msgstr "Χρήστες" -#: scheduler/templates/helpdesk_single.html:269 +msgid "Send message" +msgstr "" + msgid "You" msgstr "Εσύ" -#: scheduler/templates/helpdesk_single.html:321 #, python-format msgid "%(slots_left)s more" msgstr "Μένουν %(slots_left)s" -#: scheduler/templates/helpdesk_single.html:325 -#: scheduler/templates/helpdesk_single.html:406 -#: scheduler/templates/shift_details.html:134 msgid "Covered" msgstr "Πλήρης" -#: scheduler/templates/helpdesk_single.html:350 -#: scheduler/templates/shift_details.html:95 +msgid "Send email to all volunteers" +msgstr "" + msgid "Drop out" msgstr "Εγκατέλειψε" -#: scheduler/templates/helpdesk_single.html:360 -#: scheduler/templates/shift_details.html:105 msgid "Sign up" msgstr "Εγγραφή" -#: scheduler/templates/helpdesk_single.html:371 msgid "Membership pending" msgstr "Η αποδοχή μέλους σε αναμονή" -#: scheduler/templates/helpdesk_single.html:378 msgid "Membership rejected" msgstr "Η αίτηση μέλους απορρίφθηκε" -#: scheduler/templates/helpdesk_single.html:385 msgid "Become member" msgstr "Γίνε μέλος" -#: scheduler/templates/shift_cancellation_notification.html:1 +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + #, python-format msgid "" "\n" @@ -1144,11 +954,24 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/templates/shift_details.html:108 msgid "Members only" msgstr "Μόνο μέλη" -#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + #, python-format msgid "" "\n" @@ -1172,282 +995,190 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/views.py:169 msgid "The submitted data was invalid." msgstr "Τα δεδομένα είναι μη έγκυρα" -#: scheduler/views.py:177 msgid "User account does not exist." msgstr "Ο λογαριασμός χρήστη δεν υπάρχει." -#: scheduler/views.py:201 msgid "A membership request has been sent." msgstr "Η αίτηση μέλους εστάλη" -#: scheduler/views.py:214 msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" msgstr "Δεν μπορούμε να σε προσθέσουμε σε αυτή τη βάρδια γιατί έχεις ήδη εγγραφεί σε άλλη βάρδια την ίδια μέρα και ώρα. " -#: scheduler/views.py:223 msgid "We can't add you to this shift because there are no more slots left." msgstr "Δεν μπορούμε να σας προσθέσουμε σε αυτή τη βάρδια διότι έχει ήδη καλυφθεί." -#: scheduler/views.py:230 msgid "You were successfully added to this shift." msgstr "Προστέθηκες με επιτυχία σε αυτή τη βάρδια." -#: scheduler/views.py:234 -msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" msgstr "" -#: scheduler/views.py:244 #, python-brace-format msgid "You already signed up for this shift at {date_time}." msgstr "Έχεις ήδη εγγραφεί για αυτή τη βάρδια στις {date_time}." -#: scheduler/views.py:256 msgid "You successfully left this shift." msgstr "Επιτυχής διαγραφή βάρδιας." -#: scheduletemplates/admin.py:176 +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + #, python-brace-format msgid "A shift already exists at {date}" msgid_plural "{num_shifts} shifts already exists at {date}" msgstr[0] "Υπάρχει ήδη μια βάρδια την {date}" msgstr[1] "{num_shifts} βάρδιες υπάρχουν ήδη στις {date}" -#: scheduletemplates/admin.py:232 #, python-brace-format msgid "{num_shifts} shift was added to {date}" msgid_plural "{num_shifts} shifts were added to {date}" msgstr[0] "{num_shifts} προστέθηκε στην ημερομηνία {date}" msgstr[1] "{num_shifts} βάρδιες προστέθηκαν στις {date}" -#: scheduletemplates/admin.py:244 msgid "Something didn't work. Sorry about that." msgstr "Φαίνεται πως κάτι δεν πήγε καλά. Ζητούμε συγγνώμη." -#: scheduletemplates/admin.py:277 -msgid "slots" -msgstr "Βάρδιες" - -#: scheduletemplates/admin.py:289 msgid "from" msgstr "από" -#: scheduletemplates/admin.py:302 msgid "to" msgstr "σε" -#: scheduletemplates/models.py:21 msgid "schedule templates" msgstr "Προσχέδια προγράμματος" -#: scheduletemplates/models.py:22 scheduletemplates/models.py:30 msgid "schedule template" msgstr "Προσχέδιο προγράμματος" -#: scheduletemplates/models.py:50 msgid "days" msgstr "Ημέρες" -#: scheduletemplates/models.py:62 msgid "shift templates" msgstr "Προσχέδια βάρδιας" -#: scheduletemplates/models.py:63 msgid "shift template" msgstr "Προσχέδιο βάρδιας" -#: scheduletemplates/models.py:97 #, python-brace-format msgid "{task_name} - {workplace_name}" msgstr "{task_name} - {workplace_name}" -#: scheduletemplates/models.py:101 -#, python-brace-format -msgid "{task_name}" -msgstr "{task_name}" - -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:32 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:6 msgid "Home" msgstr "Αρχική σελίδα" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:46 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:14 msgid "Apply Template" msgstr "Εφαρμογή προσχεδίου" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:51 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:38 msgid "no workplace" msgstr "Χωρίς συγκεκριμένο χώρο εργασίας." -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:52 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:39 msgid "apply" msgstr "Εφαρμογή." -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:61 msgid "Select a date" msgstr "Επέλεξε ημερομηνία" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:66 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:125 msgid "Continue" msgstr "Συνέχισε" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:70 msgid "Select shift templates" msgstr "Επέλεξε προσχέδια βαρδιών." -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:22 msgid "Please review and confirm shifts to create" msgstr "Έλεγξε και επιβεβαίωσε τις βάρδιες που θα δημιουργηθούν " -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:118 msgid "Apply" msgstr "Εφαρμογή" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:120 msgid "Apply and select new date" msgstr "Εφαρμογή και επιλογή νέας ημερομηνίας" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save and apply template" msgstr "Αποθήκευσε και χρησιμοποίησε το προσχέδιο προγράμματος" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:4 msgid "Delete" msgstr "Διαγραφή." -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:5 msgid "Save as new" msgstr "Αποθήκευσε σε νέα εγγραφή." -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:6 msgid "Save and add another" msgstr "Αποθήκευσε και πρόσθεσε άλλο ένα" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:7 msgid "Save and continue editing" msgstr "Αποθήκευσε και συνέχισε " -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:17 msgid "Delete?" msgstr "Διαγραφή;" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:31 msgid "Change" msgstr "Αλλαγή" -#: shiftmailer/models.py:10 -msgid "last name" -msgstr "Επώνυμο" - -#: shiftmailer/models.py:11 -msgid "position" -msgstr "Θέση" - -#: shiftmailer/models.py:12 -msgid "organisation" -msgstr "οργανισμός" - -#: shiftmailer/templates/shifts_today.html:1 -#, python-format -msgctxt "shift today title" -msgid "Schedule for %(organization_name)s on %(date)s" -msgstr "Πρόγραμμα για τον %(organization_name)s την %(date)s" - -#: shiftmailer/templates/shifts_today.html:6 -msgid "All data is private and not supposed to be given away!" -msgstr "Όλα τα δεδομένα είναι προσωπικά και δεν σκοπεύουμε να δώσουμε πρόσβαση σε τρίτους!" - -#: shiftmailer/templates/shifts_today.html:15 -#, python-format -msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" -msgstr "Από τις %(start_time)s ως τις %(end_time)s έχουν δηλώσει ότι θα έρθουν οι παρακάτω εθελοντές: %(volunteer_count)s " - -#: templates/partials/footer.html:17 #, python-format msgid "Questions? Get in touch: %(mailto_link)s" msgstr "Ερωτήσεις; Επικοινώνησε: %(mailto_link)s" -#: templates/partials/management_tools.html:13 msgid "Manage" msgstr "Διαχείριση" -#: templates/partials/management_tools.html:28 msgid "Members" msgstr "Μέλη" -#: templates/partials/navigation_bar.html:11 msgid "Toggle navigation" msgstr "εναλλαγή πλήγησης" -#: templates/partials/navigation_bar.html:46 msgid "Account" msgstr "Λογαριασμός" -#: templates/partials/navigation_bar.html:51 msgid "My work shifts" msgstr "" -#: templates/partials/navigation_bar.html:56 msgid "Help" msgstr "Βοήθεια" -#: templates/partials/navigation_bar.html:59 msgid "Logout" msgstr "Αποσύνδεση" -#: templates/partials/navigation_bar.html:63 msgid "Admin" msgstr "Διαχειριστής" -#: templates/partials/region_selection.html:18 msgid "Regions" msgstr "Περιοχές" -#: templates/registration/activate.html:5 msgid "Activation complete" msgstr "Έχει γίνει ενεργοποίηση." -#: templates/registration/activate.html:7 msgid "Activation problem" msgstr "Πρόβλημα ενεργοποίησης" -#: templates/registration/activate.html:15 msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" msgid "login" msgstr "Σύνδεση" -#: templates/registration/activate.html:17 #, python-format msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." msgstr "Ευχαριστούμε %(account)s, η ενεργοποίηση ολοκληρώθηκε! Μπορείς τώρα να συνδεθείς %(login_link)s χρησιμοποιώντας το όνομα χρήστη και τον κωδικό πρόσβασης που εισήγαγες κατά την εγγραφή σου." -#: templates/registration/activate.html:25 msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." msgstr "Οοοοοπ! Ή έχεις ενεργοποιήσει τον λογαριασμό σου ήδη, ή ο κωδικός ενεργοποίησης ή είναι λανθασμένος ή έχει λήξει." -#: templates/registration/activation_complete.html:3 msgid "Activation successful!" msgstr "Επιτυχής ενεργοποίηση." -#: templates/registration/activation_complete.html:9 msgctxt "Activation successful page" msgid "Thank you for signing up." msgstr "Ευχαριστούμε για την εγγραφή σου!" -#: templates/registration/activation_complete.html:12 msgctxt "Login link text on activation success page" msgid "You can login here." msgstr "Μπορείς να συνδεθείς εδώ." -#: templates/registration/activation_email.html:2 #, python-format msgid "" "\n" @@ -1480,7 +1211,6 @@ msgstr "" "\n" "η ομάδα του volunteer-planner.org\n" -#: templates/registration/activation_email.txt:2 #, python-format msgid "" "\n" @@ -1513,89 +1243,74 @@ msgstr "" "\n" "η ομάδα του volunteer-planner.org\n" -#: templates/registration/activation_email_subject.txt:1 msgid "Your volunteer-planner.org registration" msgstr "Η εγγραφή σου στο volunteer-planner.org" -#: templates/registration/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Το όνομα χρήστη και ο κωδικός πρόσβασής σου δεν ταιριάζουν. Προσπάθησε ξανά." +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Διεύθυνση email" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Κωδικός πρόσβασης" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Ξέχασες τον κωδικό πρόσβασης;" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Βοήθεια και εγγραφή" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Ο κωδικός πρόσβασης άλλαξε." -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Επιτυχής αλλαγή κωδικού πρόσβασης!" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "Διεύθυνση email" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "Η αλλαγή κωδικού πρόσβασης ολοκληρώθηκε" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "Σύνδεση" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "Ο κωδικός πρόσβασης άλλαξε. Μπορείς τώρα να συνδεθείς ξανά %(login_link)s ." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Πληκτρολόγησε καινούριο κωδικό πρόσβασης." -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "Πληκτρολόγησε τον καινούριο κωδικό πρόσβασης για να αλλάξεις τον παλιό." -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Αλλαγή κωδικού πρόσβασης" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Σου στείλαμε email με έναν σύνδεσμο για να αλλάξεις τον κωδικό πρόσβασης. " -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Έλεγξε το email σου και κάνε κλικ στον σύνδεσμο που σου στάλθηκε για να συνεχίσεις." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1611,7 +1326,6 @@ msgstr "" "Για να αλλάξεις τον κωδικό σου, κανε κλικ στον παρακάτω σύνδεσμο ή κάνε αντιγραφή και επικόλληση\n" "στο πρόγραμμα περιήγησης που χρησιμοποιείς:" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1627,105 +1341,80 @@ msgstr "" "Φιλικά,\n" "οι διαχειριστές του %(site_name)s\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Αλλαγή κωδικού πρόσβασης" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Δεν υπάρχει πρόβλημα. Θα σου στείλουμε οδηγίες σχετικά με το πώς να αλλάξεις τον κωδικό πρόσβασης. " -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Το email ενεργοποίησης εστάλη." -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Ένα email ενεργοποίησης θα σου σταλεί στην ηλεκτρονική σου διεύθυνση." -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Επιβεβαίωσε την εγγραφή σου με το λινκ στο email που θα λάβεις. Αν δεν το έχεις λάβει σε 10 λεπτά, έλεγξε τον φάκελο της ενοχλητικής αλληλογραφίας (spam folder)" -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Κάνε εγγραφή για να αποκτήσεις λογαριασμό" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Υπάρχει ήδη κάποιος χρήστης με αυτό το όνομα χρήστη. Μπορείς να επιλέξεις κάποιο άλλο;" - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "Τα περιεχόμενο των δύο πεδίων κωδικού δεν είναι το ίδιο" - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Επανάληψη κωδικού" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Εγγραφή" +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Αυτό το πεδίο είναι υποχρεωτικό." +msgid "This must be checked." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Εισήγαγε ένα έγκυρο όνομα χρήστη. Αυτό μπορεί να περιλαμβάνει μόνο γράμματα, αριθμούς και τους χαρακτήρες @/./+/-/_ " +msgid "Sign-up" +msgstr "Εγγραφή" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Υπάρχει ήδη κάποιος χρήστης με αυτό το όνομα χρήστη. " +msgid "Ukrainian" +msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Αγγλικά" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Γερμανικά" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "Ελληνικά" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Ουγγρικά" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Σουηδικά" +msgid "Polish" +msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Σουηδικά" + msgid "Turkish" msgstr "" diff --git a/locale/en/LC_MESSAGES/django.po b/locale/en/LC_MESSAGES/django.po index beac11b8..849dfb50 100644 --- a/locale/en/LC_MESSAGES/django.po +++ b/locale/en/LC_MESSAGES/django.po @@ -1,14 +1,8 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2015-10-04 21:53+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: English (http://www.transifex.com/coders4help/volunteer-planner/language/en/)\n" @@ -17,517 +11,415 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "" + msgid "email" msgstr "" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "" -#: accounts/models.py:17 msgid "user accounts" msgstr "" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "" -#: content/admin.py:23 msgid "translation" msgstr "" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "" -#: content/admin.py:58 msgid "No translation available" msgstr "" -#: content/models.py:12 msgid "additional style" msgstr "" -#: content/models.py:18 msgid "additional flat page style" msgstr "" -#: content/models.py:19 msgid "additional flat page styles" msgstr "" -#: content/models.py:25 msgid "flat page" msgstr "" -#: content/models.py:28 msgid "language" msgstr "" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "" -#: content/models.py:36 msgid "content" msgstr "" -#: content/models.py:46 msgid "flat page translation" msgstr "" -#: content/models.py:47 msgid "flat page translations" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "" -#: news/models.py:17 msgid "subtitle" msgstr "" -#: news/models.py:21 msgid "articletext" msgstr "" -#: news/models.py:26 msgid "creation date" msgstr "" -#: news/models.py:39 msgid "news entry" msgstr "" -#: news/models.py:40 msgid "news entries" msgstr "" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "" -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "" -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -535,7 +427,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -544,7 +435,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -552,15 +442,12 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -569,11 +456,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -581,11 +466,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:72 msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "" -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "" -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "" -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1543,7 +1258,6 @@ msgid "" "into your web browser:" msgstr "" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1553,105 +1267,80 @@ msgid "" "%(site_name)s Management\n" msgstr "" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "" -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "" -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "" -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "" - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "" - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" +msgid "I have read and agree to the Privacy Policy." msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." +msgid "This must be checked." msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgid "Sign-up" msgstr "" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." +msgid "Ukrainian" msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" +msgid "Polish" msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + msgid "Turkish" msgstr "" diff --git a/locale/es/LC_MESSAGES/django.po b/locale/es/LC_MESSAGES/django.po index 7521ba1c..9d96a37a 100644 --- a/locale/es/LC_MESSAGES/django.po +++ b/locale/es/LC_MESSAGES/django.po @@ -1,8 +1,6 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. # # Translators: +# Antonio Mireles , 2016 # Ethan Jones , 2015 # Jacob Cline , 2015 # Antonio Mireles , 2016 @@ -10,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-04-13 17:27+0000\n" "Last-Translator: Antonio Mireles \n" "Language-Team: Spanish (http://www.transifex.com/coders4help/volunteer-planner/language/es/)\n" @@ -20,519 +18,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "nombre" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Apellido" + msgid "email" msgstr "correo electrónico" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "Cuentas" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "cuenta de usuario" -#: accounts/models.py:17 msgid "user accounts" msgstr "cuentas de usuarios" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "Mis turnos hoy:" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "Hoy no hay turnos." -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "Mostrar este turno de trabajo" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "Mis turnos mañana:" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "No hay turnos mañana." -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "Mis turnos pasado mañana:" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "No hay turnos pasado mañana." -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "Turnos adicionales:" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "No hay mas turnos adicionales." -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "Mostrar mis turnos de trabajo pasados" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "Mis turnos de trabajo pasados:" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "No hay turnos de trabajo pasados aun." -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "Mostrar mis turnos de trabajo futuros" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Nombre de usuario" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Nombre" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Apellido" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "Correo electrónico" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "Si eliminas tu cuenta, esta informacion sera anonimizada, y ya no va a ser posible que vuelvas a accesar Volunteer-Planner." -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "No es posible recuperar esta informacion. Si quieres volver a trabajar como voluntario, tendras que crear una nueva cuenta." -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "Eliminar Cuenta (no hay mas avisos)" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Guardar" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Editar tu cuento" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "Eliminar Cuenta" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "Tu cuenta de usuario ha sido eliminada." -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "CSS adicional" -#: content/admin.py:23 msgid "translation" msgstr "traducción" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "traducciones" -#: content/admin.py:58 msgid "No translation available" msgstr "No hay una traducción disponible" -#: content/models.py:12 msgid "additional style" msgstr "estilo adicional" -#: content/models.py:18 msgid "additional flat page style" msgstr "estilo adicional de página estática" -#: content/models.py:19 msgid "additional flat page styles" msgstr "estilos adicionales de página estática" -#: content/models.py:25 msgid "flat page" msgstr "página estática" -#: content/models.py:28 msgid "language" msgstr "idioma" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "título" -#: content/models.py:36 msgid "content" msgstr "contenido" -#: content/models.py:46 msgid "flat page translation" msgstr "traducción de página estática" -#: content/models.py:47 msgid "flat page translations" msgstr "traducciones de páginas estáticas" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Ver en el sitio" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Quitar" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "Agregar otros %(verbose_name)s" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "Editar esta página" -#: news/models.py:17 msgid "subtitle" msgstr "subtítulo" -#: news/models.py:21 msgid "articletext" msgstr "texto del artículo" -#: news/models.py:26 msgid "creation date" msgstr "fecha de creación" -#: news/models.py:39 msgid "news entry" msgstr "noticia" -#: news/models.py:40 msgid "news entries" msgstr "noticias" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "Pagina no encontrada" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "Lo sentimos, pero la pagina requerida no pudo ser encontrada." -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "Error del servidor" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "Error del Servidor (500)" -#: non_logged_in_area/templates/500.html:10 -#, fuzzy -#| msgid "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience." -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." -msgstr "Ha habido un error. Ha sido reportado a los administradores del sitio por medio de correo electronico y se debera de arreglar brevemente. Gracias por su paciencia." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Identificarse" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Empezar a ayudar" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Página principal" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Grabar" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "Acerca de nosotros" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "Patrocinador" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "Prensa" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Contactar" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "Preguntas Frecuentes" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "¡Quiero ayudar!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Inscríbase para ver dónde puede ayudar" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "¡Organice a los voluntarios!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Registrar un refugio y organice a los voluntarios" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Dónde ayudar" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Voluntarios registrados" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Horas trabajadas" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "¿Cuál es el propósito?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "¿Es usted un voluntario y quiere ofrecer su ayuda a los refugiados? Volunteer-Planner.org le muestra dónde, cuándo y cómo puede ayudar directamente en el campo." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "

    Ésta es una plataforma no comercial y libre de anuncios. Un equipo internacional de obreros en el campo, programadores, gerentes de proyectos se ofrecen como voluntarios para este proyecto y traen sus experiencias profesionales para marcar la diferencia.

    " -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "Puede ayudar en estos lugares:" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "En este momento no hay lugares que necesiten ayuda." -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Política de privacidad" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "Objetivo" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "Esta política de privacidad informa al usuario sobre la colección y el uso de los datos personales en este sitio (de aquí en adelante \"el servicio\") por el proveedor del servicio, el Beneficio e.V. (Wollankstr. 2, 13187 Berlin)" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "Esta política de privaciada se basa en la ley alemana de portección de datos (Bundesdatenschutzgesetz, BDSG) y la ley alemana telemedia (Telemediengesetz, TMG)." -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "Acceder los datos/archivos de registro del servidor" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "El proveedor de servicio (o el proveedor de su espacio web) colecciona datos sobre cada incidente de acceso al servicio y guarda estos datos de acceso en llamados archivos de registro de servidor. Los datos de acceso incluyen el nombre del sitio web visitado, los archivos accedidos, la hora y la fecha del acceso, los datos transferidos, la notificación de acceso exitoso, el tipo y el número de versión del navegador del usuario, el sistema de operación del usuario, el URL de procedencia (eso es, es sitio web que el usuario visitó anteriormente), la dirección IP del usuario, y el nombre del proveedor de Internet del usuario." -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "El proveedor de servicio utuliza los archivos de registro de servidor sólo para fines estadísticos y para la operación, la seguridad y la mejora del servicio proveído. Sin embargo, el proveedor de servicio reserva el derecho de revisar los archivos si en cualquier momento si exista una indicación de un uso ilegal del servicio." -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "El uso de los datos personales" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "Los datos personales son la información que se puede usar para identificar a una persona, eso es, cualquier dato que se puede remontar a una persona espicífica. Los datos personales incluyen el nombre, la dirección de correo electrónico o el número de teléfono del usuario. Aun los datos sobre las preferencias personales, los pasatiempos, las membresías u otros sitios web visitados cuentan como datos personales." -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "El proveedor de servicio recoge, utiliza y comperte los datos personales con terceros sólo si o se le permite hacerlo por ley o si el usuario ha dado su permiso." -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Contactar" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "Cuando el usuario contacta al proveedor de servicio (por ejemplo por correo electrónico o por otra forma de contacto), los datos que el usuario provee se guardan para processar la consulta y para contestar preguntas de seguimiento potenciales futuras." -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "Los cookies son archivos pequeños que se guardan en el dispositvo del usuario (su ordenador, su smartphone, etcétera) con información espicífica sobre ese dispositivo. Pueden tener varios propósitos: los cookies pueden usarse para mejorar la experiencia del usuario (por ejemplo, guardando y \"recordando\" las credenciales para iniciar una sesión). Los cookies también pueden usarse para recoger datos estadísticos que permiten que el proveedor de servicio analice el uso del usuario del sitio web con fines de mejorar el servicio." -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "El usuario puede personalizar el uso de los cookies. La mayor parte de los navegadores web pueden configurarse para restringir o aun impedir por completo el almacenamiento de los cookies. Sin embargo, el proveedor de servicio observa que tales impedimentos pueden tener un impacto negativo con respecto a la experiencia del usuario y la funcionalidad del sitio web." -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "El usuario puede personalizar la función de los cookies de muchos anunciantes de web visitando o el sitio web americano %(us_url)s o el sitio web europeo %(eu_url)s." -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Inscripción" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "Los datos que el usuario provee durante la inscripción le permiten usar el servicio. El proveedor de servicio puede informar al usuario por medio de correo electrónico sobre la información relevante al servicio o la inscripción, tal como la información sobre los cambios que el servicio experimenta o la información técnica (véase también la siguiente sección)." -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "Los formularios de la inscripción y el perfíl del usuario muestran los datos que se recogen y se guardan. Estos datos incluyen, entre otros, el nombre, el apellido y la dirección de correo electrónico del usuario." -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "Comunicaciones por correo electrónico / Boletín" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "Cuando se inscribe para una cuenta con el servicio, el usuario da permiso tanto para recibir comunicaciones por correo electrónico como para recibir boletines por correo electrónico." -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "Las comunicaciones por correo electrónico informan al usuario de ciertos eventos que están relacionados con el uso del servicio del usuario. Junto con el boletín, el proveedor de servicio envía al usuario información general sobre el proveedor y su(s) servicio(s) ofrecido(s)." -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "Si el usuario desea revocar su permiso para recibir correos electrónicos, debe cancelar su cuenta de usuario." -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Google Analytics" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "Este sitio web utiliza Google Analytics, un servico analítico web que Google, Inc. (“Google”) provee. Google Analytics utiliza “cookies”, que son archivos de texto que se integran en el dispositivo del usuario, para ayudar al sitio web a analizar cómo utilizan el sitio los usuarios. La información generada por el cookie sobre el uso del sitio web del usuario se transmitirá a Google y se guardará en los servidores de Google que se encuentran en Estados Unidos." -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "En el caso de que esté activado el anonimato de IP en este sitio web, la dirección IP del usuario será truncada dentro del área de los Estados miembros de la Unión Europea u otros partes del acuerdo sobre el Espacio Económico Europeo. Sólo en los casos excepcionales, la dirección IP entera se transmitirá al servidor de Google en Estados Unidos para ser truncado allí. El anonimato de IP está activado en este sitio web." -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "Google utilizará esta información de parte del director de este sitio web con el propósito de evaluar su uso de este sitio web, compilar informes sobre la actividad del sitio web para los directores y proveerles los servicios que están relacionados con la actividad del sitio web y el uso del Internet." -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "La dirección IP, que el navegador del usuario transmite de acuerdo con el ámbito de Google Analytics, no se asociará con ninguno de los datos que tiene Google. El usuario puede rechazar el uso de las cookies ajustando la configuración de su navegador. Sin embargo, se debe notar que si el usuario lo hace, es posible que no pueda utilizar todas las funciones de este sitio de web. El usuario también puede optar que en el futuro Google Analytics no pueda monitorizarlo descargando e instalando el Complemento de inhabilitación para navegadores de Google Analytics: %(optout_plugin_url)s." -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "haga clic en este enlace" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "Como alternativa al complemento para el navegador o dentro de los navegadores para los aparatos móviles, el usuario puede %(optout_javascript)s para poder optar que Google Analytics no pueda monitorizarlo en el futuro dentro de este sitio de web (optar por no ser monitorizado sólo se aplica al navegador en el que el usuario lo establezca y dentro de este dominio). Una cookie se guardará en el aparato del usuario, lo cual significa que el usuario tendrá que hacer clic en este enlace de nuevo si elimina sus cookies." -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "Revocación, cambios, correcciones y actualizaciones" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "Al inscribirse y sin cargo, el usario tiene el derecho de estar informado sobre cuáles de los datos personales de él se han guardado. Además, el usario puede pedir que sean corregidos los datos incorrectos, y que se suspendan o se eliminen sus datos personales con tal de que no haya una obligación legal de retener los datos." -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "Basada en la muestra de la política de privacidad del abogado Thomas Schwenke - I LAW it" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "ventajas" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "ahorrar tiempo" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "mejorar la autoorganización de los voluntarios" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -543,7 +437,6 @@ msgstr "" "los voluntarios se dividen más eficazmente en turnos,\n" "los ayudantes mismos pueden anticipar más facilmente los atajos temporales" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -556,7 +449,6 @@ msgstr "" "o las personas coordinantes por medio de un\n" "cartero automático" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -567,15 +459,12 @@ msgstr "" "cuanto más albergues y campamentos que se organizan con nosotros, más voluntarios participarán\n" "y todas las instalaciones se beneficiarán de un grupo de voluntarios motivados" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "gratis y sin precio" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "La ayuda correcta al tiempo correcto en el lugar correcto" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -588,11 +477,9 @@ msgstr "" "¡Volunteer-planner intenta resolver este problema!
    \n" "

    " -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "gratis, sin anuncios" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -603,238 +490,165 @@ msgstr "" "

    Un grupo de profesionales voluntarios de los áreas del desarrollo de software, la gestión de proyectos, el diseño y la mercadotecnia construyeron esta plataforma.\n" "El código es abierto para el uso no comercial. Los datos privados (las direcciones de correo electrónico, los datos del perfil, etc.) y no se compartirá con un tercero.

    " -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "¡Contáctenos!" -#: non_logged_in_area/templates/shelters_need_help.html:72 -#, fuzzy -#| msgid "" -#| "\n" -#| " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" -#| " " msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" " " msgstr "" -"\n" -"...tal vez con un borrador adjunto de los turnos que quiere ver en volunteer-planner. Por favor escriba a onboarding@volunteer-planner.org" -#: organizations/admin.py:128 organizations/admin.py:130 msgid "edit" msgstr "editar" -#: organizations/admin.py:202 organizations/admin.py:239 -#: organizations/models.py:79 organizations/models.py:148 -msgid "short description" -msgstr "descripción breve" - -#: organizations/admin.py:208 organizations/admin.py:245 -#: organizations/admin.py:311 organizations/admin.py:335 -#: organizations/models.py:82 organizations/models.py:151 -#: organizations/models.py:291 organizations/models.py:316 msgid "description" msgstr "descripción " -#: organizations/admin.py:214 organizations/admin.py:251 -#: organizations/models.py:85 organizations/models.py:154 msgid "contact info" msgstr "información de contacto" -#: organizations/models.py:29 +msgid "organizations" +msgstr "organizaciones" + msgid "by invitation" msgstr "por invitación" -#: organizations/models.py:30 msgid "anyone (approved by manager)" msgstr "quien sea (aprobado por el gerente)" -#: organizations/models.py:31 msgid "anyone" msgstr "quien sea" -#: organizations/models.py:37 msgid "rejected" msgstr "rechazado" -#: organizations/models.py:38 msgid "pending" msgstr "pendiente" -#: organizations/models.py:39 msgid "approved" msgstr "aprobado" -#: organizations/models.py:45 msgid "admin" msgstr "administración" -#: organizations/models.py:46 msgid "manager" msgstr "gerente" -#: organizations/models.py:47 msgid "member" msgstr "miembro" -#: organizations/models.py:52 msgid "role" msgstr "papel" -#: organizations/models.py:56 msgid "status" msgstr "estado" -#: organizations/models.py:74 organizations/models.py:143 -#: organizations/models.py:288 organizations/models.py:313 places/models.py:20 -#: scheduletemplates/models.py:13 msgid "name" msgstr "nombre" -#: organizations/models.py:88 organizations/models.py:169 msgid "address" msgstr "dirección" -#: organizations/models.py:97 organizations/models.py:185 places/models.py:21 msgid "slug" msgstr "URL semántica" -#: organizations/models.py:102 organizations/models.py:195 msgid "join mode" msgstr "forma de unirse" -#: organizations/models.py:103 msgid "Who can join this organization?" msgstr "¿Quién puede unirse a esta organización?" -#: organizations/models.py:106 organizations/models.py:139 -#: organizations/models.py:232 msgid "organization" msgstr "organización" -#: organizations/models.py:107 -msgid "organizations" -msgstr "organizaciones" - -#: organizations/models.py:111 organizations/models.py:214 -#: organizations/models.py:299 organizations/models.py:324 -#, python-brace-format -msgid "{name}" -msgstr "{name}" - -#: organizations/models.py:132 msgid "disabled" msgstr "inhabilitado" -#: organizations/models.py:133 msgid "enabled (collapsed)" msgstr "habilitado (derrumbado)" -#: organizations/models.py:134 msgid "enabled" msgstr "habilitado" -#: organizations/models.py:165 places/models.py:132 msgid "place" msgstr "lugar" -#: organizations/models.py:174 msgid "postal code" msgstr "código postal" -#: organizations/models.py:179 msgid "Show on map of all facilities" msgstr "Mostrar en un mapa todas las instalaciones" -#: organizations/models.py:181 msgid "latitude" msgstr "latitud" -#: organizations/models.py:183 msgid "longitude" msgstr "longitud" -#: organizations/models.py:190 msgid "timeline" msgstr "cronología" -#: organizations/models.py:196 msgid "Who can join this facility?" msgstr "¿Quién puede unirse a esta instalación?" -#: organizations/models.py:199 organizations/models.py:258 -#: organizations/models.py:283 organizations/models.py:309 -#: scheduler/models.py:51 scheduletemplates/models.py:16 msgid "facility" msgstr "instalación" -#: organizations/models.py:200 msgid "facilities" msgstr "instalaciones" -#: organizations/models.py:237 msgid "organization member" msgstr "miembro de la organización" -#: organizations/models.py:238 msgid "organization members" msgstr "miembros de la organización" -#: organizations/models.py:242 #, python-brace-format msgid "{username} at {organization_name} ({user_role})" msgstr "{username} con {organization_name} ({user_role})" -#: organizations/models.py:264 msgid "facility member" msgstr "miembro de la instalación" -#: organizations/models.py:265 msgid "facility members" msgstr "miembros de la instalación" -#: organizations/models.py:269 #, python-brace-format msgid "{username} at {facility_name} ({user_role})" msgstr "{username} con {facility_name} ({user_role})" -#: organizations/models.py:294 scheduler/models.py:46 -#: scheduletemplates/models.py:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:55 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:42 +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + msgid "workplace" msgstr "lugar de trabajo" -#: organizations/models.py:295 msgid "workplaces" msgstr "lugares de trabajo" -#: organizations/models.py:319 scheduler/models.py:44 -#: scheduletemplates/models.py:37 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:41 msgid "task" msgstr "tarea" -#: organizations/models.py:320 msgid "tasks" msgstr "tareas" -#: organizations/templates/emails/membership_approved.txt:2 +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + #, python-format msgid "Hello %(username)s," msgstr "Hola %(username)s," -#: organizations/templates/emails/membership_approved.txt:6 #, python-format msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." msgstr "Su solicitud de membresía con %(facility_name)s fue aprobada. Ya puede inscribirse para los turnos restringidos de esta instalación. " -#: organizations/templates/emails/membership_approved.txt:10 msgid "" "Yours,\n" "the volunteer-planner.org Team" @@ -842,289 +656,278 @@ msgstr "" "Atentamente,\n" "el equipo de volunteer-planner.org" -#: organizations/templates/facility.html:9 -#: organizations/templates/organization.html:9 -#: scheduler/templates/helpdesk_breadcrumps.html:6 -#: scheduler/templates/helpdesk_single.html:144 -#: scheduler/templates/shift_details.html:33 msgid "Helpdesk" msgstr "Ayuda" -#: organizations/templates/facility.html:41 -#: organizations/templates/partials/compact_facility.html:31 +msgid "Show on map" +msgstr "Mostrar en el mapa" + msgid "Open Shifts" msgstr "Turnos disponibles" -#: organizations/templates/facility.html:50 -#: scheduler/templates/helpdesk.html:70 msgid "News" msgstr "Noticias" -#: organizations/templates/manage_members.html:18 msgid "Error" msgstr "Error" -#: organizations/templates/manage_members.html:18 msgid "You are not allowed to do this." msgstr "No se le permite hacer esto." -#: organizations/templates/manage_members.html:43 #, python-format msgid "Members in %(facility)s" msgstr "Miembros en %(facility)s" -#: organizations/templates/manage_members.html:70 msgid "Role" msgstr "Papel" -#: organizations/templates/manage_members.html:73 msgid "Actions" msgstr "Acciones" -#: organizations/templates/manage_members.html:98 -#: organizations/templates/manage_members.html:105 msgid "Block" msgstr "Bloquear" -#: organizations/templates/manage_members.html:102 msgid "Accept" msgstr "Aceptar" -#: organizations/templates/organization.html:26 msgid "Facilities" msgstr "Instalaciones" -#: organizations/templates/partials/compact_facility.html:23 -#: scheduler/templates/geographic_helpdesk.html:76 -#: scheduler/templates/helpdesk.html:68 msgid "Show details" msgstr "Mostrar los detalles" -#: organizations/views.py:137 msgid "volunteer-planner.org: Membership approved" msgstr "volunteer-planner.org: Se aprobó la membresía" -#: osm_tools/templatetags/osm_links.py:17 #, python-brace-format msgctxt "maps search url pattern" msgid "https://www.openstreetmap.org/search?query={location}" msgstr "" -#: places/models.py:69 places/models.py:84 msgid "country" msgstr "país" -#: places/models.py:70 msgid "countries" msgstr "paises" -#: places/models.py:87 places/models.py:106 msgid "region" msgstr "región" -#: places/models.py:88 msgid "regions" msgstr "regiones" -#: places/models.py:109 places/models.py:129 msgid "area" msgstr "área" -#: places/models.py:110 msgid "areas" msgstr "áreas" -#: places/models.py:133 msgid "places" msgstr "lugares" -#: scheduler/admin.py:28 +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + msgid "number of volunteers" msgstr "número de voluntarios" -#: scheduler/admin.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:40 msgid "volunteers" msgstr "voluntarios" -#: scheduler/apps.py:8 -msgid "Scheduler" -msgstr "Planificador" +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "horarios" -#: scheduler/models.py:41 scheduletemplates/models.py:34 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:53 msgid "number of needed volunteers" msgstr "número de voluntarios que se necesitan" -#: scheduler/models.py:53 scheduletemplates/admin.py:33 -#: scheduletemplates/models.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:56 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:43 msgid "starting time" msgstr "hora de inicio" -#: scheduler/models.py:55 scheduletemplates/admin.py:36 -#: scheduletemplates/models.py:47 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:57 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:44 msgid "ending time" msgstr "hora de terminar" -#: scheduler/models.py:63 scheduletemplates/models.py:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:58 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:45 msgid "members only" msgstr "sólo los miembros" -#: scheduler/models.py:65 scheduletemplates/models.py:56 msgid "allow only members to help" msgstr "hacer que solamente los miembros ayuden" -#: scheduler/models.py:71 msgid "shift" msgstr "turno" -#: scheduler/models.py:72 scheduletemplates/admin.py:283 msgid "shifts" msgstr "turnos " -#: scheduler/models.py:86 scheduletemplates/models.py:77 #, python-brace-format msgid "the next day" msgid_plural "after {number_of_days} days" msgstr[0] "El próximo día" msgstr[1] "después de {number_of_days} días" -#: scheduler/models.py:130 msgid "shift helper" msgstr "ayudante de turno" -#: scheduler/models.py:131 msgid "shift helpers" msgstr "ayudantes de turno" -#: scheduler/templates/geographic_helpdesk.html:69 -msgid "Show on map" -msgstr "Mostrar en el mapa" +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "turno" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" -#: scheduler/templates/geographic_helpdesk.html:81 msgctxt "helpdesk shifts heading" msgid "shifts" msgstr "turnos" -#: scheduler/templates/geographic_helpdesk.html:113 #, python-format msgid "There are no upcoming shifts available for %(geographical_name)s." msgstr "No hay turnos futuros disponibles para %(geographical_name)s." -#: scheduler/templates/helpdesk.html:39 msgid "You can help in the following facilities" msgstr "Usted puede ayudar en las siguientes instalaciones" -#: scheduler/templates/helpdesk.html:43 -msgid "filter" -msgstr "filtrar" - -#: scheduler/templates/helpdesk.html:59 msgid "see more" msgstr "ver más" -#: scheduler/templates/helpdesk.html:82 +msgid "news" +msgstr "" + msgid "open shifts" msgstr "turnos disponibles" -#: scheduler/templates/helpdesk_single.html:6 -#: scheduler/templates/shift_details.html:24 #, python-format msgctxt "title with facility" msgid "Schedule for %(facility_name)s" msgstr "Horario para %(facility_name)s" -#: scheduler/templates/helpdesk_single.html:60 #, python-format msgid "%(starting_time)s - %(ending_time)s" msgstr "%(starting_time)s - %(ending_time)s" -#: scheduler/templates/helpdesk_single.html:172 #, python-format msgctxt "title with date" msgid "Schedule for %(schedule_date)s" msgstr "Horario para %(schedule_date)s" -#: scheduler/templates/helpdesk_single.html:185 msgid "Toggle Timeline" msgstr "Cambiar la cronología" -#: scheduler/templates/helpdesk_single.html:237 msgid "Link" msgstr "Enlace" -#: scheduler/templates/helpdesk_single.html:240 msgid "Time" msgstr "Hora" -#: scheduler/templates/helpdesk_single.html:243 msgid "Helpers" msgstr "Ayudantes" -#: scheduler/templates/helpdesk_single.html:254 msgid "Start" msgstr "Empezar" -#: scheduler/templates/helpdesk_single.html:257 msgid "End" msgstr "Terminar" -#: scheduler/templates/helpdesk_single.html:260 msgid "Required" msgstr "Necesario" -#: scheduler/templates/helpdesk_single.html:263 msgid "Status" msgstr "Estado" -#: scheduler/templates/helpdesk_single.html:266 msgid "Users" msgstr "Usuarios" -#: scheduler/templates/helpdesk_single.html:269 +msgid "Send message" +msgstr "" + msgid "You" msgstr "Usted" -#: scheduler/templates/helpdesk_single.html:321 #, python-format msgid "%(slots_left)s more" msgstr "%(slots_left)s más" -#: scheduler/templates/helpdesk_single.html:325 -#: scheduler/templates/helpdesk_single.html:406 -#: scheduler/templates/shift_details.html:134 msgid "Covered" msgstr "Cubierto" -#: scheduler/templates/helpdesk_single.html:350 -#: scheduler/templates/shift_details.html:95 +msgid "Send email to all volunteers" +msgstr "" + msgid "Drop out" msgstr "Abandonar" -#: scheduler/templates/helpdesk_single.html:360 -#: scheduler/templates/shift_details.html:105 msgid "Sign up" msgstr "Inscribirse" -#: scheduler/templates/helpdesk_single.html:371 msgid "Membership pending" msgstr "La membresía está pendiente" -#: scheduler/templates/helpdesk_single.html:378 msgid "Membership rejected" msgstr "Se rechazó la membresía" -#: scheduler/templates/helpdesk_single.html:385 msgid "Become member" msgstr "Hacerse miembro" -#: scheduler/templates/shift_cancellation_notification.html:1 +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + #, python-format msgid "" "\n" @@ -1142,11 +945,24 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/templates/shift_details.html:108 msgid "Members only" msgstr "Sólo miembros" -#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + #, python-format msgid "" "\n" @@ -1170,282 +986,190 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/views.py:169 msgid "The submitted data was invalid." msgstr "Los datos que fueron enviados no son válidos." -#: scheduler/views.py:177 msgid "User account does not exist." msgstr "Esta cuenta de usario no existe." -#: scheduler/views.py:201 msgid "A membership request has been sent." msgstr "Se ha enviado una solicitud para la membresía." -#: scheduler/views.py:214 msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" msgstr "No podemos añadirle a este turno porque ya se ha inscrito para otros turnos del mismo horario:" -#: scheduler/views.py:223 msgid "We can't add you to this shift because there are no more slots left." msgstr "No podemos añadirle a este turno porque ya no hay un horario disponible." -#: scheduler/views.py:230 msgid "You were successfully added to this shift." msgstr "Usted fue añadido exitosamente a este turno." -#: scheduler/views.py:234 -msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" msgstr "" -#: scheduler/views.py:244 #, python-brace-format msgid "You already signed up for this shift at {date_time}." msgstr "Usted ya se ha inscrito para el turno del {date_time} " -#: scheduler/views.py:256 msgid "You successfully left this shift." msgstr "Usted abandonó exitosamente este turno." -#: scheduletemplates/admin.py:176 +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + #, python-brace-format msgid "A shift already exists at {date}" msgid_plural "{num_shifts} shifts already exists at {date}" -msgstr[0] "Un turno ya existe en el {date}" -msgstr[1] "{num_shifts} turnos ya existen en el {date}" +msgstr[0] "" +msgstr[1] "" -#: scheduletemplates/admin.py:232 #, python-brace-format msgid "{num_shifts} shift was added to {date}" msgid_plural "{num_shifts} shifts were added to {date}" -msgstr[0] "{num_shifts} turno fue añadido al {date}" -msgstr[1] "{num_shifts} turnos fueron añadidos al {date}" +msgstr[0] "" +msgstr[1] "" -#: scheduletemplates/admin.py:244 msgid "Something didn't work. Sorry about that." msgstr "Algo no funcionó. Sentimos que haya ocurrido." -#: scheduletemplates/admin.py:277 -msgid "slots" -msgstr "horarios" - -#: scheduletemplates/admin.py:289 msgid "from" msgstr "de" -#: scheduletemplates/admin.py:302 msgid "to" msgstr "a" -#: scheduletemplates/models.py:21 msgid "schedule templates" msgstr "formularios de horario" -#: scheduletemplates/models.py:22 scheduletemplates/models.py:30 msgid "schedule template" msgstr "formulario de horario" -#: scheduletemplates/models.py:50 msgid "days" msgstr "días" -#: scheduletemplates/models.py:62 msgid "shift templates" msgstr "formularios de turno" -#: scheduletemplates/models.py:63 msgid "shift template" msgstr "formulario de turno" -#: scheduletemplates/models.py:97 #, python-brace-format msgid "{task_name} - {workplace_name}" msgstr "{task_name} - {workplace_name}" -#: scheduletemplates/models.py:101 -#, python-brace-format -msgid "{task_name}" -msgstr "{task_name}" - -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:32 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:6 msgid "Home" msgstr "Inicio" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:46 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:14 msgid "Apply Template" msgstr "Aplicar el formulario" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:51 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:38 msgid "no workplace" msgstr "ningún lugar de trabajo" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:52 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:39 msgid "apply" msgstr "aplicar" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:61 msgid "Select a date" msgstr "Seleccione una fecha" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:66 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:125 msgid "Continue" msgstr "Continuar" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:70 msgid "Select shift templates" msgstr "Seleccionar los formularios de turno" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:22 msgid "Please review and confirm shifts to create" msgstr "Por favor repase y confirme los turnos que se van a crear" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:118 msgid "Apply" msgstr "Aplicar" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:120 msgid "Apply and select new date" msgstr "Aplicar y seleccionar nueva fecha" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save and apply template" msgstr "Guardar y aplicar el formulario" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:4 msgid "Delete" msgstr "Eliminar" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:5 msgid "Save as new" msgstr "Guardar como nuevo" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:6 msgid "Save and add another" msgstr "Guardar y añadir otro" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:7 msgid "Save and continue editing" msgstr "Guardar y seguir editando" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:17 msgid "Delete?" msgstr "¿Eliminar?" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:31 msgid "Change" msgstr "Cambiar" -#: shiftmailer/models.py:10 -msgid "last name" -msgstr "apellido" - -#: shiftmailer/models.py:11 -msgid "position" -msgstr "posición" - -#: shiftmailer/models.py:12 -msgid "organisation" -msgstr "organización" - -#: shiftmailer/templates/shifts_today.html:1 -#, python-format -msgctxt "shift today title" -msgid "Schedule for %(organization_name)s on %(date)s" -msgstr "El horario para %(organization_name)s en %(date)s" - -#: shiftmailer/templates/shifts_today.html:6 -msgid "All data is private and not supposed to be given away!" -msgstr "¡Toda la información es privada y no se debe compartir!" - -#: shiftmailer/templates/shifts_today.html:15 -#, python-format -msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" -msgstr "desde %(start_time)s a %(end_time)s siguientes %(volunteer_count)s voluntarios se han inscrito:" - -#: templates/partials/footer.html:17 #, python-format msgid "Questions? Get in touch: %(mailto_link)s" msgstr "¿Preguntas? Contáctenos: %(mailto_link)s" -#: templates/partials/management_tools.html:13 msgid "Manage" msgstr "Gestionar" -#: templates/partials/management_tools.html:28 msgid "Members" msgstr "Miembros" -#: templates/partials/navigation_bar.html:11 msgid "Toggle navigation" msgstr "Cambiar la navegación" -#: templates/partials/navigation_bar.html:46 msgid "Account" msgstr "Cuenta" -#: templates/partials/navigation_bar.html:51 msgid "My work shifts" msgstr "Mis turnos de trabajo" -#: templates/partials/navigation_bar.html:56 msgid "Help" msgstr "Ayuda" -#: templates/partials/navigation_bar.html:59 msgid "Logout" msgstr "Cerrar sesión" -#: templates/partials/navigation_bar.html:63 msgid "Admin" msgstr "Administración" -#: templates/partials/region_selection.html:18 msgid "Regions" msgstr "Regiones" -#: templates/registration/activate.html:5 msgid "Activation complete" msgstr "La activación está finalizada" -#: templates/registration/activate.html:7 msgid "Activation problem" msgstr "Problema de activación" -#: templates/registration/activate.html:15 msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" msgid "login" msgstr "Iniciar sesión" -#: templates/registration/activate.html:17 #, python-format msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." msgstr "Gracias %(account)s, la activación está finalizada! Ya puede %(login_link)s usando el nombre de usario y contraseña que estableció al de inscribirse." -#: templates/registration/activate.html:25 msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." msgstr "Oops & ndash; O ya activó su cuenta, o la clave de activación no es válida o se ha caducado. " -#: templates/registration/activation_complete.html:3 msgid "Activation successful!" msgstr "¡La activación fue exitosa!" -#: templates/registration/activation_complete.html:9 msgctxt "Activation successful page" msgid "Thank you for signing up." msgstr "Gracias por inscribirse." -#: templates/registration/activation_complete.html:12 msgctxt "Login link text on activation success page" msgid "You can login here." msgstr "Puede iniciar una sesión aquí." -#: templates/registration/activation_email.html:2 #, python-format msgid "" "\n" @@ -1479,7 +1203,6 @@ msgstr "" "\n" "el equipo de volunteer-planner.org\n" -#: templates/registration/activation_email.txt:2 #, python-format msgid "" "\n" @@ -1512,89 +1235,74 @@ msgstr "" "\n" "el equipo de volunteer-planner.org\n" -#: templates/registration/activation_email_subject.txt:1 msgid "Your volunteer-planner.org registration" msgstr "Su inscripción con volunteer-planner.org" -#: templates/registration/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Su nombre de usario y contraseña no coinciden. Inténtelo de nuevo por favor." +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Correo electrónico" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Contraseña" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "¿Se le olvidó la contraseña?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Ayuda e inscripción" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "La contraseña cambió" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "¡La contraseña fue cambiada exitosamente!" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Cambiar la contraseña" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "Correo electrónico" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Cambiar la contraseña" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "El restablecimineto de la contraseña está finalizado" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "Iniciar sesión" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "¡Su contraseña se ha restablecido! Ya puede %(login_link)s de nuevo." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Introduzca nueva contraseña" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "Introduzca su nueva contraseña abajo para restablecer su contraseña" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Restablecer la contraseña" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Le enviamos un correo electrónico con un enlace para restablecer su contraseña." -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Por favor revise su buzón de correo electrónico y haga clic en el enlace para continuar." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1611,7 +1319,6 @@ msgstr "" "Para restablecer su contraseña, por favor o haga clic en el siguiente enlace o cópielo y péguelo\n" "y ábrelo en su navegador de internet." -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1626,105 +1333,80 @@ msgstr "" "Saludos cordiales,\n" "%(site_name)s Gerencia\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Restablecer la contraseña" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "¡No hay problema! Le enviaremos algunas instrucciones sobre cómo restablecer su contraseña." -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "El correo electrónico de activación fue enviado" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Un correo electrónico de activación será enviado a su dirección de correo electrónico. " -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Por favor confirme que se haya inscrito siguiendo el enlace en el correo electrónico. Si no lo ha recibido en 10 minutos, búsquelo en la carpeta del correo basura." -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Inscríbase para una cuenta" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "Puedes crear una nueva cuenta de usuario aqui. Si ya tienes una cuenta de usuario dale click a LOGIN en la esquina superior derecha." -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "Crear una nueva cuenta" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "Volunteer-Planner y albergues te mandaran correos electronicos acerca de tus turnos de trabajo." -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Ese nombre de usario ya existe. Escoja otro nombre de usario por favor." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "Tu nombre de usuario va a ser visible a otros usuarios. No uses espacios o caracteres especiales." -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "Los dos campos para la contraseña no coinciden." - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Repita la contraseña" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Inscribirse" +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Este campo es obligatorio." +msgid "This must be checked." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Introduzca un nombre de usario válido. Sólo puede contener letras, numeros y los simbolos @/./+/-/_." +msgid "Sign-up" +msgstr "Inscribirse" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Un usario con el mismo nombre de usario ya existe." +msgid "Ukrainian" +msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Inglés" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Alemán" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "Griego" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Húngaro" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Sueco" +msgid "Polish" +msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Sueco" + msgid "Turkish" msgstr "" diff --git a/locale/es_MX/LC_MESSAGES/django.po b/locale/es_MX/LC_MESSAGES/django.po new file mode 100644 index 00000000..02df45fd --- /dev/null +++ b/locale/es_MX/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Spanish (Mexico) (http://www.transifex.com/coders4help/volunteer-planner/language/es_MX/)\n" +"Language: es_MX\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/fa/LC_MESSAGES/django.po b/locale/fa/LC_MESSAGES/django.po new file mode 100644 index 00000000..3d601138 --- /dev/null +++ b/locale/fa/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Persian (http://www.transifex.com/coders4help/volunteer-planner/language/fa/)\n" +"Language: fa\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 9cd8cddd..03ec0f5a 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -1,19 +1,16 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. # # Translators: # Caroline Elis , 2015 -# Christoph, 2015 # Dolfeus , 2016 # helene bernard , 2016 # johannes lacher , 2015 # maud nalpas , 2015 +# Maxi Krause , 2017 msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-12-08 20:50+0000\n" "Last-Translator: Dolfeus \n" "Language-Team: French (http://www.transifex.com/coders4help/volunteer-planner/language/fr/)\n" @@ -23,519 +20,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" -msgstr "Nom" +msgstr "Prénom" + +msgid "last name" +msgstr "Nom de famille" -#: accounts/admin.py:27 shiftmailer/models.py:13 msgid "email" msgstr "Courrier électronique" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" -msgstr "Compte utilisateur" +msgstr "Comptes utilisateur" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" -#: accounts/models.py:16 organizations/models.py:59 msgid "user account" -msgstr "Nom d'utilisateur" +msgstr "Compte d'utilisateur" -#: accounts/models.py:17 msgid "user accounts" -msgstr "Compte utilisateur" +msgstr "Comptes utilisateur" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" -msgstr "Mon créneaux aujourd'hui" +msgstr "Mes créneaux aujourd'hui" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "Pas de créneaux aujourd’hui" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" -msgstr "Plus de créneaux" +msgstr "Afficher le créneau" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "Mes créneaux demain" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "Pas de créneaux demain" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" -msgstr "Mes créneaux après demain" +msgstr "Mes créneaux après-demain" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." -msgstr "Pas de créneaux après demain" +msgstr "Pas de créneaux après-demain" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" -msgstr "Plus de créneau" +msgstr "D'autres créneaux" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." -msgstr "Ne pas proposer de créneaux supplémentaires " +msgstr "Pas de créneaux supplémentaires." -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" -msgstr "Créneaux plus tôt" +msgstr "Afficher mes créneaux anciens" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "Créneaux éffectués" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." -msgstr "Pas de créneaux éffectués" +msgstr "Pas de créneaux effectués jusqu'à présent" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" -msgstr "Mes créneaux futurs" +msgstr "Afficher mes créneaux prévus" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Nom d'utilisateur" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Prénom" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Nom de famille" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "Courrier électronique" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." -msgstr "Si vous supprimez votre compte, cette information sera rendu anonyme et il ne vous sera plus possible de vous connecter à Volunteer-Planner." +msgstr "Si vous supprimez votre compte, cette information sera anonymisée et tu ne pourras plus te connecter à Volunteer-Planner." -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." -msgstr "Il est impossible de récupérer cette information. Vous devez créer un nouveau compte si vous voulez de nouveau faire du bénévolat." +msgstr "Il est impossible de récupérer cette information. Si tu veux refaire du bénévolat, il faut créer un nouveau compte." -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "Supprimer le compte (sans confirmation supplémentaire)" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Sauvegarder" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Modifier le compte" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "Supprimer le compte" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "Votre compte a été supprimé" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "CSS supplémentaire" -#: content/admin.py:23 msgid "translation" msgstr "Traduction" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "Traductions" -#: content/admin.py:58 msgid "No translation available" msgstr "Traduction indisponible" -#: content/models.py:12 msgid "additional style" msgstr "Style supplémentaire " -#: content/models.py:18 msgid "additional flat page style" msgstr "Style supplémentaire pour la page statique" -#: content/models.py:19 msgid "additional flat page styles" msgstr "Styles supplémentaires pour la page statique" -#: content/models.py:25 msgid "flat page" msgstr "Page statique" -#: content/models.py:28 msgid "language" msgstr "Langue" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "Titre" -#: content/models.py:36 msgid "content" msgstr "Contenu" -#: content/models.py:46 msgid "flat page translation" msgstr "Traduction de la page statique" -#: content/models.py:47 msgid "flat page translations" msgstr "Traductions de la page statique" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Voir sur le site" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Supprimer" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "Ajouter un autre %(verbose_name)s" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "Modifier cette page" -#: news/models.py:17 msgid "subtitle" msgstr "Sous-titre" -#: news/models.py:21 msgid "articletext" msgstr "Texte de l'article" -#: news/models.py:26 msgid "creation date" msgstr "Date de création" -#: news/models.py:39 msgid "news entry" msgstr "Article" -#: news/models.py:40 msgid "news entries" msgstr "Articles" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "Page introuvable" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "Nous sommes désolé mais la page demandée est introuvable." -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "Erreur serveur" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" -msgstr "Erreur serveur (500)" +msgstr "Erreur de serveur (500)" -#: non_logged_in_area/templates/500.html:10 -#, fuzzy -#| msgid "There's been an error. It's been reported to the site administrators via email and should be fixed shortly. Thanks for your patience." -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." -msgstr "Une erreur est survenue. Les administrateurs du site en ont été informé par E-mail et cela devrait être réglé rapidement. Merci pour votre patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Connexion" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Offrir son aide" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Page principale" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" -msgstr "Avertissement" +msgstr "Mentions légales" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "À propos" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "Soutiens" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "Presse" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Contact" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "F.A.Q." -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Je veux aider !" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" -msgstr "Inscrivez-vous et découvrer où vous pouvez aider" +msgstr "Inscris-toi pour voir où tu peux aider" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" -msgstr "Proposer du bénévolat !" +msgstr "Coordonner le travail des bénévoles !" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" -msgstr "Inscrire un refuge et proposer du bénévolat " +msgstr "Inscrire un refuge et coordonner le bénévolat " -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" -msgstr "Lieux pour aider" +msgstr "Lieux où aider" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" -msgstr "Inscription des volontaires" +msgstr "Volontaires inscrits" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Heures travaillées" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Qu'est ce qu'un agenda de bénévolat ?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." -msgstr "Vous êtes bénévole et voulez aider des réfugiés ? Volunteer-Planner.org vous montre où, quand et comment aider directement sur le terrain." +msgstr "Tu es bénévole et voeux aider des réfugiés ? Volunteer-Planner.org te montre où, quand et comment aider directement sur le terrain." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "

    Cette plateforme est non-commerciale et sans publicités. Une équipe internationale d'acteurs de terrain, programmeurs, gestionnaires de projet et designers s'investissent bénévolement dans ce projet et y apportent leur expérience professionnelle pour faire la différence.

    " -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" -msgstr "Vous pouvez aider à ces endroits :" +msgstr "Tu peux aider à ces endroits :" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." -msgstr "Il n'y a pour le moment aucun lieu où aider." +msgstr "Il n'y a pour le moment aucun lieu qui a besoin d'aide." -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Politique de confidentialité" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "Rayon d'action" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "Données d'accès / fichiers journaux des serveurs" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "Utilisation des données personnelles" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Contact" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Inscription" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "Notifications par E-mail / Newsletter" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Google Analytics" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "cliquer sur ce lien" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "Révocation, Modification, Corrections et Mises à jours" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "Avantages" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "Gagner du temps" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" -msgstr "Améliore l'auto-organisation des bénévoles" +msgstr "Améliorer l'auto-organisation des bénévoles" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -543,10 +436,9 @@ msgid "" " " msgstr "" "\n" -"les bénévoles se répartissent les créneaux avec plus d'efficacité,\n" -"les manques temporaires peuvent plus facilement être anticipés par les bénévoles eux-même" +"pour plus d'efficacité, il vaut mieux que les bénévoles se regroupent eux-mêmes en équipes,\n" +"les manques temporaires peuvent plus facilement être anticipés par les bénévoles eux-mêmes" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -555,7 +447,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -566,15 +457,12 @@ msgstr "" "plus il y a de refuges et de camps organisés avec nous, plus il y a de bénévoles qui nous rejoignent\n" "et tous les établissements bénéficient d'un ensemble de bénévoles motivés" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "gratuitement" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" -msgstr "Le soutient nécessaire au bon endroit au bon moment" +msgstr "Le soutien nécessaire au bon endroit et au bon moment" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -587,11 +475,9 @@ msgstr "" "volunteer-planner essaie de résoudre ce problème !
    \n" "

    " -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "gratuitement, sans publicités" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -602,527 +488,444 @@ msgstr "" "

    La plateforme a été construite par un groupe bénévole de professionnels dans les milieux du développement logiciel, de la gestion de projets, du design et du marketing. Le code est open-source pour un usage non-commercial.\n" "Les données privées (adresse E-mail, données du profil, etc...) ne sont communiqués à aucune tierce-partie.

    " -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" -msgstr "Contactez-nous !" - -#: non_logged_in_area/templates/shelters_need_help.html:72 -#, fuzzy -#| msgid "" -#| "\n" -#| " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" -#| " " +msgstr "Contacte-nous !" + msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" " " msgstr "" -"\n" -"...éventuellement en joignant un brouillon des créneaux que voudriez proposer sur volunteer-planner. Écrire à onboarding@volunteer-planner.org" -#: organizations/admin.py:128 organizations/admin.py:130 msgid "edit" msgstr "Modifier" -#: organizations/admin.py:202 organizations/admin.py:239 -#: organizations/models.py:79 organizations/models.py:148 -msgid "short description" -msgstr "Courte description" - -#: organizations/admin.py:208 organizations/admin.py:245 -#: organizations/admin.py:311 organizations/admin.py:335 -#: organizations/models.py:82 organizations/models.py:151 -#: organizations/models.py:291 organizations/models.py:316 msgid "description" msgstr "Description" -#: organizations/admin.py:214 organizations/admin.py:251 -#: organizations/models.py:85 organizations/models.py:154 msgid "contact info" msgstr "Infos de contact" -#: organizations/models.py:29 +msgid "organizations" +msgstr "Organisations" + msgid "by invitation" msgstr "Par invitation" -#: organizations/models.py:30 msgid "anyone (approved by manager)" msgstr "Tout le monde (approuvé par un manager)" -#: organizations/models.py:31 msgid "anyone" msgstr "Tout le monde" -#: organizations/models.py:37 msgid "rejected" msgstr "Rejeté" -#: organizations/models.py:38 msgid "pending" msgstr "En attente" -#: organizations/models.py:39 msgid "approved" msgstr "Approuvé" -#: organizations/models.py:45 msgid "admin" msgstr "Administrateur" -#: organizations/models.py:46 msgid "manager" msgstr "Manager" -#: organizations/models.py:47 msgid "member" msgstr "Membre" -#: organizations/models.py:52 msgid "role" msgstr "Rôle" -#: organizations/models.py:56 msgid "status" -msgstr "Status" +msgstr "Statut " -#: organizations/models.py:74 organizations/models.py:143 -#: organizations/models.py:288 organizations/models.py:313 places/models.py:20 -#: scheduletemplates/models.py:13 msgid "name" msgstr "Nom" -#: organizations/models.py:88 organizations/models.py:169 msgid "address" msgstr "Adresse" -#: organizations/models.py:97 organizations/models.py:185 places/models.py:21 msgid "slug" msgstr "Identifiant unique" -#: organizations/models.py:102 organizations/models.py:195 msgid "join mode" msgstr "Mode d'accès" -#: organizations/models.py:103 msgid "Who can join this organization?" msgstr "Qui peut rejoindre cette organisation ?" -#: organizations/models.py:106 organizations/models.py:139 -#: organizations/models.py:232 msgid "organization" msgstr "Organisation" -#: organizations/models.py:107 -msgid "organizations" -msgstr "Organisations" - -#: organizations/models.py:111 organizations/models.py:214 -#: organizations/models.py:299 organizations/models.py:324 -#, python-brace-format -msgid "{name}" -msgstr "{name}" - -#: organizations/models.py:132 msgid "disabled" msgstr "Désactivé" -#: organizations/models.py:133 msgid "enabled (collapsed)" msgstr "Activé (masqué)" -#: organizations/models.py:134 msgid "enabled" msgstr "Activé" -#: organizations/models.py:165 places/models.py:132 msgid "place" msgstr "Lieu" -#: organizations/models.py:174 msgid "postal code" msgstr "Code postal" -#: organizations/models.py:179 msgid "Show on map of all facilities" msgstr "Afficher sur la carte de tous les établissements" -#: organizations/models.py:181 msgid "latitude" msgstr "Latitude" -#: organizations/models.py:183 msgid "longitude" msgstr "Longitude" -#: organizations/models.py:190 msgid "timeline" msgstr "historique" -#: organizations/models.py:196 msgid "Who can join this facility?" msgstr "Qui peut rejoindre cet établissement ?" -#: organizations/models.py:199 organizations/models.py:258 -#: organizations/models.py:283 organizations/models.py:309 -#: scheduler/models.py:51 scheduletemplates/models.py:16 msgid "facility" msgstr "Etablissement" -#: organizations/models.py:200 msgid "facilities" msgstr "Etablissements" -#: organizations/models.py:237 msgid "organization member" msgstr "Membre de l'organisation" -#: organizations/models.py:238 msgid "organization members" msgstr "Membres de l'organisation" -#: organizations/models.py:242 #, python-brace-format msgid "{username} at {organization_name} ({user_role})" msgstr "{username} à {organization_name} ({user_role})" -#: organizations/models.py:264 msgid "facility member" msgstr "Membre de l'établissement" -#: organizations/models.py:265 msgid "facility members" msgstr "Membres de l'établissement" -#: organizations/models.py:269 #, python-brace-format msgid "{username} at {facility_name} ({user_role})" msgstr "{username} à {facility_name} ({user_role})" -#: organizations/models.py:294 scheduler/models.py:46 -#: scheduletemplates/models.py:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:55 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:42 +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + msgid "workplace" msgstr "Lieu de travail" -#: organizations/models.py:295 msgid "workplaces" msgstr "Lieux de travail" -#: organizations/models.py:319 scheduler/models.py:44 -#: scheduletemplates/models.py:37 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:41 msgid "task" msgstr "Tâche" -#: organizations/models.py:320 msgid "tasks" msgstr "Tâches" -#: organizations/templates/emails/membership_approved.txt:2 +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + #, python-format msgid "Hello %(username)s," msgstr "Bonjour %(username)s," -#: organizations/templates/emails/membership_approved.txt:6 #, python-format msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." -msgstr "Votre demande d'inscription à %(facility_name)s a été approuvé. Vous pouvez maintenant vous inscrire aux créneaux à accès restreint de cet établissement." +msgstr "Ta demande d'inscription à %(facility_name)s a été approuvé. Tu peux maintenant t'inscrire aux créneaux à accès restreint de cet établissement." -#: organizations/templates/emails/membership_approved.txt:10 msgid "" "Yours,\n" "the volunteer-planner.org Team" msgstr "" -"Bien à vous,\n" +"Cordialement,\n" "l'équipe de volunteer-planner.org" -#: organizations/templates/facility.html:9 -#: organizations/templates/organization.html:9 -#: scheduler/templates/helpdesk_breadcrumps.html:6 -#: scheduler/templates/helpdesk_single.html:144 -#: scheduler/templates/shift_details.html:33 msgid "Helpdesk" msgstr "Bureau du bénévolat" -#: organizations/templates/facility.html:41 -#: organizations/templates/partials/compact_facility.html:31 +msgid "Show on map" +msgstr "Montrer sur la carte" + msgid "Open Shifts" msgstr "Ouvrir la liste de créneaux" -#: organizations/templates/facility.html:50 -#: scheduler/templates/helpdesk.html:70 msgid "News" msgstr "Nouvelles" -#: organizations/templates/manage_members.html:18 msgid "Error" msgstr "Erreur" -#: organizations/templates/manage_members.html:18 msgid "You are not allowed to do this." -msgstr "Vous n'êtes pas autorisé à faire ça." +msgstr "Vous n'êtes pas autorisé à faire cela." -#: organizations/templates/manage_members.html:43 #, python-format msgid "Members in %(facility)s" msgstr "Membres de %(facility)s" -#: organizations/templates/manage_members.html:70 msgid "Role" msgstr "Rôle" -#: organizations/templates/manage_members.html:73 msgid "Actions" msgstr "Actions" -#: organizations/templates/manage_members.html:98 -#: organizations/templates/manage_members.html:105 msgid "Block" -msgstr "Blocker" +msgstr "Bloquer" -#: organizations/templates/manage_members.html:102 msgid "Accept" msgstr "Accepter" -#: organizations/templates/organization.html:26 msgid "Facilities" msgstr "Etablissements" -#: organizations/templates/partials/compact_facility.html:23 -#: scheduler/templates/geographic_helpdesk.html:76 -#: scheduler/templates/helpdesk.html:68 msgid "Show details" msgstr "Afficher les détails" -#: organizations/views.py:137 msgid "volunteer-planner.org: Membership approved" msgstr "volunteer-planner.org : inscription approuvée" -#: osm_tools/templatetags/osm_links.py:17 #, python-brace-format msgctxt "maps search url pattern" msgid "https://www.openstreetmap.org/search?query={location}" msgstr "https://www.openstreetmap.org/search?query={location}" -#: places/models.py:69 places/models.py:84 msgid "country" msgstr "Pays" -#: places/models.py:70 msgid "countries" msgstr "Pays" -#: places/models.py:87 places/models.py:106 msgid "region" msgstr "Région" -#: places/models.py:88 msgid "regions" msgstr "Régions" -#: places/models.py:109 places/models.py:129 msgid "area" msgstr "Zone" -#: places/models.py:110 msgid "areas" msgstr "Zones" -#: places/models.py:133 msgid "places" msgstr "Lieux" -#: scheduler/admin.py:28 +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + msgid "number of volunteers" msgstr "Nombre de bénévoles" -#: scheduler/admin.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:40 msgid "volunteers" msgstr "Bénévoles" -#: scheduler/apps.py:8 -msgid "Scheduler" -msgstr "Auteur du plan d'équipe" +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "opportunités" -#: scheduler/models.py:41 scheduletemplates/models.py:34 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:53 msgid "number of needed volunteers" msgstr " Nombre de volontaires nécessaires" -#: scheduler/models.py:53 scheduletemplates/admin.py:33 -#: scheduletemplates/models.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:56 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:43 msgid "starting time" msgstr "Heure de début" -#: scheduler/models.py:55 scheduletemplates/admin.py:36 -#: scheduletemplates/models.py:47 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:57 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:44 msgid "ending time" msgstr "Heure de fin d'activités" -#: scheduler/models.py:63 scheduletemplates/models.py:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:58 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:45 msgid "members only" msgstr "Uniquement les membres" -#: scheduler/models.py:65 scheduletemplates/models.py:56 msgid "allow only members to help" msgstr "Permettre uniquement aux membres d'aider" -#: scheduler/models.py:71 msgid "shift" msgstr "Créneau" -#: scheduler/models.py:72 scheduletemplates/admin.py:283 msgid "shifts" msgstr "Créneaux" -#: scheduler/models.py:86 scheduletemplates/models.py:77 #, python-brace-format msgid "the next day" msgid_plural "after {number_of_days} days" msgstr[0] "demain" msgstr[1] "dans {number_of_days} jours" -#: scheduler/models.py:130 msgid "shift helper" msgstr "bénévole inscrit pour le créneau" -#: scheduler/models.py:131 msgid "shift helpers" msgstr "bénévoles inscrits pour le créneau" -#: scheduler/templates/geographic_helpdesk.html:69 -msgid "Show on map" -msgstr "Montrer sur la carte" +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "Créneau" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" -#: scheduler/templates/geographic_helpdesk.html:81 msgctxt "helpdesk shifts heading" msgid "shifts" msgstr "Créneaux" -#: scheduler/templates/geographic_helpdesk.html:113 #, python-format msgid "There are no upcoming shifts available for %(geographical_name)s." msgstr "Il n'y a pas de créneau disponible à %(geographical_name)s." -#: scheduler/templates/helpdesk.html:39 msgid "You can help in the following facilities" -msgstr "Vous pouvez aider dans les établissements suivants" - -#: scheduler/templates/helpdesk.html:43 -msgid "filter" -msgstr "Filtrer" +msgstr "Tu peux aider dans les établissements suivants" -#: scheduler/templates/helpdesk.html:59 msgid "see more" msgstr "voir" -#: scheduler/templates/helpdesk.html:82 +msgid "news" +msgstr "" + msgid "open shifts" -msgstr "Créneaux en libres accès" +msgstr "Créneaux libres" -#: scheduler/templates/helpdesk_single.html:6 -#: scheduler/templates/shift_details.html:24 #, python-format msgctxt "title with facility" msgid "Schedule for %(facility_name)s" msgstr "Calendrier pour %(facility_name)s" -#: scheduler/templates/helpdesk_single.html:60 #, python-format msgid "%(starting_time)s - %(ending_time)s" msgstr "%(starting_time)s - %(ending_time)s" -#: scheduler/templates/helpdesk_single.html:172 #, python-format msgctxt "title with date" msgid "Schedule for %(schedule_date)s" msgstr "Calendrier pour le %(schedule_date)s" -#: scheduler/templates/helpdesk_single.html:185 msgid "Toggle Timeline" -msgstr "Afficher l'historique" +msgstr "Afficher/masquer la ligne du temps" -#: scheduler/templates/helpdesk_single.html:237 msgid "Link" msgstr "Lien" -#: scheduler/templates/helpdesk_single.html:240 msgid "Time" msgstr "Heure" -#: scheduler/templates/helpdesk_single.html:243 msgid "Helpers" msgstr "Bénévoles" -#: scheduler/templates/helpdesk_single.html:254 msgid "Start" msgstr "Début" -#: scheduler/templates/helpdesk_single.html:257 msgid "End" msgstr "Fin" -#: scheduler/templates/helpdesk_single.html:260 msgid "Required" msgstr "Nécessaire" -#: scheduler/templates/helpdesk_single.html:263 msgid "Status" -msgstr "Status" +msgstr "Statut" -#: scheduler/templates/helpdesk_single.html:266 msgid "Users" msgstr "Utilisateurs" -#: scheduler/templates/helpdesk_single.html:269 +msgid "Send message" +msgstr "" + msgid "You" -msgstr "Vous" +msgstr "Toi" -#: scheduler/templates/helpdesk_single.html:321 #, python-format msgid "%(slots_left)s more" msgstr "%(slots_left)s restant" -#: scheduler/templates/helpdesk_single.html:325 -#: scheduler/templates/helpdesk_single.html:406 -#: scheduler/templates/shift_details.html:134 msgid "Covered" msgstr "Couvert" -#: scheduler/templates/helpdesk_single.html:350 -#: scheduler/templates/shift_details.html:95 +msgid "Send email to all volunteers" +msgstr "" + msgid "Drop out" msgstr "Abandonner" -#: scheduler/templates/helpdesk_single.html:360 -#: scheduler/templates/shift_details.html:105 msgid "Sign up" msgstr "S'inscrire" -#: scheduler/templates/helpdesk_single.html:371 msgid "Membership pending" msgstr "Inscription en attente de validation" -#: scheduler/templates/helpdesk_single.html:378 msgid "Membership rejected" msgstr "Inscription rejetée" -#: scheduler/templates/helpdesk_single.html:385 msgid "Become member" msgstr "Devenir membre" -#: scheduler/templates/shift_cancellation_notification.html:1 +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + #, python-format msgid "" "\n" @@ -1141,22 +944,35 @@ msgid "" msgstr "" "\n" "Bonjour,\n" -"nous sommes désolé, mais nous avons du annuler les créneaux suivants suite à la demande des organisateurs :\n" +"nous sommes désolé, mais nous avons dû annuler le créneau suivant suite à la demande des organisateurs :\n" "\n" " %(shift_title)s, %(location)s\n" " %(from_date)s de %(from_time)s à %(to_time)s\n" "\n" -"Ceci est un e-mail généré automatiquement. Pour toute question, contacter le l'établissement directement.\n" +"Ceci est un e-mail généré automatiquement. Pour toute question, contacte le l'établissement directement.\n" "\n" -"Bien à vous,\n" +"Cordialement,\n" "\n" "l'équipe de volunteer-planner.org\n" -#: scheduler/templates/shift_details.html:108 msgid "Members only" msgstr "Membres uniquement" -#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + #, python-format msgid "" "\n" @@ -1182,299 +998,207 @@ msgstr "" "\n" "Bonjour,\n" "\n" -"nous sommes désolés mais nous avons du changer les horaires du créneau suivants à la demande des organisateurs :\n" +"nous sommes désolés mais nous avons dû changer les horaires du créneau suivant à la demande des organisateurs :\n" "\n" "%(shift_title)s, %(location)s\n" "%(old_from_date)s de %(old_from_time)s à %(old_to_time)s\n" "\n" -"Les nouveaux horaires du créneau suivant sont :\n" +"Les nouveaux horaires du créneau sont :\n" "\n" "%(from_date)s de %(from_time)s à %(to_time)s\n" "\n" -"Si vous ne pouvez pas aider aux nouveaux horaires, merci d'annuler votre venue sur volunteer-planner.org\n" +"Si tu n'es pas disponible aux nouveaux horaires, merci d'annuler ta participation sur volunteer-planner.org\n" "\n" -"Ceci est un e-mail généré automatiquement. Pour toute question, contacter le l'établissement directement.\n" +"Ceci est un e-mail généré automatiquement. Pour toute question, contacte l'établissement directement.\n" "\n" -"Bien à vous,\n" +"Cordialement,\n" "\n" "l'équipe de volunteer-planner.org\n" -#: scheduler/views.py:169 msgid "The submitted data was invalid." msgstr "Les données fournies ne sont pas valables." -#: scheduler/views.py:177 msgid "User account does not exist." msgstr "Ce compte utilisateur n'existe pas." -#: scheduler/views.py:201 msgid "A membership request has been sent." -msgstr "Une demande d'inscription a été envoyé." +msgstr "Une demande d'inscription a été envoyée." -#: scheduler/views.py:214 msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" -msgstr "Nous ne pouvons pas vous inscrire sur ce créneau car vous en avez déjà accepté un autre aux mêmes horaires :" +msgstr "Nous ne pouvons pas t'inscrire dans ce créneau car tu en avez déjà accepté un autre aux mêmes horaires :" -#: scheduler/views.py:223 msgid "We can't add you to this shift because there are no more slots left." -msgstr "Nous ne pouvons pas vous ajouter à ce créneau car il est complet." +msgstr "Nous ne pouvons pas t'ajouter à ce créneau car il est complet." -#: scheduler/views.py:230 msgid "You were successfully added to this shift." -msgstr "Vous êtes bien inscrit à cette équipe (sur ce créneau)." +msgstr "Tu es bien inscrit(e) à cette équipe." -#: scheduler/views.py:234 -msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" msgstr "" -#: scheduler/views.py:244 #, python-brace-format msgid "You already signed up for this shift at {date_time}." -msgstr "Vous êtes déjà inscrit pour ce créneau à {date_time}." +msgstr "Tu es déjà inscrit(e) pour ce créneau à {date_time}." -#: scheduler/views.py:256 msgid "You successfully left this shift." -msgstr "Vous avez abandonné ce créneau." +msgstr "Ton désistement pour ce créneau est enregistré." + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" -#: scheduletemplates/admin.py:176 #, python-brace-format msgid "A shift already exists at {date}" msgid_plural "{num_shifts} shifts already exists at {date}" -msgstr[0] "Un créneau existe déjà le {date}" -msgstr[1] "{num_shifts} créneaux existent déjà le {date}" +msgstr[0] "" +msgstr[1] "" -#: scheduletemplates/admin.py:232 #, python-brace-format msgid "{num_shifts} shift was added to {date}" msgid_plural "{num_shifts} shifts were added to {date}" -msgstr[0] "{num_shifts} créneau a été ajouté le {date}" -msgstr[1] "{num_shifts} créneaux ont été ajouté le {date}" +msgstr[0] "" +msgstr[1] "" -#: scheduletemplates/admin.py:244 msgid "Something didn't work. Sorry about that." -msgstr "Quelque chose à dysfonctionné. Veuillez nous en excuser." - -#: scheduletemplates/admin.py:277 -msgid "slots" -msgstr "opportunités" +msgstr "Quelque chose à dysfonctionné. Prière de nous en excuser." -#: scheduletemplates/admin.py:289 msgid "from" msgstr "de" -#: scheduletemplates/admin.py:302 msgid "to" msgstr "à" -#: scheduletemplates/models.py:21 msgid "schedule templates" msgstr "modèles de calendrier" -#: scheduletemplates/models.py:22 scheduletemplates/models.py:30 msgid "schedule template" msgstr "modèle de calendrier" -#: scheduletemplates/models.py:50 msgid "days" msgstr "jours" -#: scheduletemplates/models.py:62 msgid "shift templates" msgstr "modèles de créneaux" -#: scheduletemplates/models.py:63 msgid "shift template" msgstr "modèle de créneau" -#: scheduletemplates/models.py:97 #, python-brace-format msgid "{task_name} - {workplace_name}" msgstr "{task_name} - {workplace_name}" -#: scheduletemplates/models.py:101 -#, python-brace-format -msgid "{task_name}" -msgstr "{task_name}" - -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:32 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:6 msgid "Home" msgstr "Accueil" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:46 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:14 msgid "Apply Template" msgstr "Appliquer le modèle" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:51 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:38 msgid "no workplace" msgstr "pas de lieu de travail" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:52 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:39 msgid "apply" msgstr "appliquer" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:61 msgid "Select a date" msgstr "Sélectionner une date" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:66 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:125 msgid "Continue" msgstr "Continuer" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:70 msgid "Select shift templates" msgstr "Choisir les modèles de créneaux" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:22 msgid "Please review and confirm shifts to create" msgstr "Vérifier et confirmer les créneaux à créer" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:118 msgid "Apply" msgstr "Appliquer" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:120 msgid "Apply and select new date" msgstr "Appliquer et choisir une nouvelle date" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save and apply template" msgstr "Sauvegarder et appliquer le modèle" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:4 msgid "Delete" msgstr "Supprimer" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:5 msgid "Save as new" msgstr "Sauvegarder comme nouveau" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:6 msgid "Save and add another" msgstr "Sauvegarder et en ajouter un autre" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:7 msgid "Save and continue editing" msgstr "Sauvegarder et continuer à modifier." -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:17 msgid "Delete?" msgstr "Supprimer?" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:31 msgid "Change" msgstr "Changer" -#: shiftmailer/models.py:10 -msgid "last name" -msgstr "Nom" - -#: shiftmailer/models.py:11 -msgid "position" -msgstr "Position" - -#: shiftmailer/models.py:12 -msgid "organisation" -msgstr "Organisation" - -#: shiftmailer/templates/shifts_today.html:1 -#, python-format -msgctxt "shift today title" -msgid "Schedule for %(organization_name)s on %(date)s" -msgstr "Calendrier pour %(organization_name)s le %(date)s" - -#: shiftmailer/templates/shifts_today.html:6 -msgid "All data is private and not supposed to be given away!" -msgstr "Toutes les données sont privées et ne doivent pas être partagées." - -#: shiftmailer/templates/shifts_today.html:15 -#, python-format -msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" -msgstr "de %(start_time)s à %(end_time)s, les %(volunteer_count)s bénévoles suivants se sont inscrit :" - -#: templates/partials/footer.html:17 #, python-format msgid "Questions? Get in touch: %(mailto_link)s" -msgstr "Des questions ? Contactez-nous : %(mailto_link)s" +msgstr "Des questions ? Contacte-nous : %(mailto_link)s" -#: templates/partials/management_tools.html:13 msgid "Manage" msgstr "Organiser" -#: templates/partials/management_tools.html:28 msgid "Members" msgstr "Membres" -#: templates/partials/navigation_bar.html:11 msgid "Toggle navigation" -msgstr "Afficher la barre de navigation" +msgstr "Afficher/masquer la barre de navigation" -#: templates/partials/navigation_bar.html:46 msgid "Account" msgstr "Compte" -#: templates/partials/navigation_bar.html:51 msgid "My work shifts" msgstr "Mes créneaux" -#: templates/partials/navigation_bar.html:56 msgid "Help" msgstr "Aide" -#: templates/partials/navigation_bar.html:59 msgid "Logout" msgstr "Déconnexion" -#: templates/partials/navigation_bar.html:63 msgid "Admin" msgstr "Administration" -#: templates/partials/region_selection.html:18 msgid "Regions" msgstr "Régions" -#: templates/registration/activate.html:5 msgid "Activation complete" msgstr "Activation terminée" -#: templates/registration/activate.html:7 msgid "Activation problem" msgstr "Activation échouée" -#: templates/registration/activate.html:15 msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" msgid "login" msgstr "Connexion" -#: templates/registration/activate.html:17 #, python-format msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." -msgstr "Merci %(account)s, inscription validée ! Vous pouvez maintenant %(login_link)s en utilisant le nom d'utilisateur le mot de passe définit lors de l'inscription." +msgstr "Merci %(account)s, inscription validée ! tu peux maintenant %(login_link)s en utilisant le nom d'utilisateur le mot de passe définis lors de l'inscription." -#: templates/registration/activate.html:25 msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." -msgstr "Oups &ndash ; soit votre compte a déjà été activé, ou la clef d'activation est soit invalide, soit expirée." +msgstr "Oups &ndash ; ou bien ton compte a déjà été activé, ou bien la clef d'activation est soit invalide, soit expirée." -#: templates/registration/activation_complete.html:3 msgid "Activation successful!" msgstr "Inscription validée" -#: templates/registration/activation_complete.html:9 msgctxt "Activation successful page" msgid "Thank you for signing up." -msgstr "Merci pour votre inscription." +msgstr "Merci pour ton inscription." -#: templates/registration/activation_complete.html:12 msgctxt "Login link text on activation success page" msgid "You can login here." -msgstr "Vous pouvez vous connecter ici." +msgstr "Tu peux te connecter ici." -#: templates/registration/activation_email.html:2 #, python-format msgid "" "\n" @@ -1495,19 +1219,18 @@ msgstr "" "\n" "Bonjour %(user)s,\n" "\n" -"merci beaucoup pour votre volonté d'aider ! Plus qu'une dernière étape et vous serez prêt à devenir bénévole !\n" +"merci beaucoup pour ta volonté d'aider ! Plus qu'une dernière étape et tu seras prêt/e à devenir bénévole !\n" "\n" -"Cliquer sur le lien suivant pour finaliser votre inscription à volunteer-planner.org :\n" +"Clique sur le lien suivant pour finaliser ton inscription à volunteer-planner.org :\n" "\n" "http://%(site_domain)s%(activation_key_url)s\n" "\n" "Le lien expirera dans %(expiration_days)s jours.\n" "\n" -"Bien à vous,\n" +"Cordialement,\n" "\n" "l'équipe de volunteer-planner.org\n" -#: templates/registration/activation_email.txt:2 #, python-format msgid "" "\n" @@ -1528,101 +1251,86 @@ msgstr "" "\n" "Bonjour %(user)s,\n" "\n" -"merci beaucoup pour votre volonté d'aider ! Plus qu'une dernière étape et vous serez prêt à devenir bénévole !\n" +"merci beaucoup pour ta volonté d'aider ! Plus qu'une dernière étape et tu seras prêt/e à devenir bénévole !\n" "\n" -"Cliquer sur le lien suivant pour finaliser votre inscription à volunteer-planner.org :\n" +"Clique sur le lien suivant pour finaliser ton inscription à volunteer-planner.org :\n" "\n" "http://%(site_domain)s%(activation_key_url)s\n" "\n" "Le lien expirera dans %(expiration_days)s jours.\n" "\n" -"Bien à vous,\n" +"Cordialement,\n" "\n" "l'équipe de volunteer-planner.org\n" -#: templates/registration/activation_email_subject.txt:1 msgid "Your volunteer-planner.org registration" -msgstr "Votre inscription à volunteer-planner.org" +msgstr "Ton inscription à volunteer-planner.org" -#: templates/registration/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Votre nom d'utilisateur et le mot de passe ne correspondent pas aux informations archivées. Veuillez essayer de nouveau." +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Courrier électronique" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Mot de passe" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Mot de passe oublié ?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Aider et s'inscrire" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Le mot de passe a été modifié" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Le mot de passe a été modifié" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" -msgstr "Modifiez votre mot de passe" +msgstr "Modifie ton mot de passe" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "Courrier électronique" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" -msgstr "Modifiez votre mot de passe" +msgstr "Modifie ton mot de passe" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "Réinitialisation du mot de passe terminée" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "Se connecter" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." -msgstr "Votre mot de passe a été réinitialisé ! Vous pouvez maintenant %(login_link)s à nouveau." +msgstr "Ton mot de passe a été réinitialisé ! Tub peux maintenant %(login_link)s à nouveau." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Saisissez un nouveau mot de passe" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "Saisis ton adresse courriel ci-dessous pour réinitialiser ton mot de passe. " -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Réinitialisation du mot de passe" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Nous venons de vous envoyer un courriel comportant un lien pour rétablir votre mot de passe." -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Veuillez consulter votre courrier électronique et cliquer sur le lien afin de continuer." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1633,11 +1341,10 @@ msgid "" "into your web browser:" msgstr "" "Vous recevez cet email car vous (ou un imposteur) avez demandé la réinitialisation de votre mot de passe sur le site %(domain)s.\n" -"Si vous ne souhaitez pas réinitialisé votre mot de passe, ignorez ce message.\n" +"Si vous ne souhaitez pas réinitialiser votre mot de passe, ignorez ce message.\n" "\n" "Pour réinitialiser votre mot de passe, cliquez sur le lien suivant ou copiez-collez le dans votre navigateur :" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1647,111 +1354,86 @@ msgid "" "%(site_name)s Management\n" msgstr "" "\n" -"Votre nom d´utilisateur, au cas où vous l´ayez oublié : %(username)s\n" +"Votre nom d´utilisateur, au cas où vous l´auriez oublié : %(username)s\n" "\n" "Cordialement\n" "\n" "L'équipe de %(site_name)s\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Réinitialisation du mot de passe." -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Pas de problème ! Nous vous enverrons les instructions pour réinitialiser votre mot de passe. " -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Mail de confirmation envoyé" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Un mail de confirmation va vous être envoyé" -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Veuillez confirmer votre inscription en cliquant sur le lien que vous allez recevoir par mail. Si vous ne l'avez pas reçu dans 10 minutes, veuillez consulter vos spams" -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Créer un compte utilisateur" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "Ici vous pouvez créer un compte utilisateur. Si vous êtes déjà inscrit, veuillez cliquer en haut à droite pour vous connecter. " -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "Créer un nouveau compte utilisateur" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "Volunteer-Planner et les refuges vous enverront des mails concernant vos créneaux." -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Le nom d'utilisateur existe déjà. Merci d'en choisir un autre." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." -msgstr "Attention le nom d'utilisateur est visible pour les autres utilisateurs. Veillez à ne pas utiliser d'espaces ou de signes spéciaux. " +msgstr "Attention le nom d'utilisateur sera visible pour les autres utilisateurs. Veillez à ne pas utiliser d'espaces ou de signes spéciaux. " -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "Les deux mot de passe entrés diffèrent." - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Répéter le mot de passe" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Inscrire" +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Le champs est obligatoire" +msgid "This must be checked." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Veuillez choisir un nom d'utilisateur valable. Les signes spéciaux autorisés sont : @/./+/-/_" +msgid "Sign-up" +msgstr "Inscrire" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Il existe déjà un compte sous ce nom d'utilisateur." +msgid "Ukrainian" +msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Anglais" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Allemand" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "Grec" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Hongrois" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Suédois" +msgid "Polish" +msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Suédois" + msgid "Turkish" msgstr "" diff --git a/locale/hr/LC_MESSAGES/django.po b/locale/hr/LC_MESSAGES/django.po new file mode 100644 index 00000000..6c21a9d2 --- /dev/null +++ b/locale/hr/LC_MESSAGES/django.po @@ -0,0 +1,1352 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Croatian (http://www.transifex.com/coders4help/volunteer-planner/language/hr/)\n" +"Language: hr\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/hu/LC_MESSAGES/django.po b/locale/hu/LC_MESSAGES/django.po index 3080e67c..c7a64f30 100644 --- a/locale/hu/LC_MESSAGES/django.po +++ b/locale/hu/LC_MESSAGES/django.po @@ -14,7 +14,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-01-29 08:23+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: Hungarian (http://www.transifex.com/coders4help/volunteer-planner/language/hu/)\n" @@ -24,517 +24,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Vezetéknév" + msgid "email" msgstr "e-mail" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "felhasználói fiók" -#: accounts/models.py:17 msgid "user accounts" msgstr "felhasználói fiókok" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Felhasználónév" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Keresztnév" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Vezetéknév" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "E-mail" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Mentés" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Fiók szerkesztése" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "" -#: content/admin.py:23 msgid "translation" msgstr "" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "" -#: content/admin.py:58 msgid "No translation available" msgstr "" -#: content/models.py:12 msgid "additional style" msgstr "" -#: content/models.py:18 msgid "additional flat page style" msgstr "" -#: content/models.py:19 msgid "additional flat page styles" msgstr "" -#: content/models.py:25 msgid "flat page" msgstr "" -#: content/models.py:28 msgid "language" msgstr "" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "cím" -#: content/models.py:36 msgid "content" msgstr "" -#: content/models.py:46 msgid "flat page translation" msgstr "" -#: content/models.py:47 msgid "flat page translations" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "" -#: news/models.py:17 msgid "subtitle" msgstr "alcím" -#: news/models.py:21 msgid "articletext" msgstr "" -#: news/models.py:26 msgid "creation date" msgstr "" -#: news/models.py:39 msgid "news entry" msgstr "" -#: news/models.py:40 msgid "news entries" msgstr "" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Bejelentkezés" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Kezdődhet a segítségnyújtás" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Kezdőoldal" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Impresszum" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Kapcsolat" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "GYIK" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Szeretnék segíteni!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Regisztrálj, és válaszd ki miben tudsz segíteni!" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Szervezz önkénteseket!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Regisztrájl egy helyszínt és szervezz oda önkénteseket!" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Segítségre váró helyszínek" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Regisztrált önkéntesek" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Munkaórák" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Miről szól ez az egész?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "Önkéntesként segítenél a menedékkérőknek? A Volunteer-Planner.org megmutatja, hol, mikor és hogyan segíthetsz." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "" -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Magánszféra" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Kapcsolat" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Regisztráció" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -542,7 +440,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -551,7 +448,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -559,15 +455,12 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -576,11 +469,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -588,11 +479,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:72 msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "E-mail cím" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Jelszó" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Elfelejtette a jelszavát?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Segíts és regisztrálj!" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "A jelszó megváltozott" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "A jelszót sikeresen megváltoztatta!" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Jelszó megváltoztatása" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "E-mail cím" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Jelszó megváltoztatása" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "A jelszó-visszaállítás kész." -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "Bejelentkezés" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "Visszaállítottuk a jelszót. A %(login_link)s linken újra bejelentkezhetsz." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Adjon meg új jelszót" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "Írja be az új jelszavát alább, hogy visszaállítsa a jelszavát." -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Jelszó visszaállítás" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Elküldtünk önnek egy e-mailt egy hivatkozással, amivel visszaállíthatja a jelszavát." -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Kérem, ellenőrizze az e-mailjét és kattintson a hivatkozásra a folytatáshoz." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1560,7 +1281,6 @@ msgstr "" "A jelszava visszaállításához kattintson a következő hivatkozásra, vagy másolja ki és illessze be\n" "a böngészőjébe:" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1578,105 +1298,80 @@ msgstr "" "\n" "%(site_name)s management\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Jelszó visszaállítása" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Semmi gond! Elküldjük önnek, hogy hogyan állíthatja vissza a jelszavát." -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Az akitváló e-mailt elküldtük!" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "A regisztrációt aktiváló e-mailt küldünk az e-mail címedre." -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Erősítsd meg a regisztrációs szándékodat az e-malben kapott linkre kattintva. Ha nem kapsz e-mailt, nézd meg a levélszemetet tartalmazó könyvtárat 10 perc múlva." -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Felhasználói regisztráció" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Már létezik ez a felhasználói név. Kérjük, válassz egy másikat!" - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "A két jelszó nem egyezik!" - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Ismételd meg a jelszót" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Regisztráció" +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Kötelezően megadandó érték." +msgid "This must be checked." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Egy érvényes felhasználói nevet adj meg, ami betüből, számból és a következő karakterekből állhat: @/./+/-/_ " +msgid "Sign-up" +msgstr "Regisztráció" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Ezzel a felhasználónévvel már létezik felhasználó." +msgid "Ukrainian" +msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Angol" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Német" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Magyar" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" +msgid "Polish" msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + msgid "Turkish" msgstr "" diff --git a/locale/hy/LC_MESSAGES/django.po b/locale/hy/LC_MESSAGES/django.po new file mode 100644 index 00000000..bf8e6705 --- /dev/null +++ b/locale/hy/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Armenian (http://www.transifex.com/coders4help/volunteer-planner/language/hy/)\n" +"Language: hy\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/it/LC_MESSAGES/django.po b/locale/it/LC_MESSAGES/django.po new file mode 100644 index 00000000..4a88e305 --- /dev/null +++ b/locale/it/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Italian (http://www.transifex.com/coders4help/volunteer-planner/language/it/)\n" +"Language: it\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/nl/LC_MESSAGES/django.po b/locale/nl/LC_MESSAGES/django.po new file mode 100644 index 00000000..ef7a2a16 --- /dev/null +++ b/locale/nl/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Dutch (http://www.transifex.com/coders4help/volunteer-planner/language/nl/)\n" +"Language: nl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/no/LC_MESSAGES/django.po b/locale/no/LC_MESSAGES/django.po new file mode 100644 index 00000000..66657466 --- /dev/null +++ b/locale/no/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Norwegian (http://www.transifex.com/coders4help/volunteer-planner/language/no/)\n" +"Language: no\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/pl/LC_MESSAGES/django.po b/locale/pl/LC_MESSAGES/django.po new file mode 100644 index 00000000..9cd8be2b --- /dev/null +++ b/locale/pl/LC_MESSAGES/django.po @@ -0,0 +1,1367 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Magdalena Rother , 2015 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2017-09-22 15:29+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Polish (http://www.transifex.com/coders4help/volunteer-planner/language/pl/)\n" +"Language: pl\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>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "Nazwisko" + +msgid "email" +msgstr "email" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "Nazwa użytkownika" + +msgid "First name" +msgstr "Imię" + +msgid "Last name" +msgstr "Nazwisko" + +msgid "Email" +msgstr "Email" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "Zapisz" + +msgid "Edit Account" +msgstr "Edytuj Konto" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "Tytuł" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "Podtytuł" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "nazwa" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "Liczba potrzebnych wolontariuszy " + +msgid "starting time" +msgstr "czas rozpoczęcia" + +msgid "ending time" +msgstr "czas zakończenia" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "zmiana" + +msgid "shifts" +msgstr "zmiany" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "zmiana" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "Wysłane dane nie są poprawne." + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "Zostałeś pomyślnie dodany do zmiany." + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "Aktywacja kompletna" + +msgid "Activation problem" +msgstr "Problem z aktywacją" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "Ups – Konto zostało już aktywowane, lub klucz aktywacyjny jest niepoprawny lub nieważny." + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Adres email" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "Hasło" + +msgid "Forgot your password?" +msgstr "Zapomniałeś hasła?" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "Hasło zostało zmienione" + +msgid "Password successfully changed!" +msgstr "Hasło zostało pomyślnie zmienione! " + +msgid "Change Password" +msgstr "Zmień hasło" + +msgid "Change password" +msgstr "Zmień hasło" + +msgid "Password reset complete" +msgstr "Hasło zostało zresetowane" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "Wprowadź nowe hasło" + +msgid "Enter your new password below to reset your password" +msgstr "Wprowadź nowe hasło poniżej aby zresetować hasło" + +msgid "Password reset" +msgstr "Hasło zostało zresetowane" + +msgid "We sent you an email with a link to reset your password." +msgstr "Wysłaliśmy Tobie email z linkiem, przy pomocy którego możesz zrestartować swoje hasło." + +msgid "Please check your email and click the link to continue." +msgstr "Proszę sprawdź swoją skrzynkę e-mail i kliknij na link aby kontynuować." + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" +"Otrzymujesz ten email ponieważ Ty (lub osoba podszywająca się pod Ciebie)\n" +"zarządała zresetowania hasła dla strony %(domain)s. Jeżeli nie życzysz sobie\n" +"aby hasło zostało zresetowane, zignoruj tą wiadomość. \n" +"\n" +"Aby zresetować hasło, kliknij na poniższy link, lub skopiuj i wklej link\n" +"do swojej przeglądarki:" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" +"\n" +"Twoja nazwa użytkownika, w przypadku jeśli zapomniałeś, to: %(username)s \n" +"\n" +"Pozdrawiamy,\n" +"Zespół zarządzający %(site_name)s\n" +"\n" + +msgid "Reset password" +msgstr "Zresetuj hasło" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "Nic się nie stało! Wyślemy Tobie instrukcje, jak zresetować hasło." + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "język angielski" + +msgid "German" +msgstr "język niemiecki" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "język węgierski" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/pt/LC_MESSAGES/django.po b/locale/pt/LC_MESSAGES/django.po index 4905fecc..b7ff6c7e 100644 --- a/locale/pt/LC_MESSAGES/django.po +++ b/locale/pt/LC_MESSAGES/django.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-01-29 08:23+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: Portuguese (http://www.transifex.com/coders4help/volunteer-planner/language/pt/)\n" @@ -19,517 +19,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "nome" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Sobrenome" + msgid "email" msgstr "e-mail" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "Contas" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "conta do utilizador" -#: accounts/models.py:17 msgid "user accounts" msgstr "contas do utilizador" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Nome de utilizador" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Nome" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Sobrenome" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "E-mail" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Guardar" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Editar Conta" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "CSS adicional" -#: content/admin.py:23 msgid "translation" msgstr "tradução" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "traduções" -#: content/admin.py:58 msgid "No translation available" msgstr "Nenhuma tradução disponível" -#: content/models.py:12 msgid "additional style" msgstr "estilo adicional" -#: content/models.py:18 msgid "additional flat page style" msgstr "" -#: content/models.py:19 msgid "additional flat page styles" msgstr "" -#: content/models.py:25 msgid "flat page" msgstr "" -#: content/models.py:28 msgid "language" msgstr "idioma" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "título" -#: content/models.py:36 msgid "content" msgstr "conteúdo" -#: content/models.py:46 msgid "flat page translation" msgstr "" -#: content/models.py:47 msgid "flat page translations" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Ver no site" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Remover" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "Adicionar outro %(verbose_name)s" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "Editar esta página" -#: news/models.py:17 msgid "subtitle" msgstr "legenda" -#: news/models.py:21 msgid "articletext" msgstr "" -#: news/models.py:26 msgid "creation date" msgstr "data de criação" -#: news/models.py:39 msgid "news entry" msgstr "entrada de notícias" -#: news/models.py:40 msgid "news entries" msgstr "entradas de notícias" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Iniciar sessão" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Comece a ajudar" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Página principal" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Informação" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Contacto" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "Perguntas Mais Frequentes - FAQ" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Eu quero ajudar!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Registe-se e veja onde pode ajudar" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Organizar voluntários" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Registar um abrigo e organizar voluntários" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Locais para ajudar" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Voluntários Registados" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Horas Efetuadas" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Sobre o que é tudo isto?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "És voluntário e queres ajudar refugiados? Volunteer-Planner.org mostra-te onde, quando e como ajudar directamente no terreno." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "" -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "Pode ajudar nestes locais:" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Política de Privacidade" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "Utilização dos dados pessoais" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Contacto" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Registo" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "Notificações de E-mail / Boletim Informativo" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Analítica da Google" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "clique nesta hiperligação" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "vantagens" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "poupe tempo" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -537,7 +435,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -546,7 +443,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -554,15 +450,12 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "gratuitamente e sem custos" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -571,11 +464,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "gratuitamente, livre de publicidade" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -583,11 +474,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "contacte-nos!" -#: non_logged_in_area/templates/shelters_need_help.html:72 msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Endereço de correio eletrónico" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Senha" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Esqueceu-se da senha?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Ajuda e registo" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Senha alterada" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Senha alterada com sucesso!" -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Alterar Senha" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "Endereço de correio eletrónico" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Alterar senha" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "Reposição de senha concluída" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "iniciar sessão" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "" -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Inserir nova senha" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Repor senha" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "" -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "" -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1545,7 +1266,6 @@ msgid "" "into your web browser:" msgstr "" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1555,105 +1275,80 @@ msgid "" "%(site_name)s Management\n" msgstr "" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Repor senha" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Não tem problema! Nós iremos enviar-lhe as instruções sobre como repor a sua senha." -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Mensagem de ativação enviada" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "" -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "" -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Registe-se para ter uma conta" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "O nome de utilizador já existe. Por favor, escolha um nome diferente." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "" - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Contrassenha" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Registar" - -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Este campo é obrigatório." +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgid "This must be checked." msgstr "" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." +msgid "Sign-up" +msgstr "Registar" + +msgid "Ukrainian" msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Inglês" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Alemão" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Húngaro" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Sueco" +msgid "Polish" +msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Sueco" + msgid "Turkish" msgstr "" diff --git a/locale/pt_BR/LC_MESSAGES/django.po b/locale/pt_BR/LC_MESSAGES/django.po new file mode 100644 index 00000000..f4377d8f --- /dev/null +++ b/locale/pt_BR/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/coders4help/volunteer-planner/language/pt_BR/)\n" +"Language: pt_BR\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/ro/LC_MESSAGES/django.po b/locale/ro/LC_MESSAGES/django.po new file mode 100644 index 00000000..1d90fcdb --- /dev/null +++ b/locale/ro/LC_MESSAGES/django.po @@ -0,0 +1,1352 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Romanian (http://www.transifex.com/coders4help/volunteer-planner/language/ro/)\n" +"Language: ro\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/ru/LC_MESSAGES/django.po b/locale/ru/LC_MESSAGES/django.po new file mode 100644 index 00000000..0355d3b7 --- /dev/null +++ b/locale/ru/LC_MESSAGES/django.po @@ -0,0 +1,1436 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Anna Dunn, 2022 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2022-03-10 13:42+0000\n" +"Last-Translator: Anna Dunn\n" +"Language-Team: Russian (http://www.transifex.com/coders4help/volunteer-planner/language/ru/)\n" +"Language: ru\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=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" + +msgid "first name" +msgstr "имя" + +msgid "last name" +msgstr "Фамилия" + +msgid "email" +msgstr "электронная почта" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "Aккаунты" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "аккаунт пользователя" + +msgid "user accounts" +msgstr "Aккаунты пользователя" + +msgid "My shifts today:" +msgstr "Мои смены сегодня" + +msgid "No shifts today." +msgstr "Сегодня нет смен" + +msgid "Show this work shift" +msgstr "Показать эту рабочую смену" + +msgid "My shifts tomorrow:" +msgstr "Мои смены завтра:" + +msgid "No shifts tomorrow." +msgstr "Завтра никаких смен." + +msgid "My shifts the day after tomorrow:" +msgstr "Мои смены послезавтра:" + +msgid "No shifts the day after tomorrow." +msgstr "Никаких смен послезавтра." + +msgid "Further shifts:" +msgstr "Дальнейшие смены:" + +msgid "No further shifts." +msgstr "Никаких дальнейших смен" + +msgid "Show my work shifts in the past" +msgstr "Показать мои рабочие смены в прошлом" + +msgid "My work shifts in the past:" +msgstr "Мои рабочие смены в прошлом" + +msgid "No work shifts in the past days yet." +msgstr "В последние дни еще нет рабочих смен." + +msgid "Show my work shifts in the future" +msgstr "Показать мои рабочие смены в будущем" + +msgid "Username" +msgstr "Имя пользователя" + +msgid "First name" +msgstr "Имя" + +msgid "Last name" +msgstr "Фамилия" + +msgid "Email" +msgstr "Электронная почта" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "Если вы удалите свой аккаунт, эта информация будет анонимизирована, и вы больше не сможете войти в Volunteer-Planner." + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "Восстановить эту информацию невозможно. Если вы хотите снова работать волонтером, вам придется создать новый аккаунт." + +msgid "Delete Account (no additional warning)" +msgstr "Удалить аккаунт (без дополнительного предупреждения)" + +msgid "Save" +msgstr "Сохранить" + +msgid "Edit Account" +msgstr "Редактировать аккаунт" + +msgid "Delete Account" +msgstr "Удалить аккаунт" + +msgid "Your user account has been deleted." +msgstr "Ваш аккаунт был удален." + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "дополнительный CSS" + +msgid "translation" +msgstr "перевод" + +msgid "translations" +msgstr "переводы" + +msgid "No translation available" +msgstr "Перевод недоступен" + +msgid "additional style" +msgstr "дополнительный стиль" + +msgid "additional flat page style" +msgstr "дополнительный плоский стиль страницы" + +msgid "additional flat page styles" +msgstr "дополнительные стили плоской страницы" + +msgid "flat page" +msgstr "плоская страница" + +msgid "language" +msgstr "язык" + +msgid "title" +msgstr "название" + +msgid "content" +msgstr "содержание" + +msgid "flat page translation" +msgstr "перевод плоской страницы" + +msgid "flat page translations" +msgstr "перевод плоских страниц" + +msgid "View on site" +msgstr "Посмотреть на сайте" + +msgid "Remove" +msgstr "Удалить" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Добавить еще %(verbose_name)s" + +msgid "Edit this page" +msgstr "Редактировать эту страницу" + +msgid "subtitle" +msgstr "подзаголовок" + +msgid "articletext" +msgstr "текст статьи" + +msgid "creation date" +msgstr "Дата создания" + +msgid "news entry" +msgstr "новость" + +msgid "news entries" +msgstr "Новости" + +msgid "Page not found" +msgstr "Страница не найдена" + +msgid "We're sorry, but the requested page could not be found." +msgstr "Сожалеем, но запрошенная страница не найдена." + +msgid "server error" +msgstr "Ошибка сервера" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "Произошла ошибка. Об этом было сообщено администраторам сайта по электронной почте и должно быть исправлено в ближайшее время. Спасибо за терпеливость." + +msgid "Login" +msgstr "Вход" + +msgid "Start helping" +msgstr "Начать помогать" + +msgid "Main page" +msgstr "Главная страница" + +msgid "Imprint" +msgstr "Отпечаток" + +msgid "About" +msgstr "О нас" + +msgid "Supporter" +msgstr "Сторонник" + +msgid "Press" +msgstr "Пресса" + +msgid "Contact" +msgstr "Контакт" + +msgid "FAQ" +msgstr "Вопросы-Ответы" + +msgid "I want to help!" +msgstr "Я хочу помочь!" + +msgid "Register and see where you can help" +msgstr "Зарегистрируйтесь и узнайте, где вы можете помочь" + +msgid "Organize volunteers!" +msgstr "Организуйте волонтеров!" + +msgid "Register a shelter and organize volunteers" +msgstr "Зарегистрируйте приют и организуйте волонтеров" + +msgid "Places to help" +msgstr "Места, чтобы помочь" + +msgid "Registered Volunteers" +msgstr "Зарегистрированные волонтеры" + +msgid "Worked Hours" +msgstr "Отработанные часы" + +msgid "What is it all about?" +msgstr "О чем это все?" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "Вы волонтер и хотите помочь беженцам? Volunteer-Planner.org покажет вам, где, когда и как помочь непосредственно на местах." + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "Эта платформа некоммерческая и не содержит рекламы. Международная команда полевых работников, программистов, менеджеров проектов и дизайнеров добровольно участвует в этом проекте и делится своим профессиональным опытом, чтобы изменить ситуацию." + +msgid "You can help at these locations:" +msgstr "Вы можете помочь в следующих местах:" + +msgid "There are currently no places in need of help." +msgstr "В настоящее время мест, нуждающихся в помощи, нет." + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "Объем" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "нажмите на эту ссылку" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "преимущества" + +msgid "save time" +msgstr "экономить время" + +msgid "improve selforganization of the volunteers" +msgstr "улучшить самоорганизацию волонтеров" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" +"\n" +"волонтеры более эффективно распределяются по сменам,\n" +"помощникам легче предвидеть временные сокращения" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" +"\n" +"планы смены могут быть переданы персоналу службы безопасности\n" +"или согласование лиц автопочтой\n" +"каждое утро" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" +"\n" +"чем больше у нас организовано приютов и лагерей, тем больше волонтеров присоединяется\n" +"и все объекты выиграют от общего пула мотивированных волонтеров" + +msgid "for free without costs" +msgstr "бесплатно без затрат" + +msgid "The right help at the right time at the right place" +msgstr "Нужная помощь в нужное время в нужном месте" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" +"\n" +"Многие хотят помочь! Но зачастую не так просто разобраться, где, когда и как можно помочь.\n" +"volunteer-planner.org пытается решить эту проблему!" + +msgid "for free, ad free" +msgstr "бесплатно, без рекламы" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" +"\n" +"Платформа была создана группой волонтеров-профессионалов в области разработки программного обеспечения, управления проектами, дизайна,\n" +"и маркетинг. Код открыт для некоммерческого использования. Личные данные (адреса электронной почты, данные профиля и т. д.) не будут переданы третьим лицам." + +msgid "contact us!" +msgstr "свяжитесь с нами!" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" +"\n" +"...возможно, с прикрепленным черновиком смен, которые вы хотите видеть в планировщике волонтеров. Пожалуйста, напишите на onboarding@volunteer-planner.org" + +msgid "edit" +msgstr "редактировать" + +msgid "description" +msgstr "описание" + +msgid "contact info" +msgstr "Контактная информация" + +msgid "organizations" +msgstr "организации" + +msgid "by invitation" +msgstr "по приглашению" + +msgid "anyone (approved by manager)" +msgstr "любой (по согласованию с менеджером)" + +msgid "anyone" +msgstr "кто угодно" + +msgid "rejected" +msgstr "отклонен" + +msgid "pending" +msgstr "в ожидании" + +msgid "approved" +msgstr "одобрено" + +msgid "admin" +msgstr "администратор" + +msgid "manager" +msgstr "менеджер" + +msgid "member" +msgstr "участник" + +msgid "role" +msgstr "роль" + +msgid "status" +msgstr "статус" + +msgid "name" +msgstr "имя" + +msgid "address" +msgstr "адрес" + +msgid "slug" +msgstr "слаг" + +msgid "join mode" +msgstr "режим присоединения" + +msgid "Who can join this organization?" +msgstr "Кто может вступить в эту организацию?" + +msgid "organization" +msgstr "организация" + +msgid "disabled" +msgstr "Отключено" + +msgid "enabled (collapsed)" +msgstr "включено (свернуто)" + +msgid "enabled" +msgstr "включено" + +msgid "place" +msgstr "место" + +msgid "postal code" +msgstr "Почтовый Код" + +msgid "Show on map of all facilities" +msgstr "Показать на карте все объекты" + +msgid "latitude" +msgstr "широта" + +msgid "longitude" +msgstr "долгота" + +msgid "timeline" +msgstr "Лента новостей" + +msgid "Who can join this facility?" +msgstr "Кто может присоединиться к этому объекту?" + +msgid "facility" +msgstr "объект" + +msgid "facilities" +msgstr "объекты" + +msgid "organization member" +msgstr "член организации" + +msgid "organization members" +msgstr "члены организации" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "{username} в {organization_name} ({user_role})" + +msgid "facility member" +msgstr "сотрудник объекта" + +msgid "facility members" +msgstr "сотрудники объекта" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "{username} в {facility_name} ({user_role})" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "рабочее место" + +msgid "workplaces" +msgstr "рабочие места" + +msgid "task" +msgstr "задание" + +msgid "tasks" +msgstr "задания" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "Здравствуйте %(username)s," + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "Ваш запрос на членство в %(facility_name)s был одобрен. Теперь вы можете записаться на ограниченные смены в этом учреждении." + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" +"С уважением,\n" +"Команда волонтеров-planner.org" + +msgid "Helpdesk" +msgstr "Служба поддержки" + +msgid "Show on map" +msgstr "Показать на карте" + +msgid "Open Shifts" +msgstr "Открытые смены" + +msgid "News" +msgstr "Новости" + +msgid "Error" +msgstr "Ошибка" + +msgid "You are not allowed to do this." +msgstr "Вам не разрешено делать это." + +#, python-format +msgid "Members in %(facility)s" +msgstr "Члены в %(facility)s" + +msgid "Role" +msgstr "Роль" + +msgid "Actions" +msgstr "Действия" + +msgid "Block" +msgstr "Заблокировать " + +msgid "Accept" +msgstr "Принять" + +msgid "Facilities" +msgstr "Объект" + +msgid "Show details" +msgstr "Показать детали" + +msgid "volunteer-planner.org: Membership approved" +msgstr "волонтер-планнер.org: Членство одобрено" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "https://www.openstreetmap.org/search?query={location}" + +msgid "country" +msgstr "страна" + +msgid "countries" +msgstr "страны" + +msgid "region" +msgstr "регион" + +msgid "regions" +msgstr "регионы" + +msgid "area" +msgstr "зона" + +msgid "areas" +msgstr "зоны" + +msgid "places" +msgstr "места" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "число волонтеров" + +msgid "volunteers" +msgstr "волонтеры" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "временные интервалы" + +msgid "number of needed volunteers" +msgstr "количество необходимых волонтеров" + +msgid "starting time" +msgstr "время начала" + +msgid "ending time" +msgstr "время окончания" + +msgid "members only" +msgstr "только для участников" + +msgid "allow only members to help" +msgstr "разрешить только участникам помогать" + +msgid "shift" +msgstr "смена" + +msgid "shifts" +msgstr "смены" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "shift helper" +msgstr "помощник по смене" + +msgid "shift helpers" +msgstr "помощники смены" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "смена" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "смены" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "Нет доступных смен для %(geographical_name)s." + +msgid "You can help in the following facilities" +msgstr "Вы можете помочь в следующих объектах" + +msgid "see more" +msgstr "узнать больше" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "открытые смены" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "Расписание для %(facility_name)s" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "%(starting_time)s - %(ending_time)s" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "Расписание для %(schedule_date)s" + +msgid "Toggle Timeline" +msgstr "Переключить шкалу времени" + +msgid "Link" +msgstr "Ссылка" + +msgid "Time" +msgstr "Время" + +msgid "Helpers" +msgstr "Помощники" + +msgid "Start" +msgstr "Начало" + +msgid "End" +msgstr "Конец" + +msgid "Required" +msgstr "Обязательный" + +msgid "Status" +msgstr "Статус" + +msgid "Users" +msgstr "Пользователи" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "Вы" + +#, python-format +msgid "%(slots_left)s more" +msgstr "%(slots_left)s еще" + +msgid "Covered" +msgstr "Покрытый" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "Выйти" + +msgid "Sign up" +msgstr "Зарегистрироваться" + +msgid "Membership pending" +msgstr "Членство ожидается" + +msgid "Membership rejected" +msgstr "Членство отклонено" + +msgid "Become member" +msgstr "Стать участником" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Здравствуйте,\n" +"\n" +"приносим свои извинения, но по просьбе организатора нам пришлось отменить следующую смену:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)sот %(from_time)sдо %(to_time)s часов\n" +"\n" +"Это автоматически сгенерированное электронное письмо. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с учреждением напрямую.\n" +"\n" +"С уважением,\n" +"\n" +"команда волонтеров-planner.org\n" + +msgid "Members only" +msgstr "Только для участников" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Здравствуйте,\n" +"\n" +"приносим свои извинения, но по просьбе организатора нам пришлось изменить время следующей смены:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)sот %(old_from_time)s до %(old_to_time)s часов\n" +"\n" +"Новое время смены:\n" +"\n" +"%(from_date)s от %(from_time)s до %(to_time)s часов\n" +"\n" +"Если вы больше не можете помогать в новые времена, пожалуйста, отмените свое участие на сайте волонтер-планнер.орг.\n" +"\n" +"Это автоматически сгенерированное электронное письмо. Если у вас есть какие-либо вопросы, пожалуйста, свяжитесь с учреждением напрямую.\n" +"\n" +"С уважением,\n" +"\n" +"команда волонтеров-planner.org\n" + +msgid "The submitted data was invalid." +msgstr "Представленные данные недействительны." + +msgid "User account does not exist." +msgstr "Аккаунт не существует." + +msgid "A membership request has been sent." +msgstr "Заявка на участие отправлена." + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "Мы не можем добавить вас в эту смену, потому что вы уже согласились на другие смены одновременно:" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "Мы не можем добавить вас в эту смену, так как свободных мест больше нет." + +msgid "You were successfully added to this shift." +msgstr "Вы были успешно добавлены в эту смену." + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "Вы уже записались на эту смену в {date_time}." + +msgid "You successfully left this shift." +msgstr "Вы успешно покинули эту смену." + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Something didn't work. Sorry about that." +msgstr "Что-то не сработало. Извини за это." + +msgid "from" +msgstr "от" + +msgid "to" +msgstr "до" + +msgid "schedule templates" +msgstr "шаблоны графиков" + +msgid "schedule template" +msgstr "шаблон графика" + +msgid "days" +msgstr "дни" + +msgid "shift templates" +msgstr "шаблоны смены" + +msgid "shift template" +msgstr "шаблон смены" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "{task_name} - {workplace_name}" + +msgid "Home" +msgstr "Домашняя страница" + +msgid "Apply Template" +msgstr "Применить шаблон" + +msgid "no workplace" +msgstr "нет рабочего места" + +msgid "apply" +msgstr "Применить" + +msgid "Select a date" +msgstr "Выберите дату" + +msgid "Continue" +msgstr "Продолжать" + +msgid "Select shift templates" +msgstr "Выберите шаблоны смен" + +msgid "Please review and confirm shifts to create" +msgstr "Пожалуйста, проверьте и подтвердите смены, которые вы хотите создать" + +msgid "Apply" +msgstr "Применить" + +msgid "Apply and select new date" +msgstr "Применить и выбрать новую дату" + +msgid "Save and apply template" +msgstr "Сохранить и применить шаблон" + +msgid "Delete" +msgstr "Удалить" + +msgid "Save as new" +msgstr "Сохранить как новый" + +msgid "Save and add another" +msgstr "Сохранить и добавить еще" + +msgid "Save and continue editing" +msgstr "Сохранить и продолжить редактирование" + +msgid "Delete?" +msgstr "Удалить?" + +msgid "Change" +msgstr "Изменить" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "Вопросы? Свяжитесь с нами: %(mailto_link)s" + +msgid "Manage" +msgstr "Управлять" + +msgid "Members" +msgstr "Участники" + +msgid "Toggle navigation" +msgstr "Переключить навигацию" + +msgid "Account" +msgstr "Аккаунт" + +msgid "My work shifts" +msgstr "Мои рабочие смены" + +msgid "Help" +msgstr "Помощь" + +msgid "Logout" +msgstr "Выйти" + +msgid "Admin" +msgstr "Администратор" + +msgid "Regions" +msgstr "Регионы" + +msgid "Activation complete" +msgstr "Активация завершена" + +msgid "Activation problem" +msgstr "Проблема с активацией" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "вход" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "Спасибо %(account)s, активация завершена! Теперь вы можете использовать имя пользователя и пароль %(login_link)s, указанные при регистрации." + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "К сожалению, либо вы уже активировали свою учетную запись, либо ключ активации недействителен или срок его действия истек." + +msgid "Activation successful!" +msgstr "Активация прошла успешно!" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "Спасибо за регистрацию." + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "Вы можете войти здесь." + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" +"\n" +"Здравствуйте %(user)s,\n" +"\n" +"спасибо большое, что хотите помочь! Еще один шаг, и вы будете готовы начать волонтерскую деятельность!\n" +"\n" +"Пожалуйста, нажмите на следующую ссылку, чтобы завершить регистрацию на сайте волонтера-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"Срок действия этой ссылки истекает через %(expiration_days)s дней.\n" +"\n" +"С уважением,\n" +"\n" +"команда volunteer-planner.org\n" + +msgid "Your volunteer-planner.org registration" +msgstr "Ваша регистрация на сайте volunteer-planner.org" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "Адрес электронной почты" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "Пароль" + +msgid "Forgot your password?" +msgstr "Забыли Ваш пароль?" + +msgid "Help and sign-up" +msgstr "Помощь и регистрация" + +msgid "Password changed" +msgstr "пароль изменен" + +msgid "Password successfully changed!" +msgstr "Пароль успешно изменен!" + +msgid "Change Password" +msgstr "Изменить пароль" + +msgid "Change password" +msgstr "Изменить пароль" + +msgid "Password reset complete" +msgstr "Сброс пароля завершен" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "вход" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "Ваш пароль был сброшен! Теперь вы можете %(login_link)s снова." + +msgid "Enter new password" +msgstr "Введите новый пароль" + +msgid "Enter your new password below to reset your password" +msgstr "Введите новый пароль ниже, чтобы сбросить пароль" + +msgid "Password reset" +msgstr "Сброс пароля" + +msgid "We sent you an email with a link to reset your password." +msgstr "Мы отправили вам электронное письмо со ссылкой для сброса пароля." + +msgid "Please check your email and click the link to continue." +msgstr "Пожалуйста, проверьте свою электронную почту и нажмите на ссылку, чтобы продолжить." + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" +"Вы получили это письмо, потому что вы (или кто-то, кто выдает себя за вас)\n" +"запросил сброс пароля на сайте %(domain)s. Если вы не\n" +"хотите сбросить пароль, проигнорируйте это сообщение.\n" +"\n" +"Чтобы сбросить пароль, перейдите по следующей ссылке или скопируйте и вставьте ее.\n" +"в ваш веб-браузер:" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" +"\n" +"Ваше имя пользователя, если вы забыли: %(username)s\n" +"\n" +"С наилучшими пожеланиями,\n" +"%(site_name)s Менеджмент\n" + +msgid "Reset password" +msgstr "Сброс пароля" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "Нет проблем! Мы вышлем вам инструкции по сбросу пароля." + +msgid "Activation email sent" +msgstr "Электронное письмо с активацией отправлено" + +msgid "An activation mail will be sent to you email address." +msgstr "На ваш адрес электронной почты будет отправлено письмо с активацией." + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "Пожалуйста, подтвердите регистрацию по ссылке в письме. Если вы не получили его в течение 10 минут, поищите его в папке со спамом." + +msgid "Register for an account" +msgstr "Зарегистрируйте аккаунт" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "Здесь вы можете создать новую учетную запись пользователя. Если у вас уже есть учетная запись пользователя, нажмите ВХОД в правом верхнем углу." + +msgid "Create a new account" +msgstr "Создать новый аккаунт" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "Volunteer-Planner и приюты будут отправлять вам электронные письма о ваших сменах." + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "Ваше имя пользователя будет видно другим пользователям. Не используйте пробелы или специальные символы." + +msgid "Repeat password" +msgstr "Повторите пароль" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "Регистрация" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "Английский" + +msgid "German" +msgstr "Немецкий" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "Греческий" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "Венгерский" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Шведский" + +msgid "Turkish" +msgstr "" diff --git a/locale/sk/LC_MESSAGES/django.po b/locale/sk/LC_MESSAGES/django.po new file mode 100644 index 00000000..351cd28f --- /dev/null +++ b/locale/sk/LC_MESSAGES/django.po @@ -0,0 +1,1355 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Slovak (http://www.transifex.com/coders4help/volunteer-planner/language/sk/)\n" +"Language: sk\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 == 1 ? 0 : n % 1 == 0 && n >= 2 && n <= 4 ? 1 : n % 1 != 0 ? 2: 3);\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/sl/LC_MESSAGES/django.po b/locale/sl/LC_MESSAGES/django.po new file mode 100644 index 00000000..c2624adf --- /dev/null +++ b/locale/sl/LC_MESSAGES/django.po @@ -0,0 +1,1355 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Slovenian (http://www.transifex.com/coders4help/volunteer-planner/language/sl/)\n" +"Language: sl\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%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/sq/LC_MESSAGES/django.po b/locale/sq/LC_MESSAGES/django.po new file mode 100644 index 00000000..8e4c3d01 --- /dev/null +++ b/locale/sq/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Albanian (http://www.transifex.com/coders4help/volunteer-planner/language/sq/)\n" +"Language: sq\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/sr_RS/LC_MESSAGES/django.po b/locale/sr_RS/LC_MESSAGES/django.po new file mode 100644 index 00000000..43b79a65 --- /dev/null +++ b/locale/sr_RS/LC_MESSAGES/django.po @@ -0,0 +1,1352 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2016-01-29 08:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Serbian (Serbia) (http://www.transifex.com/coders4help/volunteer-planner/language/sr_RS/)\n" +"Language: sr_RS\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/sv/LC_MESSAGES/django.po b/locale/sv/LC_MESSAGES/django.po index f4607bef..cdfed3e2 100644 --- a/locale/sv/LC_MESSAGES/django.po +++ b/locale/sv/LC_MESSAGES/django.po @@ -11,7 +11,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-01-29 08:23+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: Swedish (http://www.transifex.com/coders4help/volunteer-planner/language/sv/)\n" @@ -21,517 +21,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "förnamn" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Efternamn" + msgid "email" msgstr "e-post" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "Konton" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "användarkonto" -#: accounts/models.py:17 msgid "user accounts" msgstr "användarkonton" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Användarnamn" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "Förnamn" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Efternamn" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "E-postadress" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Spara" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Hantera konto" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "ytterligare CSS" -#: content/admin.py:23 msgid "translation" msgstr "översättning" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "översättningar" -#: content/admin.py:58 msgid "No translation available" msgstr "Ingen översättning tillgänglig" -#: content/models.py:12 msgid "additional style" msgstr "ytterligare stilar" -#: content/models.py:18 msgid "additional flat page style" msgstr "ytterligare sidstil" -#: content/models.py:19 msgid "additional flat page styles" msgstr "ytterligare sidstilar" -#: content/models.py:25 msgid "flat page" msgstr "sida" -#: content/models.py:28 msgid "language" msgstr "språk" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "rubrik" -#: content/models.py:36 msgid "content" msgstr "innehåll" -#: content/models.py:46 msgid "flat page translation" msgstr "översättning av sida" -#: content/models.py:47 msgid "flat page translations" msgstr "översättningar av sida" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "Visa på sida" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "Ta bort" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "Lägg till %(verbose_name)s" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "Redigera denna sida" -#: news/models.py:17 msgid "subtitle" msgstr "underrubrik" -#: news/models.py:21 msgid "articletext" msgstr "artikeltext" -#: news/models.py:26 msgid "creation date" msgstr "datum" -#: news/models.py:39 msgid "news entry" msgstr "nyhetsartikel" -#: news/models.py:40 msgid "news entries" msgstr "nyhetsartiklar" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Logga in" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "Börja hjälpa" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Startsida" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "Om webbplatsen" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "Om oss" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "Samarbetspartners" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "Press" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "Kontakt" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "Vanliga frågor" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Jag vill hjälpa till!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Registrera dig och se var du kan hjälpa" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Organisera volontärer!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Registrera ett boende och organisera volontärer" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Platser att hjälpa på" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Registrerade volontärer" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Arbetade timmar" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Vad går det ut på?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "Vill du bli volontär och hjälpa flyktingar? Volunteer-planner.org visar hur, var och när din hjälp behövs. " -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "

    Denna plattform är icke-komersiell och fri från reklam. Ett internationellt team av fältarbetare, programmerare, projektledare och designers arbetar ideellt med volunteer-planner, för att med sin samlade yrkeserfarenhet göra skillnad.

    " -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "Du kan hjälpa på följande platser:" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "För nuvarande finns inga platser med behov av hjälp." -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "Integritetspolicy" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "Tillämpningsområde" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "Vår integritetspolicy informerar användaren av denna webbsida (nedan kallat \"tjänsten\") om hur personliga uppgifter behandlas och sparas av tillhandahållaren av tjänsten, Benefit e.V (Wollankstr. 2, 13187 Berlin)." -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "Alla personliga uppgifter sparas och hanteras enligt den tyska personuppgiftslagen (Bundesdatenschutzgesetz, BDSG) och den tyska lagen för elektronisk kommunikation (Telemediengesetz, TMG)." -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "Tillgång till uppgifter / serverlogg" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "Tillhandahållaren av tjänsten (alternativt tillhandahållaren av denna webbsida) samlar in uppgifter vid användande av tjänsten och lagrar dessa uppgifter i en s.k. serverlogg. Användaruppgifter inkluderar: namn på begärd webbsida, vilka filer som används, datum och tid för användande, överförd datamängd, avisering om framgångsrik användning och användarens webbläsartyp/version, operativsystem, HTTP-referenten (dvs. användarens senast besökta webbsida), IP-adress och internetleverantör." -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "Tillhandahållaren av tjänsten använder uppgifterna i serverloggen enbart i statistisk syfte och för den tillhandahållna tjänstens drift, säkerhet, och förbättring. Vid konkreta misstankar om olaglig användning av tjänsten reserverar sig tillhandahållaren av tjänsten för rätten att se över uppgifterna i serverloggen." -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "Hantering av personuppgifter" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "Personliga uppgifter är information som kan användas för att identifiera en person, d.v.s. all information som kan härledas till en specifik individ: till exempel namn, e-postadress eller en användares telefonnummer. Även uppgifter om personliga preferenser, intressen, medlemsskap eller besökta webbsidor räknas som personliga uppgifter." -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "Personuppgifter samlas in, används och delas av tillhandahållaren av tjänsten med tredje part i strikt enlighet med lagen, eller med användarens tillåtelse." -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "Kontakt" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "Vid kontakt med tillhandahållaren av tjänsten (t.ex. via e-post eller kontaktformulär) sparas användarens angivna uppgifter för att behandla förfrågan och besvara eventuella följdförfrågningar." -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "Cookies" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "Cookies är små filer som sparas på en enhet (personlig dator, smartphone o.dyl.). Dessa filer innehåller information specifik för just den enheten och kan användas i olika syften: Cookies får användas för att förbättra användarupplevelsen (t.ex. genom att spara och därigenom \"minnas\" inloggningsuppgifter). Cookies får också användas till att samla in statistisk information som tillåter leverantören att analysera hur webbsidan används och därigenom kunna förbättra tjänsten." -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "Användaren kan själv reglera vilka cookies som ska användas. De flesta webbläsare erbjuder möjligheten att ändra i inställningarna, så att cookies delvis eller helt nekas. Om cookie-funktionen stängs av kan dock webbsidans användarupplevelse och funktionalitet påverkas negativt." -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "Användaren kan hantera cookies som används av många online-annonsörer genom att besöka den amerikanska webbsidan %(us_url)s eller den europeiska webbsidan %(eu_url)s." -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "Registrering" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "De uppgifter som användaren angivit vid registreringen beviljar användandet av tjänsten. Tillhandahållaren av tjänsten får via e-post kontakta användaren med, för tjänsten eller registreringen, relevant information. Sådan information omfattar ändringar av tjänsten eller teknisk information (se även nästa avsnitt)." -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "Vilka personuppgifter som sparas framkommer av de uppgifter som måste anges vid registreringen och som sedan kan hanteras under användarprofilen. Däribland ingår, men det är inte begränsat till, användarens förnamn, efternamn och e-postadress." -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "Avisering via e-post / Nyhetsbrev" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "När ett användarkonto skapas godkänner användaren att denne skickas aviseringar och nyhetsbrev via e-post." -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "Med e-postaviseringar får användaren information om särskilda aktiviteter, baserad på användarens nyttjande av tjänsten. I nyhetsbrevet får användaren allmän information om leverantören och dennes tillhandahållna tjänst(er). " -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "Om användaren inte skulle vilja motta e-post måste han eller hon radera sitt användarkonto." -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "Google Analytics" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "Denna webbsida använder sig av Google Analytics, en webbanalystjänst från Google Inc. (\"Google\"). Google Analytics använder sig av s.k. \"cookies\", textfiler som sparas på användarens enhet för att analysera hur webbsidan används. Den användarinformation som genereras av en cookie skickas och sparas på Googles servrar i USA." -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "Om anonym IP-adress är aktiverad på denna webbsida kommer användarens IP-adress att förkortas inom området för den Europeiska unionens medlemsstater eller andra avtalsparter inom det Europeiska ekonomiska samarbetsområdet. Endast i särskilda undantagsfall kommer IP-adressen i sin helhet att överföras till en Google-server i USA och förkortas där. IP-anonymisering är aktiverad på denna webbsida." -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "Google använder denna information i syfte att utvärdera hur du använder webbsidan, att sammanställa aktivitetsrapporter till webbsidans ägare och tillhandahålla ägaren ytterligare tjänster i samband med aktiviteter på webbsidan och internetanvändning." -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "IP-adressen som skickas av användarens webbläsare inom tillämpningsområdet för Google Analytics kommer inte att länkas samman med annan data som innehas av Google. Användaren kan motsätta sig användandet av cookies genom att ändra inställningarna i webbläsaren. Observera att det i detta fall kan leda till en försämring av webbsidans funktionalitet. Användaren kan även begära att undantas från att bli spårad av Google Analytics med framtida verkan genom att ladda ner och installera ett inaktiverings-add-on, Google Analytics Opt-out Browser Add-on, för den nuvarande webbläsaren: %(optout_plugin_url)s." -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "klicka på denna länk" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "Som ett alternativ till en webbläsar-add-on eller för webbläsare i mobila enheter kan användaren %(optout_javascript)s för att, vid framtida användande av webbsidan, välja att lägga till ett undantag från spårning av Google Analytics (detta undantag gäller endast för den webbläsare som ställts in på sådant sätt och för denna domän). En s.k. \"opt-out cookie\" kommer att sparas på användarens enhet. Om användaren skulle rensa alla sina cookies innebär detta att denne måste lägga till undantaget via ovanstående länk på nytt. " -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "Återkallelser, ändringar, rättelser och uppdateringar" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "Användaren har vid tillämpning av cookies rätt till att kostnadsfritt bli informerad om vilka personliga uppgifter som sparats. Användaren kan även begära att felaktiga uppgifter rättas, eller att lagringen av dennes personliga uppgifter upphävs eller raderas, såvitt det inte finns någon laglig grund till att lagra uppgifterna." -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "Baserad på förlagan till policy för integritetsskydd av advokat Thomas Schwenke – I LAW it" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "fördelar" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "spara tid" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "förbättra självorganiseringen av volontärer" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -542,7 +440,6 @@ msgstr "" "volontärer fördelar sig effektivt mellan pass,\n" "på egen hand kan hjälpare snabbt få en överblick över var det finns behov av hjälp och därigenom motverka underbemannade pass" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -555,7 +452,6 @@ msgstr "" "eller skickas till samordnande personer via ett automatiskt e-postutskick\n" "varje morgon" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -566,15 +462,12 @@ msgstr "" "ju fler boenden och förläggningar som använder sig av plattformen, desto kändare blir vi.\n" "Ju kändare vi blir, desto fler frivilliga kommer hitta till volunteer-planner.org och kunna erbjuda sin hjälp" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "kostnadsfritt" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "Rätt hjälp i rätt tid på rätt plats" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -587,11 +480,9 @@ msgstr "" "det vill vi ändra på! Över volunteer-planner.org kan ansvarig personal på en flyktingförläggning översiktligt koordinera var och när en viss typ av hjälp behövs. Frivilliga får på så sätt information om hur de kan hjälpa och kan anmäla sig till pass\n" "

    " -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "Kostnadsfritt. Reklamfritt." -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -602,17 +493,9 @@ msgstr "" "

    Denna plattform är skapad av ett team frivilliga hjälpare, yrkesverksamma inom områdena ideellt arbete, programvaruutveckling, projektledning, design\n" "och marknadsföring. Sidan är gjord med öppen källkod och får inte användas i kommersiellt syfte. Privatuppgifter (e-postadress, profilinformation o.s.v.) ges inte vidare till tredje part.

    " -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "Kontakta oss!" -#: non_logged_in_area/templates/shelters_need_help.html:72 -#, fuzzy -#| msgid "" -#| "\n" -#| " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" -#| " " msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org" +"href=\"mailto:onboarding@volunteer-planner.org\">onboarding@volunteer-planner.org" -#: organizations/admin.py:128 organizations/admin.py:130 msgid "edit" msgstr "redigera" -#: organizations/admin.py:202 organizations/admin.py:239 -#: organizations/models.py:79 organizations/models.py:148 -msgid "short description" -msgstr "kort beskrivning" - -#: organizations/admin.py:208 organizations/admin.py:245 -#: organizations/admin.py:311 organizations/admin.py:335 -#: organizations/models.py:82 organizations/models.py:151 -#: organizations/models.py:291 organizations/models.py:316 msgid "description" msgstr "beskrivning" -#: organizations/admin.py:214 organizations/admin.py:251 -#: organizations/models.py:85 organizations/models.py:154 msgid "contact info" msgstr "kontaktinformation" -#: organizations/models.py:29 +msgid "organizations" +msgstr "organisationer" + msgid "by invitation" msgstr "genom inbjudan" -#: organizations/models.py:30 msgid "anyone (approved by manager)" msgstr "alla (med godkännande av platschef)" -#: organizations/models.py:31 msgid "anyone" msgstr "alla" -#: organizations/models.py:37 msgid "rejected" msgstr "nekad" -#: organizations/models.py:38 msgid "pending" msgstr "behandlas" -#: organizations/models.py:39 msgid "approved" msgstr "godkänd" -#: organizations/models.py:45 msgid "admin" msgstr "admin" -#: organizations/models.py:46 msgid "manager" msgstr "chef" -#: organizations/models.py:47 msgid "member" msgstr "medlem" -#: organizations/models.py:52 msgid "role" msgstr "ställning" -#: organizations/models.py:56 msgid "status" msgstr "status" -#: organizations/models.py:74 organizations/models.py:143 -#: organizations/models.py:288 organizations/models.py:313 places/models.py:20 -#: scheduletemplates/models.py:13 msgid "name" msgstr "namn" -#: organizations/models.py:88 organizations/models.py:169 msgid "address" msgstr "adress" -#: organizations/models.py:97 organizations/models.py:185 places/models.py:21 msgid "slug" msgstr "slug" -#: organizations/models.py:102 organizations/models.py:195 msgid "join mode" msgstr "typ av tillträde" -#: organizations/models.py:103 msgid "Who can join this organization?" msgstr "Vem kan gå med i organisationen?" -#: organizations/models.py:106 organizations/models.py:139 -#: organizations/models.py:232 msgid "organization" msgstr "organisation" -#: organizations/models.py:107 -msgid "organizations" -msgstr "organisationer" - -#: organizations/models.py:111 organizations/models.py:214 -#: organizations/models.py:299 organizations/models.py:324 -#, python-brace-format -msgid "{name}" -msgstr "{name}" - -#: organizations/models.py:132 msgid "disabled" msgstr "inaktiverad" -#: organizations/models.py:133 msgid "enabled (collapsed)" msgstr "aktiverad (dold)" -#: organizations/models.py:134 msgid "enabled" msgstr "aktiverad" -#: organizations/models.py:165 places/models.py:132 msgid "place" msgstr "plats" -#: organizations/models.py:174 msgid "postal code" msgstr "postnummer" -#: organizations/models.py:179 msgid "Show on map of all facilities" msgstr "Visa på karta över alla anläggningar" -#: organizations/models.py:181 msgid "latitude" msgstr "latitud" -#: organizations/models.py:183 msgid "longitude" msgstr "longitud" -#: organizations/models.py:190 msgid "timeline" msgstr "tidsplan" -#: organizations/models.py:196 msgid "Who can join this facility?" msgstr "Vem kan ansluta sig till denna anläggning?" -#: organizations/models.py:199 organizations/models.py:258 -#: organizations/models.py:283 organizations/models.py:309 -#: scheduler/models.py:51 scheduletemplates/models.py:16 msgid "facility" msgstr "anläggning" -#: organizations/models.py:200 msgid "facilities" msgstr "anläggningar" -#: organizations/models.py:237 msgid "organization member" msgstr "organisationsmedlem" -#: organizations/models.py:238 msgid "organization members" msgstr "organisationsmedlemmar" -#: organizations/models.py:242 #, python-brace-format msgid "{username} at {organization_name} ({user_role})" msgstr "{username} vid {organization_name} ({user_role})" -#: organizations/models.py:264 msgid "facility member" msgstr "anläggningsmedlem" -#: organizations/models.py:265 msgid "facility members" msgstr "anläggningsmedlemmar" -#: organizations/models.py:269 #, python-brace-format msgid "{username} at {facility_name} ({user_role})" msgstr "{username} vid {facility_name} ({user_role})" -#: organizations/models.py:294 scheduler/models.py:46 -#: scheduletemplates/models.py:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:55 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:42 +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + msgid "workplace" msgstr "arbetsplats" -#: organizations/models.py:295 msgid "workplaces" msgstr "arbetsplatser" -#: organizations/models.py:319 scheduler/models.py:44 -#: scheduletemplates/models.py:37 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:41 msgid "task" msgstr "uppgift" -#: organizations/models.py:320 msgid "tasks" msgstr "uppgifter" -#: organizations/templates/emails/membership_approved.txt:2 +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + #, python-format msgid "Hello %(username)s," msgstr "Hej %(username)s," -#: organizations/templates/emails/membership_approved.txt:6 #, python-format msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." msgstr "Ditt medlemsskap hos %(facility_name)s har godkänts. Du kan nu anmäla dig till pass med restriktioner hos denna förläggning." -#: organizations/templates/emails/membership_approved.txt:10 msgid "" "Yours,\n" "the volunteer-planner.org Team" msgstr "Ditt volunteer-planner.org team" -#: organizations/templates/facility.html:9 -#: organizations/templates/organization.html:9 -#: scheduler/templates/helpdesk_breadcrumps.html:6 -#: scheduler/templates/helpdesk_single.html:144 -#: scheduler/templates/shift_details.html:33 msgid "Helpdesk" msgstr "Support" -#: organizations/templates/facility.html:41 -#: organizations/templates/partials/compact_facility.html:31 +msgid "Show on map" +msgstr "" + msgid "Open Shifts" msgstr "Lediga pass" -#: organizations/templates/facility.html:50 -#: scheduler/templates/helpdesk.html:70 msgid "News" msgstr "Nyheter" -#: organizations/templates/manage_members.html:18 msgid "Error" msgstr "Fel" -#: organizations/templates/manage_members.html:18 msgid "You are not allowed to do this." msgstr "Du har inte befogenhet att genomföra denna åtgärd." -#: organizations/templates/manage_members.html:43 #, python-format msgid "Members in %(facility)s" msgstr "Medlemmar i %(facility)s" -#: organizations/templates/manage_members.html:70 msgid "Role" msgstr "Ställning" -#: organizations/templates/manage_members.html:73 msgid "Actions" msgstr "Åtgärder" -#: organizations/templates/manage_members.html:98 -#: organizations/templates/manage_members.html:105 msgid "Block" msgstr "Blockera" -#: organizations/templates/manage_members.html:102 msgid "Accept" msgstr "Godkänn" -#: organizations/templates/organization.html:26 msgid "Facilities" msgstr "Anläggningar" -#: organizations/templates/partials/compact_facility.html:23 -#: scheduler/templates/geographic_helpdesk.html:76 -#: scheduler/templates/helpdesk.html:68 msgid "Show details" msgstr "Visa detaljer" -#: organizations/views.py:137 msgid "volunteer-planner.org: Membership approved" msgstr "volunteer-planner.org: medlemsskap godkänt" -#: osm_tools/templatetags/osm_links.py:17 #, python-brace-format msgctxt "maps search url pattern" msgid "https://www.openstreetmap.org/search?query={location}" msgstr "" -#: places/models.py:69 places/models.py:84 msgid "country" msgstr "land" -#: places/models.py:70 msgid "countries" msgstr "länder" -#: places/models.py:87 places/models.py:106 msgid "region" msgstr "region" -#: places/models.py:88 msgid "regions" msgstr "regioner" -#: places/models.py:109 places/models.py:129 msgid "area" msgstr "område" -#: places/models.py:110 msgid "areas" msgstr "områden" -#: places/models.py:133 msgid "places" msgstr "platser" -#: scheduler/admin.py:28 +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + msgid "number of volunteers" msgstr "antal volontärer" -#: scheduler/admin.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:40 msgid "volunteers" msgstr "volontärer" -#: scheduler/apps.py:8 -msgid "Scheduler" +msgid "scheduler" msgstr "Schemaläggare" -#: scheduler/models.py:41 scheduletemplates/models.py:34 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:53 +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "platser" + msgid "number of needed volunteers" msgstr "antal volontärer som behövs" -#: scheduler/models.py:53 scheduletemplates/admin.py:33 -#: scheduletemplates/models.py:44 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:56 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:43 msgid "starting time" msgstr "starttid" -#: scheduler/models.py:55 scheduletemplates/admin.py:36 -#: scheduletemplates/models.py:47 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:57 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:44 msgid "ending time" msgstr "sluttid" -#: scheduler/models.py:63 scheduletemplates/models.py:54 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:58 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:45 msgid "members only" msgstr "endast medlemmar" -#: scheduler/models.py:65 scheduletemplates/models.py:56 msgid "allow only members to help" msgstr "tillåt endast medlemmar att hjälpa" -#: scheduler/models.py:71 msgid "shift" msgstr "pass" -#: scheduler/models.py:72 scheduletemplates/admin.py:283 msgid "shifts" msgstr "pass" -#: scheduler/models.py:86 scheduletemplates/models.py:77 #, python-brace-format msgid "the next day" msgid_plural "after {number_of_days} days" msgstr[0] "nästa dag" msgstr[1] "efter {number_of_days} dagar" -#: scheduler/models.py:130 msgid "shift helper" msgstr "passhjälpare" -#: scheduler/models.py:131 msgid "shift helpers" msgstr "passhjälpare" -#: scheduler/templates/geographic_helpdesk.html:69 -msgid "Show on map" +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "pass" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" msgstr "" -#: scheduler/templates/geographic_helpdesk.html:81 msgctxt "helpdesk shifts heading" msgid "shifts" msgstr "pass" -#: scheduler/templates/geographic_helpdesk.html:113 #, python-format msgid "There are no upcoming shifts available for %(geographical_name)s." msgstr "Det finns inga kommande pass lediga för %(geographical_name)s." -#: scheduler/templates/helpdesk.html:39 msgid "You can help in the following facilities" msgstr "Du kan hjälpa på följande platser" -#: scheduler/templates/helpdesk.html:43 -msgid "filter" -msgstr "filter" - -#: scheduler/templates/helpdesk.html:59 msgid "see more" msgstr "se mer" -#: scheduler/templates/helpdesk.html:82 +msgid "news" +msgstr "" + msgid "open shifts" msgstr "lediga pass" -#: scheduler/templates/helpdesk_single.html:6 -#: scheduler/templates/shift_details.html:24 #, python-format msgctxt "title with facility" msgid "Schedule for %(facility_name)s" msgstr "Schema för %(facility_name)s" -#: scheduler/templates/helpdesk_single.html:60 #, python-format msgid "%(starting_time)s - %(ending_time)s" msgstr "%(starting_time)s - %(ending_time)s" -#: scheduler/templates/helpdesk_single.html:172 #, python-format msgctxt "title with date" msgid "Schedule for %(schedule_date)s" msgstr "Schema för %(schedule_date)s" -#: scheduler/templates/helpdesk_single.html:185 msgid "Toggle Timeline" msgstr "Se tidsplan" -#: scheduler/templates/helpdesk_single.html:237 msgid "Link" msgstr "Länk" -#: scheduler/templates/helpdesk_single.html:240 msgid "Time" msgstr "Tid" -#: scheduler/templates/helpdesk_single.html:243 msgid "Helpers" msgstr "Hjälpare" -#: scheduler/templates/helpdesk_single.html:254 msgid "Start" msgstr "Början" -#: scheduler/templates/helpdesk_single.html:257 msgid "End" msgstr "Slut" -#: scheduler/templates/helpdesk_single.html:260 msgid "Required" msgstr "Behov" -#: scheduler/templates/helpdesk_single.html:263 msgid "Status" msgstr "Status" -#: scheduler/templates/helpdesk_single.html:266 msgid "Users" msgstr "Användare" -#: scheduler/templates/helpdesk_single.html:269 +msgid "Send message" +msgstr "" + msgid "You" msgstr "Du" -#: scheduler/templates/helpdesk_single.html:321 #, python-format msgid "%(slots_left)s more" msgstr "%(slots_left)s kvar" -#: scheduler/templates/helpdesk_single.html:325 -#: scheduler/templates/helpdesk_single.html:406 -#: scheduler/templates/shift_details.html:134 msgid "Covered" msgstr "Täckt" -#: scheduler/templates/helpdesk_single.html:350 -#: scheduler/templates/shift_details.html:95 +msgid "Send email to all volunteers" +msgstr "" + msgid "Drop out" msgstr "Lämna pass" -#: scheduler/templates/helpdesk_single.html:360 -#: scheduler/templates/shift_details.html:105 msgid "Sign up" msgstr "Delta" -#: scheduler/templates/helpdesk_single.html:371 msgid "Membership pending" msgstr "Medlemsskap behandlas" -#: scheduler/templates/helpdesk_single.html:378 msgid "Membership rejected" msgstr "Medlemsskap avslaget" -#: scheduler/templates/helpdesk_single.html:385 msgid "Become member" msgstr "Bli medlem" -#: scheduler/templates/shift_cancellation_notification.html:1 +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + #, python-format msgid "" "\n" @@ -1140,11 +950,24 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/templates/shift_details.html:108 msgid "Members only" msgstr "Endast medlemmar" -#: scheduler/templates/shift_modification_notification.html:1 +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + #, python-format msgid "" "\n" @@ -1168,282 +991,190 @@ msgid "" "the volunteer-planner.org team\n" msgstr "" -#: scheduler/views.py:169 msgid "The submitted data was invalid." msgstr "Den angivna informationen är ogiltig." -#: scheduler/views.py:177 msgid "User account does not exist." msgstr "Användarkontot finns inte." -#: scheduler/views.py:201 msgid "A membership request has been sent." msgstr "En förfrågan om medlemsskap har skickats." -#: scheduler/views.py:214 msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" msgstr "Vi kan inte lägga till dig till detta pass, då du redan är anmäld till ett annat pass vid samma tidpunkt:" -#: scheduler/views.py:223 msgid "We can't add you to this shift because there are no more slots left." msgstr "Du kan inte delta på detta pass, då det inte finns några lediga platser." -#: scheduler/views.py:230 msgid "You were successfully added to this shift." msgstr "Du har nu blivit tillagd till detta pass." -#: scheduler/views.py:234 -msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" msgstr "" -#: scheduler/views.py:244 #, python-brace-format msgid "You already signed up for this shift at {date_time}." msgstr "Du har redan anmält dig till detta pass den {date_time}." -#: scheduler/views.py:256 msgid "You successfully left this shift." msgstr "Du kommer inte längre att delta i detta pass." -#: scheduletemplates/admin.py:176 +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + #, python-brace-format msgid "A shift already exists at {date}" msgid_plural "{num_shifts} shifts already exists at {date}" msgstr[0] "Ett pass existerar redan den {date}" msgstr[1] "{num_shifts} pass existerar redan den {date}" -#: scheduletemplates/admin.py:232 #, python-brace-format msgid "{num_shifts} shift was added to {date}" msgid_plural "{num_shifts} shifts were added to {date}" msgstr[0] "{num_shifts} pass har lagts till den {date}" msgstr[1] "{num_shifts} pass har lagts till den {date}" -#: scheduletemplates/admin.py:244 msgid "Something didn't work. Sorry about that." msgstr "Oj, det skedde ett fel. Vi beklagar." -#: scheduletemplates/admin.py:277 -msgid "slots" -msgstr "platser" - -#: scheduletemplates/admin.py:289 msgid "from" msgstr "från" -#: scheduletemplates/admin.py:302 msgid "to" msgstr "till" -#: scheduletemplates/models.py:21 msgid "schedule templates" msgstr "utkast till scheman" -#: scheduletemplates/models.py:22 scheduletemplates/models.py:30 msgid "schedule template" msgstr "utkast till schema" -#: scheduletemplates/models.py:50 msgid "days" msgstr "dagar" -#: scheduletemplates/models.py:62 msgid "shift templates" msgstr "byt utkast" -#: scheduletemplates/models.py:63 msgid "shift template" msgstr "byt utkast" -#: scheduletemplates/models.py:97 #, python-brace-format msgid "{task_name} - {workplace_name}" msgstr "{task_name} - {workplace_name}" -#: scheduletemplates/models.py:101 -#, python-brace-format -msgid "{task_name}" -msgstr "{task_name}" - -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:32 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:6 msgid "Home" msgstr "Hem" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:40 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:46 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:14 msgid "Apply Template" msgstr "Använd utkast" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:51 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:38 msgid "no workplace" msgstr "utan arbetsplats" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:52 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:39 msgid "apply" msgstr "använd" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:61 msgid "Select a date" msgstr "Välj ett datum" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:66 -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:125 msgid "Continue" msgstr "Fortsätt" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template.html:70 msgid "Select shift templates" msgstr "Välj byt utkast" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:22 msgid "Please review and confirm shifts to create" msgstr "Var god granska och bekräfta skapa pass" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:118 msgid "Apply" msgstr "Använd" -#: scheduletemplates/templates/admin/scheduletemplates/apply_template_confirm.html:120 msgid "Apply and select new date" msgstr "Använd och välj nytt datum" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save and apply template" msgstr "Spara och använd utkast" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:4 msgid "Delete" msgstr "Radera" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:5 msgid "Save as new" msgstr "Spara som ny" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:6 msgid "Save and add another" msgstr "Spara och lägg till ny" -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:7 msgid "Save and continue editing" msgstr "Spara och fortsätt redigera" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:17 msgid "Delete?" msgstr "Radera?" -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:31 msgid "Change" msgstr "Ändra" -#: shiftmailer/models.py:10 -msgid "last name" -msgstr "efternamn" - -#: shiftmailer/models.py:11 -msgid "position" -msgstr "ställning" - -#: shiftmailer/models.py:12 -msgid "organisation" -msgstr "organisation" - -#: shiftmailer/templates/shifts_today.html:1 -#, python-format -msgctxt "shift today title" -msgid "Schedule for %(organization_name)s on %(date)s" -msgstr "Schema för %(organization_name)s den %(date)s" - -#: shiftmailer/templates/shifts_today.html:6 -msgid "All data is private and not supposed to be given away!" -msgstr "Samtliga uppgifter behandlas konfidentiellt och får inte lämnas ut till tredje part." - -#: shiftmailer/templates/shifts_today.html:15 -#, python-format -msgid "from %(start_time)s to %(end_time)s following %(volunteer_count)s volunteers have signed up:" -msgstr "från klockan %(start_time)s till %(end_time)s har följande %(volunteer_count)s volontärer anmält sig:" - -#: templates/partials/footer.html:17 #, python-format msgid "Questions? Get in touch: %(mailto_link)s" msgstr "Frågor? Hör av dig till oss: %(mailto_link)s" -#: templates/partials/management_tools.html:13 msgid "Manage" msgstr "Hantera" -#: templates/partials/management_tools.html:28 msgid "Members" msgstr "Medlemmar" -#: templates/partials/navigation_bar.html:11 msgid "Toggle navigation" msgstr "Växla navigering" -#: templates/partials/navigation_bar.html:46 msgid "Account" msgstr "Konto" -#: templates/partials/navigation_bar.html:51 msgid "My work shifts" msgstr "" -#: templates/partials/navigation_bar.html:56 msgid "Help" msgstr "Hjälp" -#: templates/partials/navigation_bar.html:59 msgid "Logout" msgstr "Logga ut" -#: templates/partials/navigation_bar.html:63 msgid "Admin" msgstr "Admin" -#: templates/partials/region_selection.html:18 msgid "Regions" msgstr "Regioner" -#: templates/registration/activate.html:5 msgid "Activation complete" msgstr "Aktivering slutförd" -#: templates/registration/activate.html:7 msgid "Activation problem" msgstr "Problem vid aktivering" -#: templates/registration/activate.html:15 msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" msgid "login" msgstr "logga in" -#: templates/registration/activate.html:17 #, python-format msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." msgstr "Tack %(account)s, aktiveringen är slutförd! Du kan nu %(login_link)s med ditt användarnamn och lösenord. " -#: templates/registration/activate.html:25 msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." msgstr "Hoppsan – Antingen har du redan aktiverat ditt konto, eller har du använt dig av en ogiltig eller utgången aktiveringsnyckel." -#: templates/registration/activation_complete.html:3 msgid "Activation successful!" msgstr "Aktiveringen har slutförts! " -#: templates/registration/activation_complete.html:9 msgctxt "Activation successful page" msgid "Thank you for signing up." msgstr "Tack för att du registrerat dig." -#: templates/registration/activation_complete.html:12 msgctxt "Login link text on activation success page" msgid "You can login here." msgstr "Här kan du logga in." -#: templates/registration/activation_email.html:2 #, python-format msgid "" "\n" @@ -1476,7 +1207,6 @@ msgstr "" "\n" "ditt volunteer-planner.org team\n" -#: templates/registration/activation_email.txt:2 #, python-format msgid "" "\n" @@ -1509,89 +1239,74 @@ msgstr "" "\n" "ditt volunteer-planner.org team\n" -#: templates/registration/activation_email_subject.txt:1 msgid "Your volunteer-planner.org registration" msgstr "Din volunteer-planner.org registrering" -#: templates/registration/login.html:15 -msgid "Your username and password didn't match. Please try again." -msgstr "Ditt användarnamn och lösenord stämmer inte överens. Vänligen försök igen." +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "E-postadress" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Lösenord" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Glömt ditt lösenord?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Registrera dig och börja hjälpa" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Lösenord ändrat" -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Lösenordet har nu ändrats." -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Ändra lösenord" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "E-postadress" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Ändra lösenord" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "Lösenordet har återställts" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "logga in" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "Ditt lösenord har återställts! Du kan nu %(login_link)s igen." -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Ange nytt lösenord" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "För att återställa lösenordet anger du ditt nya lösenord nedan" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "Lösenord återställt" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "Vi har skickat ett mejl till dig med en länk för återställning av ditt lösenord. " -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "Kontrollera din e-post och klicka på länken för att fortsätta." -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1608,7 +1323,6 @@ msgstr "" "Klicka på följande länk för att återställa ditt lösenord, eller kopiera och klistra in länken\n" "i din webbläsare:" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1623,105 +1337,80 @@ msgstr "" "Vänliga hälsningar,\n" "%(site_name)s team\n" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "Återställ lösenord" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "Inga problem! Vi skickar dig instruktioner för hur du återställer ditt lösenord." -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Ett aktiveringsmejl har skickats" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Ett aktiveringsmejl kommer att skickas till din e-postadress." -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Vänligen bekräfta registreringen genom att klicka på länken i mejlet. Om du inte mottagit ett mejl inom 10 minuter, titta efter i mappen för skräppost. " -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Skapa ett konto" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Användarnamnet finns redan. Vänligen välj ett annat användarnamn." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." -msgstr "Lösenorden stämmer inte överens." - -#: templates/registration/registration_form.html:54 msgid "Repeat password" msgstr "Upprepa lösenord" -#: templates/registration/registration_form.html:60 -msgid "Sign-up" -msgstr "Skapa konto" +msgid "I have read and agree to the Privacy Policy." +msgstr "" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "Detta fält är nödvändigt." +msgid "This must be checked." +msgstr "" -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." -msgstr "Ange ett giltigt användarnamn. Det får endast bestå av bokstäver, siffror och följande tecken: @/./+/-/_. " +msgid "Sign-up" +msgstr "Skapa konto" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Det finns redan en användare med det här användarnamnet." +msgid "Ukrainian" +msgstr "" -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "Engelska" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Tyska" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "Grekiska" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Ungerska" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" -msgstr "Svenska" +msgid "Polish" +msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "Svenska" + msgid "Turkish" msgstr "" diff --git a/locale/tr/LC_MESSAGES/django.po b/locale/tr/LC_MESSAGES/django.po index 0ebbdd06..f41467dc 100644 --- a/locale/tr/LC_MESSAGES/django.po +++ b/locale/tr/LC_MESSAGES/django.po @@ -1,6 +1,3 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. # # Translators: # Serdar Dalgiç , 2015 @@ -8,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: volunteer-planner.org\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-02-06 20:47+0100\n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" "PO-Revision-Date: 2016-01-29 08:23+0000\n" "Last-Translator: Dorian Cantzen \n" "Language-Team: Turkish (http://www.transifex.com/coders4help/volunteer-planner/language/tr/)\n" @@ -18,517 +15,415 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -#: accounts/admin.py:15 accounts/admin.py:21 shiftmailer/models.py:9 msgid "first name" msgstr "" -#: accounts/admin.py:27 shiftmailer/models.py:13 +msgid "last name" +msgstr "Soyisim" + msgid "email" msgstr "e-posta" -#: accounts/apps.py:8 accounts/apps.py:16 +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + msgid "Accounts" msgstr "" -#: accounts/models.py:16 organizations/models.py:59 +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + msgid "user account" msgstr "" -#: accounts/models.py:17 msgid "user accounts" msgstr "" -#: accounts/templates/shift_list.html:12 msgid "My shifts today:" msgstr "" -#: accounts/templates/shift_list.html:14 msgid "No shifts today." msgstr "" -#: accounts/templates/shift_list.html:19 accounts/templates/shift_list.html:33 -#: accounts/templates/shift_list.html:47 accounts/templates/shift_list.html:61 msgid "Show this work shift" msgstr "" -#: accounts/templates/shift_list.html:26 msgid "My shifts tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:28 msgid "No shifts tomorrow." msgstr "" -#: accounts/templates/shift_list.html:40 msgid "My shifts the day after tomorrow:" msgstr "" -#: accounts/templates/shift_list.html:42 msgid "No shifts the day after tomorrow." msgstr "" -#: accounts/templates/shift_list.html:54 msgid "Further shifts:" msgstr "" -#: accounts/templates/shift_list.html:56 msgid "No further shifts." msgstr "" -#: accounts/templates/shift_list.html:66 msgid "Show my work shifts in the past" msgstr "" -#: accounts/templates/shift_list_done.html:12 msgid "My work shifts in the past:" msgstr "" -#: accounts/templates/shift_list_done.html:14 msgid "No work shifts in the past days yet." msgstr "" -#: accounts/templates/shift_list_done.html:21 msgid "Show my work shifts in the future" msgstr "" -#: accounts/templates/user_account_delete.html:10 -#: accounts/templates/user_detail.html:10 -#: organizations/templates/manage_members.html:64 -#: templates/registration/login.html:23 -#: templates/registration/registration_form.html:35 msgid "Username" msgstr "Kullanıcı Adı" -#: accounts/templates/user_account_delete.html:11 -#: accounts/templates/user_detail.html:11 msgid "First name" msgstr "İsim" -#: accounts/templates/user_account_delete.html:12 -#: accounts/templates/user_detail.html:12 msgid "Last name" msgstr "Soyisim" -#: accounts/templates/user_account_delete.html:13 -#: accounts/templates/user_detail.html:13 -#: organizations/templates/manage_members.html:67 -#: templates/registration/registration_form.html:23 msgid "Email" msgstr "E-posta" -#: accounts/templates/user_account_delete.html:15 msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." msgstr "" -#: accounts/templates/user_account_delete.html:16 msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." msgstr "" -#: accounts/templates/user_account_delete.html:18 msgid "Delete Account (no additional warning)" msgstr "" -#: accounts/templates/user_account_edit.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/scheduletemplate/scheduletemplate_submit_line.html:3 msgid "Save" msgstr "Kaydet" -#: accounts/templates/user_detail.html:16 msgid "Edit Account" msgstr "Hesabı düzenle" -#: accounts/templates/user_detail.html:17 msgid "Delete Account" msgstr "" -#: accounts/templates/user_detail_deleted.html:6 msgid "Your user account has been deleted." msgstr "" -#: content/admin.py:15 content/admin.py:16 content/models.py:15 +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + msgid "additional CSS" msgstr "" -#: content/admin.py:23 msgid "translation" msgstr "" -#: content/admin.py:24 content/admin.py:63 msgid "translations" msgstr "" -#: content/admin.py:58 msgid "No translation available" msgstr "" -#: content/models.py:12 msgid "additional style" msgstr "" -#: content/models.py:18 msgid "additional flat page style" msgstr "" -#: content/models.py:19 msgid "additional flat page styles" msgstr "" -#: content/models.py:25 msgid "flat page" msgstr "" -#: content/models.py:28 msgid "language" msgstr "" -#: content/models.py:32 news/models.py:14 msgid "title" msgstr "başlık" -#: content/models.py:36 msgid "content" msgstr "" -#: content/models.py:46 msgid "flat page translation" msgstr "" -#: content/models.py:47 msgid "flat page translations" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:12 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:33 msgid "View on site" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:32 -#: organizations/templates/manage_members.html:109 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:81 msgid "Remove" msgstr "" -#: content/templates/flatpages/additional_flat_page_style_inline.html:33 -#: scheduletemplates/templates/admin/scheduletemplates/shifttemplate/shift_template_inline.html:80 #, python-format msgid "Add another %(verbose_name)s" msgstr "" -#: content/templates/flatpages/default.html:23 msgid "Edit this page" msgstr "" -#: news/models.py:17 msgid "subtitle" msgstr "altbaşlık" -#: news/models.py:21 msgid "articletext" msgstr "" -#: news/models.py:26 msgid "creation date" msgstr "" -#: news/models.py:39 msgid "news entry" msgstr "" -#: news/models.py:40 msgid "news entries" msgstr "" -#: non_logged_in_area/templates/404.html:8 msgid "Page not found" msgstr "" -#: non_logged_in_area/templates/404.html:10 msgid "We're sorry, but the requested page could not be found." msgstr "" -#: non_logged_in_area/templates/500.html:4 -msgid "Server error" +msgid "server error" msgstr "" -#: non_logged_in_area/templates/500.html:8 msgid "Server Error (500)" msgstr "" -#: non_logged_in_area/templates/500.html:10 -msgid "There's been an error. I should be fixed shortly. Thanks for your patience." +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:57 -#: templates/registration/login.html:3 templates/registration/login.html:10 msgid "Login" msgstr "Giriş" -#: non_logged_in_area/templates/base_non_logged_in.html:60 msgid "Start helping" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:87 -#: templates/partials/footer.html:6 msgid "Main page" msgstr "Ana sayfa" -#: non_logged_in_area/templates/base_non_logged_in.html:90 -#: templates/partials/footer.html:7 msgid "Imprint" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:93 -#: templates/partials/footer.html:8 msgid "About" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:96 -#: templates/partials/footer.html:9 msgid "Supporter" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:99 -#: templates/partials/footer.html:10 msgid "Press" msgstr "" -#: non_logged_in_area/templates/base_non_logged_in.html:102 -#: templates/partials/footer.html:11 msgid "Contact" msgstr "İletişim" -#: non_logged_in_area/templates/base_non_logged_in.html:105 -#: templates/partials/faq_link.html:2 msgid "FAQ" msgstr "" -#: non_logged_in_area/templates/home.html:25 msgid "I want to help!" msgstr "Yardımcı olmak istiyorum!" -#: non_logged_in_area/templates/home.html:27 msgid "Register and see where you can help" msgstr "Kaydolun ve nerede yardımcı olabileceğinizi görün" -#: non_logged_in_area/templates/home.html:32 msgid "Organize volunteers!" msgstr "Gönüllüleri organize edin!" -#: non_logged_in_area/templates/home.html:34 msgid "Register a shelter and organize volunteers" msgstr "Bir barınağa kaydolun ve gönüllüleri organize edin" -#: non_logged_in_area/templates/home.html:48 msgid "Places to help" msgstr "Yardımcı olunacak yerler" -#: non_logged_in_area/templates/home.html:55 msgid "Registered Volunteers" msgstr "Kayıtlı Gönüllüler" -#: non_logged_in_area/templates/home.html:62 msgid "Worked Hours" msgstr "Çalışılan Saatler" -#: non_logged_in_area/templates/home.html:74 msgid "What is it all about?" msgstr "Bu ne hakkında?" -#: non_logged_in_area/templates/home.html:77 msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." msgstr "Mültecilere yardımcı olmaya gönüllü müsünüz? Volunteer-Planner.org size alanda nerede, ne zaman ve nasıl yardımcı olabileceğinizi gösteriyor." -#: non_logged_in_area/templates/home.html:85 msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " msgstr "" -#: non_logged_in_area/templates/home.html:98 msgid "You can help at these locations:" msgstr "" -#: non_logged_in_area/templates/home.html:116 msgid "There are currently no places in need of help." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:6 msgid "Privacy Policy" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:10 msgctxt "Privacy Policy Sec1" msgid "Scope" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:16 msgctxt "Privacy Policy Sec1 P1" msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:21 msgctxt "Privacy Policy Sec1 P2" msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:29 msgctxt "Privacy Policy Sec2" msgid "Access data / server log files" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:35 msgctxt "Privacy Policy Sec2 P1" msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:40 msgctxt "Privacy Policy Sec2 P2" msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:48 msgctxt "Privacy Policy Sec3" msgid "Use of personal data" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:54 msgctxt "Privacy Policy Sec3 P1" msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:59 msgctxt "Privacy Policy Sec3 P2" msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:67 msgctxt "Privacy Policy Sec4" msgid "Contact" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:73 msgctxt "Privacy Policy Sec4 P1" msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:81 msgctxt "Privacy Policy Sec5" msgid "Cookies" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:87 msgctxt "Privacy Policy Sec5 P1" msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:92 msgctxt "Privacy Policy Sec5 P2" msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:97 #, python-format msgctxt "Privacy Policy Sec5 P3" msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:105 msgctxt "Privacy Policy Sec6" msgid "Registration" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:111 msgctxt "Privacy Policy Sec6 P1" msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:116 msgctxt "Privacy Policy Sec6 P2" msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:124 msgctxt "Privacy Policy Sec7" msgid "E-mail notifications / Newsletter" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:130 msgctxt "Privacy Policy Sec7 P1" msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:135 msgctxt "Privacy Policy Sec7 P2" msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:140 msgctxt "Privacy Policy Sec7 P3" msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:148 msgctxt "Privacy Policy Sec8" msgid "Google Analytics" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:154 msgctxt "Privacy Policy Sec8 P1" msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:159 msgctxt "Privacy Policy Sec8 P2" msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:164 msgctxt "Privacy Policy Sec8 P3" msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:169 #, python-format msgctxt "Privacy Policy Sec8 P4" msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:174 msgid "click this link" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:175 #, python-format msgctxt "Privacy Policy Sec8 P5" msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:183 msgctxt "Privacy Policy Sec9" msgid "Revocation, Changes, Corrections, and Updates" msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:189 msgctxt "Privacy Policy Sec9 P1" msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." msgstr "" -#: non_logged_in_area/templates/privacy_policy.html:198 msgctxt "Privacy Policy Credit" msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:20 msgid "advantages" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:22 msgid "save time" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:23 msgid "improve selforganization of the volunteers" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:26 msgid "" "\n" " volunteers split themselves up more effectively into shifts,\n" @@ -536,7 +431,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:32 msgid "" "\n" " shift plans can be given to the security personnel\n" @@ -545,7 +439,6 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:39 msgid "" "\n" " the more shelters and camps are organized with us, the more volunteers are joining\n" @@ -553,15 +446,12 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:45 msgid "for free without costs" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:51 msgid "The right help at the right time at the right place" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:52 msgid "" "\n" "

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" @@ -570,11 +460,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:60 msgid "for free, ad free" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:61 msgid "" "\n" "

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" @@ -582,11 +470,9 @@ msgid "" " " msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:69 msgid "contact us!" msgstr "" -#: non_logged_in_area/templates/shelters_need_help.html:72 msgid "" "\n" " ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "E-posta adresi" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" -#: templates/registration/login.html:26 -#: templates/registration/registration_form.html:44 msgid "Password" msgstr "Şifre" -#: templates/registration/login.html:36 -#: templates/registration/password_reset_form.html:6 msgid "Forgot your password?" msgstr "Şifrenizi mi unuttunuz?" -#: templates/registration/login.html:40 msgid "Help and sign-up" msgstr "Yardım ve kayıt" -#: templates/registration/password_change_done.html:3 msgid "Password changed" msgstr "Şifre değiştirildi." -#: templates/registration/password_change_done.html:7 msgid "Password successfully changed!" msgstr "Şifre başarıyla değiştirildi." -#: templates/registration/password_change_form.html:3 -#: templates/registration/password_change_form.html:6 msgid "Change Password" msgstr "Şifre Değiştir" -#: templates/registration/password_change_form.html:11 -#: templates/registration/password_change_form.html:13 -#: templates/registration/password_reset_form.html:12 -#: templates/registration/password_reset_form.html:14 -msgid "Email address" -msgstr "E-posta adresi" - -#: templates/registration/password_change_form.html:15 -#: templates/registration/password_reset_confirm.html:13 msgid "Change password" msgstr "Şifre değiştir" -#: templates/registration/password_reset_complete.html:3 msgid "Password reset complete" msgstr "" -#: templates/registration/password_reset_complete.html:8 msgctxt "login link title reset password complete page" msgid "log in" msgstr "Giriş" -#: templates/registration/password_reset_complete.html:10 #, python-format msgctxt "reset password complete page" msgid "Your password has been reset! You may now %(login_link)s again." msgstr "" -#: templates/registration/password_reset_confirm.html:3 msgid "Enter new password" msgstr "Yeni şifre girin" -#: templates/registration/password_reset_confirm.html:6 msgid "Enter your new password below to reset your password" msgstr "" -#: templates/registration/password_reset_done.html:3 msgid "Password reset" msgstr "" -#: templates/registration/password_reset_done.html:6 msgid "We sent you an email with a link to reset your password." msgstr "" -#: templates/registration/password_reset_done.html:7 msgid "Please check your email and click the link to continue." msgstr "" -#: templates/registration/password_reset_email.html:3 #, python-format msgid "" "You are receiving this email because you (or someone pretending to be you)\n" @@ -1544,7 +1262,6 @@ msgid "" "into your web browser:" msgstr "" -#: templates/registration/password_reset_email.html:12 #, python-format msgid "" "\n" @@ -1554,105 +1271,80 @@ msgid "" "%(site_name)s Management\n" msgstr "" -#: templates/registration/password_reset_form.html:3 -#: templates/registration/password_reset_form.html:16 msgid "Reset password" msgstr "" -#: templates/registration/password_reset_form.html:7 msgid "No Problem! We'll send you instructions on how to reset your password." msgstr "" -#: templates/registration/registration_complete.html:3 msgid "Activation email sent" msgstr "Aktivasyon e-postası gönderildi" -#: templates/registration/registration_complete.html:7 -#: tests/registration/test_registration.py:145 msgid "An activation mail will be sent to you email address." msgstr "Aktivasyon e-postası, e-posta adresinize gönderilecek." -#: templates/registration/registration_complete.html:13 msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." msgstr "Lütfen kaydınız e-postadaki linkle birlikte onaylayın. Eğer 10 dakika için herhangi bir e-posta almadıysanız, lütfen spam klasörünüze bakın." -#: templates/registration/registration_form.html:3 msgid "Register for an account" msgstr "Hesap açmak için kaydolun" -#: templates/registration/registration_form.html:5 msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." msgstr "" -#: templates/registration/registration_form.html:10 msgid "Create a new account" msgstr "" -#: templates/registration/registration_form.html:26 msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." msgstr "" -#: templates/registration/registration_form.html:31 -msgid "Username already exists. Please choose a different username." -msgstr "Böyle bir kullanıcı adı bulunmakta. Lütfen farklı bir kullanıcı adı seçin." - -#: templates/registration/registration_form.html:38 msgid "Your username will be visible to other users. Don't use spaces or special characters." msgstr "" -#: templates/registration/registration_form.html:51 -#: tests/registration/test_registration.py:131 -msgid "The two password fields didn't match." +msgid "Repeat password" msgstr "" -#: templates/registration/registration_form.html:54 -msgid "Repeat password" +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." msgstr "" -#: templates/registration/registration_form.html:60 msgid "Sign-up" msgstr "Kaydol" -#: tests/registration/test_registration.py:43 -msgid "This field is required." -msgstr "" - -#: tests/registration/test_registration.py:82 -msgid "Enter a valid username. This value may contain only letters, numbers and @/./+/-/_ characters." +msgid "Ukrainian" msgstr "" -#: tests/registration/test_registration.py:110 -msgid "A user with that username already exists." -msgstr "Bu kullanıcı adıyla kaydolmuş bir kullanıcı mevcut." - -#: volunteer_planner/settings/base.py:142 msgid "English" msgstr "İngilizce" -#: volunteer_planner/settings/base.py:143 msgid "German" msgstr "Almanca" -#: volunteer_planner/settings/base.py:144 -msgid "French" +msgid "Czech" msgstr "" -#: volunteer_planner/settings/base.py:145 msgid "Greek" msgstr "" -#: volunteer_planner/settings/base.py:146 +msgid "French" +msgstr "" + msgid "Hungarian" msgstr "Macarca" -#: volunteer_planner/settings/base.py:147 -msgid "Swedish" +msgid "Polish" msgstr "" -#: volunteer_planner/settings/base.py:148 msgid "Portuguese" msgstr "" -#: volunteer_planner/settings/base.py:149 +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + msgid "Turkish" msgstr "" diff --git a/locale/tr_TR/LC_MESSAGES/django.po b/locale/tr_TR/LC_MESSAGES/django.po new file mode 100644 index 00000000..b39d1696 --- /dev/null +++ b/locale/tr_TR/LC_MESSAGES/django.po @@ -0,0 +1,1349 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Turkish (Turkey) (http://www.transifex.com/coders4help/volunteer-planner/language/tr_TR/)\n" +"Language: tr_TR\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" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/uk/LC_MESSAGES/django.po b/locale/uk/LC_MESSAGES/django.po new file mode 100644 index 00000000..1a463af9 --- /dev/null +++ b/locale/uk/LC_MESSAGES/django.po @@ -0,0 +1,1356 @@ +# +# Translators: +# Anna Dunn, 2022 +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Anna Dunn, 2022\n" +"Language-Team: Ukrainian (http://www.transifex.com/coders4help/volunteer-planner/language/uk/)\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" + +msgid "first name" +msgstr "Ім'я" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "Електронна пошта" + +msgid "date joined" +msgstr "Дата приєднання" + +msgid "last login" +msgstr "Останній вхід" + +msgid "Accounts" +msgstr "Облікові записи" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "Прийміть політику конфіденційності" + +msgid "user account" +msgstr "Обліковий запис користувача" + +msgid "user accounts" +msgstr "Облікові записи користувачів" + +msgid "My shifts today:" +msgstr "Мої сьогоднішні зміни:" + +msgid "No shifts today." +msgstr "Сьогодні без змін." + +msgid "Show this work shift" +msgstr "Показати робочу зміну" + +msgid "My shifts tomorrow:" +msgstr "Мої зміни завтра:" + +msgid "No shifts tomorrow." +msgstr "Завтра без змін." + +msgid "My shifts the day after tomorrow:" +msgstr "Мої зміни післязавтра:" + +msgid "No shifts the day after tomorrow." +msgstr "Післязавтра немає змін." + +msgid "Further shifts:" +msgstr "Подальші зміни:" + +msgid "No further shifts." +msgstr "Більше ніяких змін." + +msgid "Show my work shifts in the past" +msgstr "Показати мої робочі зміни у минулому" + +msgid "My work shifts in the past:" +msgstr "Мої робочі зміни в минулому:" + +msgid "No work shifts in the past days yet." +msgstr "Протягом останніх днів робочих змін не було." + +msgid "Show my work shifts in the future" +msgstr "Показати мої робочі зміни на майбутнє" + +msgid "Username" +msgstr "Ім'я користувача" + +msgid "First name" +msgstr "Ім'я" + +msgid "Last name" +msgstr "Прізвище" + +msgid "Email" +msgstr "Електронна пошта" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "Якщо ви видалите свій обліковий запис, ця інформація буде анонімізована, і ви більше не зможете ввійти в Volunteer-Planner." + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "Відновити цю інформацію неможливо. Якщо ви хочете знову працювати волонтером, вам доведеться створити новий обліковий запис." + +msgid "Delete Account (no additional warning)" +msgstr "Видалити обліковий запис (без додаткового попередження)" + +msgid "Save" +msgstr "Зберегти" + +msgid "Edit Account" +msgstr "Редагувати обліковий запис" + +msgid "Delete Account" +msgstr "Видалити обліковий запис" + +msgid "Your user account has been deleted." +msgstr "Ваш обліковий запис користувача було видалено." + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "переклад" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "Немає перекладу" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "мова" + +msgid "title" +msgstr "титул" + +msgid "content" +msgstr "зміст" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "Подивитися на сайті" + +msgid "Remove" +msgstr "Видалити" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "Додати %(verbose_name)s" + +msgid "Edit this page" +msgstr "Редагувати цю сторінку" + +msgid "subtitle" +msgstr "Підзаголовок" + +msgid "articletext" +msgstr "стаття" + +msgid "creation date" +msgstr "дата створення" + +msgid "news entry" +msgstr "запис новин" + +msgid "news entries" +msgstr "записи новин" + +msgid "Page not found" +msgstr "Сторінку не знайдено" + +msgid "We're sorry, but the requested page could not be found." +msgstr "На жаль, не вдалося знайти потрібну сторінку." + +msgid "server error" +msgstr "помилка сервера" + +msgid "Server Error (500)" +msgstr "Помилка сервера 1(500)1" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "Сталася помилка. Це має бути виправлено найближчим часом. Дякуємо за ваше терпіння." + +msgid "Login" +msgstr "Увійти" + +msgid "Start helping" +msgstr "Почни допомагати" + +msgid "Main page" +msgstr "Головна сторінка" + +msgid "Imprint" +msgstr "Головна інформація" + +msgid "About" +msgstr "Про нас" + +msgid "Supporter" +msgstr "Підтримка" + +msgid "Press" +msgstr "Контакти для преси" + +msgid "Contact" +msgstr "Наші контакти" + +msgid "FAQ" +msgstr "Поширені запитання" + +msgid "I want to help!" +msgstr "Я хочу допомогти!" + +msgid "Register and see where you can help" +msgstr "Зареєструйтесь і подивіться, де ви можете допомогти" + +msgid "Organize volunteers!" +msgstr "Організуйте волонтерів!" + +msgid "Register a shelter and organize volunteers" +msgstr "Зареєструйте притулок і організуйте волонтерів" + +msgid "Places to help" +msgstr "Місця, де можна допомогти" + +msgid "Registered Volunteers" +msgstr "Зареєстровані волонтери" + +msgid "Worked Hours" +msgstr "Відпрацьовані години" + +msgid "What is it all about?" +msgstr "Про що йдеться?" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "Ви волонтер і хочете допомогти біженцям? Volunteer-Planner.org показує вам, де, коли і як допомогти безпосередньо на місцях." + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "

    Ця платформа є некомерційною та без реклами. Міжнародна команда проектних робітників, програмістів, менеджерів проектів і дизайнерів є волонтерами для цього проекту та надає свій професійний досвід, щоб змінити ситуацію.

    " + +msgid "You can help at these locations:" +msgstr "Ви можете допомогти у цих місцях:" + +msgid "There are currently no places in need of help." +msgstr "Наразі немає місць, які потребують допомоги." + +msgid "Privacy Policy" +msgstr "Політика конфіденційності" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "Сфера дії" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "Переваги" + +msgid "save time" +msgstr "заощадити час" + +msgid "improve selforganization of the volunteers" +msgstr "покращити самоорганізацію волонтерів" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" +msgstr[1] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" +msgstr[1] "" +msgstr[2] "" +msgstr[3] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/locale/zh_CN/LC_MESSAGES/django.po b/locale/zh_CN/LC_MESSAGES/django.po new file mode 100644 index 00000000..9dc73660 --- /dev/null +++ b/locale/zh_CN/LC_MESSAGES/django.po @@ -0,0 +1,1345 @@ +# +# Translators: +msgid "" +msgstr "" +"Project-Id-Version: volunteer-planner.org\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2022-04-02 18:42+0200\n" +"PO-Revision-Date: 2015-09-24 12:23+0000\n" +"Last-Translator: Dorian Cantzen \n" +"Language-Team: Chinese (China) (http://www.transifex.com/coders4help/volunteer-planner/language/zh_CN/)\n" +"Language: zh_CN\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +msgid "first name" +msgstr "" + +msgid "last name" +msgstr "" + +msgid "email" +msgstr "" + +msgid "date joined" +msgstr "" + +msgid "last login" +msgstr "" + +msgid "Accounts" +msgstr "" + +msgid "Invalid username. Allowed characters are letters, numbers, \".\" and \"_\"." +msgstr "" + +msgid "Username must start with a letter." +msgstr "" + +msgid "Username must end with a letter, a number or \"_\"." +msgstr "" + +msgid "Username must not contain consecutive \".\" or \"_\" characters." +msgstr "" + +msgid "Accept privacy policy" +msgstr "" + +msgid "user account" +msgstr "" + +msgid "user accounts" +msgstr "" + +msgid "My shifts today:" +msgstr "" + +msgid "No shifts today." +msgstr "" + +msgid "Show this work shift" +msgstr "" + +msgid "My shifts tomorrow:" +msgstr "" + +msgid "No shifts tomorrow." +msgstr "" + +msgid "My shifts the day after tomorrow:" +msgstr "" + +msgid "No shifts the day after tomorrow." +msgstr "" + +msgid "Further shifts:" +msgstr "" + +msgid "No further shifts." +msgstr "" + +msgid "Show my work shifts in the past" +msgstr "" + +msgid "My work shifts in the past:" +msgstr "" + +msgid "No work shifts in the past days yet." +msgstr "" + +msgid "Show my work shifts in the future" +msgstr "" + +msgid "Username" +msgstr "" + +msgid "First name" +msgstr "" + +msgid "Last name" +msgstr "" + +msgid "Email" +msgstr "" + +msgid "If you delete your account, this information will be anonymized, and its not possible for you to log into Volunteer-Planner anymore." +msgstr "" + +msgid "Its not possible to recover this information. If you want to work as volunteer again, you will have to create a new account." +msgstr "" + +msgid "Delete Account (no additional warning)" +msgstr "" + +msgid "Save" +msgstr "" + +msgid "Edit Account" +msgstr "" + +msgid "Delete Account" +msgstr "" + +msgid "Your user account has been deleted." +msgstr "" + +#, python-brace-format +msgid "Error {error_code}" +msgstr "" + +msgid "Permission denied" +msgstr "" + +#, python-brace-format +msgid "You are not allowed to do this and have been redirected to {redirect_path}." +msgstr "" + +msgid "additional CSS" +msgstr "" + +msgid "translation" +msgstr "" + +msgid "translations" +msgstr "" + +msgid "No translation available" +msgstr "" + +msgid "additional style" +msgstr "" + +msgid "additional flat page style" +msgstr "" + +msgid "additional flat page styles" +msgstr "" + +msgid "flat page" +msgstr "" + +msgid "language" +msgstr "" + +msgid "title" +msgstr "" + +msgid "content" +msgstr "" + +msgid "flat page translation" +msgstr "" + +msgid "flat page translations" +msgstr "" + +msgid "View on site" +msgstr "" + +msgid "Remove" +msgstr "" + +#, python-format +msgid "Add another %(verbose_name)s" +msgstr "" + +msgid "Edit this page" +msgstr "" + +msgid "subtitle" +msgstr "" + +msgid "articletext" +msgstr "" + +msgid "creation date" +msgstr "" + +msgid "news entry" +msgstr "" + +msgid "news entries" +msgstr "" + +msgid "Page not found" +msgstr "" + +msgid "We're sorry, but the requested page could not be found." +msgstr "" + +msgid "server error" +msgstr "" + +msgid "Server Error (500)" +msgstr "" + +msgid "There's been an error. It should be fixed shortly. Thanks for your patience." +msgstr "" + +msgid "Login" +msgstr "" + +msgid "Start helping" +msgstr "" + +msgid "Main page" +msgstr "" + +msgid "Imprint" +msgstr "" + +msgid "About" +msgstr "" + +msgid "Supporter" +msgstr "" + +msgid "Press" +msgstr "" + +msgid "Contact" +msgstr "" + +msgid "FAQ" +msgstr "" + +msgid "I want to help!" +msgstr "" + +msgid "Register and see where you can help" +msgstr "" + +msgid "Organize volunteers!" +msgstr "" + +msgid "Register a shelter and organize volunteers" +msgstr "" + +msgid "Places to help" +msgstr "" + +msgid "Registered Volunteers" +msgstr "" + +msgid "Worked Hours" +msgstr "" + +msgid "What is it all about?" +msgstr "" + +msgid "You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field." +msgstr "" + +msgid "

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    " +msgstr "" + +msgid "You can help at these locations:" +msgstr "" + +msgid "There are currently no places in need of help." +msgstr "" + +msgid "Privacy Policy" +msgstr "" + +msgctxt "Privacy Policy Sec1" +msgid "Scope" +msgstr "" + +msgctxt "Privacy Policy Sec1 P1" +msgid "This privacy policy informs the user of the collection and use of personal data on this website (herein after \"the service\") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin)." +msgstr "" + +msgctxt "Privacy Policy Sec1 P2" +msgid "The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG)." +msgstr "" + +msgctxt "Privacy Policy Sec2" +msgid "Access data / server log files" +msgstr "" + +msgctxt "Privacy Policy Sec2 P1" +msgid "The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider." +msgstr "" + +msgctxt "Privacy Policy Sec2 P2" +msgid "The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist." +msgstr "" + +msgctxt "Privacy Policy Sec3" +msgid "Use of personal data" +msgstr "" + +msgctxt "Privacy Policy Sec3 P1" +msgid "Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data." +msgstr "" + +msgctxt "Privacy Policy Sec3 P2" +msgid "The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission." +msgstr "" + +msgctxt "Privacy Policy Sec4" +msgid "Contact" +msgstr "" + +msgctxt "Privacy Policy Sec4 P1" +msgid "When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future." +msgstr "" + +msgctxt "Privacy Policy Sec5" +msgid "Cookies" +msgstr "" + +msgctxt "Privacy Policy Sec5 P1" +msgid "Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, \"remembering\" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service." +msgstr "" + +msgctxt "Privacy Policy Sec5 P2" +msgid "The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec5 P3" +msgid "The user can manage the use of cookies from many online advertisers by visiting either the US-american website %(us_url)s or the European website %(eu_url)s." +msgstr "" + +msgctxt "Privacy Policy Sec6" +msgid "Registration" +msgstr "" + +msgctxt "Privacy Policy Sec6 P1" +msgid "The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section)." +msgstr "" + +msgctxt "Privacy Policy Sec6 P2" +msgid "The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address." +msgstr "" + +msgctxt "Privacy Policy Sec7" +msgid "E-mail notifications / Newsletter" +msgstr "" + +msgctxt "Privacy Policy Sec7 P1" +msgid "When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails." +msgstr "" + +msgctxt "Privacy Policy Sec7 P2" +msgid "E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s)." +msgstr "" + +msgctxt "Privacy Policy Sec7 P3" +msgid "If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account." +msgstr "" + +msgctxt "Privacy Policy Sec8" +msgid "Google Analytics" +msgstr "" + +msgctxt "Privacy Policy Sec8 P1" +msgid "This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States." +msgstr "" + +msgctxt "Privacy Policy Sec8 P2" +msgid "In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website." +msgstr "" + +msgctxt "Privacy Policy Sec8 P3" +msgid "Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage." +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P4" +msgid "The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: %(optout_plugin_url)s." +msgstr "" + +msgid "click this link" +msgstr "" + +#, python-format +msgctxt "Privacy Policy Sec8 P5" +msgid "As an alternative to the browser Addon or within browsers on mobile devices, the user can %(optout_javascript)s in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies." +msgstr "" + +msgctxt "Privacy Policy Sec9" +msgid "Revocation, Changes, Corrections, and Updates" +msgstr "" + +msgctxt "Privacy Policy Sec9 P1" +msgid "The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data." +msgstr "" + +msgctxt "Privacy Policy Credit" +msgid "Based on the privacy policy sample of the lawyer Thomas Schwenke - I LAW it" +msgstr "" + +msgid "advantages" +msgstr "" + +msgid "save time" +msgstr "" + +msgid "improve selforganization of the volunteers" +msgstr "" + +msgid "" +"\n" +" volunteers split themselves up more effectively into shifts,\n" +" temporary shortcuts can be anticipated by helpers themselves more easily\n" +" " +msgstr "" + +msgid "" +"\n" +" shift plans can be given to the security personnel\n" +" or coordinating persons by an auto-mailer\n" +" every morning\n" +" " +msgstr "" + +msgid "" +"\n" +" the more shelters and camps are organized with us, the more volunteers are joining\n" +" and all facilities will benefit from a common pool of motivated volunteers\n" +" " +msgstr "" + +msgid "for free without costs" +msgstr "" + +msgid "The right help at the right time at the right place" +msgstr "" + +msgid "" +"\n" +"

    Many people want to help! But often it's not so easy to figure out where, when and how one can help.\n" +" volunteer-planner tries to solve this problem!
    \n" +"

    \n" +" " +msgstr "" + +msgid "for free, ad free" +msgstr "" + +msgid "" +"\n" +"

    The platform was build by a group of volunteering professionals in the area of software development, project management, design,\n" +" and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    \n" +" " +msgstr "" + +msgid "contact us!" +msgstr "" + +msgid "" +"\n" +" ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org\n" +" " +msgstr "" + +msgid "edit" +msgstr "" + +msgid "description" +msgstr "" + +msgid "contact info" +msgstr "" + +msgid "organizations" +msgstr "" + +msgid "by invitation" +msgstr "" + +msgid "anyone (approved by manager)" +msgstr "" + +msgid "anyone" +msgstr "" + +msgid "rejected" +msgstr "" + +msgid "pending" +msgstr "" + +msgid "approved" +msgstr "" + +msgid "admin" +msgstr "" + +msgid "manager" +msgstr "" + +msgid "member" +msgstr "" + +msgid "role" +msgstr "" + +msgid "status" +msgstr "" + +msgid "name" +msgstr "" + +msgid "address" +msgstr "" + +msgid "slug" +msgstr "" + +msgid "join mode" +msgstr "" + +msgid "Who can join this organization?" +msgstr "" + +msgid "organization" +msgstr "" + +msgid "disabled" +msgstr "" + +msgid "enabled (collapsed)" +msgstr "" + +msgid "enabled" +msgstr "" + +msgid "place" +msgstr "" + +msgid "postal code" +msgstr "" + +msgid "Show on map of all facilities" +msgstr "" + +msgid "latitude" +msgstr "" + +msgid "longitude" +msgstr "" + +msgid "timeline" +msgstr "" + +msgid "Who can join this facility?" +msgstr "" + +msgid "facility" +msgstr "" + +msgid "facilities" +msgstr "" + +msgid "organization member" +msgstr "" + +msgid "organization members" +msgstr "" + +#, python-brace-format +msgid "{username} at {organization_name} ({user_role})" +msgstr "" + +msgid "facility member" +msgstr "" + +msgid "facility members" +msgstr "" + +#, python-brace-format +msgid "{username} at {facility_name} ({user_role})" +msgstr "" + +msgid "priority" +msgstr "" + +msgid "Higher value = higher priority" +msgstr "" + +msgid "workplace" +msgstr "" + +msgid "workplaces" +msgstr "" + +msgid "task" +msgstr "" + +msgid "tasks" +msgstr "" + +#, python-brace-format +msgid "User '{user}' manager status of a facility/organization was changed. " +msgstr "" + +#, python-format +msgid "Hello %(username)s," +msgstr "" + +#, python-format +msgid "Your membership request at %(facility_name)s was approved. You now may sign up for restricted shifts at this facility." +msgstr "" + +msgid "" +"Yours,\n" +"the volunteer-planner.org Team" +msgstr "" + +msgid "Helpdesk" +msgstr "" + +msgid "Show on map" +msgstr "" + +msgid "Open Shifts" +msgstr "" + +msgid "News" +msgstr "" + +msgid "Error" +msgstr "" + +msgid "You are not allowed to do this." +msgstr "" + +#, python-format +msgid "Members in %(facility)s" +msgstr "" + +msgid "Role" +msgstr "" + +msgid "Actions" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "Accept" +msgstr "" + +msgid "Facilities" +msgstr "" + +msgid "Show details" +msgstr "" + +msgid "volunteer-planner.org: Membership approved" +msgstr "" + +#, python-brace-format +msgctxt "maps search url pattern" +msgid "https://www.openstreetmap.org/search?query={location}" +msgstr "" + +msgid "country" +msgstr "" + +msgid "countries" +msgstr "" + +msgid "region" +msgstr "" + +msgid "regions" +msgstr "" + +msgid "area" +msgstr "" + +msgid "areas" +msgstr "" + +msgid "places" +msgstr "" + +msgid "Facilities do not match." +msgstr "" + +#, python-brace-format +msgid "\"{object.name}\" belongs to facility \"{object.facility.name}\", but shift takes place at \"{facility.name}\"." +msgstr "" + +msgid "No start time given." +msgstr "" + +msgid "No end time given." +msgstr "" + +msgid "Start time in the past." +msgstr "" + +msgid "Shift ends before it starts." +msgstr "" + +msgid "number of volunteers" +msgstr "" + +msgid "volunteers" +msgstr "" + +msgid "scheduler" +msgstr "" + +msgid "Write a message" +msgstr "" + +msgid "slots" +msgstr "" + +msgid "number of needed volunteers" +msgstr "" + +msgid "starting time" +msgstr "" + +msgid "ending time" +msgstr "" + +msgid "members only" +msgstr "" + +msgid "allow only members to help" +msgstr "" + +msgid "shift" +msgstr "" + +msgid "shifts" +msgstr "" + +#, python-brace-format +msgid "the next day" +msgid_plural "after {number_of_days} days" +msgstr[0] "" + +msgid "shift helper" +msgstr "" + +msgid "shift helpers" +msgstr "" + +msgid "shift notification" +msgid_plural "shift notifications" +msgstr[0] "" + +msgid "Message" +msgstr "" + +msgid "sender" +msgstr "" + +msgid "send date" +msgstr "" + +msgid "Shift" +msgstr "" + +msgid "recipients" +msgstr "" + +#, python-brace-format +msgid "Volunteer-Planner: A Message from shift manager of {shift_title}" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +msgctxt "helpdesk shifts heading" +msgid "shifts" +msgstr "" + +#, python-format +msgid "There are no upcoming shifts available for %(geographical_name)s." +msgstr "" + +msgid "You can help in the following facilities" +msgstr "" + +msgid "see more" +msgstr "" + +msgid "news" +msgstr "" + +msgid "open shifts" +msgstr "" + +#, python-format +msgctxt "title with facility" +msgid "Schedule for %(facility_name)s" +msgstr "" + +#, python-format +msgid "%(starting_time)s - %(ending_time)s" +msgstr "" + +#, python-format +msgctxt "title with date" +msgid "Schedule for %(schedule_date)s" +msgstr "" + +msgid "Toggle Timeline" +msgstr "" + +msgid "Link" +msgstr "" + +msgid "Time" +msgstr "" + +msgid "Helpers" +msgstr "" + +msgid "Start" +msgstr "" + +msgid "End" +msgstr "" + +msgid "Required" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "Users" +msgstr "" + +msgid "Send message" +msgstr "" + +msgid "You" +msgstr "" + +#, python-format +msgid "%(slots_left)s more" +msgstr "" + +msgid "Covered" +msgstr "" + +msgid "Send email to all volunteers" +msgstr "" + +msgid "Drop out" +msgstr "" + +msgid "Sign up" +msgstr "" + +msgid "Membership pending" +msgstr "" + +msgid "Membership rejected" +msgstr "" + +msgid "Become member" +msgstr "" + +msgid "send" +msgstr "" + +msgid "cancel" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to cancel the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Members only" +msgstr "" + +#, python-format +msgid "" +"Hello %(recipient)s,\n" +"\n" +"The shift manager of the shift %(shift_title)s at %(location)s wants to let you know:\n" +"----------------------\n" +"%(message)s\n" +"----------------------\n" +"Please reply to %(sender_email)s for further questions.\n" +"\n" +"\n" +"Best,\n" +"Your volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello,\n" +"\n" +"we're sorry, but we had to change the times of the following shift at request of the organizer:\n" +"\n" +"%(shift_title)s, %(location)s\n" +"%(old_from_date)s from %(old_from_time)s to %(old_to_time)s o'clock\n" +"\n" +"The new shift times are:\n" +"\n" +"%(from_date)s from %(from_time)s to %(to_time)s o'clock\n" +"\n" +"If you can not help at the new times any longer, please cancel your attendance at volunteer-planner.org.\n" +"\n" +"This is an automatically generated e-mail. If you have any questions, please contact the facility directly.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "The submitted data was invalid." +msgstr "" + +msgid "User account does not exist." +msgstr "" + +msgid "A membership request has been sent." +msgstr "" + +msgid "We can't add you to this shift because you've already agreed to other shifts at the same time:" +msgstr "" + +msgid "We can't add you to this shift because there are no more slots left." +msgstr "" + +msgid "You were successfully added to this shift." +msgstr "" + +msgid "The shift you joined overlaps with other shifts you already joined. Please check for conflicts:" +msgstr "" + +#, python-brace-format +msgid "You already signed up for this shift at {date_time}." +msgstr "" + +msgid "You successfully left this shift." +msgstr "" + +msgid "You have no permissions to send emails!" +msgstr "" + +msgid "Email has been sent." +msgstr "" + +#, python-brace-format +msgid "A shift already exists at {date}" +msgid_plural "{num_shifts} shifts already exists at {date}" +msgstr[0] "" + +#, python-brace-format +msgid "{num_shifts} shift was added to {date}" +msgid_plural "{num_shifts} shifts were added to {date}" +msgstr[0] "" + +msgid "Something didn't work. Sorry about that." +msgstr "" + +msgid "from" +msgstr "" + +msgid "to" +msgstr "" + +msgid "schedule templates" +msgstr "" + +msgid "schedule template" +msgstr "" + +msgid "days" +msgstr "" + +msgid "shift templates" +msgstr "" + +msgid "shift template" +msgstr "" + +#, python-brace-format +msgid "{task_name} - {workplace_name}" +msgstr "" + +msgid "Home" +msgstr "" + +msgid "Apply Template" +msgstr "" + +msgid "no workplace" +msgstr "" + +msgid "apply" +msgstr "" + +msgid "Select a date" +msgstr "" + +msgid "Continue" +msgstr "" + +msgid "Select shift templates" +msgstr "" + +msgid "Please review and confirm shifts to create" +msgstr "" + +msgid "Apply" +msgstr "" + +msgid "Apply and select new date" +msgstr "" + +msgid "Save and apply template" +msgstr "" + +msgid "Delete" +msgstr "" + +msgid "Save as new" +msgstr "" + +msgid "Save and add another" +msgstr "" + +msgid "Save and continue editing" +msgstr "" + +msgid "Delete?" +msgstr "" + +msgid "Change" +msgstr "" + +#, python-format +msgid "Questions? Get in touch: %(mailto_link)s" +msgstr "" + +msgid "Manage" +msgstr "" + +msgid "Members" +msgstr "" + +msgid "Toggle navigation" +msgstr "" + +msgid "Account" +msgstr "" + +msgid "My work shifts" +msgstr "" + +msgid "Help" +msgstr "" + +msgid "Logout" +msgstr "" + +msgid "Admin" +msgstr "" + +msgid "Regions" +msgstr "" + +msgid "Activation complete" +msgstr "" + +msgid "Activation problem" +msgstr "" + +msgctxt "login link title in registration confirmation success text 'You may now %(login_link)s'" +msgid "login" +msgstr "" + +#, python-format +msgid "Thanks %(account)s, activation complete! You may now %(login_link)s using the username and password you set at registration." +msgstr "" + +msgid "Oops – Either you activated your account already, or the activation key is invalid or has expired." +msgstr "" + +msgid "Activation successful!" +msgstr "" + +msgctxt "Activation successful page" +msgid "Thank you for signing up." +msgstr "" + +msgctxt "Login link text on activation success page" +msgid "You can login here." +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +#, python-format +msgid "" +"\n" +"Hello %(user)s,\n" +"\n" +"thank you very much that you want to help! Just one more step and you'll be ready to start volunteering!\n" +"\n" +"Please click the following link to finish your registration at volunteer-planner.org:\n" +"\n" +"http://%(site_domain)s%(activation_key_url)s\n" +"\n" +"This link will expire in %(expiration_days)s days.\n" +"\n" +"Yours,\n" +"\n" +"the volunteer-planner.org team\n" +msgstr "" + +msgid "Your volunteer-planner.org registration" +msgstr "" + +msgid "admin approval" +msgstr "" + +#, python-format +msgid "Your account is now approved. You can login now." +msgstr "" + +msgid "Your account is now approved. You can log in using the following link" +msgstr "" + +msgid "Email address" +msgstr "" + +#, python-format +msgid "%(email_trans)s / %(username_trans)s" +msgstr "" + +msgid "Password" +msgstr "" + +msgid "Forgot your password?" +msgstr "" + +msgid "Help and sign-up" +msgstr "" + +msgid "Password changed" +msgstr "" + +msgid "Password successfully changed!" +msgstr "" + +msgid "Change Password" +msgstr "" + +msgid "Change password" +msgstr "" + +msgid "Password reset complete" +msgstr "" + +msgctxt "login link title reset password complete page" +msgid "log in" +msgstr "" + +#, python-format +msgctxt "reset password complete page" +msgid "Your password has been reset! You may now %(login_link)s again." +msgstr "" + +msgid "Enter new password" +msgstr "" + +msgid "Enter your new password below to reset your password" +msgstr "" + +msgid "Password reset" +msgstr "" + +msgid "We sent you an email with a link to reset your password." +msgstr "" + +msgid "Please check your email and click the link to continue." +msgstr "" + +#, python-format +msgid "" +"You are receiving this email because you (or someone pretending to be you)\n" +"requested that your password be reset on the %(domain)s site. If you do not\n" +"wish to reset your password, please ignore this message.\n" +"\n" +"To reset your password, please click the following link, or copy and paste it\n" +"into your web browser:" +msgstr "" + +#, python-format +msgid "" +"\n" +"Your username, in case you've forgotten: %(username)s\n" +"\n" +"Best regards,\n" +"%(site_name)s Management\n" +msgstr "" + +msgid "Reset password" +msgstr "" + +msgid "No Problem! We'll send you instructions on how to reset your password." +msgstr "" + +msgid "Activation email sent" +msgstr "" + +msgid "An activation mail will be sent to you email address." +msgstr "" + +msgid "Please confirm registration with the link in the email. If you haven't received it in 10 minutes, look for it in your spam folder." +msgstr "" + +msgid "Register for an account" +msgstr "" + +msgid "You can create a new user account here. If you already have a user account click on LOGIN in the upper right corner." +msgstr "" + +msgid "Create a new account" +msgstr "" + +msgid "Volunteer-Planner and shelters will send you emails concerning your shifts." +msgstr "" + +msgid "Your username will be visible to other users. Don't use spaces or special characters." +msgstr "" + +msgid "Repeat password" +msgstr "" + +msgid "I have read and agree to the Privacy Policy." +msgstr "" + +msgid "This must be checked." +msgstr "" + +msgid "Sign-up" +msgstr "" + +msgid "Ukrainian" +msgstr "" + +msgid "English" +msgstr "" + +msgid "German" +msgstr "" + +msgid "Czech" +msgstr "" + +msgid "Greek" +msgstr "" + +msgid "French" +msgstr "" + +msgid "Hungarian" +msgstr "" + +msgid "Polish" +msgstr "" + +msgid "Portuguese" +msgstr "" + +msgid "Russian" +msgstr "" + +msgid "Swedish" +msgstr "" + +msgid "Turkish" +msgstr "" diff --git a/manage.py b/manage.py index 796aba1b..392af612 100755 --- a/manage.py +++ b/manage.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # coding=utf-8 import os import sys diff --git a/news/admin.py b/news/admin.py index 6b6adc73..1b65172e 100755 --- a/news/admin.py +++ b/news/admin.py @@ -1,34 +1,44 @@ # coding: utf-8 -from django.contrib import admin -from django import forms from ckeditor.widgets import CKEditorWidget +from django import forms +from django.contrib import admin +from organizations.admin import MembershipFieldListFilter, MembershipFilteredAdmin from . import models class NewsAdminForm(forms.ModelForm): class Meta: model = models.NewsEntry - fields = '__all__' + fields = "__all__" text = forms.CharField(widget=CKEditorWidget()) @admin.register(models.NewsEntry) -class NewsAdmin(admin.ModelAdmin): +class NewsAdmin(MembershipFilteredAdmin): form = NewsAdminForm list_display = ( - 'title', - 'subtitle', - 'slug', - 'creation_date', - 'facility', - 'organization' + "title", + "subtitle", + "slug", + "creation_date", + "facility", + "organization", ) list_filter = ( - 'facility', - 'organization' + ("facility", MembershipFieldListFilter), + ("organization", MembershipFieldListFilter), ) - readonly_fields = ('slug',) + readonly_fields = ("slug",) + search_fields = ("title", "subtitle") + + def get_queryset(self, request): + return ( + super(NewsAdmin, self) + .get_queryset(request) + .select_related("organization", "facility") + .prefetch_related("organization", "facility") + ) diff --git a/news/migrations/0001_initial.py b/news/migrations/0001_initial.py index 3d9ccd7a..1556e168 100644 --- a/news/migrations/0001_initial.py +++ b/news/migrations/0001_initial.py @@ -1,27 +1,62 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0005_auto_20151021_1153'), + ("organizations", "0005_auto_20151021_1153"), ] operations = [ migrations.CreateModel( - name='News', + name="News", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('slug', models.SlugField(max_length=255, auto_created=True)), - ('creation_date', models.DateField(auto_now=True, verbose_name='creation date')), - ('title', models.CharField(max_length=255, verbose_name='title')), - ('subtitle', models.CharField(max_length=255, null=True, verbose_name='subtitle', blank=True)), - ('text', models.TextField(max_length=20055, verbose_name='articletext')), - ('facility', models.ForeignKey(blank=True, to='organizations.Facility', null=True)), - ('organization', models.ForeignKey(blank=True, to='organizations.Organization', null=True)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("slug", models.SlugField(max_length=255, auto_created=True)), + ( + "creation_date", + models.DateField(auto_now=True, verbose_name="creation date"), + ), + ("title", models.CharField(max_length=255, verbose_name="title")), + ( + "subtitle", + models.CharField( + max_length=255, null=True, verbose_name="subtitle", blank=True + ), + ), + ( + "text", + models.TextField(max_length=20055, verbose_name="articletext"), + ), + ( + "facility", + models.ForeignKey( + blank=True, + to="organizations.Facility", + null=True, + on_delete=models.SET_NULL, + ), + ), + ( + "organization", + models.ForeignKey( + blank=True, + to="organizations.Organization", + null=True, + on_delete=models.SET_NULL, + ), + ), ], ), ] diff --git a/news/migrations/0002_rename_news_model.py b/news/migrations/0002_rename_news_model.py index 74928b46..a1b3bb49 100644 --- a/news/migrations/0002_rename_news_model.py +++ b/news/migrations/0002_rename_news_model.py @@ -1,42 +1,51 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0007_auto_20151023_2129'), - ('news', '0001_initial'), + ("organizations", "0007_auto_20151023_2129"), + ("news", "0001_initial"), ] operations = [ - migrations.RenameModel( - old_name='News', - new_name='NewsEntry' - ), + migrations.RenameModel(old_name="News", new_name="NewsEntry"), migrations.AlterModelOptions( - name='newsentry', - options={'ordering': ('facility', 'organization', 'creation_date'), - 'verbose_name': 'news entry', - 'verbose_name_plural': 'news entries'}, + name="newsentry", + options={ + "ordering": ("facility", "organization", "creation_date"), + "verbose_name": "news entry", + "verbose_name_plural": "news entries", + }, ), migrations.AlterField( - model_name='newsentry', - name='facility', - field=models.ForeignKey(related_name='news_entries', blank=True, - to='organizations.Facility', null=True), + model_name="newsentry", + name="facility", + field=models.ForeignKey( + related_name="news_entries", + blank=True, + to="organizations.Facility", + null=True, + on_delete=models.SET_NULL, + ), ), migrations.AlterField( - model_name='newsentry', - name='organization', - field=models.ForeignKey(related_name='news_entries', blank=True, - to='organizations.Organization', null=True), + model_name="newsentry", + name="organization", + field=models.ForeignKey( + related_name="news_entries", + blank=True, + to="organizations.Organization", + null=True, + on_delete=models.SET_NULL, + ), ), migrations.AlterField( - model_name='newsentry', - name='text', - field=models.TextField(verbose_name='articletext'), + model_name="newsentry", + name="text", + field=models.TextField(verbose_name="articletext"), ), ] diff --git a/news/migrations/0003_cascade_deletion.py b/news/migrations/0003_cascade_deletion.py new file mode 100644 index 00000000..1f001c7e --- /dev/null +++ b/news/migrations/0003_cascade_deletion.py @@ -0,0 +1,36 @@ +# Generated by Django 2.0.5 on 2019-07-18 22:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("news", "0002_rename_news_model"), + ] + + operations = [ + migrations.AlterField( + model_name="newsentry", + name="facility", + field=models.ForeignKey( + related_name="news_entries", + blank=True, + to="organizations.Facility", + null=True, + on_delete=django.db.models.deletion.CASCADE, + ), + ), + migrations.AlterField( + model_name="newsentry", + name="organization", + field=models.ForeignKey( + related_name="news_entries", + blank=True, + to="organizations.Organization", + null=True, + on_delete=django.db.models.deletion.CASCADE, + ), + ), + ] diff --git a/news/models.py b/news/models.py index 2df66be9..1071f643 100755 --- a/news/models.py +++ b/news/models.py @@ -1,44 +1,47 @@ # coding: utf-8 from django.db import models -from django.utils.translation import ugettext_lazy as _ from django.template.defaultfilters import slugify +from django.utils.translation import gettext_lazy as _ class NewsEntry(models.Model): """ facilities and organizations can publish news. - TODO: News are shown in appropriate organization templates """ - title = models.CharField(max_length=255, - verbose_name=_("title")) - subtitle = models.CharField(max_length=255, - verbose_name=_("subtitle"), - null=True, - blank=True) + title = models.CharField(max_length=255, verbose_name=_("title")) + + subtitle = models.CharField( + max_length=255, verbose_name=_("subtitle"), null=True, blank=True + ) text = models.TextField(verbose_name=_("articletext")) slug = models.SlugField(auto_created=True, max_length=255) - creation_date = models.DateField(auto_now=True, - verbose_name=_("creation date")) + creation_date = models.DateField(auto_now=True, verbose_name=_("creation date")) - facility = models.ForeignKey('organizations.Facility', - related_name='news_entries', - null=True, - blank=True) + facility = models.ForeignKey( + "organizations.Facility", + models.CASCADE, + related_name="news_entries", + null=True, + blank=True, + ) - organization = models.ForeignKey('organizations.Organization', - related_name='news_entries', - null=True, - blank=True) + organization = models.ForeignKey( + "organizations.Organization", + models.CASCADE, + related_name="news_entries", + null=True, + blank=True, + ) class Meta: - verbose_name = _('news entry') - verbose_name_plural = _('news entries') - ordering = ('facility', 'organization', 'creation_date') + verbose_name = _("news entry") + verbose_name_plural = _("news entries") + ordering = ("facility", "organization", "creation_date") def save(self, *args, **kwargs): if not self.id: @@ -47,4 +50,7 @@ def save(self, *args, **kwargs): super(NewsEntry, self).save(*args, **kwargs) def __unicode__(self): - return u'{}'.format(self.title) + return "{}".format(self.title) + + def __str__(self): + return self.__unicode__() diff --git a/news/tests.py b/news/tests.py index 7ce503c2..a39b155a 100755 --- a/news/tests.py +++ b/news/tests.py @@ -1,3 +1 @@ -from django.test import TestCase - # Create your tests here. diff --git a/news/views.py b/news/views.py index 91ea44a2..60f00ef0 100755 --- a/news/views.py +++ b/news/views.py @@ -1,3 +1 @@ -from django.shortcuts import render - # Create your views here. diff --git a/non_logged_in_area/admin.py b/non_logged_in_area/admin.py index 970f994f..d756f454 100644 --- a/non_logged_in_area/admin.py +++ b/non_logged_in_area/admin.py @@ -1,4 +1,3 @@ # coding=utf-8 -from django.contrib import admin # Register your models here. diff --git a/non_logged_in_area/context_processors.py b/non_logged_in_area/context_processors.py new file mode 100644 index 00000000..f170c45f --- /dev/null +++ b/non_logged_in_area/context_processors.py @@ -0,0 +1,8 @@ +# coding: utf-8 + +from django.contrib.sites.shortcuts import get_current_site +from django.utils.functional import SimpleLazyObject + + +def current_site(request): + return {"site": SimpleLazyObject(lambda: get_current_site(request))} diff --git a/non_logged_in_area/models.py b/non_logged_in_area/models.py index 6ec9881a..a309ba4a 100644 --- a/non_logged_in_area/models.py +++ b/non_logged_in_area/models.py @@ -1,4 +1,3 @@ # coding=utf-8 -from django.db import models # Create your models here. diff --git a/non_logged_in_area/templates/404.html b/non_logged_in_area/templates/404.html index c6bb55c3..4d539a84 100644 --- a/non_logged_in_area/templates/404.html +++ b/non_logged_in_area/templates/404.html @@ -5,9 +5,9 @@ {% block content %}
    -

    {% trans "Page not found" %}

    +

    {% translate "Page not found" %}

    {{ request_path }}
    -

    {% trans "We're sorry, but the requested page could not be found." %}

    +

    {% translate "We're sorry, but the requested page could not be found." %}

    {% endblock %} diff --git a/non_logged_in_area/templates/500.html b/non_logged_in_area/templates/500.html index c1d0a6ae..33c14971 100644 --- a/non_logged_in_area/templates/500.html +++ b/non_logged_in_area/templates/500.html @@ -1,15 +1,15 @@ {% extends "base_non_logged_in.html" %} {% load i18n %} -{% block title %} Volunteer Planner - {% trans "Server error" %}{% endblock %} +{% block title %} Volunteer Planner - {% translate "server error" as server_error_title %}{{ server_error_title|title }}{% endblock %} {% block content %}
    -

    {% trans "Server Error (500)" %}

    +

    {% translate "Server Error (500)" %}

    - {% blocktrans trimmed %} - There's been an error. I should be fixed shortly. Thanks for your patience. - {% endblocktrans %} + {% blocktranslate trimmed %} + There's been an error. It should be fixed shortly. Thanks for your patience. + {% endblocktranslate %}

    diff --git a/non_logged_in_area/templates/base_non_logged_in.html b/non_logged_in_area/templates/base_non_logged_in.html index 861eef72..e0061a6d 100644 --- a/non_logged_in_area/templates/base_non_logged_in.html +++ b/non_logged_in_area/templates/base_non_logged_in.html @@ -1,4 +1,4 @@ -{% load humanize i18n staticfiles %} +{% load humanize i18n static %} @@ -19,11 +19,11 @@ + + + - - {% block additional_header %} - {% include "../templates/partials/switch_language.html" with nav_item_tag="span" %} + {% include "partials/switch_language.html" with nav_item_tag="span" %} - {% trans "Login" %} + {% translate "Login" %} - {% trans "Start helping" %} + {% translate "Start helping" %}
    @@ -84,25 +84,30 @@ diff --git a/non_logged_in_area/templates/home.html b/non_logged_in_area/templates/home.html index ac35efd2..1d059baa 100644 --- a/non_logged_in_area/templates/home.html +++ b/non_logged_in_area/templates/home.html @@ -22,22 +22,21 @@
    -

    {% trans "I want to help!" %}

    +

    {% translate "I want to help!" %}


    -

    {% trans "Register and see where you can help" %}

    +

    {% translate "Register and see where you can help" %}

    -

    {% trans "Organize volunteers!" %}

    +

    {% translate "Organize volunteers!" %}


    -

    {% trans "Register a shelter and organize volunteers" %}

    +

    {% translate "Register a shelter and organize volunteers" %}

    {% get_current_language as LANGUAGE_CODE %} - {% cache 900 volunteer_stats LANGUAGE_CODE %} {% get_volunteer_stats as volunteer_stats %} @@ -45,21 +44,21 @@

    {% trans "Organize volunteers!" %}

    {{ volunteer_stats.facility_count|intcomma }}
    - {% trans "Places to help" %} + {% translate "Places to help" %}
    {{ volunteer_stats.volunteer_count|intcomma }}
    - {% trans "Registered Volunteers" %} + {% translate "Registered Volunteers" %}
    {{ volunteer_stats.volunteer_hours|intcomma }}
    - {% trans "Worked Hours" %} + {% translate "Worked Hours" %} {% endcache %}
    @@ -71,23 +70,23 @@

    {% trans "Organize volunteers!" %}

    -

    {% trans "What is it all about?" %}

    +

    {% translate "What is it all about?" %}

    - {% blocktrans trimmed %} + {% blocktranslate trimmed %} You are a volunteer and want to help refugees? Volunteer-Planner.org shows you where, when and how to help directly in the field. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed %} -

    This platform is non-commercial and ads-free. An + {% blocktranslate trimmed %} +

    This platform is non-commercial and ads-free. An international team of field workers, programmers, project managers and designers are volunteering for this project and bring in their professional experience to make a difference.

    - {% endblocktrans %} + {% endblocktranslate %}
    @@ -95,7 +94,7 @@

    {% trans "What is it all about?" %}

    -

    {% trans "You can help at these locations:" %}

    +

    {% translate "You can help at these locations:" %}

    {% if facilities_by_area %} {% for facility_in_area in facilities_by_area %} {% comment %} @@ -103,7 +102,7 @@

    {% trans "You can help at these locations:" %}

    list. At the moment, there's not enough and it's more usable and SEO friendly to show all. {% endcomment %} - {{ facility_in_area.grouper }} + {{ facility_in_area.grouper }}

    {% for facility in facility_in_area.list %} {{ facility.name }} @@ -112,7 +111,7 @@

    {% trans "You can help at these locations:" %}

    {% endfor %} {% else %} - {% trans "There are currently no places in need of help." %} + {% translate "There are currently no places in need of help." %} {% endif %}
    diff --git a/non_logged_in_area/templates/privacy_policy.html b/non_logged_in_area/templates/privacy_policy.html index 894d7362..e28b1df4 100644 --- a/non_logged_in_area/templates/privacy_policy.html +++ b/non_logged_in_area/templates/privacy_policy.html @@ -3,203 +3,203 @@ {% block content %} -

    {% trans "Privacy Policy" %}

    +

    {% translate "Privacy Policy" %}

    - {% blocktrans trimmed context "Privacy Policy Sec1" %} + {% blocktranslate trimmed context "Privacy Policy Sec1" %} Scope - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec1 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec1 P1" %} This privacy policy informs the user of the collection and use of personal data on this website (herein after "the service") by the service provider, the Benefit e.V. (Wollankstr. 2, 13187 Berlin). - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec1 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec1 P2" %} The legal basis for the privacy policy are the German Data Protection Act (Bundesdatenschutzgesetz, BDSG) and the German Telemedia Act (Telemediengesetz, TMG). - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec2" %} + {% blocktranslate trimmed context "Privacy Policy Sec2" %} Access data / server log files - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec2 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec2 P1" %} The service provider (or the provider of his webspace) collects data on every access to the service and stores this access data in so-called server log files. Access data includes the name of the website that is being visited, which files are being accessed, the date and time of access, transfered data, notification of successful access, the type and version number of the user's web browser, the user's operating system, the referrer URL (i.e., the website the user visited previously), the user's IP address, and the name of the user's Internet provider. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec2 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec2 P2" %} The service provider uses the server log files for statistical purposes and for the operation, the security, and the enhancement of the provided service only. However, the service provider reserves the right to reassess the log files at any time if specific indications for an illegal use of the service exist. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec3" %} + {% blocktranslate trimmed context "Privacy Policy Sec3" %} Use of personal data - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec3 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec3 P1" %} Personal data is information which can be used to identify a person, i.e., all data that can be traced back to a specific person. Personal data includes the name, the e-mail address, or the telephone number of a user. Even data on personal preferences, hobbies, memberships, or visited websites counts as personal data. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec3 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec3 P2" %} The service provider collects, uses, and shares personal data with third parties only if he is permitted by law to do so or if the user has given his permission. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec4" %} + {% blocktranslate trimmed context "Privacy Policy Sec4" %} Contact - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec4 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec4 P1" %} When contacting the service provider (e.g. via e-mail or using a web contact form), the data provided by the user is stored for processing the inquiry and for answering potential follow-up inquiries in the future. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec5" %} + {% blocktranslate trimmed context "Privacy Policy Sec5" %} Cookies - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec5 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec5 P1" %} Cookies are small files that are being stored on the user's device (personal computer, smartphone, or the like) with information specific to that device. They can be used for various purposes: Cookies may be used to improve the user experience (e.g. by storing and, hence, "remembering" login credentials). Cookies may also be used to collect statistical data that allows the service provider to analyse the user's usage of the website, aiming to improve the service. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec5 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec5 P2" %} The user can customize the use of cookies. Most web browsers offer settings to restrict or even completely prevent the storing of cookies. However, the service provider notes that such restrictions may have a negative impact on the user experience and the functionality of the website. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec5 P3" with us_url="http://www.aboutads.info/choices/" eu_url="http://www.youronlinechoices.com/uk/your-ad-choices/" %} + {% blocktranslate trimmed context "Privacy Policy Sec5 P3" with us_url="http://www.aboutads.info/choices/" eu_url="http://www.youronlinechoices.com/uk/your-ad-choices/" %} The user can manage the use of cookies from many online advertisers by visiting either the US-american website {{ us_url }} or the European website {{ eu_url }}. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec6" %} + {% blocktranslate trimmed context "Privacy Policy Sec6" %} Registration - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec6 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec6 P1" %} The data provided by the user during registration allows for the usage of the service. The service provider may inform the user via e-mail about information relevant to the service or the registration, such as information on changes, which the service undergoes, or technical information (see also next section). - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec6 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec6 P2" %} The registration and user profile forms show which data is being collected and stored. They include - but are not limited to - the user's first name, last name, and e-mail address. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec7" %} + {% blocktranslate trimmed context "Privacy Policy Sec7" %} E-mail notifications / Newsletter - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec7 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec7 P1" %} When registering an account with the service, the user gives permission to receive e-mail notifications as well as newsletter e-mails. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec7 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec7 P2" %} E-mail notifications inform the user of certain events that relate to the user's use of the service. With the newsletter, the service provider sends the user general information about the provider and his offered service(s). - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec7 P3" %} + {% blocktranslate trimmed context "Privacy Policy Sec7 P3" %} If the user wishes to revoke his permission to receive e-mails, he needs to delete his user account. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec8" %} + {% blocktranslate trimmed context "Privacy Policy Sec8" %} Google Analytics - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec8 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec8 P1" %} This website uses Google Analytics, a web analytics service provided by Google, Inc. (“Google”). Google Analytics uses “cookies”, which are text files placed on the user's device, to help the website analyze how users use the site. The information generated by the cookie about the user's use of the website will be transmitted to and stored by Google on servers in the United States. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec8 P2" %} + {% blocktranslate trimmed context "Privacy Policy Sec8 P2" %} In case IP-anonymisation is activated on this website, the user's IP address will be truncated within the area of Member States of the European Union or other parties to the Agreement on the European Economic Area. Only in exceptional cases the whole IP address will be first transfered to a Google server in the USA and truncated there. The IP-anonymisation is active on this website. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec8 P3" %} + {% blocktranslate trimmed context "Privacy Policy Sec8 P3" %} Google will use this information on behalf of the operator of this website for the purpose of evaluating your use of the website, compiling reports on website activity for website operators and providing them other services relating to website activity and internet usage. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec8 P4" with optout_plugin_url="http://tools.google.com/dlpage/gaoptout?hl=en"%} + {% blocktranslate trimmed context "Privacy Policy Sec8 P4" with optout_plugin_url="http://tools.google.com/dlpage/gaoptout?hl=en"%} The IP-address, that the user's browser conveys within the scope of Google Analytics, will not be associated with any other data held by Google. The user may refuse the use of cookies by selecting the appropriate settings on his browser, however it is to be noted that if the user does this he may not be able to use the full functionality of this website. He can also opt-out from being tracked by Google Analytics with effect for the future by downloading and installing Google Analytics Opt-out Browser Addon for his current web browser: {{ optout_plugin_url }}. - {% endblocktrans %} + {% endblocktranslate %}

    - {% trans "click this link" as click %} - {% blocktrans trimmed context "Privacy Policy Sec8 P5" with optout_javascript=""|add:click|add:""%} + {% translate "click this link" as click %} + {% blocktranslate trimmed context "Privacy Policy Sec8 P5" with optout_javascript=""|add:click|add:""%} As an alternative to the browser Addon or within browsers on mobile devices, the user can {{ optout_javascript }} in order to opt-out from being tracked by Google Analytics within this website in the future (the opt-out applies only for the browser in which the user sets it and within this domain). An opt-out cookie will be stored on the user's device, which means that the user will have to click this link again, if he deletes his cookies. - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec9" %} + {% blocktranslate trimmed context "Privacy Policy Sec9" %} Revocation, Changes, Corrections, and Updates - {% endblocktrans %} + {% endblocktranslate %}

    - {% blocktrans trimmed context "Privacy Policy Sec9 P1" %} + {% blocktranslate trimmed context "Privacy Policy Sec9 P1" %} The user has the right to be informed upon application and free of charge, which personal data about him has been stored. Additionally, the user can ask for the correction of uncorrect data, as well as for the suspension or even deletion of his personal data as far as there is no legal obligation to retain that data. - {% endblocktrans %} + {% endblocktranslate %}

    -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/non_logged_in_area/templates/shelters_need_help.html b/non_logged_in_area/templates/shelters_need_help.html index df4edabf..e2adc50e 100644 --- a/non_logged_in_area/templates/shelters_need_help.html +++ b/non_logged_in_area/templates/shelters_need_help.html @@ -17,62 +17,62 @@
    -

    {% trans "advantages" %}

    +

    {% translate "advantages" %}

      -
    • {% trans "save time" %}
    • -
    • {% trans "improve selforganization of the volunteers" %} +
    • {% translate "save time" %}
    • +
    • {% translate "improve selforganization of the volunteers" %}
    • - {% blocktrans %} + {% blocktranslate %} volunteers split themselves up more effectively into shifts, temporary shortcuts can be anticipated by helpers themselves more easily - {% endblocktrans %} + {% endblocktranslate %}
    • - {% blocktrans %} + {% blocktranslate %} shift plans can be given to the security personnel or coordinating persons by an auto-mailer every morning - {% endblocktrans %} + {% endblocktranslate %}
    • - {% blocktrans %} + {% blocktranslate %} the more shelters and camps are organized with us, the more volunteers are joining and all facilities will benefit from a common pool of motivated volunteers - {% endblocktrans %} + {% endblocktranslate %}
    • - {% trans "for free without costs" %} + {% translate "for free without costs" %}
    -

    {% trans "The right help at the right time at the right place" %}

    - {% blocktrans %} +

    {% translate "The right help at the right time at the right place" %}

    + {% blocktranslate %}

    Many people want to help! But often it's not so easy to figure out where, when and how one can help. volunteer-planner tries to solve this problem!

    - {% endblocktrans %} + {% endblocktranslate %}
    -

    {% trans "for free, ad free" %}

    - {% blocktrans %} +

    {% translate "for free, ad free" %}

    + {% blocktranslate %}

    The platform was build by a group of volunteering professionals in the area of software development, project management, design, and marketing. The code is open sourced for non-commercial use. Private data (emailaddresses, profile data etc.) will be not given to any third party.

    - {% endblocktrans %} + {% endblocktranslate %}
    -

    {% trans "contact us!" %}

    +

    {% translate "contact us!" %}

    - {% blocktrans %} + {% blocktranslate %} ...maybe with an attached draft of the shifts you want to see on volunteer-planner. Please write to onboarding@volunteer-planner.org - {% endblocktrans %} + {% endblocktranslate %}

    diff --git a/non_logged_in_area/urls.py b/non_logged_in_area/urls.py index d9e19654..b1ed776d 100644 --- a/non_logged_in_area/urls.py +++ b/non_logged_in_area/urls.py @@ -1,13 +1,21 @@ # coding=utf-8 -from django.conf.urls import url +from django.urls import re_path from django.views.defaults import page_not_found, server_error from .views import HomeView urlpatterns = [ - url(r'^$', HomeView.as_view(template_name="home.html"), name="home"), - url(r'^shelters-need-help/$', HomeView.as_view(template_name="shelters_need_help.html"), name="shelter_info"), - url(r'^privacy-policy/$', HomeView.as_view(template_name="privacy_policy.html"), name="privacy"), - url(r'^404/$', page_not_found), - url(r'^500/$', server_error), + re_path(r"^$", HomeView.as_view(template_name="home.html"), name="home"), + re_path( + r"^shelters-need-help/$", + HomeView.as_view(template_name="shelters_need_help.html"), + name="shelter_info", + ), + re_path( + r"^privacy-policy/$", + HomeView.as_view(template_name="privacy_policy.html"), + name="privacy", + ), + re_path(r"^404/$", page_not_found), + re_path(r"^500/$", server_error), ] diff --git a/non_logged_in_area/views.py b/non_logged_in_area/views.py index b46727e9..afa612ff 100644 --- a/non_logged_in_area/views.py +++ b/non_logged_in_area/views.py @@ -1,10 +1,10 @@ -# coding=utf-8 import logging from django.db.models.aggregates import Count from django.http.response import HttpResponseRedirect +from django.urls import reverse from django.views.generic.base import TemplateView -from django.core.urlresolvers import reverse + from organizations.models import Facility from places.models import Region @@ -15,18 +15,26 @@ class HomeView(TemplateView): template_name = "base_non_logged_in.html" def get(self, request, *args, **kwargs): - if self.request.user.is_authenticated(): - return HttpResponseRedirect(reverse('helpdesk')) + if self.request.user.is_authenticated: + return HttpResponseRedirect(reverse("helpdesk")) context = self.get_context_data(**kwargs) return self.render_to_response(context) def get_context_data(self, **kwargs): context = super(HomeView, self).get_context_data(**kwargs) - context['regions'] = Region.objects.annotate( - facility_count=Count('areas__places__facilities')).exclude( - facility_count=0).prefetch_related('areas', 'areas__region').all() - context['facilities'] = Facility.objects.select_related('place', - 'place__area', - 'place__area__region').order_by('place').all() + context["regions"] = ( + Region.objects.annotate(facility_count=Count("areas__places__facilities")) + .exclude(facility_count=0) + .prefetch_related("areas", "areas__region") + .all() + ) + + facilities = ( + Facility.objects.with_open_shifts() + .select_related("place", "place__area", "place__area__region") + .order_by("place") + ) + + context["facilities"] = facilities return context diff --git a/notifications/migrations/0001_initial.py b/notifications/migrations/0001_initial.py index d6c741ce..1a4d3c90 100644 --- a/notifications/migrations/0001_initial.py +++ b/notifications/migrations/0001_initial.py @@ -1,26 +1,45 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0009_auto_20150823_1546'), + ("scheduler", "0009_auto_20150823_1546"), ] operations = [ migrations.CreateModel( - name='Notification', + name="Notification", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('slug', models.SlugField(max_length=255, auto_created=True)), - ('creation_date', models.DateField(auto_now=True)), - ('title', models.CharField(max_length=255, verbose_name=b'Titel')), - ('subtitle', models.CharField(max_length=255, verbose_name=b'Untertitel')), - ('text', models.TextField(max_length=20055, verbose_name=b'Artikeltext')), - ('location', models.ForeignKey(to='scheduler.Location')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("slug", models.SlugField(max_length=255, auto_created=True)), + ("creation_date", models.DateField(auto_now=True)), + ("title", models.CharField(max_length=255, verbose_name=b"Titel")), + ( + "subtitle", + models.CharField(max_length=255, verbose_name=b"Untertitel"), + ), + ( + "text", + models.TextField(max_length=20055, verbose_name=b"Artikeltext"), + ), + ( + "location", + models.ForeignKey( + to="scheduler.Location", on_delete=models.CASCADE + ), + ), ], ), ] diff --git a/notifications/migrations/0001_squashed_removed.py b/notifications/migrations/0001_squashed_removed.py index 55248e65..d9b56c92 100644 --- a/notifications/migrations/0001_squashed_removed.py +++ b/notifications/migrations/0001_squashed_removed.py @@ -5,16 +5,17 @@ class Migration(migrations.Migration): - replaces = [(b'notifications', '0001_initial'), - (b'notifications', '0002_auto_20150823_1658'), - (b'notifications', '0003_auto_20150912_2049'), - (b'notifications', '0004_auto_20151003_2033'), - (b'notifications', '0005_remove_notification_model')] + replaces = [ + ("notifications", "0001_initial"), + ("notifications", "0002_auto_20150823_1658"), + ("notifications", "0003_auto_20150912_2049"), + ("notifications", "0004_auto_20151003_2033"), + ("notifications", "0005_remove_notification_model"), + ] dependencies = [ - ('scheduler', '0009_auto_20150823_1546'), - ('organizations', '0002_migrate_locations_to_facilities'), + ("scheduler", "0009_auto_20150823_1546"), + ("organizations", "0002_migrate_locations_to_facilities"), ] - operations = [ - ] + operations = [] diff --git a/notifications/migrations/0002_auto_20150823_1658.py b/notifications/migrations/0002_auto_20150823_1658.py index 753c5908..05bda273 100644 --- a/notifications/migrations/0002_auto_20150823_1658.py +++ b/notifications/migrations/0002_auto_20150823_1658.py @@ -1,19 +1,21 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('notifications', '0001_initial'), + ("notifications", "0001_initial"), ] operations = [ migrations.AlterField( - model_name='notification', - name='subtitle', - field=models.CharField(max_length=255, null=True, verbose_name=b'Untertitel', blank=True), + model_name="notification", + name="subtitle", + field=models.CharField( + max_length=255, null=True, verbose_name=b"Untertitel", blank=True + ), ), ] diff --git a/notifications/migrations/0003_auto_20150912_2049.py b/notifications/migrations/0003_auto_20150912_2049.py index ce81d4b7..9d6b6a1c 100644 --- a/notifications/migrations/0003_auto_20150912_2049.py +++ b/notifications/migrations/0003_auto_20150912_2049.py @@ -1,29 +1,31 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('notifications', '0002_auto_20150823_1658'), + ("notifications", "0002_auto_20150823_1658"), ] operations = [ migrations.AlterField( - model_name='notification', - name='subtitle', - field=models.CharField(max_length=255, null=True, verbose_name='subtitle', blank=True), + model_name="notification", + name="subtitle", + field=models.CharField( + max_length=255, null=True, verbose_name="subtitle", blank=True + ), ), migrations.AlterField( - model_name='notification', - name='text', - field=models.TextField(max_length=20055, verbose_name='text'), + model_name="notification", + name="text", + field=models.TextField(max_length=20055, verbose_name="text"), ), migrations.AlterField( - model_name='notification', - name='title', - field=models.CharField(max_length=255, verbose_name='title'), + model_name="notification", + name="title", + field=models.CharField(max_length=255, verbose_name="title"), ), ] diff --git a/notifications/migrations/0004_auto_20151003_2033.py b/notifications/migrations/0004_auto_20151003_2033.py index 5bc3448f..5feec263 100644 --- a/notifications/migrations/0004_auto_20151003_2033.py +++ b/notifications/migrations/0004_auto_20151003_2033.py @@ -1,30 +1,36 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0002_migrate_locations_to_facilities'), - ('notifications', '0003_auto_20150912_2049'), + ("organizations", "0002_migrate_locations_to_facilities"), + ("notifications", "0003_auto_20150912_2049"), ] operations = [ migrations.AlterField( - model_name='notification', - name='location', - field=models.ForeignKey(verbose_name='facility', to='organizations.Facility'), + model_name="notification", + name="location", + field=models.ForeignKey( + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), ), migrations.RenameField( - model_name='notification', - old_name='location', - new_name='facility', + model_name="notification", + old_name="location", + new_name="facility", ), migrations.AlterField( - model_name='notification', - name='facility', - field=models.ForeignKey(to='organizations.Facility'), + model_name="notification", + name="facility", + field=models.ForeignKey( + to="organizations.Facility", on_delete=models.CASCADE + ), ), ] diff --git a/notifications/migrations/0005_remove_notification_model.py b/notifications/migrations/0005_remove_notification_model.py index 4f87ada8..8f18a6fb 100644 --- a/notifications/migrations/0005_remove_notification_model.py +++ b/notifications/migrations/0005_remove_notification_model.py @@ -1,21 +1,21 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('notifications', '0004_auto_20151003_2033'), + ("notifications", "0004_auto_20151003_2033"), ] operations = [ migrations.RemoveField( - model_name='notification', - name='facility', + model_name="notification", + name="facility", ), migrations.DeleteModel( - name='Notification', + name="Notification", ), ] diff --git a/organizations/admin.py b/organizations/admin.py index 3f09e780..69d052d0 100644 --- a/organizations/admin.py +++ b/organizations/admin.py @@ -1,21 +1,20 @@ # -*- coding: utf-8 -*- -from collections import defaultdict import itertools +from collections import defaultdict from operator import itemgetter from ckeditor.widgets import CKEditorWidget from django.contrib import admin -from django.db.models import Q, Count +from django.db.models import Count, Q from django.template.defaultfilters import striptags -from django.utils.encoding import smart_text - -from django.utils.translation import ugettext_lazy as _ +from django.utils.encoding import smart_str as smart_text +from django.utils.translation import gettext_lazy as _ -from . import models from organizations.models import Membership +from scheduler import models as shiftmodels +from . import models -DEFAULT_FILTER_ROLES = (models.Membership.Roles.ADMIN, - models.Membership.Roles.MANAGER) +DEFAULT_FILTER_ROLES = (models.Membership.Roles.ADMIN, models.Membership.Roles.MANAGER) def get_memberships_by_role(membership_queryset): @@ -23,40 +22,54 @@ def get_memberships_by_role(membership_queryset): membership_queryset = membership_queryset.filter( membership__status__gte=Membership.Status.APPROVED ) - qs = membership_queryset.order_by('membership__role') \ - .values_list('membership__role', 'pk') + qs = membership_queryset.order_by("membership__role").values_list( + "membership__role", "pk" + ) for role, group in itertools.groupby(qs, itemgetter(0)): - memberships_by_role[role] = map(itemgetter(1), group) + memberships_by_role[role] = list(map(itemgetter(1), group)) return memberships_by_role def get_cached_memberships(user, roles=DEFAULT_FILTER_ROLES): - user_memberships = getattr(user, '__memberships', None) + if not hasattr(user, "account"): + # bail out for users without account + return [], [] + + user_memberships = getattr(user, "__memberships", None) if not user_memberships: user_memberships = { - 'facilities': get_memberships_by_role(user.account.facility_set), - 'organizations': get_memberships_by_role( - user.account.organization_set), + "facilities": get_memberships_by_role(user.account.facility_set), + "organizations": get_memberships_by_role(user.account.organization_set), } - setattr(user, '__memberships', user_memberships) + setattr(user, "__memberships", user_memberships) - user_orgs = list(itertools.chain.from_iterable( - user_memberships['organizations'][role] for role in roles)) + user_orgs = list( + itertools.chain.from_iterable( + user_memberships["organizations"][role] for role in roles + ) + ) - user_facilities = list(itertools.chain.from_iterable( - user_memberships['facilities'][role] for role in roles)) + user_facilities = list( + itertools.chain.from_iterable( + user_memberships["facilities"][role] for role in roles + ) + ) return user_orgs, user_facilities -def filter_queryset_by_membership(qs, user, - facility_filter_fk=None, - organization_filter_fk=None, - roles=DEFAULT_FILTER_ROLES, - skip_superuser=True): +def filter_queryset_by_membership( + qs, + user, + facility_filter_fk=None, + organization_filter_fk=None, + roles=DEFAULT_FILTER_ROLES, + skip_superuser=True, +): if facility_filter_fk and organization_filter_fk: raise Exception( - 'facility_filter_fk and organization_filter_fk are mutually exclusive.') + "facility_filter_fk and organization_filter_fk are mutually exclusive." + ) if skip_superuser and user.is_superuser: return qs @@ -66,127 +79,167 @@ def filter_queryset_by_membership(qs, user, if qs.model == models.Organization: qs = qs.filter(pk__in=user_orgs) elif qs.model == models.Facility: - qs = qs.filter( - Q(pk__in=user_facilities) | - Q(organization_id__in=user_orgs) - ) + qs = qs.filter(Q(pk__in=user_facilities) | Q(organization_id__in=user_orgs)) else: if facility_filter_fk is None and organization_filter_fk is None: - facility_filter_fk = 'facility' + facility_filter_fk = "facility" - if organization_filter_fk: - qs = qs.filter(**{organization_filter_fk + '_id__in': user_orgs}) - elif facility_filter_fk: + if qs.model == models.OrganizationMembership: + if organization_filter_fk: + qs = qs.filter(**{organization_filter_fk + "_id__in": user_orgs}) + elif qs.model == shiftmodels.ShiftHelper: qs = qs.filter( - Q(**{facility_filter_fk + '_id__in': user_facilities}) | - Q(**{facility_filter_fk + '__organization_id__in': user_orgs}) + Q(**{"shift__" + facility_filter_fk + "_id__in": user_facilities}) + | Q( + **{ + "shift__" + + facility_filter_fk + + "__organization_id__in": user_orgs + } + ) ) + else: + if organization_filter_fk: + qs = qs.filter(**{organization_filter_fk + "_id__in": user_orgs}) + elif facility_filter_fk: + qs = qs.filter( + Q(**{facility_filter_fk + "_id__in": user_facilities}) + | Q(**{facility_filter_fk + "__organization_id__in": user_orgs}) + ) return qs class MembershipFilteredAdmin(admin.ModelAdmin): - facility_filter_fk = 'facility' + facility_filter_fk = "facility" + organization_filter_fk = "organization" widgets = None def get_readonly_fields(self, request, obj=None): readonly = super(MembershipFilteredAdmin, self).get_readonly_fields( - request=request, obj=obj) + request=request, obj=obj + ) if request.user.is_superuser: return readonly else: - if not ('facility' in readonly and 'organization' in readonly): - user_orgs, user_facilities = get_cached_memberships( - request.user) - if len(user_facilities) <= 1 and hasattr(obj, 'facility') \ - and 'facility' not in readonly: - readonly += ('facility',) - if len(user_orgs) <= 1 and hasattr(obj, 'organization') \ - and 'organization' not in readonly: - readonly += ('organization',) + if not ("facility" in readonly and "organization" in readonly): + user_orgs, user_facilities = get_cached_memberships(request.user) + if ( + len(user_facilities) <= 1 + and hasattr(obj, "facility") + and "facility" not in readonly + ): + readonly += ("facility",) + if ( + len(user_orgs) <= 1 + and hasattr(obj, "organization") + and "organization" not in readonly + ): + readonly += ("organization",) + if obj and hasattr(obj, "user_account"): + readonly += ("user_account",) return readonly - def get_list_display(self, request): - list_display = list( - super(MembershipFilteredAdmin, self).get_list_display(request)) - if request.user.is_superuser: - return list_display - if 'facility' in list_display or 'organization' in list_display: - user_orgs, user_facilities = get_cached_memberships(request.user) - if len(user_facilities) <= 1 and 'facility' in list_display: - list_display.remove('facility') - if len(user_orgs) <= 1 and 'organization' in list_display: - list_display.remove('organization') - return list_display + # def get_list_display(self, request): + # list_display = list( + # super(MembershipFilteredAdmin, self).get_list_display(request)) + # if request.user.is_superuser: + # return list_display + # if 'facility' in list_display or 'organization' in list_display: + # user_orgs, user_facilities = get_cached_memberships(request.user) + # if len(user_facilities) <= 1 and 'facility' in list_display: + # list_display.remove('facility') + # if len(user_orgs) <= 1 and 'organization' in list_display: + # list_display.remove('organization') + # return list_display def get_list_display_links(self, request, list_display): list_display_links = list( - super(MembershipFilteredAdmin, self).get_list_display_links(request, - list_display)) - return filter(lambda i: i in list_display, list_display_links) + super(MembershipFilteredAdmin, self).get_list_display_links( + request, list_display + ) + ) + return list(filter(lambda i: i in list_display, list_display_links)) def get_edit_link(self, obj): - return _(u'edit') + return _("edit") - get_edit_link.short_description = _(u'edit') + get_edit_link.short_description = _("edit") def get_form(self, request, obj=None, **kwargs): form = super(MembershipFilteredAdmin, self).get_form( - request, obj, widgets=self.widgets, **kwargs) + request, obj, widgets=self.widgets, **kwargs + ) - if 'facility' in form.base_fields: + if "facility" in form.base_fields: facilities = models.Facility.objects.all() - user_facilities = filter_queryset_by_membership(facilities, - request.user) + user_facilities = filter_queryset_by_membership(facilities, request.user) if len(user_facilities) == 1: - form.base_fields['facility'].initial = user_facilities.get() + form.base_fields["facility"].initial = user_facilities.get() return form def get_queryset(self, request): qs = super(MembershipFilteredAdmin, self).get_queryset(request) + fac_filter = self.facility_filter_fk + org_filter = None + if qs.model.__name__.startswith("Organization"): + fac_filter = None + org_filter = self.organization_filter_fk return filter_queryset_by_membership( - qs, user=request.user, facility_filter_fk=self.facility_filter_fk) + qs, + user=request.user, + facility_filter_fk=fac_filter, + organization_filter_fk=org_filter, + ) def get_field_queryset(self, db, db_field, request): qs = super(MembershipFilteredAdmin, self).get_field_queryset( - db, db_field, request) - if db_field.rel.to in (models.Facility, - models.Organization, - models.Task, - models.Workplace): - qs = qs or db_field.rel.to.objects.all() + db, db_field, request + ) + if db_field.remote_field.model in ( + models.Facility, + models.Organization, + models.Task, + models.Workplace, + ): + qs = qs or db_field.remote_field.model.objects.all() qs = filter_queryset_by_membership(qs, request.user) return qs class MembershipFilteredTabularInline(admin.TabularInline): - facility_filter_fk = 'facility' + facility_filter_fk = "facility" widgets = None def get_formset(self, request, obj=None, **kwargs): return super(MembershipFilteredTabularInline, self).get_formset( - request, obj, widgets=self.widgets, **kwargs) + request, obj, widgets=self.widgets, **kwargs + ) def get_queryset(self, request): qs = super(MembershipFilteredTabularInline, self).get_queryset(request) return filter_queryset_by_membership( - qs, user=request.user, facility_filter_fk=self.facility_filter_fk) + qs, user=request.user, facility_filter_fk=self.facility_filter_fk + ) def get_field_queryset(self, db, db_field, request): qs = super(MembershipFilteredTabularInline, self).get_field_queryset( - db, db_field, request) - if db_field.rel.to in (models.Facility, - models.Organization, - models.Task, - models.Workplace): - qs = qs or db_field.rel.to.objects.all() + db, db_field, request + ) + if db_field.remote_field.model in ( + models.Facility, + models.Organization, + models.Task, + models.Workplace, + ): + qs = qs or db_field.remote_field.model.objects.all() qs = filter_queryset_by_membership(qs, request.user) return qs class MembershipFieldListFilter(admin.RelatedFieldListFilter): def field_choices(self, field, request, model_admin): - query = field.rel.to.objects.all() + query = field.remote_field.model.objects.all() query = query.annotate(usage_count=Count(field.related_query_name())) query = query.exclude(usage_count=0) qs = filter_queryset_by_membership(query, request.user) @@ -195,112 +248,97 @@ def field_choices(self, field, request, model_admin): @admin.register(models.Organization) class OrganizationAdmin(MembershipFilteredAdmin): - - def get_short_description(self, obj): - return striptags(obj.short_description) - - get_short_description.short_description = _(u'short description') - get_short_description.allow_tags = True - def get_description(self, obj): return striptags(obj.description) - get_description.short_description = _(u'description') + get_description.short_description = _("description") get_description.allow_tags = True def get_contact_info(self, obj): return striptags(obj.contact_info) - get_contact_info.short_description = _(u'contact info') + get_contact_info.short_description = _("contact info") get_contact_info.allow_tags = True list_display = ( - 'name', - 'short_description', - 'get_description', - 'contact_info', - 'address', + "name", + "get_description", + "contact_info", + "address", ) - raw_id_fields = ('members',) - search_fields = ('name',) + raw_id_fields = ("members",) + search_fields = ("name",) widgets = { - 'short_description': CKEditorWidget(), - 'description': CKEditorWidget(), - 'contact_info': CKEditorWidget(), + "description": CKEditorWidget(), + "contact_info": CKEditorWidget(), } - prepopulated_fields = {'slug': ['name']} + prepopulated_fields = {"slug": ["name"]} @admin.register(models.Facility) class FacilityAdmin(MembershipFilteredAdmin): - def get_short_description(self, obj): - return striptags(obj.short_description) - - get_short_description.short_description = _(u'short description') - get_short_description.allow_tags = True - def get_description(self, obj): return striptags(obj.description) - get_description.short_description = _(u'description') + get_description.short_description = _("description") get_description.allow_tags = True def get_contact_info(self, obj): return striptags(obj.contact_info) - get_contact_info.short_description = _(u'contact info') + get_contact_info.short_description = _("contact info") get_contact_info.allow_tags = True list_display = ( - 'organization', - 'name', - 'get_short_description', - 'get_description', - 'get_contact_info', - 'place', - 'address', - 'zip_code', - 'show_on_map', - 'latitude', - 'longitude', - ) - list_filter = ( - ('organization', MembershipFieldListFilter), + "name", + "organization", + "get_description", + "get_contact_info", + "place", + "address", + "zip_code", + "show_on_map", + "latitude", + "longitude", ) - raw_id_fields = ('members',) - search_fields = ('name',) + list_filter = (("organization", MembershipFieldListFilter),) + raw_id_fields = ("members",) + search_fields = ("name",) widgets = { - 'short_description': CKEditorWidget(), - 'description': CKEditorWidget(), - 'contact_info': CKEditorWidget(), + "description": CKEditorWidget(), + "contact_info": CKEditorWidget(), } - prepopulated_fields = {'slug': ['name']} + prepopulated_fields = {"slug": ["name"]} @admin.register(models.OrganizationMembership) class OrganizationMembershipAdmin(MembershipFilteredAdmin): list_display = ( - 'user_account', - 'organization', - 'role', + "user_account", + "organization", + "role", + "status", ) list_filter = ( - ('organization', MembershipFieldListFilter), + ("organization", MembershipFieldListFilter), + "status", ) - raw_id_fields = ('user_account',) + raw_id_fields = ("user_account",) @admin.register(models.FacilityMembership) class FacilityMembershipAdmin(MembershipFilteredAdmin): list_display = ( - 'role', - 'user_account', - 'facility' + "user_account", + "facility", + "role", + "status", ) list_filter = ( - ('facility', MembershipFieldListFilter), + ("facility", MembershipFieldListFilter), + "status", ) - raw_id_fields = ('user_account',) + raw_id_fields = ("user_account",) @admin.register(models.Workplace) @@ -308,22 +346,16 @@ class WorkplaceAdmin(MembershipFilteredAdmin): def get_description(self, obj): return striptags(obj.description) - get_description.short_description = _(u'description') + get_description.short_description = _("description") get_description.allow_tags = True - list_display = ( - 'facility', - 'name', - 'get_description' - ) - list_filter = ( - ('facility', MembershipFieldListFilter), - ) - search_fields = ('name',) + list_display = ("name", "facility", "priority", "get_description") + list_filter = (("facility", MembershipFieldListFilter),) + search_fields = ("name",) list_select_related = True radio_fields = {"facility": admin.VERTICAL} widgets = { - 'description': CKEditorWidget(), + "description": CKEditorWidget(), } @@ -332,22 +364,14 @@ class TaskAdmin(MembershipFilteredAdmin): def get_description(self, obj): return striptags(obj.description) - get_description.short_description = _(u'description') + get_description.short_description = _("description") get_description.allow_tags = True - list_display = ( - 'facility', - 'name', - 'get_description' - ) - list_filter = ( - ('facility', MembershipFieldListFilter), - ) - search_fields = ('name',) + list_display = ("name", "facility", "priority", "get_description") + list_filter = (("facility", MembershipFieldListFilter),) + search_fields = ("name",) list_select_related = True radio_fields = {"facility": admin.VERTICAL} widgets = { - 'description': CKEditorWidget(), + "description": CKEditorWidget(), } - - diff --git a/organizations/apps.py b/organizations/apps.py new file mode 100644 index 00000000..435a49d9 --- /dev/null +++ b/organizations/apps.py @@ -0,0 +1,11 @@ +from django.apps import AppConfig +from django.utils.translation import gettext_lazy as _ + + +class OrganizationsConfig(AppConfig): + name = "organizations" + verbose_name = _("organizations") + + def ready(self): + # Connect signals + from . import signals # noqa diff --git a/organizations/managers.py b/organizations/managers.py new file mode 100644 index 00000000..8d1dc058 --- /dev/null +++ b/organizations/managers.py @@ -0,0 +1,15 @@ +from django.db.models import Count, Manager, Q +from django.utils import timezone + + +class FacilityManager(Manager): + def with_open_shifts(self): + return ( + self.get_queryset() + .annotate( + open_shift_count=Count( + "shift", filter=Q(shift__ending_time__gte=timezone.now()) + ) + ) + .exclude(open_shift_count=0) + ) diff --git a/organizations/migrations/0001_initial.py b/organizations/migrations/0001_initial.py index d4a5ed77..f71ad3af 100644 --- a/organizations/migrations/0001_initial.py +++ b/organizations/migrations/0001_initial.py @@ -1,99 +1,216 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('places', '0002_auto_20150926_2313'), - ('accounts', '0001_initial'), + ("places", "0002_auto_20150926_2313"), + ("accounts", "0001_initial"), ] operations = [ migrations.CreateModel( - name='Facility', + name="Facility", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=256, verbose_name='name')), - ('short_description', models.TextField(verbose_name='short description', blank=True)), - ('description', models.TextField(verbose_name='description')), - ('contact_info', models.TextField(verbose_name='description')), - ('address', models.TextField(verbose_name='address')), - ('zip_code', models.CharField(max_length=25, verbose_name='postal code', blank=True)), - ('show_on_map', models.BooleanField(default=True, verbose_name='Show on map of all facilities')), - ('latitude', models.CharField(max_length=30, verbose_name='latitude', blank=True)), - ('longitude', models.CharField(max_length=30, verbose_name='longitude', blank=True)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=256, verbose_name="name")), + ( + "short_description", + models.TextField(verbose_name="short description", blank=True), + ), + ("description", models.TextField(verbose_name="description")), + ("contact_info", models.TextField(verbose_name="description")), + ("address", models.TextField(verbose_name="address")), + ( + "zip_code", + models.CharField( + max_length=25, verbose_name="postal code", blank=True + ), + ), + ( + "show_on_map", + models.BooleanField( + default=True, verbose_name="Show on map of all facilities" + ), + ), + ( + "latitude", + models.CharField( + max_length=30, verbose_name="latitude", blank=True + ), + ), + ( + "longitude", + models.CharField( + max_length=30, verbose_name="longitude", blank=True + ), + ), ], options={ - 'ordering': ('organization', 'place', 'name'), - 'verbose_name': 'facility', - 'verbose_name_plural': 'facilities', + "ordering": ("organization", "place", "name"), + "verbose_name": "facility", + "verbose_name_plural": "facilities", }, ), migrations.CreateModel( - name='FacilityMembership', + name="FacilityMembership", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('role', models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'Admin'), (1, 'Manager'), (2, 'Member')])), - ('facility', models.ForeignKey(related_name='memberships', verbose_name='facility', to='organizations.Facility')), - ('user_account', models.ForeignKey(verbose_name='user account', to='accounts.UserAccount')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "role", + models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "Admin"), (1, "Manager"), (2, "Member")], + ), + ), + ( + "facility", + models.ForeignKey( + related_name="memberships", + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), + ), + ( + "user_account", + models.ForeignKey( + verbose_name="user account", + to="accounts.UserAccount", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('facility', 'role', 'user_account'), - 'verbose_name': 'facility member', - 'verbose_name_plural': 'facility members', + "ordering": ("facility", "role", "user_account"), + "verbose_name": "facility member", + "verbose_name_plural": "facility members", }, ), migrations.CreateModel( - name='Organization', + name="Organization", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=256, verbose_name='name')), - ('short_description', models.TextField(verbose_name='short description', blank=True)), - ('description', models.TextField(verbose_name='description')), - ('contact_info', models.TextField(verbose_name='description')), - ('address', models.TextField(verbose_name='address')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=256, verbose_name="name")), + ( + "short_description", + models.TextField(verbose_name="short description", blank=True), + ), + ("description", models.TextField(verbose_name="description")), + ("contact_info", models.TextField(verbose_name="description")), + ("address", models.TextField(verbose_name="address")), ], options={ - 'ordering': ('name',), - 'verbose_name': 'organization', - 'verbose_name_plural': 'organizations', + "ordering": ("name",), + "verbose_name": "organization", + "verbose_name_plural": "organizations", }, ), migrations.CreateModel( - name='OrganizationMembership', + name="OrganizationMembership", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('role', models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'Admin'), (1, 'Manager'), (2, 'Member')])), - ('organization', models.ForeignKey(related_name='memberships', verbose_name='organization', to='organizations.Organization')), - ('user_account', models.ForeignKey(verbose_name='user account', to='accounts.UserAccount')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "role", + models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "Admin"), (1, "Manager"), (2, "Member")], + ), + ), + ( + "organization", + models.ForeignKey( + related_name="memberships", + verbose_name="organization", + to="organizations.Organization", + on_delete=models.CASCADE, + ), + ), + ( + "user_account", + models.ForeignKey( + verbose_name="user account", + to="accounts.UserAccount", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('organization', 'role', 'user_account'), - 'verbose_name': 'organization member', - 'verbose_name_plural': 'organization members', + "ordering": ("organization", "role", "user_account"), + "verbose_name": "organization member", + "verbose_name_plural": "organization members", }, ), migrations.AddField( - model_name='organization', - name='members', - field=models.ManyToManyField(to='accounts.UserAccount', through='organizations.OrganizationMembership'), + model_name="organization", + name="members", + field=models.ManyToManyField( + to="accounts.UserAccount", + through="organizations.OrganizationMembership", + ), ), migrations.AddField( - model_name='facility', - name='members', - field=models.ManyToManyField(to='accounts.UserAccount', through='organizations.FacilityMembership'), + model_name="facility", + name="members", + field=models.ManyToManyField( + to="accounts.UserAccount", through="organizations.FacilityMembership" + ), ), migrations.AddField( - model_name='facility', - name='organization', - field=models.ForeignKey(related_name='facilities', verbose_name='organization', to='organizations.Organization'), + model_name="facility", + name="organization", + field=models.ForeignKey( + related_name="facilities", + verbose_name="organization", + to="organizations.Organization", + on_delete=models.CASCADE, + ), ), migrations.AddField( - model_name='facility', - name='place', - field=models.ForeignKey(related_name='facilities', verbose_name='place', to='places.Place'), + model_name="facility", + name="place", + field=models.ForeignKey( + related_name="facilities", + verbose_name="place", + to="places.Place", + on_delete=models.CASCADE, + ), ), ] diff --git a/organizations/migrations/0002_migrate_locations_to_facilities.py b/organizations/migrations/0002_migrate_locations_to_facilities.py index 73212e48..041cb95a 100644 --- a/organizations/migrations/0002_migrate_locations_to_facilities.py +++ b/organizations/migrations/0002_migrate_locations_to_facilities.py @@ -5,15 +5,15 @@ def migrate_locations(apps, schema_editor): - location_model = apps.get_model('scheduler', 'Location') - organization_model = apps.get_model('organizations', 'Organization') - facility_model = apps.get_model('organizations', 'Facility') - need_model = apps.get_model('scheduler', 'Need') + location_model = apps.get_model("scheduler", "Location") + organization_model = apps.get_model("organizations", "Organization") + facility_model = apps.get_model("organizations", "Facility") + need_model = apps.get_model("scheduler", "Need") def merged_address(location): - return u"{}\n{}".format(location.street, - u'{} {}'.format(location.postal_code, - location.city).strip()) + return "{}\n{}".format( + location.street, "{} {}".format(location.postal_code, location.city).strip() + ) def make_org_from_location(location): org = organization_model() @@ -57,10 +57,8 @@ def skip(_, __): class Migration(migrations.Migration): dependencies = [ - ('organizations', '0001_initial'), - ('scheduler', '0028_need_facility'), + ("organizations", "0001_initial"), + ("scheduler", "0028_need_facility"), ] - operations = [ - migrations.RunPython(migrate_locations, skip) - ] + operations = [migrations.RunPython(migrate_locations, skip)] diff --git a/organizations/migrations/0003_workplace.py b/organizations/migrations/0003_workplace.py index 7caf6734..f10c0103 100644 --- a/organizations/migrations/0003_workplace.py +++ b/organizations/migrations/0003_workplace.py @@ -1,28 +1,47 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0002_migrate_locations_to_facilities'), + ("organizations", "0002_migrate_locations_to_facilities"), ] operations = [ migrations.CreateModel( - name='Workplace', + name="Workplace", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=256, verbose_name='name')), - ('description', models.TextField(verbose_name='description', blank=True)), - ('facility', models.ForeignKey(related_name='workplaces', verbose_name='facility', to='organizations.Facility')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=256, verbose_name="name")), + ( + "description", + models.TextField(verbose_name="description", blank=True), + ), + ( + "facility", + models.ForeignKey( + related_name="workplaces", + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('facility', 'name'), - 'verbose_name': 'workplace', - 'verbose_name_plural': 'workplaces', + "ordering": ("facility", "name"), + "verbose_name": "workplace", + "verbose_name_plural": "workplaces", }, ), ] diff --git a/organizations/migrations/0004_add_tasks.py b/organizations/migrations/0004_add_tasks.py index bca6ff56..02296955 100644 --- a/organizations/migrations/0004_add_tasks.py +++ b/organizations/migrations/0004_add_tasks.py @@ -1,28 +1,47 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0003_workplace'), + ("organizations", "0003_workplace"), ] operations = [ migrations.CreateModel( - name='Task', + name="Task", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=256, verbose_name='name')), - ('description', models.TextField(verbose_name='description', blank=True)), - ('facility', models.ForeignKey(related_name='tasks', verbose_name='facility', to='organizations.Facility')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=256, verbose_name="name")), + ( + "description", + models.TextField(verbose_name="description", blank=True), + ), + ( + "facility", + models.ForeignKey( + related_name="tasks", + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('facility', 'name'), - 'verbose_name': 'task', - 'verbose_name_plural': 'tasks', + "ordering": ("facility", "name"), + "verbose_name": "task", + "verbose_name_plural": "tasks", }, ), ] diff --git a/organizations/migrations/0005_auto_20151021_1153.py b/organizations/migrations/0005_auto_20151021_1153.py index f692814e..5495a880 100644 --- a/organizations/migrations/0005_auto_20151021_1153.py +++ b/organizations/migrations/0005_auto_20151021_1153.py @@ -1,34 +1,54 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0004_add_tasks'), + ("organizations", "0004_add_tasks"), ] operations = [ migrations.AlterField( - model_name='facilitymembership', - name='facility', - field=models.ForeignKey(related_query_name=b'membership', related_name='memberships', verbose_name='facility', to='organizations.Facility'), + model_name="facilitymembership", + name="facility", + field=models.ForeignKey( + related_query_name=b"membership", + related_name="memberships", + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='facilitymembership', - name='role', - field=models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'Admin'), (1, 'Manager'), (2, 'Mitglied')]), + model_name="facilitymembership", + name="role", + field=models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "Admin"), (1, "Manager"), (2, "Mitglied")], + ), ), migrations.AlterField( - model_name='organizationmembership', - name='organization', - field=models.ForeignKey(related_query_name=b'membership', related_name='memberships', verbose_name='organization', to='organizations.Organization'), + model_name="organizationmembership", + name="organization", + field=models.ForeignKey( + related_query_name=b"membership", + related_name="memberships", + verbose_name="organization", + to="organizations.Organization", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='organizationmembership', - name='role', - field=models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'Admin'), (1, 'Manager'), (2, 'Mitglied')]), + model_name="organizationmembership", + name="role", + field=models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "Admin"), (1, "Manager"), (2, "Mitglied")], + ), ), ] diff --git a/organizations/migrations/0006_auto_20151022_1445.py b/organizations/migrations/0006_auto_20151022_1445.py index c3da6376..bbd5de2e 100644 --- a/organizations/migrations/0006_auto_20151022_1445.py +++ b/organizations/migrations/0006_auto_20151022_1445.py @@ -1,24 +1,32 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0005_auto_20151021_1153'), + ("organizations", "0005_auto_20151021_1153"), ] operations = [ migrations.AlterField( - model_name='facilitymembership', - name='role', - field=models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'admin'), (1, 'manager'), (2, 'member')]), + model_name="facilitymembership", + name="role", + field=models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "admin"), (1, "manager"), (2, "member")], + ), ), migrations.AlterField( - model_name='organizationmembership', - name='role', - field=models.PositiveIntegerField(default=2, verbose_name='role', choices=[(0, 'admin'), (1, 'manager'), (2, 'member')]), + model_name="organizationmembership", + name="role", + field=models.PositiveIntegerField( + default=2, + verbose_name="role", + choices=[(0, "admin"), (1, "manager"), (2, "member")], + ), ), ] diff --git a/organizations/migrations/0007_auto_20151023_2129.py b/organizations/migrations/0007_auto_20151023_2129.py index 832db1a8..a4583485 100644 --- a/organizations/migrations/0007_auto_20151023_2129.py +++ b/organizations/migrations/0007_auto_20151023_2129.py @@ -1,24 +1,24 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0006_auto_20151022_1445'), + ("organizations", "0006_auto_20151022_1445"), ] operations = [ migrations.AlterField( - model_name='facility', - name='contact_info', - field=models.TextField(verbose_name='contact info'), + model_name="facility", + name="contact_info", + field=models.TextField(verbose_name="contact info"), ), migrations.AlterField( - model_name='organization', - name='contact_info', - field=models.TextField(verbose_name='contact info'), + model_name="organization", + name="contact_info", + field=models.TextField(verbose_name="contact info"), ), ] diff --git a/organizations/migrations/0008_add_slug_field.py b/organizations/migrations/0008_add_slug_field.py index 30f05e15..476407e1 100644 --- a/organizations/migrations/0008_add_slug_field.py +++ b/organizations/migrations/0008_add_slug_field.py @@ -3,49 +3,54 @@ import sys -from django.db import models, migrations +from django.db import migrations, models from django.utils.text import slugify + from common.migrations import skip def add_slugs(apps, schema_editor): - organization_model = apps.get_model('organizations', 'Organization') - facility_model = apps.get_model('organizations', 'Facility') + organization_model = apps.get_model("organizations", "Organization") + facility_model = apps.get_model("organizations", "Facility") for model in (organization_model, facility_model): for instance in model.objects.all(): - instance.slug = slugify(instance.name)[:80] or slugify('{}'.format(instance.id)) + instance.slug = slugify(instance.name)[:80] or slugify( + "{}".format(instance.id) + ) instance.save() - sys.stdout.write(u'{} -> {}\n'.format(instance, instance.slug)) + sys.stdout.write("{} -> {}\n".format(instance, instance.slug)) class Migration(migrations.Migration): dependencies = [ - ('organizations', '0007_auto_20151023_2129'), + ("organizations", "0007_auto_20151023_2129"), ] operations = [ migrations.AddField( - model_name='facility', - name='slug', - field=models.SlugField(max_length=80, null=True, verbose_name='slug', blank=True), + model_name="facility", + name="slug", + field=models.SlugField( + max_length=80, null=True, verbose_name="slug", blank=True + ), ), migrations.AddField( - model_name='organization', - name='slug', - field=models.SlugField(max_length=80, null=True, verbose_name='slug', blank=True), + model_name="organization", + name="slug", + field=models.SlugField( + max_length=80, null=True, verbose_name="slug", blank=True + ), ), - migrations.RunPython(add_slugs, skip), - migrations.AlterField( - model_name='facility', - name='slug', - field=models.SlugField(max_length=80, verbose_name='slug'), + model_name="facility", + name="slug", + field=models.SlugField(max_length=80, verbose_name="slug"), ), migrations.AlterField( - model_name='organization', - name='slug', - field=models.SlugField(max_length=80, verbose_name='slug'), + model_name="organization", + name="slug", + field=models.SlugField(max_length=80, verbose_name="slug"), ), ] diff --git a/organizations/migrations/0009_membership_status.py b/organizations/migrations/0009_membership_status.py index d331d0e0..c1f4feec 100644 --- a/organizations/migrations/0009_membership_status.py +++ b/organizations/migrations/0009_membership_status.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models from common.migrations import skip @@ -10,10 +10,10 @@ def approve_all(apps, _): - organization_membership_model = apps.get_model('organizations', - 'OrganizationMembership') - facility_membership_model = apps.get_model('organizations', - 'FacilityMembership') + organization_membership_model = apps.get_model( + "organizations", "OrganizationMembership" + ) + facility_membership_model = apps.get_model("organizations", "FacilityMembership") organization_membership_model.objects.update(status=Membership.Status.APPROVED) facility_membership_model.objects.update(status=Membership.Status.APPROVED) @@ -21,45 +21,45 @@ def approve_all(apps, _): class Migration(migrations.Migration): dependencies = [ - ('organizations', '0008_add_slug_field'), + ("organizations", "0008_add_slug_field"), ] operations = [ migrations.AddField( - model_name='facilitymembership', - name='status', - field=models.PositiveSmallIntegerField(default=2, - verbose_name='status', - choices=[(0, 'rejected'), - (1, 'pending'), - (2, 'approved')]), + model_name="facilitymembership", + name="status", + field=models.PositiveSmallIntegerField( + default=2, + verbose_name="status", + choices=[(0, "rejected"), (1, "pending"), (2, "approved")], + ), ), migrations.AddField( - model_name='organizationmembership', - name='status', - field=models.PositiveSmallIntegerField(default=2, - verbose_name='status', - choices=[(0, 'rejected'), - (1, 'pending'), - (2, 'approved')]), + model_name="organizationmembership", + name="status", + field=models.PositiveSmallIntegerField( + default=2, + verbose_name="status", + choices=[(0, "rejected"), (1, "pending"), (2, "approved")], + ), ), migrations.AlterField( - model_name='facilitymembership', - name='role', - field=models.PositiveSmallIntegerField(default=2, - verbose_name='role', - choices=[(0, 'admin'), - (1, 'manager'), - (2, 'member')]), + model_name="facilitymembership", + name="role", + field=models.PositiveSmallIntegerField( + default=2, + verbose_name="role", + choices=[(0, "admin"), (1, "manager"), (2, "member")], + ), ), migrations.AlterField( - model_name='organizationmembership', - name='role', - field=models.PositiveSmallIntegerField(default=2, - verbose_name='role', - choices=[(0, 'admin'), - (1, 'manager'), - (2, 'member')]), + model_name="organizationmembership", + name="role", + field=models.PositiveSmallIntegerField( + default=2, + verbose_name="role", + choices=[(0, "admin"), (1, "manager"), (2, "member")], + ), ), - migrations.RunPython(approve_all, skip) + migrations.RunPython(approve_all, skip), ] diff --git a/organizations/migrations/0010_membership_join_mode.py b/organizations/migrations/0010_membership_join_mode.py index f21b7366..e5859c6f 100644 --- a/organizations/migrations/0010_membership_join_mode.py +++ b/organizations/migrations/0010_membership_join_mode.py @@ -1,18 +1,18 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models from common.migrations import skip from organizations.models import Membership def add_default_join_mode(apps, _): - organization_membership_model = apps.get_model('organizations', - 'OrganizationMembership') + organization_membership_model = apps.get_model( + "organizations", "OrganizationMembership" + ) - facility_membership_model = apps.get_model('organizations', - 'FacilityMembership') + facility_membership_model = apps.get_model("organizations", "FacilityMembership") organization_membership_model.objects.update(status=Membership.Status.APPROVED) facility_membership_model.objects.update(status=Membership.Status.APPROVED) @@ -20,37 +20,37 @@ def add_default_join_mode(apps, _): class Migration(migrations.Migration): dependencies = [ - ('organizations', '0009_membership_status'), + ("organizations", "0009_membership_status"), ] operations = [ migrations.AddField( - model_name='facility', - name='join_mode', + model_name="facility", + name="join_mode", field=models.PositiveSmallIntegerField( default=0, - help_text='Who can join this facility?', - verbose_name='join mode', + help_text="Who can join this facility?", + verbose_name="join mode", choices=[ - (0, 'by invitation'), - (1, 'anyone (approved by manager)'), - (2, 'anyone') - ] + (0, "by invitation"), + (1, "anyone (approved by manager)"), + (2, "anyone"), + ], ), ), migrations.AddField( - model_name='organization', - name='join_mode', + model_name="organization", + name="join_mode", field=models.PositiveSmallIntegerField( default=0, - help_text='Who can join this organization?', - verbose_name='join mode', + help_text="Who can join this organization?", + verbose_name="join mode", choices=[ - (0, 'by invitation'), - (1, 'anyone (approved by manager)'), - (2, 'anyone') - ] + (0, "by invitation"), + (1, "anyone (approved by manager)"), + (2, "anyone"), + ], ), ), - migrations.RunPython(add_default_join_mode, skip) + migrations.RunPython(add_default_join_mode, skip), ] diff --git a/organizations/migrations/0011_add_timeline_view_option.py b/organizations/migrations/0011_add_timeline_view_option.py index 4cf6a39e..9132c3e4 100644 --- a/organizations/migrations/0011_add_timeline_view_option.py +++ b/organizations/migrations/0011_add_timeline_view_option.py @@ -1,19 +1,23 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0010_membership_join_mode'), + ("organizations", "0010_membership_join_mode"), ] operations = [ migrations.AddField( - model_name='facility', - name='timeline_enabled', - field=models.PositiveSmallIntegerField(default=1, verbose_name='timeline', choices=[(0, 'disabled'), (1, 'enabled (collapsed)'), (2, 'enabled')]), + model_name="facility", + name="timeline_enabled", + field=models.PositiveSmallIntegerField( + default=1, + verbose_name="timeline", + choices=[(0, "disabled"), (1, "enabled (collapsed)"), (2, "enabled")], + ), ), ] diff --git a/organizations/migrations/0012_cascade_deletion.py b/organizations/migrations/0012_cascade_deletion.py new file mode 100644 index 00000000..5f35b17d --- /dev/null +++ b/organizations/migrations/0012_cascade_deletion.py @@ -0,0 +1,36 @@ +# Generated by Django 2.0.5 on 2019-07-18 22:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("organizations", "0011_add_timeline_view_option"), + ] + + operations = [ + migrations.AlterField( + model_name="facilitymembership", + name="facility", + field=models.ForeignKey( + related_query_name="membership", + related_name="memberships", + verbose_name="facility", + to="organizations.Facility", + on_delete=django.db.models.deletion.CASCADE, + ), + ), + migrations.AlterField( + model_name="organizationmembership", + name="organization", + field=models.ForeignKey( + related_query_name="membership", + related_name="memberships", + to="organizations.Organization", + verbose_name="organization", + on_delete=django.db.models.deletion.CASCADE, + ), + ), + ] diff --git a/organizations/migrations/0013_add_manager_group_permissions.py b/organizations/migrations/0013_add_manager_group_permissions.py new file mode 100644 index 00000000..2830cdbe --- /dev/null +++ b/organizations/migrations/0013_add_manager_group_permissions.py @@ -0,0 +1,103 @@ +# Generated by Django 2.2.3 on 2022-03-12 09:57 +from django.db import migrations + +from organizations.models import Membership +from ..settings import FACILITY_MANAGER_GROUPNAME, ORGANIZATION_MANAGER_GROUPNAME + +VIEW, ADD, CHANGE, DELETE = "view", "add", "change", "delete" +ALL = (VIEW, ADD, CHANGE, DELETE) + +FACILITY_MANAGER_PERMISSIONS = ( + ("accounts", "useraccount", (VIEW,)), + ("organizations", "facility", (CHANGE, VIEW)), + ("organizations", "facilitymembership", ALL), + ("organizations", "organization", (VIEW,)), + ("organizations", "organizationmembership", (VIEW,)), + ("organizations", "task", ALL), + ("organizations", "workplace", ALL), + ("scheduler", "shift", ALL), + ("scheduler", "shifthelper", ALL), + ("scheduletemplates", "scheduletemplate", ALL), + ("scheduletemplates", "shifttemplate", ALL), +) + +ORGANIZATION_MANAGER_PERMISSIONS = FACILITY_MANAGER_PERMISSIONS + ( + ("accounts", "useraccount", (VIEW,)), + ("organizations", "facility", ALL), + ("organizations", "facilitymembership", ALL), + ("organizations", "organization", (CHANGE, VIEW)), + ("organizations", "organizationmembership", ALL), + ("organizations", "task", ALL), + ("organizations", "workplace", ALL), + ("scheduler", "shift", ALL), + ("scheduler", "shifthelper", ALL), + ("scheduletemplates", "scheduletemplate", ALL), + ("scheduletemplates", "shifttemplate", ALL), +) + +MANAGER_GROUPS = { + FACILITY_MANAGER_GROUPNAME: FACILITY_MANAGER_PERMISSIONS, + ORGANIZATION_MANAGER_GROUPNAME: ORGANIZATION_MANAGER_PERMISSIONS, +} + + +def forwards(apps, schema_editor): + ContentTypeModel = apps.get_model("contenttypes", "ContentType") + GroupModel = apps.get_model("auth", "Group") + PermissionModel = apps.get_model("auth", "Permission") + + for group_name, permissions in MANAGER_GROUPS.items(): + group, created = GroupModel.objects.get_or_create(name=group_name) + print(f" - {group.name}: created group object") + for app_label, model, actions in permissions: + content_type, _ = ContentTypeModel.objects.get_or_create( + app_label=app_label.lower(), model=model.lower() + ) + for action in actions: + permission, _ = PermissionModel.objects.get_or_create( + content_type=content_type, codename=f"{action}_{model}".lower() + ) + group.permissions.add(permission) + print( + f' - {group.name}: added permission "{permission.name}" ' + f"({permission.codename})" + ) + + OrganizationMembershipModel = apps.get_model( + "organizations", "OrganizationMembership" + ) + for organization_member in OrganizationMembershipModel.objects.filter( + role__lt=Membership.Roles.MEMBER + ): + user = organization_member.user_account.user + group = GroupModel.objects.get(name=ORGANIZATION_MANAGER_GROUPNAME) + user.groups.add(group) + print(f' - {group.name}: added user "{user.username}" (id: {user.id})') + + FacilityMembershipModel = apps.get_model("organizations", "FacilityMembership") + for facility_member in FacilityMembershipModel.objects.filter( + role__lt=Membership.Roles.MEMBER + ): + user = facility_member.user_account.user + group = GroupModel.objects.get(name=FACILITY_MANAGER_GROUPNAME) + user.groups.add(group) + print(f' - {group.name}: added user "{user.username}" (id: {user.id})') + + +def backwards(apps, schema_editor): + GroupModel = apps.get_model("auth", "Group") + for group_name in MANAGER_GROUPS.keys(): + GroupModel.objects.get(name=group_name).delete() + + +class Migration(migrations.Migration): + dependencies = [ + ("contenttypes", "0002_remove_content_type_name"), + ("auth", "0011_update_proxy_permissions"), + ("accounts", "0001_initial"), + ("organizations", "0012_cascade_deletion"), + ] + + operations = [ + migrations.RunPython(forwards, backwards), + ] diff --git a/organizations/migrations/0014_move_short_descriptions.py b/organizations/migrations/0014_move_short_descriptions.py new file mode 100644 index 00000000..0fe822d6 --- /dev/null +++ b/organizations/migrations/0014_move_short_descriptions.py @@ -0,0 +1,47 @@ +""" + +Removes field `short_description` from models Organization and Facility. + +If short_description is not empty, it copies it's content of Organization +and Facility model to beginning of its description field. + +""" + +from django.db import migrations + + +def combine_descriptions(apps, schema_editor): + + models = ( + apps.get_model("organizations", "Organization"), + apps.get_model("organizations", "Facility"), + ) + + for Model in models: + for object in Model.objects.exclude(short_description="").exclude( + short_description=None + ): + short_description = (object.short_description or "").strip() + if short_description: + description = (object.description or "").strip() + object.description = f"{short_description}\n\n\n{description}\n".strip() + object.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ("organizations", "0013_add_manager_group_permissions"), + ] + + operations = [ + migrations.RunPython(combine_descriptions, migrations.RunPython.noop), + migrations.RemoveField( + model_name="facility", + name="short_description", + ), + migrations.RemoveField( + model_name="organization", + name="short_description", + ), + ] diff --git a/organizations/migrations/0015_add_priority_fields.py b/organizations/migrations/0015_add_priority_fields.py new file mode 100644 index 00000000..7871519e --- /dev/null +++ b/organizations/migrations/0015_add_priority_fields.py @@ -0,0 +1,43 @@ +# Generated by Django 2.2.3 on 2022-03-20 10:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("organizations", "0014_move_short_descriptions"), + ] + + operations = [ + migrations.AlterModelOptions( + name="task", + options={ + "ordering": ("facility", "-priority", "name"), + "verbose_name": "task", + "verbose_name_plural": "tasks", + }, + ), + migrations.AlterModelOptions( + name="workplace", + options={ + "ordering": ("facility", "-priority", "name"), + "verbose_name": "workplace", + "verbose_name_plural": "workplaces", + }, + ), + migrations.AddField( + model_name="task", + name="priority", + field=models.PositiveSmallIntegerField( + blank=True, null=True, verbose_name="priority" + ), + ), + migrations.AddField( + model_name="workplace", + name="priority", + field=models.PositiveSmallIntegerField( + blank=True, null=True, verbose_name="priority" + ), + ), + ] diff --git a/organizations/migrations/0016_add_priority_help_text.py b/organizations/migrations/0016_add_priority_help_text.py new file mode 100644 index 00000000..14b5c2bc --- /dev/null +++ b/organizations/migrations/0016_add_priority_help_text.py @@ -0,0 +1,33 @@ +# Generated by Django 2.2.3 on 2022-03-23 00:30 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("organizations", "0015_add_priority_fields"), + ] + + operations = [ + migrations.AlterField( + model_name="task", + name="priority", + field=models.PositiveSmallIntegerField( + blank=True, + help_text="Higher value = higher priority", + null=True, + verbose_name="priority", + ), + ), + migrations.AlterField( + model_name="workplace", + name="priority", + field=models.PositiveSmallIntegerField( + blank=True, + help_text="Higher value = higher priority", + null=True, + verbose_name="priority", + ), + ), + ] diff --git a/organizations/migrations/0017_make_memberships_unique.py b/organizations/migrations/0017_make_memberships_unique.py new file mode 100644 index 00000000..4de22227 --- /dev/null +++ b/organizations/migrations/0017_make_memberships_unique.py @@ -0,0 +1,132 @@ +import logging + +from django.db import migrations +from django.db.models import Count, Min + +logger = logging.getLogger(__name__) + + +def check_is_staff(apps, user_account): + OrganizationMembership = apps.get_model("organizations", "OrganizationMembership") + FacilityMembership = apps.get_model("organizations", "FacilityMembership") + + logger.info("Checking is_staff for %s", user_account.user.username) + + if not FacilityMembership.objects.filter( + user_account=user_account, role__lt=2 + ).exists(): + if not OrganizationMembership.objects.filter( + user_account=user_account, role__lt=2 + ).exists(): + logger.info( + "Revoking is_staff flag for user %s", user_account.user.username + ) + user_account.user.is_staff = False + user_account.user.save() + + +def squash_duplicate_organization_memberships(apps, schema_editor): + + OrganizationMembership = apps.get_model("organizations", "OrganizationMembership") + + members_with_duplicates = ( + OrganizationMembership.objects.order_by("user_account", "organization") + .values("user_account", "organization") + .annotate(number_of_roles=Count("role"), highest_role=Min("role")) + .filter(number_of_roles__gt=1) + ) + + logger.info( + "Found %s duplicate organization memberships", members_with_duplicates.count() + ) + + for member in members_with_duplicates: + user_account = member["user_account"] + organization = member["organization"] + highest_role = member["highest_role"] + + user_memberships = OrganizationMembership.objects.filter( + user_account=user_account, + organization=organization, + ).order_by("-status", "role") + + membership_to_keep = user_memberships.first() + + logger.info( + "%s: keeping %s as (status=%s, role=%s) at %s", + membership_to_keep.id, + membership_to_keep.user_account.user.username, + membership_to_keep.status, + membership_to_keep.role, + membership_to_keep.organization.name, + ) + user_memberships.exclude(pk=membership_to_keep.pk).delete() + + if highest_role > 1: + check_is_staff(apps, membership_to_keep.user_account) + + +def squash_duplicate_facility_memberships(apps, schema_editor): + + FacilityMembership = apps.get_model("organizations", "FacilityMembership") + + members_with_duplicates = ( + FacilityMembership.objects.order_by("user_account", "facility") + .values("user_account", "facility") + .annotate(number_of_roles=Count("role"), highest_role=Min("role")) + .filter(number_of_roles__gt=1) + ) + + logger.info( + "Found %s duplicate facility memberships", members_with_duplicates.count() + ) + + for member in members_with_duplicates: + user_account = member["user_account"] + facility = member["facility"] + highest_role = member["highest_role"] + + user_memberships = FacilityMembership.objects.filter( + user_account=user_account, + facility=facility, + ).order_by("-status", "role") + + membership_to_keep = user_memberships.first() + + logger.info( + "%s: keeping %s as (status=%s, role=%s) at %s", + membership_to_keep.id, + membership_to_keep.user_account.user.username, + membership_to_keep.status, + membership_to_keep.role, + membership_to_keep.facility.name, + ) + user_memberships.exclude(pk=membership_to_keep.pk).delete() + + if highest_role > 1: + check_is_staff(apps, membership_to_keep.user_account) + + +class Migration(migrations.Migration): + + dependencies = [ + ("accounts", "0001_initial"), + ("organizations", "0016_add_priority_help_text"), + ] + + operations = [ + migrations.RunPython( + squash_duplicate_organization_memberships, migrations.RunPython.noop + ), + migrations.RunPython( + squash_duplicate_facility_memberships, migrations.RunPython.noop + ), + migrations.AlterUniqueTogether( + name="facilitymembership", + unique_together={("facility", "user_account")}, + ), + migrations.AlterUniqueTogether( + name="organizationmembership", + unique_together={("organization", "user_account")}, + ), + ] diff --git a/organizations/migrations/0018_alter_ordering_by_priority.py b/organizations/migrations/0018_alter_ordering_by_priority.py new file mode 100644 index 00000000..f8c1c514 --- /dev/null +++ b/organizations/migrations/0018_alter_ordering_by_priority.py @@ -0,0 +1,46 @@ +# Generated by Django 4.0.3 on 2022-03-29 08:01 + +from django.db import migrations +import django.db.models.expressions + + +class Migration(migrations.Migration): + + dependencies = [ + ("organizations", "0017_make_memberships_unique"), + ] + + operations = [ + migrations.AlterModelOptions( + name="task", + options={ + "ordering": ( + "facility", + django.db.models.expressions.OrderBy( + django.db.models.expressions.F("priority"), + descending=True, + nulls_last=True, + ), + "name", + ), + "verbose_name": "task", + "verbose_name_plural": "tasks", + }, + ), + migrations.AlterModelOptions( + name="workplace", + options={ + "ordering": ( + "facility", + django.db.models.expressions.OrderBy( + django.db.models.expressions.F("priority"), + descending=True, + nulls_last=True, + ), + "name", + ), + "verbose_name": "workplace", + "verbose_name_plural": "workplaces", + }, + ), + ] diff --git a/organizations/models.py b/organizations/models.py index 889d88ad..3bdf2374 100644 --- a/organizations/models.py +++ b/organizations/models.py @@ -1,324 +1,378 @@ # coding: utf-8 -from django.core.urlresolvers import reverse from django.db import models -from django.utils.translation import ugettext_lazy as _ +from django.db.models import F +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ from accounts.models import UserAccount -from scheduler.models import Shift +from .managers import FacilityManager class Membership(models.Model): - """ Abstract base class for memberships of users. - + """Abstract base class for memberships of users. + Defines three choices lists: JoinMode, Status and Roles. - + JoinMode contains Invitation only, Approval by admin and Anyone. Status contains Rejected, Peding and Approved. Roles contains Admin, Manager and Member. - + Has fields: role, status and user_account. Role makes use of choices list Role, status of status. user_account is a foreign-key to User-account. """ - + related_name = None class JoinMode: INVITATION_ONLY, APPROVAL_BY_ADMIN, ANYONE = 0, 1, 2 CHOICES = ( - (INVITATION_ONLY, _(u'by invitation')), - (APPROVAL_BY_ADMIN, _(u'anyone (approved by manager)')), - (ANYONE, _(u'anyone')), + (INVITATION_ONLY, _("by invitation")), + (APPROVAL_BY_ADMIN, _("anyone (approved by manager)")), + (ANYONE, _("anyone")), ) class Status: REJECTED, PENDING, APPROVED = 0, 1, 2 CHOICES = ( - (REJECTED, _(u'rejected')), - (PENDING, _(u'pending')), - (APPROVED, _(u'approved')), + (REJECTED, _("rejected")), + (PENDING, _("pending")), + (APPROVED, _("approved")), ) class Roles: ADMIN, MANAGER, MEMBER = 0, 1, 2 CHOICES = ( - (ADMIN, _(u'admin')), - (MANAGER, _(u'manager')), - (MEMBER, _(u'member')), + (ADMIN, _("admin")), + (MANAGER, _("manager")), + (MEMBER, _("member")), ) - role = models.PositiveSmallIntegerField(choices=Roles.CHOICES, - default=Roles.MEMBER, - verbose_name=_(u'role')) + role = models.PositiveSmallIntegerField( + choices=Roles.CHOICES, default=Roles.MEMBER, verbose_name=_("role") + ) - status = models.PositiveSmallIntegerField(choices=Status.CHOICES, - default=Status.APPROVED, - verbose_name=_(u'status')) + status = models.PositiveSmallIntegerField( + choices=Status.CHOICES, default=Status.APPROVED, verbose_name=_("status") + ) - user_account = models.ForeignKey(UserAccount, - verbose_name=_(u'user account'), - related_name=related_name) + user_account = models.ForeignKey( + UserAccount, + models.CASCADE, + verbose_name=_("user account"), + related_name=related_name, + ) class Meta: abstract = True class Organization(models.Model): - """ Organizations organize the work at the facilities. - + """Organizations organize the work at the facilities. + Has fields: name, short description, description, contact info, address, members (many2many relationship through OrganizationMembership), - slug and join mode (choices list join_mode of abstract class Membership). + slug and join mode (choices list join_mode of abstract class Membership). """ - # the name of the organization, ie. "Wilmersdorf hilft" - name = models.CharField(max_length=256, verbose_name=_(u'name')) - # a short description of the organization. - # will be derived from description, if empty - short_description = models.TextField(blank=True, - verbose_name=_(u'short description')) + # the name of the organization, ie. "Wilmersdorf hilft" + name = models.CharField(max_length=256, verbose_name=_("name")) # a description of the organization - description = models.TextField(verbose_name=_(u'description')) + description = models.TextField(verbose_name=_("description")) # anything one needs to know on how to contact the facility - contact_info = models.TextField(verbose_name=_(u'contact info')) + contact_info = models.TextField(verbose_name=_("contact info")) # the orgs address - address = models.TextField(verbose_name=_('address')) + address = models.TextField(verbose_name=_("address")) # users associated with this organization # ie. members, admins, admins members = models.ManyToManyField( - UserAccount, - through='organizations.OrganizationMembership' + UserAccount, through="organizations.OrganizationMembership" ) - slug = models.SlugField(max_length=80, verbose_name=_(u'slug')) + slug = models.SlugField(max_length=80, verbose_name=_("slug")) join_mode = models.PositiveSmallIntegerField( choices=Membership.JoinMode.CHOICES, default=Membership.JoinMode.INVITATION_ONLY, - verbose_name=_(u'join mode'), - help_text=_(u'Who can join this organization?')) + verbose_name=_("join mode"), + help_text=_("Who can join this organization?"), + ) class Meta: - verbose_name = _(u'organization') - verbose_name_plural = _(u'organizations') - ordering = ('name',) + verbose_name = _("organization") + verbose_name_plural = _("organizations") + ordering = ("name",) def __unicode__(self): - return _(u"{name}").format(name=self.name) + return f"{self.name}" + + def __str__(self): + return self.__unicode__() def get_absolute_url(self): - return reverse('organization', - args=[self.slug]) + return reverse("organization", args=[self.slug]) class Facility(models.Model): - """ Facilities are the places where the voluntary work is done, - mainly where refugees live or administrative places. - - Has fields: organization (org. that is running the fac.,foreign-key to organization), - name, short description, description, contact info, - members (User account many2many Facility), - place, adress, zip-code, show_on_map, latitude, longitude, slug, - timeline enabled and join mode. - """ + """ + Facilities are the places where the voluntary work is done. + """ class TimelineViewMode: DISABLED, COLLAPSED, ENABLED = 0, 1, 2 CHOICES = ( - (DISABLED, _(u'disabled')), - (COLLAPSED, _(u'enabled (collapsed)')), - (ENABLED, _(u'enabled')), + (DISABLED, _("disabled")), + (COLLAPSED, _("enabled (collapsed)")), + (ENABLED, _("enabled")), ) # the organization running this facility - organization = models.ForeignKey('organizations.Organization', - verbose_name=_('organization'), - related_name='facilities') + organization = models.ForeignKey( + "organizations.Organization", + models.CASCADE, + verbose_name=_("organization"), + related_name="facilities", + ) # the name of the facility, ie. "Fehrbelliner Platz 4" - name = models.CharField(max_length=256, verbose_name=_(u'name')) - - # a short description of the facility. - # will be derived from description, if empty - short_description = models.TextField(blank=True, - verbose_name=_(u'short description')) + name = models.CharField(max_length=256, verbose_name=_("name")) # a description of the facility - description = models.TextField(verbose_name=_(u'description')) + description = models.TextField(verbose_name=_("description")) # anything one needs to know on how to contact the facility - contact_info = models.TextField(verbose_name=_(u'contact info')) + contact_info = models.TextField(verbose_name=_("contact info")) # users associated with this facility # ie. members, admins, admins - members = models.ManyToManyField(UserAccount, - through='organizations.FacilityMembership') + members = models.ManyToManyField( + UserAccount, through="organizations.FacilityMembership" + ) # the geographical location of the faciltiy - place = models.ForeignKey("places.Place", - null=False, - related_name='facilities', - verbose_name=_('place')) + place = models.ForeignKey( + "places.Place", + models.CASCADE, + null=False, + related_name="facilities", + verbose_name=_("place"), + ) # not all addresses need to have the western pattern of # street, postal code, city - address = models.TextField(verbose_name=_('address')) + address = models.TextField(verbose_name=_("address")) # might be useful later, once we want to search by zip code - zip_code = models.CharField(max_length=25, - blank=True, - verbose_name=_('postal code')) + zip_code = models.CharField( + max_length=25, blank=True, verbose_name=_("postal code") + ) # coordinates for showing it on a map and a flag to switch it on - show_on_map = models.BooleanField(default=True, - verbose_name=_( - 'Show on map of all facilities')) - latitude = models.CharField(max_length=30, blank=True, - verbose_name=_('latitude')) - longitude = models.CharField(max_length=30, blank=True, - verbose_name=_('longitude')) + show_on_map = models.BooleanField( + default=True, verbose_name=_("Show on map of all facilities") + ) + latitude = models.CharField(max_length=30, blank=True, verbose_name=_("latitude")) + longitude = models.CharField(max_length=30, blank=True, verbose_name=_("longitude")) - slug = models.SlugField(max_length=80, verbose_name=_(u'slug')) + slug = models.SlugField(max_length=80, verbose_name=_("slug")) timeline_enabled = models.PositiveSmallIntegerField( choices=TimelineViewMode.CHOICES, default=TimelineViewMode.COLLAPSED, - verbose_name=_(u'timeline')) + verbose_name=_("timeline"), + ) join_mode = models.PositiveSmallIntegerField( choices=Membership.JoinMode.CHOICES, default=Membership.JoinMode.INVITATION_ONLY, - verbose_name=_(u'join mode'), - help_text=_(u'Who can join this facility?')) + verbose_name=_("join mode"), + help_text=_("Who can join this facility?"), + ) + + objects = FacilityManager() class Meta: - verbose_name = _(u'facility') - verbose_name_plural = _(u'facilities') - ordering = ('organization', 'place', 'name',) + verbose_name = _("facility") + verbose_name_plural = _("facilities") + ordering = ( + "organization", + "place", + "name", + ) @property def address_line(self): - return ', '.join( - filter(None, map(lambda s: s.strip(), self.address.splitlines()))) - - # TODO: Could this be implemented in a more optimized way? - @property - def open_shifts(self): - return Shift.open_shifts.filter(facility=self) + return ", ".join( + filter(None, map(lambda s: s.strip(), self.address.splitlines())) + ) def __unicode__(self): - return _(u"{name}").format(name=self.name) + return f"{self.name}" + + def __str__(self): + return self.__unicode__() def get_absolute_url(self): - return reverse('facility', - args=[self.organization.slug, self.slug]) + return reverse("facility", args=[self.organization.slug, self.slug]) class OrganizationMembership(Membership): - """ Users membership of organizations. - + """ + Users membership at organizations. + Inherits from Membership which has a foreign key to user account. - Has a foreign key field to Organization, - so this is the many2many model of the m2m relationship user accounts/organization. """ - - related_name = 'organizations' - organization = models.ForeignKey(Organization, - verbose_name=_(u'organization'), - related_name='memberships', - related_query_name='membership') + related_name = "organizations" + + organization = models.ForeignKey( + Organization, + models.CASCADE, + verbose_name=_("organization"), + related_name="memberships", + related_query_name="membership", + ) class Meta: - verbose_name = _(u'organization member') - verbose_name_plural = _(u'organization members') - ordering = ('organization', 'role', 'user_account') + verbose_name = _("organization member") + verbose_name_plural = _("organization members") + ordering = ("organization", "role", "user_account") + unique_together = ( + "organization", + "user_account", + ) def __unicode__(self): - return _(u"{username} at {organization_name} ({user_role})").format( + return _("{username} at {organization_name} ({user_role})").format( username=self.user_account.user.username, organization_name=self.organization.name, - user_role=self.role) + user_role=self.role, + ) + + def __str__(self): + return self.__unicode__() class FacilityMembership(Membership): - """ Users membership of facilities. - + """ + Users membership of facilities. + Inherits from Membership which has a foreign key to user account. - Has a foreign key field to Facility, - so this is the many2many model of the m2m relationship user accounts/facility. """ - related_name = 'facilities' - facility = models.ForeignKey(Facility, - verbose_name=_(u'facility'), - related_name='memberships', - related_query_name='membership' - ) + related_name = "facilities" + + facility = models.ForeignKey( + Facility, + models.CASCADE, + verbose_name=_("facility"), + related_name="memberships", + related_query_name="membership", + ) class Meta: - verbose_name = _(u'facility member') - verbose_name_plural = _(u'facility members') - ordering = ('facility', 'role', 'user_account') + verbose_name = _("facility member") + verbose_name_plural = _("facility members") + ordering = ("facility", "role", "user_account") + unique_together = ( + "facility", + "user_account", + ) def __unicode__(self): - return _(u"{username} at {facility_name} ({user_role})").format( + return _("{username} at {facility_name} ({user_role})").format( username=self.user_account.user.username, facility_name=self.facility.name, - user_role=self.role) + user_role=self.role, + ) + + def __str__(self): + return self.__unicode__() class Workplace(models.Model): - """ Workplaces are places at the facilities, where work is done, - eg. kitchen or clothing store. - - Has foreign key to facility, name and description. """ + Workplaces are places at the facilities, where work is done. + + Examples: kitchen or clothing store. + """ + # the facility the workplace belongs to - facility = models.ForeignKey('Facility', - verbose_name=_(u"facility"), - related_name='workplaces' - ) + facility = models.ForeignKey( + "Facility", + models.CASCADE, + verbose_name=_("facility"), + related_name="workplaces", + ) # the name of the workplace, ie. "Küche" - name = models.CharField(max_length=256, verbose_name=_(u'name')) + name = models.CharField(max_length=256, verbose_name=_("name")) # a description of the workplace - description = models.TextField(blank=True, verbose_name=_(u'description')) + description = models.TextField(blank=True, verbose_name=_("description")) + + priority = models.PositiveSmallIntegerField( + null=True, + blank=True, + verbose_name=_("priority"), + help_text=_("Higher value = higher priority"), + ) class Meta: - verbose_name = _(u'workplace') - verbose_name_plural = _(u'workplaces') - ordering = ('facility', 'name',) + verbose_name = _("workplace") + verbose_name_plural = _("workplaces") + ordering = ( + "facility", + F("priority").desc(nulls_last=True), + "name", + ) def __unicode__(self): - return _(u"{name}").format(name=self.name) + return f"{self.name}" + + def __str__(self): + return self.__unicode__() class Task(models.Model): - """ Tasks that are to be done at the facilities. - + """Tasks that are to be done at the facilities. + Has foreign key to facility, name and description. """ + # the facility the task belongs to - facility = models.ForeignKey('Facility', - verbose_name=_(u"facility"), - related_name='tasks') + facility = models.ForeignKey( + "Facility", models.CASCADE, verbose_name=_("facility"), related_name="tasks" + ) # the name of the task, ie. "Dolmetscher Farsi" - name = models.CharField(max_length=256, verbose_name=_(u'name')) + name = models.CharField(max_length=256, verbose_name=_("name")) # a description of the task - description = models.TextField(blank=True, verbose_name=_(u'description')) + description = models.TextField(blank=True, verbose_name=_("description")) + + priority = models.PositiveSmallIntegerField( + null=True, + blank=True, + verbose_name=_("priority"), + help_text=_("Higher value = higher priority"), + ) class Meta: - verbose_name = _(u'task') - verbose_name_plural = _(u'tasks') - ordering = ('facility', 'name',) + verbose_name = _("task") + verbose_name_plural = _("tasks") + ordering = ( + "facility", + F("priority").desc(nulls_last=True), + "name", + ) def __unicode__(self): - return _(u"{name}").format(name=self.name) + return f"{self.name}" + + def __str__(self): + return self.__unicode__() diff --git a/organizations/settings.py b/organizations/settings.py new file mode 100644 index 00000000..7a2ccc69 --- /dev/null +++ b/organizations/settings.py @@ -0,0 +1,9 @@ +from django.conf import settings + +# provide sane default group names, change in settings +FACILITY_MANAGER_GROUPNAME = getattr( + settings, "FACILITY_MANAGER_GROUPNAME", "Facility Manager" +) +ORGANIZATION_MANAGER_GROUPNAME = getattr( + settings, "ORGANIZATION_MANAGER_GROUPNAME", "Organization Manager" +) diff --git a/organizations/signals.py b/organizations/signals.py new file mode 100644 index 00000000..461019e4 --- /dev/null +++ b/organizations/signals.py @@ -0,0 +1,99 @@ +import logging + +from django.contrib.auth.models import Group +from django.db import transaction +from django.db.models.signals import post_delete, post_save +from django.dispatch import receiver +from django.utils.translation import gettext_lazy as _ + +from .models import FacilityMembership, Membership, OrganizationMembership +from .settings import FACILITY_MANAGER_GROUPNAME, ORGANIZATION_MANAGER_GROUPNAME + +logger = logging.getLogger(__name__) + + +class MembershipGroupUpdateException(Exception): + pass + + +@transaction.atomic +def update_group_for_user(user_account, membership_set, group_name): + """ + Check django.contrib.auth groups of user in user_account and add or remove groups + for its memberships. + + :param user_account: the user account of the associated user to update the groups of + :param membership_set: the membership set (reverse relation) to consider + :param group_name: Name of group to be added or removed from the associated user + :return: + """ + user = user_account.user + try: + group = Group.objects.get(name=group_name) + except Group.DoesNotExist: + logger.error( + _( + f"User '{user}' manager status of a facility/organization was changed. " + f"We tried to automatically update facility/organization manager " + f"group '{group_name}' for them, but no such group exists. " + f"In order to auto-assign permission groups to de-/resignated facility " + f"managers or organization managers, please make sure, to configure " + f"the permission group names in your VP installation settings module " + f"ORGANIZATION_MANAGER_GROUPNAME (default: " + f'"{ORGANIZATION_MANAGER_GROUPNAME}") and FACILITY_MANAGER_GROUPNAME ' + f'(default: "{FACILITY_MANAGER_GROUPNAME}") exactly as they are ' + f"named in the database." + ) + ) + return + + if membership_set.filter(role__lt=Membership.Roles.MEMBER).exists(): + user.groups.add(group) + + if not user.is_staff: + user.is_staff = True + user.save() + else: + user.groups.remove(group) + # Revoking the user is_staff flag here is not save, because it can not be known, + # if the user has this flag for another reason, too. + + +@receiver([post_save, post_delete], sender=FacilityMembership) +def handle_facility_membership_change(sender, instance, **kwargs): + """ + Update the django.contrib.auth groups of the associated user object, whenever a + facility membership for it is created, changed or deleted. + """ + try: + user_account = instance.user_account + update_group_for_user( + user_account, + user_account.facilitymembership_set, + FACILITY_MANAGER_GROUPNAME, + ) + + except Exception as e: + raise MembershipGroupUpdateException( + f'facility -> "{FACILITY_MANAGER_GROUPNAME}"' + ) from e + + +@receiver((post_save, post_delete), sender=OrganizationMembership) +def handle_organization_membership_change(sender, instance, **kwargs): + """ + Update the django.contrib.auth groups of the associated user object, whenever a + organization membership for it is created, changed or deleted. + """ + try: + user_account = instance.user_account + update_group_for_user( + user_account, + user_account.organizationmembership_set, + ORGANIZATION_MANAGER_GROUPNAME, + ) + + except Exception as e: + raise MembershipGroupUpdateException( + f'organization -> "{FACILITY_MANAGER_GROUPNAME}"' + ) from e diff --git a/organizations/templates/emails/membership_approved.txt b/organizations/templates/emails/membership_approved.txt index 1d8a8c11..d3b55deb 100644 --- a/organizations/templates/emails/membership_approved.txt +++ b/organizations/templates/emails/membership_approved.txt @@ -1,11 +1,11 @@ {% load i18n %} -{% blocktrans trimmed %} +{% blocktranslate trimmed %} Hello {{ username }}, -{% endblocktrans %} +{% endblocktranslate %} -{% blocktrans trimmed %} +{% blocktranslate trimmed %} Your membership request at {{ facility_name }} was approved. You now may sign up for restricted shifts at this facility. -{% endblocktrans %} +{% endblocktranslate %} -{% blocktrans %}Yours, -the volunteer-planner.org Team{% endblocktrans %} +{% blocktranslate %}Yours, +the volunteer-planner.org Team{% endblocktranslate %} diff --git a/organizations/templates/facility.html b/organizations/templates/facility.html index 2653cde0..6afbc799 100644 --- a/organizations/templates/facility.html +++ b/organizations/templates/facility.html @@ -6,7 +6,7 @@
    @@ -28,7 +24,7 @@

    {{ facility.name }}

    {% regroup facility.open_shifts.all by starting_time.date as shifts_by_day %} {% if shifts_by_day %}
    -

    {% trans "Open Shifts" %}

    +

    {% translate "Open Shifts" %}

    {% for shifts_on_day in shifts_by_day %} diff --git a/organizations/templatetags/__init__.py b/organizations/templatetags/__init__.py index 3117685a..57d631c3 100644 --- a/organizations/templatetags/__init__.py +++ b/organizations/templatetags/__init__.py @@ -1,2 +1 @@ # coding: utf-8 - diff --git a/organizations/templatetags/memberships.py b/organizations/templatetags/memberships.py index c7876e2b..b454f727 100644 --- a/organizations/templatetags/memberships.py +++ b/organizations/templatetags/memberships.py @@ -3,11 +3,8 @@ from django import template from django.db.models import Count -from organizations.admin import ( - get_cached_memberships, - filter_queryset_by_membership -) -from organizations.models import Membership, FacilityMembership +from organizations.admin import filter_queryset_by_membership, get_cached_memberships +from organizations.models import FacilityMembership, Membership register = template.Library() @@ -16,38 +13,48 @@ def is_facility_member(user, facility, role=None): user_orgs, user_facilities = get_cached_memberships( user=user, - roles=(Membership.Roles.ADMIN, - Membership.Roles.MANAGER, - Membership.Roles.MEMBER) + roles=( + Membership.Roles.ADMIN, + Membership.Roles.MANAGER, + Membership.Roles.MEMBER, + ), ) return facility.id in user_facilities or facility.organization.id in user_orgs @register.filter def is_membership_pending(user, facility): - return FacilityMembership.objects.filter(facility=facility, - user_account__user_id=user.id, - status=Membership.Status.PENDING).exists() + return FacilityMembership.objects.filter( + facility=facility, + user_account__user_id=user.id, + status=Membership.Status.PENDING, + ).exists() @register.filter def is_membership_rejected(user, facility): - return FacilityMembership.objects.filter(facility=facility, - user_account__user_id=user.id, - status=Membership.Status.REJECTED).exists() + return FacilityMembership.objects.filter( + facility=facility, + user_account__user_id=user.id, + status=Membership.Status.REJECTED, + ).exists() @register.filter def get_pending_membership_approvals(user): memberships = FacilityMembership.objects.filter( - status=FacilityMembership.Status.PENDING).order_by('facility') + status=FacilityMembership.Status.PENDING + ).order_by("facility") - counters = filter_queryset_by_membership(memberships, user).values( - 'facility').annotate(count=Count('facility')) + counters = ( + filter_queryset_by_membership(memberships, user) + .values("facility") + .annotate(count=Count("facility")) + ) result = dict(facilities=dict(), total=0) for counter in counters: - result['facilities'][counter['facility']] = counter['count'] - result['total'] += counter['count'] + result["facilities"][counter["facility"]] = counter["count"] + result["total"] += counter["count"] return result diff --git a/organizations/tests.py b/organizations/tests.py index 6ae43bcc..a730dbb2 100644 --- a/organizations/tests.py +++ b/organizations/tests.py @@ -1,4 +1,3 @@ # coding=utf-8 -from django.test import TestCase # Create your tests here. diff --git a/organizations/urls.py b/organizations/urls.py index d5816cf9..8dafc99a 100644 --- a/organizations/urls.py +++ b/organizations/urls.py @@ -1,21 +1,29 @@ # coding: utf-8 -from django.conf.urls import url +from django.urls import re_path -from .views import OrganizationView, FacilityView, ManageFacilityMembersView, \ - managing_members_view +from .views import ( + FacilityView, + ManageFacilityMembersView, + managing_members_view, + OrganizationView, +) urlpatterns = [ - url(r'^(?P[^/]+)/?$', OrganizationView.as_view(), - name='organization'), - - url(r'^(?P[^/]+)/(?P[^/]+)/?$', - FacilityView.as_view(), name='facility'), - - url(r'^(?P[^/]+)/(?P[^/]+)/manage/members/?$', - ManageFacilityMembersView.as_view(), name='manage-members'), - - url( - r'^(?P[^/]+)/(?P[^/]+)/manage/members/update/?$', managing_members_view, name='manage-members-ajax'), - + re_path(r"^(?P[^/]+)/?$", OrganizationView.as_view(), name="organization"), + re_path( + r"^(?P[^/]+)/(?P[^/]+)/?$", + FacilityView.as_view(), + name="facility", + ), + re_path( + r"^(?P[^/]+)/(?P[^/]+)/manage/members/?$", + ManageFacilityMembersView.as_view(), + name="manage-members", + ), + re_path( + r"^(?P[^/]+)/(?P[^/]+)/manage/members/update/?$", + managing_members_view, + name="manage-members-ajax", + ), ] diff --git a/organizations/views.py b/organizations/views.py index 64eade10..2f770909 100644 --- a/organizations/views.py +++ b/organizations/views.py @@ -4,60 +4,61 @@ from django.conf import settings from django.contrib.admin.views.decorators import staff_member_required +from django.contrib.auth.mixins import LoginRequiredMixin from django.core.mail import EmailMessage -from django.core.urlresolvers import reverse +from django.db.models import Prefetch from django.http import HttpResponseForbidden from django.template.defaultfilters import date from django.template.loader import get_template +from django.urls import reverse from django.utils.safestring import mark_safe -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.views.generic import DetailView from django_ajax.decorators import ajax -from accounts.models import UserAccount -from osm_tools.templatetags.osm_links import osm_search -from news.models import NewsEntry from organizations.admin import filter_queryset_by_membership +from osm_tools.templatetags.osm_links import osm_search from scheduler.models import Shift -from .models import Organization, Facility, FacilityMembership +from .models import Facility, FacilityMembership, Organization class OrganizationView(DetailView): - ''' Class-based view to show details of an organization and related + """Class-based view to show details of an organization and related facilities. - + Inherits from django generic DetailView. Overrides get_queryset to get facilities which belong to organization via queryset.prefetch_related(). - - ''' - template_name = 'organization.html' + + """ + + template_name = "organization.html" model = Organization def get_queryset(self): qs = super(OrganizationView, self).get_queryset() - return qs.prefetch_related('facilities') + return qs.prefetch_related("facilities") class FacilityView(DetailView): - ''' Class-based view to show details of a facility plus news + """Class-based view to show details of a facility plus news and open shifts for that facility. - + Inherits from django generic DetailView. Overrides get_context_data(self, **kwargs) to get open shifts for that facility. Calls get_facility_details(facility, shifts) to get details of that facility. - ''' - template_name = 'facility.html' + """ + + template_name = "facility.html" model = Facility - queryset = Facility.objects.select_related('organization') + queryset = Facility.objects.select_related("organization").prefetch_related( + Prefetch("shift_set", queryset=Shift.open_shifts.all(), to_attr="open_shifts") + ) def get_context_data(self, **kwargs): context = super(FacilityView, self).get_context_data(**kwargs) - shifts = Shift.open_shifts.filter(facility=self.object) - context['object'] = self.object - context['facility'] = get_facility_details(self.object, shifts) - + context["facility"] = get_facility_details(self.object) return context @@ -66,23 +67,22 @@ def get_context_data(self, **kwargs): def managing_members_view(request, **kwargs): try: facilities_managed_by_user = filter_queryset_by_membership( - Facility.objects.all(), - request.user, - skip_superuser=False) + Facility.objects.all(), request.user, skip_superuser=False + ) facilities = facilities_managed_by_user.filter( - organization__slug=kwargs['organization__slug'], - slug=kwargs['slug'] + organization__slug=kwargs["organization__slug"], slug=kwargs["slug"] ) facility = facilities.get() - user_account_id = request.POST.get('user_account_id') + user_account_id = request.POST.get("user_account_id") - action = request.POST.get('action') + action = request.POST.get("action") - membership = FacilityMembership.objects.get(facility=facility, - user_account__id=user_account_id) + membership = FacilityMembership.objects.get( + facility=facility, user_account__id=user_account_id + ) if action == "remove": membership.delete() @@ -93,17 +93,18 @@ def managing_members_view(request, **kwargs): if action == "accept": membership.status = membership.Status.APPROVED membership.save() - send_membership_approved_notification(membership, - approved_by=request.user) + send_membership_approved_notification( + membership, approved_by=request.user + ) except Exception: if settings.DEBUG: raise return HttpResponseForbidden() - return {'result': "sucess"} + return {"result": "sucess"} -class ManageFacilityMembersView(DetailView): +class ManageFacilityMembersView(LoginRequiredMixin, DetailView): """ This view returns the pending member requests for approval by the shift planner for the already logged in @@ -115,73 +116,80 @@ class ManageFacilityMembersView(DetailView): def get_queryset(self): qs = super(ManageFacilityMembersView, self).get_queryset() - qs = qs.select_related('organization') + qs = qs.select_related("organization") qs = qs.prefetch_related( - 'memberships', - 'memberships__user_account', - 'memberships__user_account__user') - return filter_queryset_by_membership(qs, - self.request.user, - skip_superuser=False) + "memberships", + "memberships__user_account", + "memberships__user_account__user", + ) + return filter_queryset_by_membership( + qs, self.request.user, skip_superuser=False + ) def send_membership_approved_notification(membership, approved_by): + template = get_template("emails/membership_approved.txt") + context = { + "username": membership.user_account.user.username, + "facility_name": membership.facility.name, + } + message = template.render(context) + subject = _("volunteer-planner.org: Membership approved") - try: - template = get_template('emails/membership_approved.txt') - context = { - "username": membership.user_account.user.username, - "facility_name": membership.facility.name, - } - message = template.render(context) - subject = _(u'volunteer-planner.org: Membership approved') - - from_email = settings.DEFAULT_FROM_EMAIL - reply_to = approved_by.email - to = membership.user_account.user.email - - addresses = (to,) - - mail = EmailMessage(subject=subject, - body=message, - to=addresses, - from_email=from_email, - reply_to=reply_to) - mail.send() - except: - raise - - -def get_facility_details(facility, shifts): + from_email = settings.DEFAULT_FROM_EMAIL + reply_to = (approved_by.email,) + to = membership.user_account.user.email + + addresses = (to,) + + mail = EmailMessage( + subject=subject, + body=message, + to=addresses, + from_email=from_email, + reply_to=reply_to, + headers={"Sender": approved_by.email}, + ) + mail.send() + + +def get_facility_details(facility): address_line = facility.address_line if facility.address else None - shifts_by_date = itertools.groupby(shifts, lambda s: s.starting_time.date()) + + shifts_by_date = itertools.groupby( + facility.open_shifts, lambda s: s.starting_time.date() + ) return { - 'name': facility.name, - 'url': facility.get_absolute_url(), - 'news': _serialize_news(NewsEntry.objects.filter(facility=facility)), - 'address_line': address_line, - 'contact_info': facility.contact_info, - 'osm_link': osm_search(address_line) if address_line else None, - 'description': mark_safe(facility.description), - 'area_slug': facility.place.area.slug, - 'shifts': [{ - 'date_string': date(shift_date), - 'link': reverse('planner_by_facility', kwargs={ - 'facility_slug': facility.slug, - 'year': shift_date.year, - 'month': shift_date.month, - 'day': shift_date.day, - }) - } for shift_date, shifts_of_day in shifts_by_date], - 'organization': { - 'id': facility.organization.id, - 'name': facility.organization.name, - 'url': facility.organization.get_absolute_url(), - } + "name": facility.name, + "url": facility.get_absolute_url(), + "news": [ + {"title": n.title, "date": n.creation_date, "text": n.text} + for n in facility.news_entries.all() + ], + "address_line": address_line, + "contact_info": facility.contact_info, + "osm_link": osm_search(address_line) if address_line else None, + "description": mark_safe(facility.description), + "area_slug": facility.place.area.slug, + "country_slug": facility.place.area.region.country.slug, + "shifts": [ + { + "date_string": date(shift_date), + "link": reverse( + "planner_by_facility", + kwargs={ + "facility_slug": facility.slug, + "year": shift_date.year, + "month": shift_date.month, + "day": shift_date.day, + }, + ), + } + for shift_date, shifts_of_day in shifts_by_date + ], + "organization": { + "id": facility.organization.id, + "name": facility.organization.name, + "url": facility.organization.get_absolute_url(), + }, } - - -def _serialize_news(news_entries): - return [dict(title=news_entry.title, - date=news_entry.creation_date, - text=news_entry.text) for news_entry in news_entries] diff --git a/osm_tools/templatetags/osm_links.py b/osm_tools/templatetags/osm_links.py index fc3dd248..5b5b6bb7 100644 --- a/osm_tools/templatetags/osm_links.py +++ b/osm_tools/templatetags/osm_links.py @@ -7,12 +7,14 @@ def url_encoded_location(location): - return u'+'.join(u'{}'.format(location).split(u' ')) + return "+".join("{}".format(location).split(" ")) @register.filter def osm_search(location): location = url_encoded_location(location) - pattern = pgettext_lazy('maps search url pattern', - u'https://www.openstreetmap.org/search?query={location}') + pattern = pgettext_lazy( + "maps search url pattern", + "https://www.openstreetmap.org/search?query={location}", + ) return pattern.format(location=location) diff --git a/places/admin.py b/places/admin.py index db29fb75..5b495b35 100644 --- a/places/admin.py +++ b/places/admin.py @@ -1,44 +1,45 @@ # coding=utf-8 from django.contrib import admin -from .models import Country, Region, Area, Place +from .models import Area, Country, Place, Region @admin.register(Country) class CountryAdmin(admin.ModelAdmin): - list_display = (u'id', 'name', 'slug') - search_fields = ('name', 'slug') - prepopulated_fields = {'slug': ['name']} + list_display = ("id", "name", "slug") + search_fields = ("name", "slug") + prepopulated_fields = {"slug": ["name"]} @admin.register(Region) class RegionAdmin(admin.ModelAdmin): - list_display = (u'id', 'name', 'country', 'slug') - list_filter = ('country',) - search_fields = ('name', 'slug') - prepopulated_fields = {'slug': ['name']} + list_display = ("id", "name", "country", "slug") + list_filter = ("country",) + search_fields = ("name", "slug") + prepopulated_fields = {"slug": ["name"]} @admin.register(Area) class AreaAdmin(admin.ModelAdmin): - list_display = (u'id', 'region', 'name', 'slug') - list_filter = ('region',) - search_fields = ('name', 'slug') - prepopulated_fields = {'slug': ['name']} + list_display = ("id", "region", "name", "slug") + list_filter = ("region",) + search_fields = ("name", "slug") + prepopulated_fields = {"slug": ["name"]} @admin.register(Place) class PlaceAdmin(admin.ModelAdmin): - def get_region(self, obj): return obj.area.region + get_region.short_description = Region._meta.verbose_name def get_country(self, obj): return self.get_region(obj).country + get_country.short_description = Country._meta.verbose_name - list_display = (u'id', 'area', 'get_region', 'get_country', 'name', 'slug') - list_filter = ('area', 'area__region', 'area__region__country') - search_fields = ('name', 'slug') - prepopulated_fields = {'slug': ['name']} + list_display = ("id", "area", "get_region", "get_country", "name", "slug") + list_filter = ("area", "area__region", "area__region__country") + search_fields = ("name", "slug") + prepopulated_fields = {"slug": ["name"]} diff --git a/places/migrations/0001_initial.py b/places/migrations/0001_initial.py index 07ad4e73..04e959a8 100644 --- a/places/migrations/0001_initial.py +++ b/places/migrations/0001_initial.py @@ -1,7 +1,7 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): @@ -10,62 +10,127 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Area', + name="Area", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), - ('slug', models.SlugField(verbose_name='slug')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField(unique=True, max_length=50, verbose_name="name"), + ), + ("slug", models.SlugField(verbose_name="slug")), ], options={ - 'ordering': ('region', 'name'), - 'verbose_name': 'area', - 'verbose_name_plural': 'areas', + "ordering": ("region", "name"), + "verbose_name": "area", + "verbose_name_plural": "areas", }, ), migrations.CreateModel( - name='Country', + name="Country", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), - ('slug', models.SlugField(verbose_name='slug')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField(unique=True, max_length=50, verbose_name="name"), + ), + ("slug", models.SlugField(verbose_name="slug")), ], options={ - 'ordering': ('name',), - 'verbose_name': 'country', - 'verbose_name_plural': 'countries', + "ordering": ("name",), + "verbose_name": "country", + "verbose_name_plural": "countries", }, ), migrations.CreateModel( - name='Place', + name="Place", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), - ('slug', models.SlugField(verbose_name='slug')), - ('area', models.ForeignKey(related_name='places', verbose_name='place', to='places.Area')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField(unique=True, max_length=50, verbose_name="name"), + ), + ("slug", models.SlugField(verbose_name="slug")), + ( + "area", + models.ForeignKey( + related_name="places", + verbose_name="place", + to="places.Area", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('area', 'name'), - 'verbose_name': 'place', - 'verbose_name_plural': 'places', + "ordering": ("area", "name"), + "verbose_name": "place", + "verbose_name_plural": "places", }, ), migrations.CreateModel( - name='Region', + name="Region", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(unique=True, max_length=50, verbose_name='name')), - ('slug', models.SlugField(verbose_name='slug')), - ('country', models.ForeignKey(related_name='regions', verbose_name='country', to='places.Country')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "name", + models.CharField(unique=True, max_length=50, verbose_name="name"), + ), + ("slug", models.SlugField(verbose_name="slug")), + ( + "country", + models.ForeignKey( + related_name="regions", + verbose_name="country", + to="places.Country", + on_delete=models.CASCADE, + ), + ), ], options={ - 'ordering': ('country', 'name'), - 'verbose_name': 'region', - 'verbose_name_plural': 'regions', + "ordering": ("country", "name"), + "verbose_name": "region", + "verbose_name_plural": "regions", }, ), migrations.AddField( - model_name='area', - name='region', - field=models.ForeignKey(related_name='areas', verbose_name='region', to='places.Region'), + model_name="area", + name="region", + field=models.ForeignKey( + related_name="areas", + verbose_name="region", + to="places.Region", + on_delete=models.CASCADE, + ), ), ] diff --git a/places/migrations/0002_auto_20150926_2313.py b/places/migrations/0002_auto_20150926_2313.py index bf16475f..c627304a 100644 --- a/places/migrations/0002_auto_20150926_2313.py +++ b/places/migrations/0002_auto_20150926_2313.py @@ -1,19 +1,24 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('places', '0001_initial'), + ("places", "0001_initial"), ] operations = [ migrations.AlterField( - model_name='place', - name='area', - field=models.ForeignKey(related_name='places', verbose_name='area', to='places.Area'), + model_name="place", + name="area", + field=models.ForeignKey( + related_name="places", + verbose_name="area", + to="places.Area", + on_delete=models.CASCADE, + ), ), ] diff --git a/places/migrations/0003_protect_deletion.py b/places/migrations/0003_protect_deletion.py new file mode 100644 index 00000000..d37cefcc --- /dev/null +++ b/places/migrations/0003_protect_deletion.py @@ -0,0 +1,44 @@ +# Generated by Django 2.0.5 on 2019-07-18 22:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("places", "0002_auto_20150926_2313"), + ] + + operations = [ + migrations.AlterField( + model_name="area", + name="region", + field=models.ForeignKey( + related_name="areas", + to="places.Region", + verbose_name="region", + on_delete=django.db.models.deletion.PROTECT, + ), + ), + migrations.AlterField( + model_name="place", + name="area", + field=models.ForeignKey( + related_name="places", + to="places.Area", + verbose_name="area", + on_delete=django.db.models.deletion.PROTECT, + ), + ), + migrations.AlterField( + model_name="region", + name="country", + field=models.ForeignKey( + related_name="regions", + to="places.Country", + verbose_name="country", + on_delete=django.db.models.deletion.PROTECT, + ), + ), + ] diff --git a/places/models.py b/places/models.py index 71f371b8..083559d4 100644 --- a/places/models.py +++ b/places/models.py @@ -1,24 +1,25 @@ # coding: utf-8 from django.db import models -from django.utils.translation import ugettext_lazy as _ -from django.core.urlresolvers import reverse +from django.urls import reverse +from django.utils.translation import gettext_lazy as _ class BreadcrumpablePlaceManager(models.Manager): - def get_queryset(self): - return super(BreadcrumpablePlaceManager, - self).get_queryset().select_related( - *self.model.get_select_related_list()) + return ( + super(BreadcrumpablePlaceManager, self) + .get_queryset() + .select_related(*self.model.get_select_related_list()) + ) class BreadcrumpablePlaceModel(models.Model): PARENT_MODEL = None PARENT_FIELD = None - name = models.CharField(max_length=50, unique=True, verbose_name=_('name')) - slug = models.SlugField(verbose_name=_(u'slug')) + name = models.CharField(max_length=50, unique=True, verbose_name=_("name")) + slug = models.SlugField(verbose_name=_("slug")) objects = BreadcrumpablePlaceManager() @@ -31,14 +32,23 @@ def parent(self): @property def breadcrumps(self): - return self.parent and self.parent.breadcrumps + [self, ] or [self, ] + return ( + self.parent + and self.parent.breadcrumps + + [ + self, + ] + or [ + self, + ] + ) @classmethod def get_select_related_list(cls, chain=None): select_related = [] if cls.PARENT_FIELD: if chain: - related = '{}__{}'.format(chain, cls.PARENT_FIELD) + related = "{}__{}".format(chain, cls.PARENT_FIELD) else: related = cls.PARENT_FIELD select_related.append(related) @@ -46,16 +56,19 @@ def get_select_related_list(cls, chain=None): return select_related def get_detail_view_name(self): - detail_view_name = getattr(self, 'DETAIL_VIEW_NAME', None) - return detail_view_name or u'{}-details'.format( - self._meta.model_name.lower()) + detail_view_name = getattr(self, "DETAIL_VIEW_NAME", None) + return detail_view_name or "{}-details".format(self._meta.model_name.lower()) def get_absolute_url(self): - return reverse(self.get_detail_view_name(), - args=[o.slug for o in self.breadcrumps]) + return reverse( + self.get_detail_view_name(), args=[o.slug for o in self.breadcrumps] + ) def __unicode__(self): - return u'{}'.format(self.name) + return "{}".format(self.name) + + def __str__(self): + return self.__unicode__() class Country(BreadcrumpablePlaceModel): @@ -63,12 +76,12 @@ class Country(BreadcrumpablePlaceModel): A country """ - DETAIL_VIEW_NAME = 'country-details' + DETAIL_VIEW_NAME = "country-details" class Meta: - verbose_name = _('country') - verbose_name_plural = _('countries') - ordering = ('name',) + verbose_name = _("country") + verbose_name_plural = _("countries") + ordering = ("name",) class Region(BreadcrumpablePlaceModel): @@ -76,17 +89,20 @@ class Region(BreadcrumpablePlaceModel): A region is a geographical region for grouping areas (and facilities within areas). """ - PARENT_FIELD = 'country' + PARENT_FIELD = "country" PARENT_MODEL = Country - country = models.ForeignKey(Country, - related_name='regions', - verbose_name=_('country')) + country = models.ForeignKey( + Country, models.PROTECT, related_name="regions", verbose_name=_("country") + ) class Meta: - verbose_name = _('region') - verbose_name_plural = _('regions') - ordering = ('country', 'name',) + verbose_name = _("region") + verbose_name_plural = _("regions") + ordering = ( + "country", + "name", + ) @property def parent(self): @@ -99,16 +115,20 @@ class Area(BreadcrumpablePlaceModel): Each area belongs to a region. """ - PARENT_FIELD = 'region' + PARENT_FIELD = "region" PARENT_MODEL = Region - region = models.ForeignKey(Region, related_name='areas', - verbose_name=_('region')) + region = models.ForeignKey( + Region, models.PROTECT, related_name="areas", verbose_name=_("region") + ) class Meta: - verbose_name = _('area') - verbose_name_plural = _('areas') - ordering = ('region', 'name',) + verbose_name = _("area") + verbose_name_plural = _("areas") + ordering = ( + "region", + "name", + ) @property def parent(self): @@ -121,17 +141,20 @@ class Place(BreadcrumpablePlaceModel): or a 'district' like Wilmersdorf in Berlin - Berlin. """ - PARENT_FIELD = 'area' + PARENT_FIELD = "area" PARENT_MODEL = Area - area = models.ForeignKey(Area, - related_name='places', - verbose_name=_('area')) + area = models.ForeignKey( + Area, models.PROTECT, related_name="places", verbose_name=_("area") + ) class Meta: - verbose_name = _('place') - verbose_name_plural = _('places') - ordering = ('area', 'name',) + verbose_name = _("place") + verbose_name_plural = _("places") + ordering = ( + "area", + "name", + ) @property def parent(self): diff --git a/places/templatetags/__init__.py b/places/templatetags/__init__.py index 3117685a..57d631c3 100644 --- a/places/templatetags/__init__.py +++ b/places/templatetags/__init__.py @@ -1,2 +1 @@ # coding: utf-8 - diff --git a/places/templatetags/placestemplatetags.py b/places/templatetags/placestemplatetags.py index 461ba2b9..59d170df 100644 --- a/places/templatetags/placestemplatetags.py +++ b/places/templatetags/placestemplatetags.py @@ -8,10 +8,10 @@ register = template.Library() -@register.assignment_tag +@register.simple_tag def get_places_having_facilities(): - places = Place.objects.annotate( - facility_count=Count('facilities')).exclude(facility_count=0) + places = Place.objects.annotate(facility_count=Count("facilities")).exclude( + facility_count=0 + ) return places - diff --git a/places/views.py b/places/views.py index a4cd2720..9d8d80d1 100644 --- a/places/views.py +++ b/places/views.py @@ -1,4 +1,2 @@ # coding=utf-8 # Create your views here. - - diff --git a/pytest.ini b/pytest.ini index 196052ea..71f6a3d9 100644 --- a/pytest.ini +++ b/pytest.ini @@ -1,3 +1,4 @@ [pytest] -# Imitate Django's test discovery pattern. py.test's default is test_*.py python_files=test*.py +DJANGO_SETTINGS_MODULE=volunteer_planner.settings.tests +pythonpath = . volunteer_planner diff --git a/requirements/_base.txt b/requirements/_base.txt deleted file mode 100644 index 28c48468..00000000 --- a/requirements/_base.txt +++ /dev/null @@ -1,25 +0,0 @@ -argparse==1.4.0 -behave==1.2.5 -decorator==4.0.2 -django-appconf==0.6 -django-ckeditor==4.5.0 -django-compressor==1.4 -django-extensions==1.5.7 -django-registration-redux==1.2 -Django==1.8.4 -djangocms-admin-style==0.2.8 -ipdb==0.8.1 -ipython-genutils==0.1.0 -ipython==4.0.0 -path.py==7.6.1 -pexpect==3.3 -pickleshare==0.5 -python-dateutil==2.4.2 -python-memcached==1.57 -simplegeneric==0.8.1 -six==1.7.3 -selenium==2.47.3 -sqlparse==0.1.16 -traitlets==4.0.0 -xlwt==1.0.0 -djangoajax==2.2.15 diff --git a/requirements/base.txt b/requirements/base.txt new file mode 100644 index 00000000..90b54283 --- /dev/null +++ b/requirements/base.txt @@ -0,0 +1,12 @@ +django==4.0.3 +django-ckeditor==6.2.0 +django-compressor==3.1 +django-debug-toolbar==3.2.4 +django-extensions==3.1.5 +django-logentry-admin==1.1.0 +django-registration-redux==2.10 +git+https://github.com/Doca/django-ajax.git#egg=djangoajax + +python3-memcached==1.51 + +ipython==8.2.0 diff --git a/requirements/dev.txt b/requirements/dev.txt index 5d602197..afd8303a 100644 --- a/requirements/dev.txt +++ b/requirements/dev.txt @@ -1,11 +1,16 @@ --r _base.txt -coverage==4.0 -django-debug-toolbar==1.3.2 -factory-boy==2.5.2 -gunicorn==19.3.0 -pytest-cache==1.0 -pytest-cov==2.1.0 -pytest-django==2.8.0 -pytest==2.7.2 -transifex-client==0.11.1b0 -whitenoise==2.0.4 +-r base.txt +-r tests.txt + +# debugging +ipdb==0.13.9 + +# code formatting and linting +black==22.3.0 +flake8==4.0.1 + +# translations +transifex-client==0.14.4 + +# package management tools +pip-chill==1.0.1 +pipdeptree==2.2.1 diff --git a/requirements/dev_postgres.txt b/requirements/dev_postgres.txt index 6707dbeb..7eef9ce6 100644 --- a/requirements/dev_postgres.txt +++ b/requirements/dev_postgres.txt @@ -1,2 +1,3 @@ -r dev.txt -psycopg2==2.6.1 + +psycopg2-binary==2.9.3 diff --git a/requirements/postgres.txt b/requirements/postgres.txt new file mode 100644 index 00000000..d6dd7125 --- /dev/null +++ b/requirements/postgres.txt @@ -0,0 +1,3 @@ +-r base.txt + +psycopg2==2.9.3 diff --git a/requirements/production.txt b/requirements/production.txt index e63a21d5..92daeb82 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -1,2 +1,3 @@ --r _base.txt +-r base.txt + MySQL-python==1.2.5 diff --git a/requirements/tests.txt b/requirements/tests.txt new file mode 100644 index 00000000..5fce1e99 --- /dev/null +++ b/requirements/tests.txt @@ -0,0 +1,17 @@ +-r base.txt + +factory-boy==3.2.1 + +# unit testing +pytest-cache==1.0 +pytest-cov==3.0.0 +pytest-django==4.5.2 +pytest-sugar==0.9.4 +pytest==7.1.1 + +# behavioural testing +behave==1.2.6 +gunicorn==20.1.0 +selenium==4.1.3 +whitenoise==6.0.0 + diff --git a/resources/ckeditor/ckeditor/config.js b/resources/ckeditor/ckeditor/config.js new file mode 100644 index 00000000..4ba867bc --- /dev/null +++ b/resources/ckeditor/ckeditor/config.js @@ -0,0 +1,8 @@ +CKEDITOR.editorConfig = function( config ) { + // Define changes to default configuration here. For example: + // config.language = 'fr'; + // config.uiColor = '#AADC6E'; + // ALLOW and   + config.protectedSource.push(/]*>( )?<\/span>/g); +}; +CKEDITOR.dtd.$removeEmpty['span'] = false; diff --git a/resources/custom/css/vp.css b/resources/custom/css/vp.css index ee9086dd..d09b1beb 100644 --- a/resources/custom/css/vp.css +++ b/resources/custom/css/vp.css @@ -202,4 +202,36 @@ code { } .panel-primary{ border:none; -} \ No newline at end of file +} + +.nav-up { + top: -50px; +} + +/* +Schedeuler + */ + +.filter input[type=checkbox]{ + margin:5px; +} + +/* +Message Box helpdesk_single.html + */ + + +#layerMsgBox{ + top:0; + left:0; + padding:10%; + position:fixed; + z-index:10000; + width:100%; + height:100%; + background-color: rgba(255,255,255,0.9); + display:none; +} +#layerMsgBox form button{ + margin:0px 10px 0 0; +} diff --git a/resources/custom/js/vp.js b/resources/custom/js/vp.js index cf85cc80..555652b5 100644 --- a/resources/custom/js/vp.js +++ b/resources/custom/js/vp.js @@ -1,3 +1,30 @@ /** * Created by chris on 03.09.15. */ +var didScroll; +var lastScrollTop=0; +var delta=5; +var navBarHeight=$('nav').outerHeight(); +$(window).scroll(function(event) { + didScroll=true; +}); +setInterval(function() { + if (didScroll) { + hasScrolled(); + didScroll=false + } +},250); +function hasScrolled(){ + var st = $(this).scrollTop(); + if (Math.abs(lastScrollTop-st) <= delta) { + return; + } + if (st > lastScrollTop && st > navBarHeight) { + $('nav').removeClass('nav-down').addClass('nav-up'); + } else { + if (st + $(window).height() < $(document).height()) { + $('nav').removeClass('nav-up').addClass('nav-down'); + } + } + lastScrollTop = st; +} diff --git a/resources/django_ajax/js/jquery.ajax.min.js b/resources/django_ajax/js/jquery.ajax.min.js new file mode 100644 index 00000000..fa3c7190 --- /dev/null +++ b/resources/django_ajax/js/jquery.ajax.min.js @@ -0,0 +1 @@ +function getCookie(name){var cookieValue=null;if(document.cookie&&document.cookie!=''){var cookies=document.cookie.split(';');for(var i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.ttf new file mode 100644 index 00000000..83a9e9c4 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff new file mode 100644 index 00000000..7ee1a938 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff2 new file mode 100644 index 00000000..01147e47 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.eot new file mode 100644 index 00000000..8916813d Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.svg new file mode 100644 index 00000000..dff65c0b --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.svg @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.ttf new file mode 100644 index 00000000..ed64c496 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff new file mode 100644 index 00000000..698f0a2f Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff2 new file mode 100644 index 00000000..2d2e2351 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-200italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.eot new file mode 100644 index 00000000..21755b50 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.svg new file mode 100644 index 00000000..6bd60471 --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.svg @@ -0,0 +1,338 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.ttf new file mode 100644 index 00000000..1d5ac08c Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff new file mode 100644 index 00000000..8de5c1df Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff2 new file mode 100644 index 00000000..946c5906 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.eot new file mode 100644 index 00000000..2c5451ae Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.svg new file mode 100644 index 00000000..61159d16 --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.svg @@ -0,0 +1,346 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.ttf new file mode 100644 index 00000000..59278077 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff new file mode 100644 index 00000000..36b7076c Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff2 new file mode 100644 index 00000000..7a2b3a07 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-300italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.eot new file mode 100644 index 00000000..f517a8d3 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.svg new file mode 100644 index 00000000..8febae08 --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.svg @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.ttf new file mode 100644 index 00000000..cd143e30 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff new file mode 100644 index 00000000..ce90d3a8 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff2 new file mode 100644 index 00000000..82b6c92e Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.eot new file mode 100644 index 00000000..1b0645ca Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.svg new file mode 100644 index 00000000..4a1f24ab --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.svg @@ -0,0 +1,342 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.ttf new file mode 100644 index 00000000..725c57ed Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff new file mode 100644 index 00000000..cc4bf9b0 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff2 new file mode 100644 index 00000000..ba02a518 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-600italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.eot new file mode 100644 index 00000000..f0bd1088 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.svg new file mode 100644 index 00000000..5f9e7277 --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.svg @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.ttf new file mode 100644 index 00000000..88be8675 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff new file mode 100644 index 00000000..2bc93fc1 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff2 new file mode 100644 index 00000000..7ea49182 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.eot new file mode 100644 index 00000000..fcfcb987 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.svg new file mode 100644 index 00000000..b6b0d48a --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.svg @@ -0,0 +1,339 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.ttf new file mode 100644 index 00000000..2f5250fd Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff new file mode 100644 index 00000000..453a69c0 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff2 new file mode 100644 index 00000000..079285bc Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-700italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.eot new file mode 100644 index 00000000..ae35e8e6 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.svg new file mode 100644 index 00000000..efe6242c --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.svg @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.ttf new file mode 100644 index 00000000..39bb0b76 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff new file mode 100644 index 00000000..375a70ef Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff2 new file mode 100644 index 00000000..136b6bd8 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.eot new file mode 100644 index 00000000..44058ec1 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.svg new file mode 100644 index 00000000..fc25577d --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.svg @@ -0,0 +1,340 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.ttf new file mode 100644 index 00000000..4491e1de Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff new file mode 100644 index 00000000..3da35bcd Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff2 new file mode 100644 index 00000000..357c395f Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-900italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.eot new file mode 100644 index 00000000..7b681e91 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.svg new file mode 100644 index 00000000..891c58c4 --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.svg @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.ttf new file mode 100644 index 00000000..a3ef349b Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff new file mode 100644 index 00000000..3c990ae4 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff2 new file mode 100644 index 00000000..14388eba Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-italic.woff2 differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.eot b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.eot new file mode 100644 index 00000000..c58ffe0a Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.eot differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.svg b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.svg new file mode 100644 index 00000000..23df74af --- /dev/null +++ b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.svg @@ -0,0 +1,337 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.ttf b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.ttf new file mode 100644 index 00000000..d4ef946d Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.ttf differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff new file mode 100644 index 00000000..b6f56cf9 Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff differ diff --git a/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff2 b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff2 new file mode 100644 index 00000000..1916745c Binary files /dev/null and b/resources/googlefonts/fonts/source-sans-pro-v19-latin-ext_latin-regular.woff2 differ diff --git a/resources/img/favicon.ico b/resources/img/favicon.ico new file mode 100644 index 00000000..0834ea07 Binary files /dev/null and b/resources/img/favicon.ico differ diff --git a/resources/img/non-logged-in-area/gh-mark.png b/resources/img/non-logged-in-area/gh-mark.png new file mode 100644 index 00000000..8b25551a Binary files /dev/null and b/resources/img/non-logged-in-area/gh-mark.png differ diff --git a/scheduler/__init__.py b/scheduler/__init__.py index f747d59c..9bad5790 100644 --- a/scheduler/__init__.py +++ b/scheduler/__init__.py @@ -1,2 +1 @@ # coding=utf-8 -default_app_config = 'scheduler.apps.SchedulerConfig' diff --git a/scheduler/admin.py b/scheduler/admin.py index b9fad026..a880de25 100644 --- a/scheduler/admin.py +++ b/scheduler/admin.py @@ -1,71 +1,191 @@ -# coding: utf-8 +import logging + +from django import forms from django.contrib import admin +from django.core.exceptions import ValidationError from django.db.models import Count -from django.utils.translation import ugettext_lazy as _ +from django.utils import timezone +from django.utils.html import format_html, mark_safe +from django.utils.translation import gettext_lazy as _ +from organizations.admin import MembershipFieldListFilter, MembershipFilteredAdmin from . import models -from organizations.admin import ( - MembershipFilteredAdmin, - MembershipFieldListFilter -) +from .fields import FormattedModelChoiceIteratorFactory + +logger = logging.getLogger(__name__) + + +def facility_mismatch_error_message(object, facility): + title = _("Facilities do not match.") + text = _( + f'"{object.name}" belongs to facility "{object.facility.name}", but shift \ +takes place at "{facility.name}".' + ) + return f"{title} {text}" + + +class FormattedModelChoiceFieldAdminMixin: + + fk_label_formats = None + + def formfield_for_foreignkey(self, db_field, request, **kwargs): + field = super().formfield_for_foreignkey(db_field, request, **kwargs) + if self.fk_label_formats and db_field.name in self.fk_label_formats.keys(): + field.iterator = FormattedModelChoiceIteratorFactory( + label_format=self.fk_label_formats[db_field.name] + ) + return field + + +class ShiftAdminForm(forms.ModelForm): + class Meta: + model = models.Shift + fields = [ + "facility", + "slots", + "task", + "workplace", + "starting_time", + "ending_time", + "members_only", + ] + + def __init__(self, *args, **kwargs): + super(ShiftAdminForm, self).__init__(*args, **kwargs) + if self.instance and hasattr(self.instance, "facility"): + facility = self.instance.facility + self.fields["task"].queryset = self.fields["task"].queryset.filter( + facility=facility + ) + self.fields["workplace"].queryset = self.fields[ + "workplace" + ].queryset.filter(facility=facility) + + def clean(self): + """Validation of shift data, to prevent non-sense values to be entered""" + # Check start and end times to be reasonable + start = self.cleaned_data.get("starting_time") + end = self.cleaned_data.get("ending_time") + + facility = self.cleaned_data.get("facility") or self.instance.facility + if facility: + + task = self.cleaned_data.get("task") + if task and not task.facility == facility: + self.add_error( + "task", + ValidationError(facility_mismatch_error_message(task, facility)), + ) + + workplace = self.cleaned_data.get("workplace") + if workplace and not workplace.facility == facility: + self.add_error( + "workplace", + ValidationError( + facility_mismatch_error_message(workplace, facility) + ), + ) + + # No times, no joy + if not start: + self.add_error("starting_time", ValidationError(_("No start time given."))) + if not end: + self.add_error("ending_time", ValidationError(_("No end time given."))) + + # There is no known reason to modify shifts in the past + if start: + now = timezone.now() + if start < now: + self.add_error( + "starting_time", ValidationError(_("Start time in the past.")) + ) + if end and not end > start: + self.add_error( + "ending_time", ValidationError(_("Shift ends before it starts.")) + ) + + return self.cleaned_data @admin.register(models.Shift) -class ShiftAdmin(MembershipFilteredAdmin): +class ShiftAdmin(FormattedModelChoiceFieldAdminMixin, MembershipFilteredAdmin): + form = ShiftAdminForm + + fk_label_formats = { + "task": "{obj.name} ({obj.facility.name})", + "workplace": "{obj.name} ({obj.facility.name})", + } + def get_queryset(self, request): qs = super(ShiftAdmin, self).get_queryset(request) - qs = qs.annotate(volunteer_count=Count('helpers')) - qs = qs.select_related('facility', - 'task', - 'workplace') - qs = qs.prefetch_related('helpers', - 'helpers__user') + qs = qs.annotate(volunteer_count=Count("helpers")) + qs = qs.select_related("facility", "task", "workplace") + qs = qs.prefetch_related("helpers", "helpers__user") return qs def get_volunteer_count(self, obj): return obj.volunteer_count - get_volunteer_count.short_description = _(u'number of volunteers') - get_volunteer_count.admin_order_field = 'volunteer_count' + get_volunteer_count.short_description = _("number of volunteers") + get_volunteer_count.admin_order_field = "volunteer_count" def get_volunteer_names(self, obj): def _format_username(user): full_name = user.get_full_name() - username = u'{}
    {}'.format(user.username, - user.email) + username = format_html("{}", user.username) + if full_name: - username = u'{} / {}'.format(full_name, username) - return u'

  • {}
  • '.format(username) + username = format_html("{} ({})", full_name, username) + return format_html("
  • {}
  • ", username) - return u"
      {}
    ".format( - u"\n".join(_format_username(volunteer.user) for volunteer in - obj.helpers.all())) + return format_html( + "
      {}
    ", + mark_safe( + "\n".join( + _format_username(volunteer.user) for volunteer in obj.helpers.all() + ) + ), + ) - get_volunteer_names.short_description = _(u'volunteers') + get_volunteer_names.short_description = _("volunteers") get_volunteer_names.allow_tags = True list_display = ( - 'task', - 'workplace', - 'facility', - 'starting_time', - 'ending_time', - 'slots', - 'get_volunteer_count', - 'get_volunteer_names' + "task", + "workplace", + "facility", + "starting_time", + "ending_time", + "members_only", + "slots", + "get_volunteer_count", + "get_volunteer_names", ) - search_fields = ('id', 'task__name',) + search_fields = ( + "id", + "task__name", + ) list_filter = ( - ('facility', MembershipFieldListFilter), - 'members_only', - 'starting_time', - 'ending_time' + ("facility", MembershipFieldListFilter), + "members_only", + "starting_time", + "ending_time", ) @admin.register(models.ShiftHelper) class ShiftHelperAdmin(MembershipFilteredAdmin): - list_display = (u'id', 'user_account', 'shift', 'joined_shift_at') - list_filter = ('joined_shift_at',) - raw_id_fields = ('user_account', 'shift') + list_display = ("id", "user_account", "shift", "joined_shift_at") + list_filter = ("joined_shift_at",) + raw_id_fields = ("user_account", "shift") + + +@admin.register(models.ShiftMessageToHelpers) +class ShiftMessageToHelpersAdmin(admin.ModelAdmin): + list_display = ( + "shift", + "send_date", + ) + ordering = ("-send_date",) + readonly_fields = ["sender", "recipients", "shift", "message", "send_date"] diff --git a/scheduler/apps.py b/scheduler/apps.py index 2697763a..9c7ad0a5 100644 --- a/scheduler/apps.py +++ b/scheduler/apps.py @@ -1,11 +1,11 @@ # coding=utf-8 from django.apps import AppConfig -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ class SchedulerConfig(AppConfig): - name = 'scheduler' - verbose_name = _('Scheduler') + name = "scheduler" + verbose_name = _("scheduler") def ready(self): # Connect signals diff --git a/scheduler/fields.py b/scheduler/fields.py new file mode 100644 index 00000000..3f9d3244 --- /dev/null +++ b/scheduler/fields.py @@ -0,0 +1,21 @@ +from django.forms.models import ModelChoiceIterator + + +class FormattedModelChoiceIteratorFactory: + def __init__(self, label_format=None): + self.label_format = label_format + + def __call__(self, *args, **kwargs): + return FormattedModelChoiceIterator(self.label_format, *args, **kwargs) + + +class FormattedModelChoiceIterator(ModelChoiceIterator): + def __init__(self, label_format=None, *args, **kwargs): + self.label_format = label_format + super(FormattedModelChoiceIterator, self).__init__(*args, *kwargs) + + def choice(self, obj): + choice = super(FormattedModelChoiceIterator, self).choice(obj) + if self.label_format and obj: + return choice[0], self.label_format.format(obj=obj) + return choice diff --git a/scheduler/forms.py b/scheduler/forms.py index c1d4f2d9..49d0158c 100644 --- a/scheduler/forms.py +++ b/scheduler/forms.py @@ -2,10 +2,31 @@ from django import forms from django.db.models import Count +from django.utils.translation import gettext_lazy as _ -from scheduler.models import Shift +from scheduler.models import Shift, ShiftMessageToHelpers class RegisterForShiftForm(forms.Form): leave_shift = forms.ModelChoiceField(queryset=Shift.objects, required=False) - join_shift = forms.ModelChoiceField(queryset=Shift.objects.annotate(volunteer_count=Count('helpers')), required=False) + join_shift = forms.ModelChoiceField( + queryset=Shift.objects.annotate(volunteer_count=Count("helpers")), + required=False, + ) + + +class ShiftMessageToHelpersModelForm(forms.ModelForm): + message = forms.TextInput(attrs={"class": "form-control"}) + + def __init__(self, *args, **kwargs): + super(ShiftMessageToHelpersModelForm, self).__init__(*args, **kwargs) + for visible in self.visible_fields(): + visible.field.widget.attrs["class"] = "form-control" + + class Meta: + model = ShiftMessageToHelpers + fields = ["message", "shift"] + widgets = { + "shift": forms.HiddenInput(), + } + labels = {"message": _("Write a message")} diff --git a/scheduler/management/commands/create_dummy_data.py b/scheduler/management/commands/create_dummy_data.py index 004a34b8..4598ba23 100644 --- a/scheduler/management/commands/create_dummy_data.py +++ b/scheduler/management/commands/create_dummy_data.py @@ -1,107 +1,175 @@ # coding: utf-8 +import datetime import random import string -import datetime import factory +from django.contrib.auth.models import User from django.core.management.base import BaseCommand +from django.db import transaction from django.db.models import signals +from django.utils import timezone from registration.models import RegistrationProfile -from django.contrib.auth.models import User from accounts.models import UserAccount - -from organizations.models import Facility, Workplace, Task -from tests.factories import ShiftHelperFactory, ShiftFactory, FacilityFactory, PlaceFactory, OrganizationFactory -from scheduler.models import Shift -from places.models import Region, Area, Place, Country - -HELPTOPICS = ["Jumper", "Translator", "Clothing Room", "Womens Room", - "Donation Counter", "Highlights"] -LOREM = "Lorem tellivizzle dolizzle bling bling amizzle, mah nizzle adipiscing" \ - " elit. Nullam doggy velizzle, pizzle volutpizzle, suscipizzle" \ - " quizzle, gangsta vizzle, i'm in the shizzle. Pellentesque boom" \ - " shackalack for sure. The bizzle erizzle. Fusce izzle dolor " \ - "dapibus shit tempizzle dang. Sure pellentesque nibh izzle turpis." \ - " Vestibulum izzle tortor. Pellentesque ma nizzle rhoncizzle " \ - "bling bling. In hizzle habitasse i'm in the shizzle dictumst. " \ - "Bizzle dapibizzle. Curabitizzle tellizzle urna, pretizzle i" \ - " saw beyonces tizzles and my pizzle went crizzle, " \ - "mattis we gonna chung, eleifend vitae, nunc. " +from news.models import NewsEntry +from organizations.models import Facility, Organization, Task, Workplace +from places.models import Area, Country, Place, Region +from scheduler.models import Shift, ShiftHelper +from tests.factories import ( + FacilityFactory, + OrganizationFactory, + PlaceFactory, + ShiftFactory, + ShiftHelperFactory, + TaskFactory, + UserAccountFactory, + UserFactory, + WorkplaceFactory, +) + +HELPTOPICS = [ + "Jumper", + "Translator", + "Clothing Room", + "Womens Room", + "Donation Counter", + "Highlights", +] +LOREM = ( + "Lorem tellivizzle dolizzle bling bling amizzle, mah nizzle adipiscing" + " elit. Nullam doggy velizzle, pizzle volutpizzle, suscipizzle" + " quizzle, gangsta vizzle, i'm in the shizzle. Pellentesque boom" + " shackalack for sure. The bizzle erizzle. Fusce izzle dolor " + "dapibus shit tempizzle dang. Sure pellentesque nibh izzle turpis." + " Vestibulum izzle tortor. Pellentesque ma nizzle rhoncizzle " + "bling bling. In hizzle habitasse i'm in the shizzle dictumst. " + "Bizzle dapibizzle. Curabitizzle tellizzle urna, pretizzle i" + " saw beyonces tizzles and my pizzle went crizzle, " + "mattis we gonna chung, eleifend vitae, nunc. " +) def gen_date(hour, day): date_today = datetime.date.today() + datetime.timedelta(days=day) - date_time = datetime.time(hour=hour, minute=0, second=0, microsecond=0) + date_time = datetime.time( + hour=hour, + minute=0, + second=0, + microsecond=0, + tzinfo=timezone.get_current_timezone(), + ) new_date = datetime.datetime.combine(date_today, date_time) return new_date def random_string(length=10): - return u''.join( - random.choice(string.ascii_letters) for x in range(length)) + return "".join(random.choice(string.ascii_letters) for x in range(length)) class Command(BaseCommand): - help = 'this command creates dummy data for the entire ' \ - 'application execute \"python manage.py create_dummy_data 30 --flush True\"' \ - 'to first delete all data in the database and then ad random shifts for 30 days.' \ - 'if you don\'t want to delete data just not add \"flush True\" ' + help = ( + "This command creates dummy data for the entire application.\n" + 'Execute "python manage.py create_dummy_data 30 --flush True" to first ' + "delete all data in the database and then add random shifts for 30 days. " + 'if you don`t want to delete data just not add "flush True".' + ) args = "" - option_list = BaseCommand.option_list - def add_arguments(self, parser): - parser.add_argument('days', nargs='+', type=int) - parser.add_argument('--flush') + parser.add_argument("days", nargs="+", type=int) + parser.add_argument("--flush") @factory.django.mute_signals(signals.pre_delete) def handle(self, *args, **options): - if options['flush']: - print "delete all data in app tables" - RegistrationProfile.objects.all().delete() - - Shift.objects.all().delete() - Task.objects.all().delete() - Workplace.objects.all().delete() - Facility.objects.all().delete() - - UserAccount.objects.all().delete() - - # delete geographic information - Country.objects.all().delete() - Region.objects.all().delete() - Area.objects.all().delete() - Place.objects.all().delete() - - User.objects.filter().exclude(is_superuser=True).delete() - - # create regional data - places = list() - for i in range(0, 10): - places.append(PlaceFactory.create()) - - organizations = list() - for i in range(0, 4): - organizations.append(OrganizationFactory.create()) - - # create shifts for number of days - for day in range(0, options['days'][0]): - for i in range(2, 23): - place = places[random.randint(0, len(places) - 1)] - organization = organizations[random.randint(0, len(organizations) - 1)] - facility = FacilityFactory.create( + with transaction.atomic(): + if options["flush"]: + print("delete all data in app tables") + for model in ( + RegistrationProfile, + ShiftHelper, + Shift, + UserAccount, + Task, + Workplace, + Facility, + Organization, + Place, + Area, + Region, + Country, + ): + model.objects.all().delete() + User.objects.filter().exclude(is_superuser=True).delete() + + print("creating new dummy data") + # create regional data + places = [PlaceFactory.create() for _ in range(0, 10)] + + # create organizations and facilities + organizations = [OrganizationFactory.create() for _ in range(0, 4)] + facilities = [ + FacilityFactory.create( description=LOREM, - place=place, - organization=organization + place=random.choice(places), + organization=random.choice(organizations), + ) + for _ in range(0, len(organizations) * 2) + ] + + # create tasks and workplaces + i = 0 + tasks = list() + workplaces = list() + for fac in facilities: + today = timezone.now() + for d in range(random.randint(1, 15)): + NewsEntry.objects.create( + title=f"Newsentry #{d} for {fac.name}", + creation_date=(today - datetime.timedelta(days=d)).date(), + text=f"Newsentry #{d} for {fac.name} lorem", + ) + tasks.extend( + [ + TaskFactory.create( + name=f"Task {i + j}", + description=f"task {i + j}", + facility=fac, + ) + for j in range(0, random.randint(1, 5)) + ] ) - shift = ShiftFactory.create( - starting_time=gen_date(hour=i - 1, day=day), - ending_time=gen_date(hour=i, day=day), - facility=facility + workplaces.extend( + [ + WorkplaceFactory.create( + name=f"Workplace {i + j}", + description=f"workplace {i + j}", + facility=fac, + ) + for j in range(0, random.randint(1, 5)) + ] ) - # assign random volunteer for each shift - reg_user = ShiftHelperFactory.create(shift=shift) - reg_user.save() + i += 1 + + # create shifts for number of days + for day in range(0, options["days"][0]): + for i in range(2, 23): + task = random.choice(tasks) + facility = task.facility + workplace = random.choice( + list(filter(lambda w: w.facility == facility, workplaces)) + ) + shift = ShiftFactory.create( + starting_time=gen_date(hour=i - 1, day=day), + ending_time=gen_date(hour=i, day=day), + facility=facility, + task=task, + workplace=workplace, + ) + # assign random volunteer for each shift + ShiftHelperFactory.create(shift=shift) + + for i in range(0, 5): + UserAccountFactory.create(user=UserFactory.create(username=f"user{i}")) diff --git a/scheduler/management/commands/sqldump.py b/scheduler/management/commands/sqldump.py index 08ca2f74..77efc0fe 100644 --- a/scheduler/management/commands/sqldump.py +++ b/scheduler/management/commands/sqldump.py @@ -1,23 +1,27 @@ # coding=utf-8 +import datetime import os from django.conf import settings from django.core.management.base import BaseCommand -import datetime +from django.utils import timezone class Command(BaseCommand): - help = 'dump complete database as sql' + help = "dump complete database as sql" args = "" option_list = BaseCommand.option_list def handle(self, *fixture_labels, **options): - db = settings.DATABASES['default']['NAME'] - user = settings.DATABASES['default']['USER'] - password = settings.DATABASES['default']['PASSWORD'] - ts = datetime.datetime.isoformat(datetime.datetime.now()) + db = settings.DATABASES["default"]["NAME"] + user = settings.DATABASES["default"]["USER"] + password = settings.DATABASES["default"]["PASSWORD"] + ts = datetime.datetime.isoformat(timezone.now()) # one to easily load and one timestamped, safe is safe! - os.system('mysqldump -u %s --password="%s" %s | gzip > var/%s.dump.sql.gz' % (user, password, db, ts)) - os.system('ln -fs %s.dump.sql.gz var/dump.sql.gz' % ts) + os.system( + 'mysqldump -u %s --password="%s" %s | gzip > var/%s.dump.sql.gz' + % (user, password, db, ts) + ) + os.system("ln -fs %s.dump.sql.gz var/dump.sql.gz" % ts) diff --git a/scheduler/management/commands/sqlimport.py b/scheduler/management/commands/sqlimport.py index 0d709a53..cbca630b 100644 --- a/scheduler/management/commands/sqlimport.py +++ b/scheduler/management/commands/sqlimport.py @@ -1,24 +1,31 @@ # coding=utf-8 +import datetime import os from django.conf import settings from django.core.management.base import BaseCommand -import datetime +from django.utils import timezone class Command(BaseCommand): - help = 'dump complete database as sql' + help = "dump complete database as sql" args = "" option_list = BaseCommand.option_list def handle(self, *fixture_labels, **options): - db = settings.DATABASES['default']['NAME'] - user = settings.DATABASES['default']['USER'] - password = settings.DATABASES['default']['PASSWORD'] - ts = datetime.datetime.isoformat(datetime.datetime.now()) + db = settings.DATABASES["default"]["NAME"] + user = settings.DATABASES["default"]["USER"] + password = settings.DATABASES["default"]["PASSWORD"] + ts = datetime.datetime.isoformat(timezone.now()) # first make a dump haha! - os.system('mysqldump -u %s --password="%s" %s | gzip > var/%s.dump.sql.gz' % (user, password, db, ts)) + os.system( + 'mysqldump -u %s --password="%s" %s | gzip > var/%s.dump.sql.gz' + % (user, password, db, ts) + ) # then load new sql - os.system('gunzip < var/dump.sql.gz | mysql -u %s --password="%s" %s' % (user, password, db)) + os.system( + 'gunzip < var/dump.sql.gz | mysql -u %s --password="%s" %s' + % (user, password, db) + ) diff --git a/scheduler/managers.py b/scheduler/managers.py index 3af41c3f..1c6e496c 100644 --- a/scheduler/managers.py +++ b/scheduler/managers.py @@ -1,53 +1,53 @@ # coding: utf-8 -from datetime import timedelta, datetime, time +from datetime import datetime, time, timedelta from django.db import models from django.utils import timezone -from django.conf import settings +from django.utils.timezone import get_current_timezone from places import models as place_models +from .settings import DEFAULT_SHIFT_CONFLICT_GRACE class ShiftQuerySet(models.QuerySet): - """ Custom QuerySet for Shift. Defines several methods for filtering - Shift objects. + """Custom QuerySet for Shift. Defines several methods for filtering + Shift objects. """ + def on_shiftdate(self, shiftdate): - """ Shifts that end on or after shiftdate and begin before or on - shiftdate. That means shifts that intersect with the day of - shiftdate. + """Shifts that end on or after shiftdate and begin before or on + shiftdate. That means shifts that intersect with the day of + shiftdate. """ - next_day = datetime.combine(shiftdate + timedelta(days=1), time.min) - return self.filter(ending_time__gte=shiftdate, - starting_time__lt=next_day) + shiftdate = datetime.combine(shiftdate, time(tzinfo=get_current_timezone())) + return self.filter( + ending_time__gte=shiftdate, starting_time__lt=shiftdate + timedelta(days=1) + ) def at_place(self, place): - """ Shifts at a certain place (geographical location of a facility). + """Shifts at a certain place (geographical location of a facility). See places.models. """ return self.filter(facility__place=place) def in_area(self, area): - """ Shifts at a certain area (subdivision of a region). + """Shifts at a certain area (subdivision of a region). See places.models. """ return self.filter(facility__place__area=area) def in_region(self, region): - """ Shifts at a certain region. See places.models. - """ + """Shifts at a certain region. See places.models.""" return self.filter(facility__place__area__region=region) def in_country(self, country): - """ Shifts at a certain country. See places.models. - """ - return self.filter( - facility__place__area__region__country=country) + """Shifts at a certain country. See places.models.""" + return self.filter(facility__place__area__region__country=country) def by_geography(self, geo_affiliation): - """ Shifts at a certain geo_affiliation which can be a place, area, - region or country. See places.models. + """Shifts at a certain geo_affiliation which can be a place, area, + region or country. See places.models. """ if isinstance(geo_affiliation, place_models.Place): return self.at_place(geo_affiliation) @@ -58,56 +58,70 @@ def by_geography(self, geo_affiliation): elif isinstance(geo_affiliation, place_models.Country): return self.in_country(geo_affiliation) + def open(self): + return self.filter(ending_time__gte=timezone.now()) + + # Create manager from custom QuerySet ShiftQuerySet ShiftManager = models.Manager.from_queryset(ShiftQuerySet) class OpenShiftManager(ShiftManager): - """ Manager for Shift. Overwrites get_queryset with a filter on QuerySet - that holds all shifts that end now or in the future. + """Manager for Shift. Overwrites get_queryset with a filter on QuerySet + that holds all shifts that end now or in the future. """ + def get_queryset(self): - now = timezone.now() - qs = super(OpenShiftManager, self).get_queryset() - return qs.filter(ending_time__gte=now) + return ( + super(OpenShiftManager, self) + .get_queryset() + .filter(ending_time__gte=timezone.now()) + ) class ShiftHelperManager(models.Manager): - """ Manager for ShiftHelper. Defines one method for filtering the - QuerySet on conflicting shifts. + """Manager for ShiftHelper. Defines one method for filtering the + QuerySet on conflicting shifts. """ - def conflicting(self, shift, user_account=None, grace=settings.DEFAULT_SHIFT_CONFLICT_GRACE): - """ Filters QuerySet of ShiftHelper objects by selecting those that - intersect with respect to time. + def conflicting(self, shift, user_account=None, grace=DEFAULT_SHIFT_CONFLICT_GRACE): + """Filters QuerySet of ShiftHelper objects by selecting those that + intersect with respect to time. - :param shift - :param user_account - default is None (-Does a default value for - user make sense in that connection?) - :param grace - some "buffer" which reduces the time of the shift. - default is 1 hour + :param shift + :param user_account - default is None (-Does a default value for + user make sense in that connection?) + :param grace - some "buffer" which reduces the time of the shift. + default is 1 hour """ grace = grace or timedelta(0) - # correct grace for short shifts, otherwise a user could join two concurrent 1-hour-shifts + # correct grace for short shifts, otherwise a user could join two + # concurrent 1-hour-shifts if shift.duration <= grace: grace = shift.duration / 2 graced_start = shift.starting_time + grace graced_end = shift.ending_time - grace - query_set = self.get_queryset().select_related('shift', 'user_account') + query_set = self.get_queryset().select_related("shift", "user_account") if user_account: query_set = query_set.filter(user_account=user_account) - soft_conflict_query_set = query_set.exclude(shift__starting_time__lt=shift.starting_time, - shift__ending_time__lte=shift.starting_time) - soft_conflict_query_set = soft_conflict_query_set.exclude(shift__starting_time__gte=shift.ending_time, - shift__ending_time__gte=shift.ending_time) - - hard_conflict_query_set = query_set.exclude(shift__starting_time__lt=graced_start, - shift__ending_time__lte=graced_start) - hard_conflict_query_set = hard_conflict_query_set.exclude(shift__starting_time__gte=graced_end, - shift__ending_time__gte=graced_end) + soft_conflict_query_set = query_set.exclude( + shift__starting_time__lt=shift.starting_time, + shift__ending_time__lte=shift.starting_time, + ) + soft_conflict_query_set = soft_conflict_query_set.exclude( + shift__starting_time__gte=shift.ending_time, + shift__ending_time__gte=shift.ending_time, + ) + + hard_conflict_query_set = query_set.exclude( + shift__starting_time__lt=graced_start, shift__ending_time__lte=graced_start + ) + hard_conflict_query_set = hard_conflict_query_set.exclude( + shift__starting_time__gte=graced_end, shift__ending_time__gte=graced_end + ) return hard_conflict_query_set, soft_conflict_query_set diff --git a/scheduler/migrations/0001_initial.py b/scheduler/migrations/0001_initial.py index 73d708dd..e447c650 100644 --- a/scheduler/migrations/0001_initial.py +++ b/scheduler/migrations/0001_initial.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations from django.conf import settings +from django.db import migrations, models class Migration(migrations.Migration): @@ -13,48 +13,96 @@ class Migration(migrations.Migration): operations = [ migrations.CreateModel( - name='Need', + name="Need", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('slots', models.IntegerField(blank=True)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("slots", models.IntegerField(blank=True)), ], ), migrations.CreateModel( - name='TimePeriods', + name="TimePeriods", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('date_time', models.DateTimeField()), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("date_time", models.DateTimeField()), ], ), migrations.CreateModel( - name='Topics', + name="Topics", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('title', models.CharField(max_length=255)), - ('description', models.TextField(max_length=20000, blank=True)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("title", models.CharField(max_length=255)), + ("description", models.TextField(max_length=20000, blank=True)), ], ), migrations.CreateModel( - name='Volunteers', + name="Volunteers", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('interests', models.ForeignKey(to='scheduler.Topics')), - ('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "interests", + models.ForeignKey(to="scheduler.Topics", on_delete=models.CASCADE), + ), + ( + "user", + models.OneToOneField( + to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE + ), + ), ], ), migrations.AddField( - model_name='need', - name='time_period_from', - field=models.ForeignKey(related_name='time_from', to='scheduler.TimePeriods'), + model_name="need", + name="time_period_from", + field=models.ForeignKey( + related_name="time_from", + to="scheduler.TimePeriods", + on_delete=models.CASCADE, + ), ), migrations.AddField( - model_name='need', - name='time_period_to', - field=models.ForeignKey(related_name='time_to', to='scheduler.TimePeriods'), + model_name="need", + name="time_period_to", + field=models.ForeignKey( + related_name="time_to", + to="scheduler.TimePeriods", + on_delete=models.CASCADE, + ), ), migrations.AddField( - model_name='need', - name='topic', - field=models.ForeignKey(to='scheduler.Topics'), + model_name="need", + name="topic", + field=models.ForeignKey(to="scheduler.Topics", on_delete=models.CASCADE), ), ] diff --git a/scheduler/migrations/0002_need_achivated.py b/scheduler/migrations/0002_need_achivated.py index de2f7e97..eb9e6964 100644 --- a/scheduler/migrations/0002_need_achivated.py +++ b/scheduler/migrations/0002_need_achivated.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0001_initial'), + ("scheduler", "0001_initial"), ] operations = [ migrations.AddField( - model_name='need', - name='achivated', + model_name="need", + name="achivated", field=models.BooleanField(default=False), ), ] diff --git a/scheduler/migrations/0003_volunteers_needs.py b/scheduler/migrations/0003_volunteers_needs.py index 6e9472c0..31df2ab8 100644 --- a/scheduler/migrations/0003_volunteers_needs.py +++ b/scheduler/migrations/0003_volunteers_needs.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0002_need_achivated'), + ("scheduler", "0002_need_achivated"), ] operations = [ migrations.AddField( - model_name='volunteers', - name='needs', - field=models.ManyToManyField(to='scheduler.Need'), + model_name="volunteers", + name="needs", + field=models.ManyToManyField(to="scheduler.Need"), ), ] diff --git a/scheduler/migrations/0004_auto_20150818_2355.py b/scheduler/migrations/0004_auto_20150818_2355.py index c2749d6f..14b53171 100644 --- a/scheduler/migrations/0004_auto_20150818_2355.py +++ b/scheduler/migrations/0004_auto_20150818_2355.py @@ -1,32 +1,42 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0003_volunteers_needs'), + ("scheduler", "0003_volunteers_needs"), ] operations = [ migrations.CreateModel( - name='Location', + name="Location", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('name', models.CharField(max_length=255, blank=True)), - ('street', models.CharField(max_length=255, blank=True)), - ('city', models.CharField(max_length=255, blank=True)), - ('postal_code', models.CharField(max_length=5, blank=True)), - ('longitude', models.CharField(max_length=30, blank=True)), - ('altitude', models.CharField(max_length=30, blank=True)), - ('additional_info', models.TextField(max_length=300000, blank=True)), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("name", models.CharField(max_length=255, blank=True)), + ("street", models.CharField(max_length=255, blank=True)), + ("city", models.CharField(max_length=255, blank=True)), + ("postal_code", models.CharField(max_length=5, blank=True)), + ("longitude", models.CharField(max_length=30, blank=True)), + ("altitude", models.CharField(max_length=30, blank=True)), + ("additional_info", models.TextField(max_length=300000, blank=True)), ], ), migrations.AlterField( - model_name='need', - name='slots', - field=models.IntegerField(verbose_name=b'Anz. benoetigter Freiwillige', blank=True), + model_name="need", + name="slots", + field=models.IntegerField( + verbose_name=b"Anz. benoetigter Freiwillige", blank=True + ), ), ] diff --git a/scheduler/migrations/0005_need_location.py b/scheduler/migrations/0005_need_location.py index 60b0ab4a..c2f205d1 100644 --- a/scheduler/migrations/0005_need_location.py +++ b/scheduler/migrations/0005_need_location.py @@ -1,20 +1,22 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0004_auto_20150818_2355'), + ("scheduler", "0004_auto_20150818_2355"), ] operations = [ migrations.AddField( - model_name='need', - name='location', - field=models.ForeignKey(default=1, to='scheduler.Location'), + model_name="need", + name="location", + field=models.ForeignKey( + default=1, to="scheduler.Location", on_delete=models.CASCADE + ), preserve_default=False, ), ] diff --git a/scheduler/migrations/0006_auto_20150819_0134.py b/scheduler/migrations/0006_auto_20150819_0134.py index 2467f75d..e4d21a3a 100644 --- a/scheduler/migrations/0006_auto_20150819_0134.py +++ b/scheduler/migrations/0006_auto_20150819_0134.py @@ -1,51 +1,72 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0005_need_location'), + ("scheduler", "0005_need_location"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'verbose_name': 'Ort', 'verbose_name_plural': 'Orte'}, + name="location", + options={"verbose_name": "Ort", "verbose_name_plural": "Orte"}, ), migrations.AlterModelOptions( - name='need', - options={'verbose_name': 'Schicht', 'verbose_name_plural': 'Schichten'}, + name="need", + options={"verbose_name": "Schicht", "verbose_name_plural": "Schichten"}, ), migrations.AlterModelOptions( - name='timeperiods', - options={'verbose_name': 'Zeitspanne', 'verbose_name_plural': 'Zeitspannen'}, + name="timeperiods", + options={ + "verbose_name": "Zeitspanne", + "verbose_name_plural": "Zeitspannen", + }, ), migrations.AlterModelOptions( - name='topics', - options={'verbose_name': 'Hilfebereich', 'verbose_name_plural': 'Hilfebereiche'}, + name="topics", + options={ + "verbose_name": "Hilfebereich", + "verbose_name_plural": "Hilfebereiche", + }, ), migrations.AlterModelOptions( - name='volunteers', - options={'verbose_name': 'Freiwillige', 'verbose_name_plural': 'Freiwillige'}, + name="volunteers", + options={ + "verbose_name": "Freiwillige", + "verbose_name_plural": "Freiwillige", + }, ), migrations.AlterField( - model_name='need', - name='location', - field=models.ForeignKey(verbose_name=b'Ort', to='scheduler.Location'), + model_name="need", + name="location", + field=models.ForeignKey( + verbose_name=b"Ort", to="scheduler.Location", on_delete=models.CASCADE + ), ), migrations.AlterField( - model_name='need', - name='time_period_from', - field=models.ForeignKey(related_name='time_from', verbose_name=b'Anfangszeit', to='scheduler.TimePeriods'), + model_name="need", + name="time_period_from", + field=models.ForeignKey( + related_name="time_from", + verbose_name=b"Anfangszeit", + to="scheduler.TimePeriods", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='need', - name='topic', - field=models.ForeignKey(verbose_name=b'Hilfetyp', to='scheduler.Topics', - help_text='Jeder Hilfetyp hat so viele Planelemente wie es Arbeitsschichten geben ' - 'soll. Dies ist EINE Arbeitsschicht f\xfcr einen bestimmten Tag'), + model_name="need", + name="topic", + field=models.ForeignKey( + verbose_name=b"Hilfetyp", + to="scheduler.Topics", + help_text="Jeder Hilfetyp hat so viele Planelemente wie es " + "Arbeitsschichten geben soll. Dies ist EINE Arbeitsschicht " + "f\xfcr einen bestimmten Tag", + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0007_auto_20150819_0138.py b/scheduler/migrations/0007_auto_20150819_0138.py index 3c80fbff..bab16a90 100644 --- a/scheduler/migrations/0007_auto_20150819_0138.py +++ b/scheduler/migrations/0007_auto_20150819_0138.py @@ -1,29 +1,29 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0006_auto_20150819_0134'), + ("scheduler", "0006_auto_20150819_0134"), ] operations = [ migrations.RemoveField( - model_name='volunteers', - name='interests', + model_name="volunteers", + name="interests", ), migrations.RemoveField( - model_name='volunteers', - name='needs', + model_name="volunteers", + name="needs", ), migrations.RemoveField( - model_name='volunteers', - name='user', + model_name="volunteers", + name="user", ), migrations.DeleteModel( - name='Volunteers', + name="Volunteers", ), ] diff --git a/scheduler/migrations/0008_blueprint_needcreator.py b/scheduler/migrations/0008_blueprint_needcreator.py index 8525fcc9..d1530dbf 100644 --- a/scheduler/migrations/0008_blueprint_needcreator.py +++ b/scheduler/migrations/0008_blueprint_needcreator.py @@ -1,37 +1,92 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0007_auto_20150819_0138'), + ("scheduler", "0007_auto_20150819_0138"), ] operations = [ migrations.CreateModel( - name='BluePrint', + name="BluePrint", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('titel', models.CharField(max_length=255, blank=True)), - ('day', models.DateField(verbose_name=b'Tag, der als Vorlage dient')), - ('location', models.ForeignKey(verbose_name=b'Ort', to='scheduler.Location')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("titel", models.CharField(max_length=255, blank=True)), + ("day", models.DateField(verbose_name=b"Tag, der als Vorlage dient")), + ( + "location", + models.ForeignKey( + verbose_name=b"Ort", + to="scheduler.Location", + on_delete=models.CASCADE, + ), + ), ], ), migrations.CreateModel( - name='NeedCreator', + name="NeedCreator", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('time_from', models.CharField(help_text=b'Format: 07:30', max_length=5, - verbose_name=b'Uhrzeit Anfang')), - ('time_to', models.CharField(help_text=b'Format: 07:30', max_length=5, verbose_name=b'Uhrzeit Ende')), - ('slots', models.IntegerField(verbose_name=b'Anz. benoetigter Freiwillige', blank=True)), - ('apply_from', models.DateField(verbose_name=b'anwenden ab dem Tag')), - ('apply_to', models.DateField(verbose_name=b'anwenden bis dem Tag')), - ('location', models.ForeignKey(verbose_name=b'Ort', to='scheduler.Location')), - ('topic', models.ForeignKey(verbose_name=b'Hilfetyp', to='scheduler.Topics')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ( + "time_from", + models.CharField( + help_text=b"Format: 07:30", + max_length=5, + verbose_name=b"Uhrzeit Anfang", + ), + ), + ( + "time_to", + models.CharField( + help_text=b"Format: 07:30", + max_length=5, + verbose_name=b"Uhrzeit Ende", + ), + ), + ( + "slots", + models.IntegerField( + verbose_name=b"Anz. benoetigter Freiwillige", blank=True + ), + ), + ("apply_from", models.DateField(verbose_name=b"anwenden ab dem Tag")), + ("apply_to", models.DateField(verbose_name=b"anwenden bis dem Tag")), + ( + "location", + models.ForeignKey( + verbose_name=b"Ort", + to="scheduler.Location", + on_delete=models.CASCADE, + ), + ), + ( + "topic", + models.ForeignKey( + verbose_name=b"Hilfetyp", + to="scheduler.Topics", + on_delete=models.CASCADE, + ), + ), ], ), ] diff --git a/scheduler/migrations/0009_auto_20150823_1546.py b/scheduler/migrations/0009_auto_20150823_1546.py index 7fda853d..101ec1ad 100644 --- a/scheduler/migrations/0009_auto_20150823_1546.py +++ b/scheduler/migrations/0009_auto_20150823_1546.py @@ -1,25 +1,28 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0008_blueprint_needcreator'), + ("scheduler", "0008_blueprint_needcreator"), ] operations = [ migrations.RemoveField( - model_name='blueprint', - name='location', + model_name="blueprint", + name="location", ), migrations.AlterModelOptions( - name='needcreator', - options={'verbose_name': 'Bulk Schichten ', 'verbose_name_plural': 'Bulk Schichten'}, + name="needcreator", + options={ + "verbose_name": "Bulk Schichten ", + "verbose_name_plural": "Bulk Schichten", + }, ), migrations.DeleteModel( - name='BluePrint', + name="BluePrint", ), ] diff --git a/scheduler/migrations/0010_auto_20150904_0014.py b/scheduler/migrations/0010_auto_20150904_0014.py index 26acfb52..734f5306 100644 --- a/scheduler/migrations/0010_auto_20150904_0014.py +++ b/scheduler/migrations/0010_auto_20150904_0014.py @@ -1,18 +1,18 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0009_auto_20150823_1546'), + ("scheduler", "0009_auto_20150823_1546"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'permissions': (('can_view', 'User can view location'),)}, + name="location", + options={"permissions": (("can_view", "User can view location"),)}, ), ] diff --git a/scheduler/migrations/0011_auto_20150906_2341.py b/scheduler/migrations/0011_auto_20150906_2341.py index 6a779d1d..1fa1e018 100644 --- a/scheduler/migrations/0011_auto_20150906_2341.py +++ b/scheduler/migrations/0011_auto_20150906_2341.py @@ -1,25 +1,25 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0010_auto_20150904_0014'), + ("scheduler", "0010_auto_20150904_0014"), ] operations = [ migrations.RemoveField( - model_name='needcreator', - name='location', + model_name="needcreator", + name="location", ), migrations.RemoveField( - model_name='needcreator', - name='topic', + model_name="needcreator", + name="topic", ), migrations.DeleteModel( - name='NeedCreator', + name="NeedCreator", ), ] diff --git a/scheduler/migrations/0012_rename_location_model_field_altitude_to_latitude.py b/scheduler/migrations/0012_rename_location_model_field_altitude_to_latitude.py index a16be1eb..8887db56 100644 --- a/scheduler/migrations/0012_rename_location_model_field_altitude_to_latitude.py +++ b/scheduler/migrations/0012_rename_location_model_field_altitude_to_latitude.py @@ -6,18 +6,21 @@ class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0011_auto_20150906_2341'), + ("scheduler", "0011_auto_20150906_2341"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'verbose_name': 'Ort', 'verbose_name_plural': 'Orte', - 'permissions': (('can_view', 'User can view location'),)}, + name="location", + options={ + "verbose_name": "Ort", + "verbose_name_plural": "Orte", + "permissions": (("can_view", "User can view location"),), + }, ), migrations.RenameField( - model_name='location', - old_name='altitude', - new_name='latitude', + model_name="location", + old_name="altitude", + new_name="latitude", ), ] diff --git a/scheduler/migrations/0013_auto_20150912_1334.py b/scheduler/migrations/0013_auto_20150912_1334.py index 39f7a7aa..f7bf289b 100644 --- a/scheduler/migrations/0013_auto_20150912_1334.py +++ b/scheduler/migrations/0013_auto_20150912_1334.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0012_rename_location_model_field_altitude_to_latitude'), + ("scheduler", "0012_rename_location_model_field_altitude_to_latitude"), ] operations = [ migrations.RenameField( - model_name='need', - old_name='achivated', - new_name='activate', + model_name="need", + old_name="achivated", + new_name="activate", ), ] diff --git a/scheduler/migrations/0014_remove_need_activate.py b/scheduler/migrations/0014_remove_need_activate.py index bf593829..6a0ffc57 100644 --- a/scheduler/migrations/0014_remove_need_activate.py +++ b/scheduler/migrations/0014_remove_need_activate.py @@ -1,18 +1,18 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0013_auto_20150912_1334'), + ("scheduler", "0013_auto_20150912_1334"), ] operations = [ migrations.RemoveField( - model_name='need', - name='activate', + model_name="need", + name="activate", ), ] diff --git a/scheduler/migrations/0015_auto_20150912_1732.py b/scheduler/migrations/0015_auto_20150912_1732.py index 4c3c9493..0b6d7127 100644 --- a/scheduler/migrations/0015_auto_20150912_1732.py +++ b/scheduler/migrations/0015_auto_20150912_1732.py @@ -1,38 +1,52 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0014_remove_need_activate'), + ("scheduler", "0014_remove_need_activate"), ] operations = [ migrations.AlterModelOptions( - name='need', - options={'verbose_name': 'shift', 'verbose_name_plural': 'shifts'}, + name="need", + options={"verbose_name": "shift", "verbose_name_plural": "shifts"}, ), migrations.AlterField( - model_name='need', - name='location', - field=models.ForeignKey(verbose_name='location', to='scheduler.Location'), + model_name="need", + name="location", + field=models.ForeignKey( + verbose_name="location", + to="scheduler.Location", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='need', - name='slots', - field=models.IntegerField(verbose_name='num_volunteers', blank=True), + model_name="need", + name="slots", + field=models.IntegerField(verbose_name="num_volunteers", blank=True), ), migrations.AlterField( - model_name='need', - name='time_period_from', - field=models.ForeignKey(related_name='time_from', verbose_name='time_from', to='scheduler.TimePeriods'), + model_name="need", + name="time_period_from", + field=models.ForeignKey( + related_name="time_from", + verbose_name="time_from", + to="scheduler.TimePeriods", + on_delete=models.CASCADE, + ), ), migrations.AlterField( - model_name='need', - name='topic', - field=models.ForeignKey(verbose_name='helptype', to='scheduler.Topics', help_text='helptype_text'), + model_name="need", + name="topic", + field=models.ForeignKey( + verbose_name="helptype", + to="scheduler.Topics", + help_text="helptype_text", + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0015_auto_20150912_1740.py b/scheduler/migrations/0015_auto_20150912_1740.py index 9b43461c..c0b99767 100644 --- a/scheduler/migrations/0015_auto_20150912_1740.py +++ b/scheduler/migrations/0015_auto_20150912_1740.py @@ -1,19 +1,19 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0014_remove_need_activate'), + ("scheduler", "0014_remove_need_activate"), ] operations = [ migrations.AlterField( - model_name='need', - name='slots', - field=models.IntegerField(verbose_name=b'Anz. benoetigter Freiwillige'), + model_name="need", + name="slots", + field=models.IntegerField(verbose_name=b"Anz. benoetigter Freiwillige"), ), ] diff --git a/scheduler/migrations/0016_auto_20150912_2049.py b/scheduler/migrations/0016_auto_20150912_2049.py index 794c0cf9..b027aa1f 100644 --- a/scheduler/migrations/0016_auto_20150912_2049.py +++ b/scheduler/migrations/0016_auto_20150912_2049.py @@ -1,26 +1,33 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0015_auto_20150912_1732'), + ("scheduler", "0015_auto_20150912_1732"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'verbose_name': 'location', 'verbose_name_plural': 'locations', 'permissions': (('can_view', 'User can view location'),)}, + name="location", + options={ + "verbose_name": "location", + "verbose_name_plural": "locations", + "permissions": (("can_view", "User can view location"),), + }, ), migrations.AlterModelOptions( - name='timeperiods', - options={'verbose_name': 'timeperiod', 'verbose_name_plural': 'timeperiods'}, + name="timeperiods", + options={ + "verbose_name": "timeperiod", + "verbose_name_plural": "timeperiods", + }, ), migrations.AlterModelOptions( - name='topics', - options={'verbose_name': 'helptype', 'verbose_name_plural': 'helptypes'}, + name="topics", + options={"verbose_name": "helptype", "verbose_name_plural": "helptypes"}, ), ] diff --git a/scheduler/migrations/0017_merge.py b/scheduler/migrations/0017_merge.py index 7ccd3dd7..5e9409ac 100644 --- a/scheduler/migrations/0017_merge.py +++ b/scheduler/migrations/0017_merge.py @@ -1,15 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0015_auto_20150912_1740'), - ('scheduler', '0016_auto_20150912_2049'), + ("scheduler", "0015_auto_20150912_1740"), + ("scheduler", "0016_auto_20150912_2049"), ] - operations = [ - ] + operations = [] diff --git a/scheduler/migrations/0018_auto_20150912_2134.py b/scheduler/migrations/0018_auto_20150912_2134.py index 85734a55..2c68983e 100644 --- a/scheduler/migrations/0018_auto_20150912_2134.py +++ b/scheduler/migrations/0018_auto_20150912_2134.py @@ -1,24 +1,29 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0017_merge'), + ("scheduler", "0017_merge"), ] operations = [ migrations.AlterField( - model_name='need', - name='slots', - field=models.IntegerField(verbose_name='number of needed volunteers'), + model_name="need", + name="slots", + field=models.IntegerField(verbose_name="number of needed volunteers"), ), migrations.AlterField( - model_name='need', - name='time_period_from', - field=models.ForeignKey(related_name='time_from', verbose_name='time from', to='scheduler.TimePeriods'), + model_name="need", + name="time_period_from", + field=models.ForeignKey( + related_name="time_from", + verbose_name="time from", + to="scheduler.TimePeriods", + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0019_auto_20150915_0101.py b/scheduler/migrations/0019_auto_20150915_0101.py index 43b96f24..ab1a568e 100644 --- a/scheduler/migrations/0019_auto_20150915_0101.py +++ b/scheduler/migrations/0019_auto_20150915_0101.py @@ -1,23 +1,28 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0018_auto_20150912_2134'), + ("scheduler", "0018_auto_20150912_2134"), ] operations = [ migrations.AlterModelOptions( - name='topics', - options={'verbose_name': 'help type', 'verbose_name_plural': 'help types'}, + name="topics", + options={"verbose_name": "help type", "verbose_name_plural": "help types"}, ), migrations.AlterField( - model_name='need', - name='topic', - field=models.ForeignKey(verbose_name='help type', to='scheduler.Topics', help_text='HELP_TYPE_HELP'), + model_name="need", + name="topic", + field=models.ForeignKey( + verbose_name="help type", + to="scheduler.Topics", + help_text="HELP_TYPE_HELP", + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0019_remove_time_periods.py b/scheduler/migrations/0019_remove_time_periods.py index 2f4c1a63..12b6a96d 100644 --- a/scheduler/migrations/0019_remove_time_periods.py +++ b/scheduler/migrations/0019_remove_time_periods.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models def skip(*_): @@ -10,10 +10,11 @@ def skip(*_): def _restore_time_periods(apps, schema_editor): - shift_model = apps.get_model("scheduler", 'Need') - tp_model = apps.get_model("scheduler", 'TimePeriods') - for shift in shift_model.objects.select_related('time_period_from', - 'time_period_to'): + shift_model = apps.get_model("scheduler", "Need") + tp_model = apps.get_model("scheduler", "TimePeriods") + for shift in shift_model.objects.select_related( + "time_period_from", "time_period_to" + ): from_tp = tp_model.objects.create(date_time=shift.starting_time) to_tp = tp_model.objects.create(date_time=shift.ending_time) @@ -25,9 +26,10 @@ def _restore_time_periods(apps, schema_editor): def _set_starting_and_ending_times(apps, schema_editor): - shift_model = apps.get_model("scheduler", 'Need') - for shift in shift_model.objects.select_related('time_period_from', - 'time_period_to'): + shift_model = apps.get_model("scheduler", "Need") + for shift in shift_model.objects.select_related( + "time_period_from", "time_period_to" + ): shift.starting_time = shift.time_period_from.date_time shift.ending_time = shift.time_period_to.date_time @@ -37,66 +39,64 @@ def _set_starting_and_ending_times(apps, schema_editor): class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0018_auto_20150912_2134'), + ("scheduler", "0018_auto_20150912_2134"), ] operations = [ - migrations.AddField( - model_name='need', - name='ending_time', - field=models.DateTimeField(null=True, verbose_name='ending time'), + model_name="need", + name="ending_time", + field=models.DateTimeField(null=True, verbose_name="ending time"), ), migrations.AddField( - model_name='need', - name='starting_time', - field=models.DateTimeField(null=True, verbose_name='starting time'), + model_name="need", + name="starting_time", + field=models.DateTimeField(null=True, verbose_name="starting time"), ), - - migrations.RunPython(_set_starting_and_ending_times, - skip), - + migrations.RunPython(_set_starting_and_ending_times, skip), migrations.AlterField( - model_name='need', - name='ending_time', - field=models.DateTimeField(verbose_name='ending time'), + model_name="need", + name="ending_time", + field=models.DateTimeField(verbose_name="ending time"), ), migrations.AlterField( - model_name='need', - name='starting_time', - field=models.DateTimeField(verbose_name='starting time'), + model_name="need", + name="starting_time", + field=models.DateTimeField(verbose_name="starting time"), ), - migrations.AlterField( - model_name='need', - name='time_period_from', - field=models.ForeignKey(related_name='time_from', - verbose_name='time from', - to='scheduler.TimePeriods', - null=True, - default=1 - ), + model_name="need", + name="time_period_from", + field=models.ForeignKey( + related_name="time_from", + verbose_name="time from", + to="scheduler.TimePeriods", + null=True, + default=1, + on_delete=models.SET_DEFAULT, + ), ), migrations.AlterField( - model_name='need', - name='time_period_to', - field=models.ForeignKey(related_name='time_to', - to='scheduler.TimePeriods', - null=True, - default=1), + model_name="need", + name="time_period_to", + field=models.ForeignKey( + related_name="time_to", + to="scheduler.TimePeriods", + null=True, + default=1, + on_delete=models.SET_DEFAULT, + ), ), - migrations.RunPython(skip, _restore_time_periods), - migrations.RemoveField( - model_name='need', - name='time_period_from', + model_name="need", + name="time_period_from", ), migrations.RemoveField( - model_name='need', - name='time_period_to', + model_name="need", + name="time_period_to", ), migrations.DeleteModel( - name='TimePeriods', + name="TimePeriods", ), ] diff --git a/scheduler/migrations/0020_Fix_Working_Hours.py b/scheduler/migrations/0020_Fix_Working_Hours.py index fb7858ef..db7c3407 100644 --- a/scheduler/migrations/0020_Fix_Working_Hours.py +++ b/scheduler/migrations/0020_Fix_Working_Hours.py @@ -1,35 +1,35 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0019_remove_time_periods'), + ("scheduler", "0019_remove_time_periods"), ] operations = [ migrations.CreateModel( - name='WorkDone', + name="WorkDone", fields=[ - ('id', models.IntegerField(serialize=False, primary_key=True)), - ('hours', models.IntegerField(verbose_name='working hours')), + ("id", models.IntegerField(serialize=False, primary_key=True)), + ("hours", models.IntegerField(verbose_name="working hours")), ], options={ - 'db_table': 'work_done', - 'managed': False, + "db_table": "work_done", + "managed": False, }, ), migrations.AlterField( - model_name='need', - name='ending_time', - field=models.DateTimeField(verbose_name='ending time', db_index=True), + model_name="need", + name="ending_time", + field=models.DateTimeField(verbose_name="ending time", db_index=True), ), migrations.AlterField( - model_name='need', - name='starting_time', - field=models.DateTimeField(verbose_name='starting time', db_index=True), + model_name="need", + name="starting_time", + field=models.DateTimeField(verbose_name="starting time", db_index=True), ), ] diff --git a/scheduler/migrations/0021_add_shift_users.py b/scheduler/migrations/0021_add_shift_users.py index c2b49c30..4860b51e 100644 --- a/scheduler/migrations/0021_add_shift_users.py +++ b/scheduler/migrations/0021_add_shift_users.py @@ -1,33 +1,59 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('accounts', '0001_initial'), - ('scheduler', '0020_Fix_Working_Hours'), + ("accounts", "0001_initial"), + ("scheduler", "0020_Fix_Working_Hours"), ] operations = [ migrations.CreateModel( - name='ShiftHelper', + name="ShiftHelper", fields=[ - ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), - ('joined_shift_at', models.DateTimeField(auto_now_add=True)), - ('need', models.ForeignKey(related_name='shift_helpers', to='scheduler.Need')), - ('user_account', models.ForeignKey(related_name='shift_helpers', to='accounts.UserAccount')), + ( + "id", + models.AutoField( + verbose_name="ID", + serialize=False, + auto_created=True, + primary_key=True, + ), + ), + ("joined_shift_at", models.DateTimeField(auto_now_add=True)), + ( + "need", + models.ForeignKey( + related_name="shift_helpers", + to="scheduler.Need", + on_delete=models.CASCADE, + ), + ), + ( + "user_account", + models.ForeignKey( + related_name="shift_helpers", + to="accounts.UserAccount", + on_delete=models.CASCADE, + ), + ), ], options={ - 'verbose_name': 'shift helper', - 'verbose_name_plural': 'shift helpers', + "verbose_name": "shift helper", + "verbose_name_plural": "shift helpers", }, ), migrations.AddField( - model_name='need', - name='helpers', - field=models.ManyToManyField(related_name='needs', through='scheduler.ShiftHelper', to='accounts.UserAccount'), + model_name="need", + name="helpers", + field=models.ManyToManyField( + related_name="needs", + through="scheduler.ShiftHelper", + to="accounts.UserAccount", + ), ), ] diff --git a/scheduler/migrations/0021_auto_20150922_1555.py b/scheduler/migrations/0021_auto_20150922_1555.py index 67700cda..0560e7c1 100644 --- a/scheduler/migrations/0021_auto_20150922_1555.py +++ b/scheduler/migrations/0021_auto_20150922_1555.py @@ -1,18 +1,22 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0020_Fix_Working_Hours'), + ("scheduler", "0020_Fix_Working_Hours"), ] operations = [ migrations.AlterModelOptions( - name='need', - options={'ordering': ['starting_time', 'ending_time'], 'verbose_name': 'shift', 'verbose_name_plural': 'shifts'}, + name="need", + options={ + "ordering": ["starting_time", "ending_time"], + "verbose_name": "shift", + "verbose_name_plural": "shifts", + }, ), ] diff --git a/scheduler/migrations/0021_merge.py b/scheduler/migrations/0021_merge.py index 940c64c6..17673153 100644 --- a/scheduler/migrations/0021_merge.py +++ b/scheduler/migrations/0021_merge.py @@ -1,15 +1,14 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0020_Fix_Working_Hours'), - ('scheduler', '0019_auto_20150915_0101'), + ("scheduler", "0020_Fix_Working_Hours"), + ("scheduler", "0019_auto_20150915_0101"), ] - operations = [ - ] + operations = [] diff --git a/scheduler/migrations/0022_auto_20150923_1705.py b/scheduler/migrations/0022_auto_20150923_1705.py index a15dcf12..f210fc7e 100644 --- a/scheduler/migrations/0022_auto_20150923_1705.py +++ b/scheduler/migrations/0022_auto_20150923_1705.py @@ -1,18 +1,23 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0021_merge'), + ("scheduler", "0021_merge"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'ordering': ('name',), 'verbose_name': 'location', 'verbose_name_plural': 'locations', 'permissions': (('can_view', 'User can view location'),)}, + name="location", + options={ + "ordering": ("name",), + "verbose_name": "location", + "verbose_name_plural": "locations", + "permissions": (("can_view", "User can view location"),), + }, ), ] diff --git a/scheduler/migrations/0023_add_places.py b/scheduler/migrations/0023_add_places.py index 51dffe1c..9554803e 100644 --- a/scheduler/migrations/0023_add_places.py +++ b/scheduler/migrations/0023_add_places.py @@ -6,27 +6,28 @@ def add_places(apps, schema_editor): - country_model = apps.get_model('places', 'Country') - region_model = apps.get_model('places', 'Region') - area_model = apps.get_model('places', 'Area') - place_model = apps.get_model('places', 'Place') - location_model = apps.get_model('scheduler', 'Location') + country_model = apps.get_model("places", "Country") + region_model = apps.get_model("places", "Region") + area_model = apps.get_model("places", "Area") + place_model = apps.get_model("places", "Place") + location_model = apps.get_model("scheduler", "Location") - germany, _ = country_model.objects.get_or_create(name='Deutschland', - defaults=dict(slug=slugify('Deutschland'))) + germany, _ = country_model.objects.get_or_create( + name="Deutschland", defaults=dict(slug=slugify("Deutschland")) + ) for location in location_model.objects.all(): city = location.city - region, _ = region_model.objects.get_or_create(name=city, - defaults=dict(slug=slugify(city), - country=germany)) - area, _ = area_model.objects.get_or_create(name=city, - defaults=dict(slug=slugify(city), - region=region)) - place, _ = place_model.objects.get_or_create(name=city, - defaults=dict(slug=slugify(city), - area=area)) + region, _ = region_model.objects.get_or_create( + name=city, defaults=dict(slug=slugify(city), country=germany) + ) + area, _ = area_model.objects.get_or_create( + name=city, defaults=dict(slug=slugify(city), region=region) + ) + place, _ = place_model.objects.get_or_create( + name=city, defaults=dict(slug=slugify(city), area=area) + ) location.place = place @@ -34,38 +35,47 @@ def add_places(apps, schema_editor): def remove_places(apps, schema_editor): - location_model = apps.get_model('scheduler', 'Location') + location_model = apps.get_model("scheduler", "Location") for location in location_model.objects.all(): location.city = location.place.name class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0022_auto_20150923_1705'), - ('places', '0001_initial'), + ("scheduler", "0022_auto_20150923_1705"), + ("places", "0001_initial"), ] operations = [ migrations.AlterModelOptions( - name='location', - options={'ordering': ('place', 'name'), - 'verbose_name': 'location', - 'verbose_name_plural': 'locations', - 'permissions': (('can_view', 'User can view location'),)}, + name="location", + options={ + "ordering": ("place", "name"), + "verbose_name": "location", + "verbose_name_plural": "locations", + "permissions": (("can_view", "User can view location"),), + }, ), migrations.AddField( - model_name='location', - name='place', - field=models.ForeignKey(related_name='locations', - verbose_name='place', - to='places.Place', null=True), + model_name="location", + name="place", + field=models.ForeignKey( + related_name="locations", + verbose_name="place", + to="places.Place", + null=True, + on_delete=models.SET_NULL, + ), ), migrations.RunPython(add_places, remove_places), migrations.AlterField( - model_name='location', - name='place', - field=models.ForeignKey(related_name='locations', - verbose_name='place', - to='places.Place'), + model_name="location", + name="place", + field=models.ForeignKey( + related_name="locations", + verbose_name="place", + to="places.Place", + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0024_auto_20150926_2313.py b/scheduler/migrations/0024_auto_20150926_2313.py index 8c7c6124..cdbe9b80 100644 --- a/scheduler/migrations/0024_auto_20150926_2313.py +++ b/scheduler/migrations/0024_auto_20150926_2313.py @@ -1,49 +1,53 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0023_add_places'), + ("scheduler", "0023_add_places"), ] operations = [ migrations.AlterField( - model_name='location', - name='additional_info', - field=models.TextField(max_length=300000, verbose_name='description', blank=True), + model_name="location", + name="additional_info", + field=models.TextField( + max_length=300000, verbose_name="description", blank=True + ), ), migrations.AlterField( - model_name='location', - name='city', - field=models.CharField(max_length=255, verbose_name='city', blank=True), + model_name="location", + name="city", + field=models.CharField(max_length=255, verbose_name="city", blank=True), ), migrations.AlterField( - model_name='location', - name='latitude', - field=models.CharField(max_length=30, verbose_name='latitude', blank=True), + model_name="location", + name="latitude", + field=models.CharField(max_length=30, verbose_name="latitude", blank=True), ), migrations.AlterField( - model_name='location', - name='longitude', - field=models.CharField(max_length=30, verbose_name='longitude', blank=True), + model_name="location", + name="longitude", + field=models.CharField(max_length=30, verbose_name="longitude", blank=True), ), migrations.AlterField( - model_name='location', - name='name', - field=models.CharField(max_length=255, verbose_name='name', blank=True), + model_name="location", + name="name", + field=models.CharField(max_length=255, verbose_name="name", blank=True), ), migrations.AlterField( - model_name='location', - name='postal_code', - field=models.CharField(max_length=5, verbose_name='postal code', blank=True), + model_name="location", + name="postal_code", + field=models.CharField( + max_length=5, verbose_name="postal code", blank=True + ), ), migrations.AlterField( - model_name='location', - name='street', - field=models.CharField(max_length=255, verbose_name='address', blank=True), + model_name="location", + name="street", + field=models.CharField(max_length=255, verbose_name="address", blank=True), ), ] diff --git a/scheduler/migrations/0025_merge.py b/scheduler/migrations/0025_merge.py index 78ee1791..5c6adcbf 100644 --- a/scheduler/migrations/0025_merge.py +++ b/scheduler/migrations/0025_merge.py @@ -1,16 +1,15 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0024_auto_20150926_2313'), - ('scheduler', '0021_auto_20150922_1555'), - ('scheduler', '0021_add_shift_users'), + ("scheduler", "0024_auto_20150926_2313"), + ("scheduler", "0021_auto_20150922_1555"), + ("scheduler", "0021_add_shift_users"), ] - operations = [ - ] + operations = [] diff --git a/scheduler/migrations/0026_auto_20151002_0150.py b/scheduler/migrations/0026_auto_20151002_0150.py index 4195afb1..354cd4c5 100644 --- a/scheduler/migrations/0026_auto_20151002_0150.py +++ b/scheduler/migrations/0026_auto_20151002_0150.py @@ -6,12 +6,12 @@ class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0025_merge'), + ("scheduler", "0025_merge"), ] operations = [ migrations.AlterUniqueTogether( - name='shifthelper', - unique_together=set([('user_account', 'need')]), + name="shifthelper", + unique_together=set([("user_account", "need")]), ), ] diff --git a/scheduler/migrations/0027_topics_workplace.py b/scheduler/migrations/0027_topics_workplace.py index c2c4465b..c8430786 100644 --- a/scheduler/migrations/0027_topics_workplace.py +++ b/scheduler/migrations/0027_topics_workplace.py @@ -1,19 +1,21 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0026_auto_20151002_0150'), + ("scheduler", "0026_auto_20151002_0150"), ] operations = [ migrations.AddField( - model_name='topics', - name='workplace', - field=models.CharField(max_length=255, verbose_name='workplace', blank=True), + model_name="topics", + name="workplace", + field=models.CharField( + max_length=255, verbose_name="workplace", blank=True + ), ), ] diff --git a/scheduler/migrations/0028_need_facility.py b/scheduler/migrations/0028_need_facility.py index 11537705..db04451c 100644 --- a/scheduler/migrations/0028_need_facility.py +++ b/scheduler/migrations/0028_need_facility.py @@ -1,20 +1,25 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0001_initial'), - ('scheduler', '0027_topics_workplace'), + ("organizations", "0001_initial"), + ("scheduler", "0027_topics_workplace"), ] operations = [ migrations.AddField( - model_name='need', - name='facility', - field=models.ForeignKey(verbose_name='facility', to='organizations.Facility', null=True), + model_name="need", + name="facility", + field=models.ForeignKey( + verbose_name="facility", + to="organizations.Facility", + null=True, + on_delete=models.CASCADE, + ), ), ] diff --git a/scheduler/migrations/0029_remove_need_location.py b/scheduler/migrations/0029_remove_need_location.py index 72ed5f27..d67959fc 100644 --- a/scheduler/migrations/0029_remove_need_location.py +++ b/scheduler/migrations/0029_remove_need_location.py @@ -6,13 +6,13 @@ class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0028_need_facility'), - ('organizations', '0002_migrate_locations_to_facilities') + ("scheduler", "0028_need_facility"), + ("organizations", "0002_migrate_locations_to_facilities"), ] operations = [ migrations.RemoveField( - model_name='need', - name='location', + model_name="need", + name="location", ), ] diff --git a/scheduler/migrations/0030_delete_location.py b/scheduler/migrations/0030_delete_location.py index 857393c1..6aa0d734 100644 --- a/scheduler/migrations/0030_delete_location.py +++ b/scheduler/migrations/0030_delete_location.py @@ -1,27 +1,31 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0029_remove_need_location'), - ('shiftmailer', '0004_location_to_facility') + ("scheduler", "0029_remove_need_location"), + ("shiftmailer", "0004_location_to_facility"), ] operations = [ migrations.AlterField( - model_name='need', - name='facility', - field=models.ForeignKey(verbose_name='facility', to='organizations.Facility'), + model_name="need", + name="facility", + field=models.ForeignKey( + verbose_name="facility", + to="organizations.Facility", + on_delete=models.CASCADE, + ), ), migrations.RemoveField( - model_name='location', - name='place', + model_name="location", + name="place", ), migrations.DeleteModel( - name='Location', - ) + name="Location", + ), ] diff --git a/scheduler/migrations/0031_rename_need_to_shift.py b/scheduler/migrations/0031_rename_need_to_shift.py index 7c4744ea..5f54de92 100644 --- a/scheduler/migrations/0031_rename_need_to_shift.py +++ b/scheduler/migrations/0031_rename_need_to_shift.py @@ -1,39 +1,44 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('accounts', '0001_initial'), - ('organizations', '0004_add_tasks'), - ('scheduler', '0030_delete_location'), + ("accounts", "0001_initial"), + ("organizations", "0004_add_tasks"), + ("scheduler", "0030_delete_location"), ] operations = [ - migrations.RenameModel( - old_name='Need', - new_name='Shift' - ), + migrations.RenameModel(old_name="Need", new_name="Shift"), migrations.AlterField( - model_name='shifthelper', - name='need', - field=models.ForeignKey(related_name='shift_helpers', to='scheduler.Shift'), + model_name="shifthelper", + name="need", + field=models.ForeignKey( + related_name="shift_helpers", + to="scheduler.Shift", + on_delete=models.CASCADE, + ), ), migrations.RenameField( - model_name='shifthelper', - old_name='need', - new_name='shift', + model_name="shifthelper", + old_name="need", + new_name="shift", ), migrations.AlterUniqueTogether( - name='shifthelper', - unique_together=set([('user_account', 'shift')]), + name="shifthelper", + unique_together=set([("user_account", "shift")]), ), migrations.AlterField( - model_name='shift', - name='helpers', - field=models.ManyToManyField(related_name='shifts', through='scheduler.ShiftHelper', to='accounts.UserAccount'), + model_name="shift", + name="helpers", + field=models.ManyToManyField( + related_name="shifts", + through="scheduler.ShiftHelper", + to="accounts.UserAccount", + ), ), ] diff --git a/scheduler/migrations/0032_add_task_and_workplace_to_shift.py b/scheduler/migrations/0032_add_task_and_workplace_to_shift.py index a9e33e1c..bb264db6 100644 --- a/scheduler/migrations/0032_add_task_and_workplace_to_shift.py +++ b/scheduler/migrations/0032_add_task_and_workplace_to_shift.py @@ -1,25 +1,36 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('organizations', '0004_add_tasks'), - ('scheduler', '0031_rename_need_to_shift'), + ("organizations", "0004_add_tasks"), + ("scheduler", "0031_rename_need_to_shift"), ] operations = [ migrations.AddField( - model_name='shift', - name='task', - field=models.ForeignKey(verbose_name='task', to='organizations.Task', null=True), + model_name="shift", + name="task", + field=models.ForeignKey( + verbose_name="task", + to="organizations.Task", + null=True, + on_delete=models.SET_NULL, + ), ), migrations.AddField( - model_name='shift', - name='workplace', - field=models.ForeignKey(verbose_name='workplace', to='organizations.Workplace', null=True, blank=True), + model_name="shift", + name="workplace", + field=models.ForeignKey( + verbose_name="workplace", + to="organizations.Workplace", + null=True, + blank=True, + on_delete=models.SET_NULL, + ), ), ] diff --git a/scheduler/migrations/0033_migrate_topics.py b/scheduler/migrations/0033_migrate_topics.py index 8b4283cb..52e2cf0c 100644 --- a/scheduler/migrations/0033_migrate_topics.py +++ b/scheduler/migrations/0033_migrate_topics.py @@ -5,24 +5,24 @@ def migrate_topics(apps, schema_editor): - shift_model = apps.get_model('scheduler', 'Shift') - workplace_model = apps.get_model('organizations', 'Workplace') - task_model = apps.get_model('organizations', 'Task') + shift_model = apps.get_model("scheduler", "Shift") + workplace_model = apps.get_model("organizations", "Workplace") + task_model = apps.get_model("organizations", "Task") - for shift in shift_model.objects.select_related('topic', 'facility'): + for shift in shift_model.objects.select_related("topic", "facility"): facility = shift.facility topic = shift.topic if shift.topic.workplace: workplace, _ = workplace_model.objects.get_or_create( - facility=facility, - name=topic.workplace) + facility=facility, name=topic.workplace + ) shift.workplace = workplace defaults = dict(description=topic.description) - task, _ = task_model.objects.get_or_create(facility=facility, - name=topic.title, - defaults=defaults) + task, _ = task_model.objects.get_or_create( + facility=facility, name=topic.title, defaults=defaults + ) shift.task = task shift.save() @@ -33,9 +33,7 @@ def skip(_, __): class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0032_add_task_and_workplace_to_shift'), + ("scheduler", "0032_add_task_and_workplace_to_shift"), ] - operations = [ - migrations.RunPython(migrate_topics, skip) - ] + operations = [migrations.RunPython(migrate_topics, skip)] diff --git a/scheduler/migrations/0034_make_task_required.py b/scheduler/migrations/0034_make_task_required.py index 3aa05d38..4bbd461d 100644 --- a/scheduler/migrations/0034_make_task_required.py +++ b/scheduler/migrations/0034_make_task_required.py @@ -1,19 +1,21 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0033_migrate_topics'), + ("scheduler", "0033_migrate_topics"), ] operations = [ migrations.AlterField( - model_name='shift', - name='task', - field=models.ForeignKey(verbose_name='task', to='organizations.Task'), + model_name="shift", + name="task", + field=models.ForeignKey( + verbose_name="task", to="organizations.Task", on_delete=models.CASCADE + ), ), ] diff --git a/scheduler/migrations/0035_delete_topics_model.py b/scheduler/migrations/0035_delete_topics_model.py index 06ead108..5763ece1 100644 --- a/scheduler/migrations/0035_delete_topics_model.py +++ b/scheduler/migrations/0035_delete_topics_model.py @@ -6,16 +6,16 @@ class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0034_make_task_required'), - ('blueprint', '0005_demolish_blueprints') + ("scheduler", "0034_make_task_required"), + ("blueprint", "0005_demolish_blueprints"), ] operations = [ migrations.RemoveField( - model_name='shift', - name='topic', + model_name="shift", + name="topic", ), migrations.DeleteModel( - name='Topics', + name="Topics", ), ] diff --git a/scheduler/migrations/0036_shift_members_only.py b/scheduler/migrations/0036_shift_members_only.py index 19f5f56e..1b22cb0c 100644 --- a/scheduler/migrations/0036_shift_members_only.py +++ b/scheduler/migrations/0036_shift_members_only.py @@ -1,19 +1,23 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -from django.db import models, migrations +from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ - ('scheduler', '0035_delete_topics_model'), + ("scheduler", "0035_delete_topics_model"), ] operations = [ migrations.AddField( - model_name='shift', - name='members_only', - field=models.BooleanField(default=False, help_text='allow only members to help', verbose_name='members only'), + model_name="shift", + name="members_only", + field=models.BooleanField( + default=False, + help_text="allow only members to help", + verbose_name="members only", + ), ), ] diff --git a/scheduler/migrations/0037_slots_positive_integer.py b/scheduler/migrations/0037_slots_positive_integer.py new file mode 100644 index 00000000..254a7c8a --- /dev/null +++ b/scheduler/migrations/0037_slots_positive_integer.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +from __future__ import unicode_literals + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("scheduler", "0036_shift_members_only"), + ] + + operations = [ + migrations.AlterField( + model_name="shift", + name="slots", + field=models.PositiveIntegerField( + verbose_name="number of needed volunteers" + ), + ), + ] diff --git a/scheduler/migrations/0038_protect_deletion.py b/scheduler/migrations/0038_protect_deletion.py new file mode 100644 index 00000000..70cd9a8a --- /dev/null +++ b/scheduler/migrations/0038_protect_deletion.py @@ -0,0 +1,43 @@ +# Generated by Django 2.0.5 on 2019-07-18 22:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("scheduler", "0037_slots_positive_integer"), + ] + + operations = [ + migrations.AlterField( + model_name="shift", + name="facility", + field=models.ForeignKey( + verbose_name="facility", + to="organizations.Facility", + on_delete=django.db.models.deletion.PROTECT, + ), + ), + migrations.AlterField( + model_name="shift", + name="task", + field=models.ForeignKey( + verbose_name="task", + to="organizations.Task", + on_delete=django.db.models.deletion.PROTECT, + ), + ), + migrations.AlterField( + model_name="shift", + name="workplace", + field=models.ForeignKey( + verbose_name="workplace", + to="organizations.Workplace", + null=True, + blank=True, + on_delete=django.db.models.deletion.PROTECT, + ), + ), + ] diff --git a/scheduler/migrations/0039_delete_workdone.py b/scheduler/migrations/0039_delete_workdone.py new file mode 100644 index 00000000..07f3cb64 --- /dev/null +++ b/scheduler/migrations/0039_delete_workdone.py @@ -0,0 +1,16 @@ +# Generated by Django 2.2.3 on 2022-03-12 09:54 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("scheduler", "0038_protect_deletion"), + ] + + operations = [ + migrations.DeleteModel( + name="WorkDone", + ), + ] diff --git a/scheduler/migrations/0040_min_shift_slots.py b/scheduler/migrations/0040_min_shift_slots.py new file mode 100644 index 00000000..832b4d46 --- /dev/null +++ b/scheduler/migrations/0040_min_shift_slots.py @@ -0,0 +1,27 @@ +import django.core.validators +from django.db import migrations, models + + +def make_min_slots(apps, schema_editor): + + Shift = apps.get_model("schedule", "Shift") + Shift.objects.filter(slots__lte=0).update(slots=1) + + +class Migration(migrations.Migration): + + dependencies = [ + ("scheduler", "0039_delete_workdone"), + ] + + operations = [ + migrations.AlterField( + model_name="shift", + name="slots", + field=models.PositiveIntegerField( + help_text="number of needed volunteers", + validators=[django.core.validators.MinValueValidator(1)], + verbose_name="slots", + ), + ), + ] diff --git a/scheduler/migrations/0041_add_shift_messages.py b/scheduler/migrations/0041_add_shift_messages.py new file mode 100644 index 00000000..81c6197d --- /dev/null +++ b/scheduler/migrations/0041_add_shift_messages.py @@ -0,0 +1,61 @@ +# Generated by Django 4.0.3 on 2022-04-01 19:25 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("accounts", "0001_initial"), + ("scheduler", "0040_min_shift_slots"), + ] + + operations = [ + migrations.CreateModel( + name="ShiftMessageToHelpers", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("message", models.TextField(verbose_name="Message")), + ( + "send_date", + models.DateTimeField(auto_now_add=True, verbose_name="send date"), + ), + ( + "recipients", + models.ManyToManyField( + to="accounts.useraccount", verbose_name="recipients" + ), + ), + ( + "sender", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + related_name="msg_sender", + to="accounts.useraccount", + verbose_name="sender", + ), + ), + ( + "shift", + models.ForeignKey( + on_delete=django.db.models.deletion.PROTECT, + to="scheduler.shift", + verbose_name="Shift", + ), + ), + ], + options={ + "verbose_name": "shift notification", + "verbose_name_plural": "shift notifications", + }, + ), + ] diff --git a/scheduler/models.py b/scheduler/models.py index afb93ccb..4a4eaaca 100644 --- a/scheduler/models.py +++ b/scheduler/models.py @@ -1,21 +1,24 @@ # coding: utf-8 +import logging from datetime import time -from django.core.urlresolvers import reverse +from django.core.validators import MinValueValidator from django.db import models +from django.urls import reverse from django.utils.formats import localize -from django.utils.translation import ugettext_lazy as _, ungettext_lazy +from django.utils.translation import gettext_lazy as _, ngettext_lazy -from places.models import Country, Region, Area, Place from . import managers +logger = logging.getLogger(__name__) + class Shift(models.Model): - """ A Shift is a time period for the work on a task at a workplace of a - certain facility (see organizations). Users register themselves for + """A Shift is a time period for the work on a task at a workplace of a + certain facility (see organizations). Users register themselves for shifts, but there can be more than one slot for a shift, ie. there can be more than one user for a shift. - + fields: slots - depending on how many volunteers are needed to fulfill the task @@ -27,50 +30,61 @@ class Shift(models.Model): helpers - many2many to accounts-UserAccount, realized through ShiftHelper members_only - if only members are allowed to help - + The manager is extended via managers.ShiftManager. A second manager open_shifts is set to managers.OpenShiftManager. - + Defines three properties: days duration localized_display_ending_time - - """ - - slots = models.IntegerField(verbose_name=_(u'number of needed volunteers')) - task = models.ForeignKey("organizations.Task", - verbose_name=_(u'task')) - workplace = models.ForeignKey("organizations.Workplace", - verbose_name=_(u'workplace'), - null=True, - blank=True) - - facility = models.ForeignKey('organizations.Facility', - verbose_name=_(u'facility')) - - starting_time = models.DateTimeField(verbose_name=_('starting time'), - db_index=True) - ending_time = models.DateTimeField(verbose_name=_('ending time'), - db_index=True) - - helpers = models.ManyToManyField('accounts.UserAccount', - through='ShiftHelper', - related_name='shifts') + """ - members_only = models.BooleanField(default=False, - verbose_name=_(u'members only'), - help_text=_( - u'allow only members to help')) + # PositiveIntegerField instead of custom validation + slots = models.PositiveIntegerField( + verbose_name=_("slots"), + help_text=_("number of needed volunteers"), + validators=[ + MinValueValidator(1), + ], + ) + + task = models.ForeignKey( + "organizations.Task", models.PROTECT, verbose_name=_("task") + ) + workplace = models.ForeignKey( + "organizations.Workplace", + models.PROTECT, + verbose_name=_("workplace"), + null=True, + blank=True, + ) + + facility = models.ForeignKey( + "organizations.Facility", models.PROTECT, verbose_name=_("facility") + ) + + starting_time = models.DateTimeField(verbose_name=_("starting time"), db_index=True) + ending_time = models.DateTimeField(verbose_name=_("ending time"), db_index=True) + + helpers = models.ManyToManyField( + "accounts.UserAccount", through="ShiftHelper", related_name="shifts" + ) + + members_only = models.BooleanField( + default=False, + verbose_name=_("members only"), + help_text=_("allow only members to help"), + ) objects = managers.ShiftManager() open_shifts = managers.OpenShiftManager() class Meta: - verbose_name = _(u'shift') - verbose_name_plural = _(u'shifts') - ordering = ['starting_time', 'ending_time'] + verbose_name = _("shift") + verbose_name_plural = _("shifts") + ordering = ["starting_time", "ending_time"] @property def days(self): @@ -83,54 +97,101 @@ def duration(self): @property def localized_display_ending_time(self): days = self.days if self.ending_time.time() > time.min else 0 - days_fmt = ungettext_lazy(u'the next day', - u'after {number_of_days} days', - days) - days_str = days_fmt.format(number_of_days=days) if days else u'' - return u'{time} {days}'.format(time=localize(self.ending_time.time()), - days=days_str).strip() + days_fmt = ngettext_lazy("the next day", "after {number_of_days} days", days) + days_str = days_fmt.format(number_of_days=days) if days else "" + return "{time} {days}".format( + time=localize(self.ending_time.time()), days=days_str + ).strip() def __unicode__(self): - return u"{title} - {facility} ({start} - {end})".format( + return "{title} - {facility} ({start} - {end})".format( title=self.task.name, facility=self.facility.name, start=localize(self.starting_time), - end=localize(self.ending_time)) + end=localize(self.ending_time), + ) + + def __str__(self): + return self.__unicode__() def get_absolute_url(self): - return reverse('shift_details', - kwargs=dict(facility_slug=self.facility.slug, - year=self.starting_time.year, - month=self.starting_time.month, - day=self.starting_time.day, - shift_id=self.id)) + return reverse( + "shift_details", + kwargs=dict( + facility_slug=self.facility.slug, + year=self.starting_time.year, + month=self.starting_time.month, + day=self.starting_time.day, + shift_id=self.id, + ), + ) class ShiftHelper(models.Model): - """ A user registered for a shift. There is a many2many relationship + """A user registered for a shift. There is a many2many relationship between shift and user. ShiftHelper is the data structure realizing this relationship. - + fields: user_account - foreign key to accounts.UserAccount shift - foreign key to Shift joined_shift_at - datetime with auto_now_add set True, ie. a timestamp for when the user registered for the shift - - Manager is set to managers.ShiftHelperManager. + + Manager is set to managers.ShiftHelperManager. """ - user_account = models.ForeignKey('accounts.UserAccount', - related_name='shift_helpers') - shift = models.ForeignKey('scheduler.Shift', related_name='shift_helpers') + + user_account = models.ForeignKey( + "accounts.UserAccount", models.CASCADE, related_name="shift_helpers" + ) + shift = models.ForeignKey( + "scheduler.Shift", models.CASCADE, related_name="shift_helpers" + ) joined_shift_at = models.DateTimeField(auto_now_add=True) objects = managers.ShiftHelperManager() class Meta: - verbose_name = _('shift helper') - verbose_name_plural = _('shift helpers') - unique_together = ('user_account', 'shift') + verbose_name = _("shift helper") + verbose_name_plural = _("shift helpers") + unique_together = ("user_account", "shift") def __unicode__(self): - return u"{} on {}".format(self.user_account.user.username, - self.shift.task) + return "{} on {}".format(self.user_account.user.username, self.shift.task) + + def __str__(self): + return self.__unicode__() + + +class ShiftMessageToHelpers(models.Model): + """ + The ShiftMessageToHelpers represents a message to be sent to the helpers + signed up for a certain shift. A use case would be to tell all helpers to + come 1 hour later. + + The actual email will be sent via a post_save signal. + """ + + class Meta: + verbose_name = ngettext_lazy("shift notification", "shift notifications", 1) + verbose_name_plural = ngettext_lazy( + "shift notification", "shift notifications", 2 + ) + + message = models.TextField(verbose_name=_("Message")) + sender = models.ForeignKey( + "accounts.UserAccount", + models.PROTECT, + related_name="msg_sender", + verbose_name=_("sender"), + ) + send_date = models.DateTimeField(auto_now_add=True, verbose_name=_("send date")) + shift = models.ForeignKey( + "Shift", on_delete=models.PROTECT, verbose_name=_("Shift") + ) + recipients = models.ManyToManyField( + "accounts.UserAccount", verbose_name=_("recipients") + ) + + def __str__(self): + return "{} on {}".format(self.sender.user.email, self.shift.task) diff --git a/scheduler/place_urls.py b/scheduler/place_urls.py index e5450455..6537885f 100644 --- a/scheduler/place_urls.py +++ b/scheduler/place_urls.py @@ -1,29 +1,29 @@ # coding: utf-8 -from django.conf.urls import url - -from places.models import Country, Region, Area, Place +from django.urls import re_path +from places.models import Area, Country, Place, Region from .views import GeographicHelpdeskView urlpatterns = [ - - url(r'^(?P[-\w]+)/?$', + re_path( + r"^(?P[-\w]+)/?$", GeographicHelpdeskView.as_view(model=Country), - name='country-details'), - - url(r'^(?P[-\w]+)/(?P[-\w]+)/?$', + name="country-details", + ), + re_path( + r"^(?P[-\w]+)/(?P[-\w]+)/?$", GeographicHelpdeskView.as_view(model=Region), - name='region-details'), - - url( - r'^(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/?$', + name="region-details", + ), + re_path( + r"^(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/?$", # noqa: E501 GeographicHelpdeskView.as_view(model=Area), - name='area-details'), - - url( - r'^(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/?$', + name="area-details", + ), + re_path( + r"^(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/(?P[-\w]+)/?$", # noqa: E501 GeographicHelpdeskView.as_view(model=Place), - name='place-details'), - + name="place-details", + ), ] diff --git a/scheduler/settings.py b/scheduler/settings.py new file mode 100644 index 00000000..56e067e8 --- /dev/null +++ b/scheduler/settings.py @@ -0,0 +1,7 @@ +from datetime import timedelta + +from django.conf import settings + +DEFAULT_SHIFT_CONFLICT_GRACE = getattr( + settings, "DEFAULT_SHIFT_CONFLICT_GRACE", timedelta(0) +) diff --git a/scheduler/signals.py b/scheduler/signals.py index cbcb94ad..ec8ef04f 100644 --- a/scheduler/signals.py +++ b/scheduler/signals.py @@ -1,15 +1,17 @@ # coding=utf-8 import logging -from datetime import datetime, timedelta from django.conf import settings from django.core.mail import EmailMessage -from django.db.models.signals import pre_delete, pre_save +from django.db.models.signals import pre_delete, pre_save, post_save from django.dispatch import receiver from django.template.defaultfilters import time as date_filter from django.template.loader import render_to_string +from django.utils import timezone +from django.utils.timezone import timedelta +from django.utils.translation import gettext_lazy as _ -from scheduler.models import Shift +from scheduler.models import Shift, ShiftMessageToHelpers logger = logging.getLogger(__name__) @@ -28,28 +30,32 @@ def send_email_notifications(sender, instance, **kwargs): """ try: shift = instance - if shift.ending_time >= datetime.now(): - subject = u'Schicht am {} wurde abgesagt'.format( - shift.starting_time.strftime('%d.%m.%y')) + if shift.ending_time >= timezone.now(): + subject = "Schicht am {} wurde abgesagt".format( + shift.starting_time.strftime("%d.%m.%y") + ) - message = render_to_string('shift_cancellation_notification.html', - dict(shift=shift)) + message = render_to_string( + "shift_cancellation_notification.html", dict(shift=shift) + ) from_email = settings.DEFAULT_FROM_EMAIL - # TODO Find a way to identify current manager or give facility an e-mail address - reply_to = ['support@volunteer-planner.org'] - addresses = shift.helpers.values_list('user__email', flat=True) + # TODO: identify current manager or give facility an e-mail address + reply_to = ["kontakt@volunteer-planner.org"] + addresses = shift.helpers.values_list("user__email", flat=True) if addresses: - mail = EmailMessage(subject=subject, body=message, - to=['support@volunteer-planner.org'], - from_email=from_email, - bcc=addresses, - reply_to=reply_to) + mail = EmailMessage( + subject=subject, + body=message, + to=["kontakt@volunteer-planner.org"], + from_email=from_email, + bcc=addresses, + reply_to=reply_to, + ) mail.send() - except Exception as e: + except Exception: logger.exception("Error sending notification email (Shift: %s)" % instance) - pass def times_changed(shift, old_shift, grace=timedelta(minutes=5)): @@ -60,9 +66,9 @@ def times_changed(shift, old_shift, grace=timedelta(minutes=5)): old_ending_time = max(old_shift.starting_time, old_shift.ending_time) starting_diff = max(old_starting_time, starting_time) - min( - old_starting_time, starting_time) - ending_diff = max(old_ending_time, ending_time) - min( - old_ending_time, ending_time) + old_starting_time, starting_time + ) + ending_diff = max(old_ending_time, ending_time) - min(old_ending_time, ending_time) return ending_diff > grace or starting_diff > grace @@ -73,28 +79,71 @@ def notify_users_shift_change(sender, instance, **kwargs): if shift.pk: old_shift = Shift.objects.get(pk=shift.pk) - if old_shift.starting_time >= datetime.now() and times_changed(shift, - old_shift): - subject = u'Schicht wurde verändert: {task} am {date}'.format( - task=old_shift.task.name, - date=date_filter(old_shift.starting_time)) + if old_shift.starting_time >= timezone.now() and times_changed( + shift, old_shift + ): + subject = "Schicht wurde verändert: {task} am {date}".format( + task=old_shift.task.name, date=date_filter(old_shift.starting_time) + ) - message = render_to_string('shift_modification_notification.html', - dict(old=old_shift, shift=shift)) + message = render_to_string( + "shift_modification_notification.html", dict(old=old_shift, shift=shift) + ) from_email = settings.DEFAULT_FROM_EMAIL - addresses = shift.helpers.values_list('user__email', flat=True) + addresses = shift.helpers.values_list("user__email", flat=True) if addresses: - mail = EmailMessage(subject=subject, - body=message, - to=['support@volunteer-planner.org'], - from_email=from_email, - bcc=addresses) + mail = EmailMessage( + subject=subject, + body=message, + to=["kontakt@volunteer-planner.org"], + from_email=from_email, + bcc=addresses, + ) logger.info( - u'Shift %s at %s changed: (%s-%s -> %s->%s). Sending email notification to %d affected user(s).', - shift.task.name, shift.facility.name, - old_shift.starting_time, old_shift.ending_time, - shift.starting_time, shift.ending_time, - len(addresses)) + "Shift %s at %s changed: (%s-%s -> %s->%s). Sending email " + "notification to %d affected user(s).", + shift.task.name, + shift.facility.name, + old_shift.starting_time, + old_shift.ending_time, + shift.starting_time, + shift.ending_time, + len(addresses), + ) mail.send() + + +@receiver(post_save, sender=ShiftMessageToHelpers) +def send_shift_message_to_helpers(sender, instance, created, **kwargs): + if not created: + for recipient in instance.recipients.all(): + if instance.sender.user.email: + try: + message = render_to_string( + "emails/shift_message_to_helpers.txt", + dict( + message=instance.message, + recipient=recipient, + shift=instance.shift, + sender_email=instance.sender.user.email, + ), + ) + subject = _( + "Volunteer-Planner: A Message from shift " + "manager of {shift_title}" + ).format(shift_title=instance.shift.task.name) + if message: + mail = EmailMessage( + subject=subject, + body=message, + to=[recipient.user.email], + from_email="noreply@volunteer-planner.org", + reply_to=(instance.sender.user.email,), + ) + mail.send() + except Exception as e: + logger.error( + "send_shift_message_to_helpers: message not successful", e + ) diff --git a/scheduler/templates/emails/shift_message_to_helpers.txt b/scheduler/templates/emails/shift_message_to_helpers.txt new file mode 100644 index 00000000..b73ab658 --- /dev/null +++ b/scheduler/templates/emails/shift_message_to_helpers.txt @@ -0,0 +1,11 @@ +{% load i18n %}{% blocktranslate with shift_title=shift.task.name.strip location=shift.facility.name.strip %}Hello {{ recipient }}, +The shift manager of the shift {{ shift_title }} at {{ location }} wants to let you know: +---------------------- +{{ message }} +---------------------- +Please reply to {{ sender_email }} for further questions. + + +Best, +Your volunteer-planner.org team +{% endblocktranslate %} diff --git a/scheduler/templates/geographic_helpdesk.html b/scheduler/templates/geographic_helpdesk.html index 4a0f837a..9dd36164 100644 --- a/scheduler/templates/geographic_helpdesk.html +++ b/scheduler/templates/geographic_helpdesk.html @@ -65,20 +65,20 @@

    {{ facility.name }}

    {% if facility.address %}
    {{ facility.address_line }} - → {% trans "Show on map" %} + target="_blank" rel="noreferrer"> + → {% translate "Show on map" %}
    {% endif %}

    {{ facility.description|safe }}

    - {% trans "Show details" %} + {% translate "Show details" %}

    - {% trans "shifts" as shifts_heading context "helpdesk shifts heading" %} + {% translate "shifts" as shifts_heading context "helpdesk shifts heading" %}

    {{ shifts_heading|title }}

    @@ -110,10 +110,10 @@

    {% else %}

    - {% blocktrans trimmed with geographical_name=geographical_unit.name %} + {% blocktranslate trimmed with geographical_name=geographical_unit.name %} There are no upcoming shifts available for {{ geographical_name }}. - {% endblocktrans %} + {% endblocktranslate %}

    {% endif %} {% endblock %} diff --git a/scheduler/templates/helpdesk.html b/scheduler/templates/helpdesk.html index e866f269..250bae0b 100644 --- a/scheduler/templates/helpdesk.html +++ b/scheduler/templates/helpdesk.html @@ -1,5 +1,5 @@ {% extends "base.html" %} -{% load staticfiles %} +{% load static %} {% block html_attributes %} ng-app="vpWidgets"{% endblock %} @@ -15,71 +15,107 @@ + $scope.setCheckBoxFromCookie= function(){ + let cookiedFilters = $scope.getCookie("filters") + if (cookiedFilters){ + $scope.selectedCountryAndArea = cookiedFilters.split(",") + } + }; + + $scope.toggleCountryAndArea = function (countryOrArea) { + if ($scope.selectedCountryAndArea.indexOf(countryOrArea) > -1) { + $scope.selectedCountryAndArea.splice($scope.selectedCountryAndArea.indexOf(countryOrArea), 1); + $scope.setCookie("filters", $scope.selectedCountryAndArea.toString()) + } else { + $scope.selectedCountryAndArea.push(countryOrArea); + $scope.setCookie("filters", $scope.selectedCountryAndArea.toString()) + } + } + // process initial cookies + $scope.setCheckBoxFromCookie() + }) + {% endblock %} {% load osm_links i18n %} {% block content %}
    -

    {% trans "You can help in the following facilities" %}

    +

    {% translate "You can help in the following facilities" %}

    {% verbatim %}
    -
    - {% endverbatim %}{% trans "filter" %}:{% verbatim %} -