mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-01-24 00:04:16 +03:00
Merge branch 'master' of https://github.com/tomchristie/django-rest-framework into feature/filepathfield
This commit is contained in:
commit
d845157983
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -14,3 +14,4 @@ MANIFEST
|
||||||
|
|
||||||
!.gitignore
|
!.gitignore
|
||||||
!.travis.yml
|
!.travis.yml
|
||||||
|
!.isort.cfg
|
||||||
|
|
6
.isort.cfg
Normal file
6
.isort.cfg
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
[settings]
|
||||||
|
skip=.tox
|
||||||
|
atomic=true
|
||||||
|
multi_line_output=5
|
||||||
|
known_third_party=pytest,django
|
||||||
|
known_first_party=rest_framework
|
22
.travis.yml
22
.travis.yml
|
@ -3,8 +3,12 @@ language: python
|
||||||
sudo: false
|
sudo: false
|
||||||
|
|
||||||
env:
|
env:
|
||||||
- TOX_ENV=py27-flake8
|
- TOX_ENV=py27-lint
|
||||||
- TOX_ENV=py27-docs
|
- TOX_ENV=py27-docs
|
||||||
|
- TOX_ENV=py34-django18
|
||||||
|
- TOX_ENV=py33-django18
|
||||||
|
- TOX_ENV=py32-django18
|
||||||
|
- TOX_ENV=py27-django18
|
||||||
- TOX_ENV=py34-django17
|
- TOX_ENV=py34-django17
|
||||||
- TOX_ENV=py33-django17
|
- TOX_ENV=py33-django17
|
||||||
- TOX_ENV=py32-django17
|
- TOX_ENV=py32-django17
|
||||||
|
@ -21,10 +25,18 @@ env:
|
||||||
- TOX_ENV=py26-django15
|
- TOX_ENV=py26-django15
|
||||||
- TOX_ENV=py27-django14
|
- TOX_ENV=py27-django14
|
||||||
- TOX_ENV=py26-django14
|
- TOX_ENV=py26-django14
|
||||||
- TOX_ENV=py34-django18beta
|
- TOX_ENV=py27-djangomaster
|
||||||
- TOX_ENV=py33-django18beta
|
- TOX_ENV=py32-djangomaster
|
||||||
- TOX_ENV=py32-django18beta
|
- TOX_ENV=py33-djangomaster
|
||||||
- TOX_ENV=py27-django18beta
|
- TOX_ENV=py34-djangomaster
|
||||||
|
|
||||||
|
matrix:
|
||||||
|
fast_finish: true
|
||||||
|
allow_failures:
|
||||||
|
- env: TOX_ENV=py27-djangomaster
|
||||||
|
- env: TOX_ENV=py32-djangomaster
|
||||||
|
- env: TOX_ENV=py33-djangomaster
|
||||||
|
- env: TOX_ENV=py34-djangomaster
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- pip install tox
|
- pip install tox
|
||||||
|
|
24
LICENSE.md
Normal file
24
LICENSE.md
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
# License
|
||||||
|
|
||||||
|
Copyright (c) 2011-2015, Tom Christie
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are met:
|
||||||
|
|
||||||
|
Redistributions of source code must retain the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer.
|
||||||
|
Redistributions in binary form must reproduce the above copyright notice, this
|
||||||
|
list of conditions and the following disclaimer in the documentation and/or
|
||||||
|
other materials provided with the distribution.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
||||||
|
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||||
|
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||||
|
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
||||||
|
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||||
|
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||||
|
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
@ -1,3 +1,5 @@
|
||||||
|
include README.md
|
||||||
|
include LICENSE.md
|
||||||
recursive-include rest_framework/static *.js *.css *.png *.eot *.svg *.ttf *.woff
|
recursive-include rest_framework/static *.js *.css *.png *.eot *.svg *.ttf *.woff
|
||||||
recursive-include rest_framework/templates *.html
|
recursive-include rest_framework/templates *.html
|
||||||
recursive-exclude * __pycache__
|
recursive-exclude * __pycache__
|
||||||
|
|
49
README.md
49
README.md
|
@ -9,7 +9,9 @@ Full documentation for the project is available at [http://www.django-rest-frame
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note**: We have now released Django REST framework 3.0. For older codebases you may want to refer to the version 2.4.4 [source code](https://github.com/tomchristie/django-rest-framework/tree/version-2.4.x), and [documentation](http://tomchristie.github.io/rest-framework-2-docs/).
|
**Note**: We have now released Django REST framework 3.1. For older codebases you may want to refer to the version 2.4.4 [source code](https://github.com/tomchristie/django-rest-framework/tree/version-2.4.x), and [documentation](http://tomchristie.github.io/rest-framework-2-docs/).
|
||||||
|
|
||||||
|
For more details see the [3.1 release notes][3.1-announcement]
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -23,7 +25,7 @@ Some reasons you might want to use REST framework:
|
||||||
* [Authentication policies][authentication] including optional packages for [OAuth1a][oauth1-section] and [OAuth2][oauth2-section].
|
* [Authentication policies][authentication] including optional packages for [OAuth1a][oauth1-section] and [OAuth2][oauth2-section].
|
||||||
* [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources.
|
* [Serialization][serializers] that supports both [ORM][modelserializer-section] and [non-ORM][serializer-section] data sources.
|
||||||
* Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers].
|
* Customizable all the way down - just use [regular function-based views][functionview-section] if you don't need the [more][generic-views] [powerful][viewsets] [features][routers].
|
||||||
* [Extensive documentation][index], and [great community support][group].
|
* [Extensive documentation][docs], and [great community support][group].
|
||||||
|
|
||||||
There is a live example API for testing purposes, [available here][sandbox].
|
There is a live example API for testing purposes, [available here][sandbox].
|
||||||
|
|
||||||
|
@ -34,7 +36,7 @@ There is a live example API for testing purposes, [available here][sandbox].
|
||||||
# Requirements
|
# Requirements
|
||||||
|
|
||||||
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
|
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
|
||||||
* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7, 1.8-beta)
|
* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7, 1.8)
|
||||||
|
|
||||||
# Installation
|
# Installation
|
||||||
|
|
||||||
|
@ -154,42 +156,15 @@ If you believe you’ve found something in Django REST framework which has secur
|
||||||
|
|
||||||
Send a description of the issue via email to [rest-framework-security@googlegroups.com][security-mail]. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.
|
Send a description of the issue via email to [rest-framework-security@googlegroups.com][security-mail]. The project maintainers will then work with you to resolve any issues where required, prior to any public disclosure.
|
||||||
|
|
||||||
# License
|
|
||||||
|
|
||||||
Copyright (c) 2011-2015, Tom Christie
|
|
||||||
All rights reserved.
|
|
||||||
|
|
||||||
Redistribution and use in source and binary forms, with or without
|
|
||||||
modification, are permitted provided that the following conditions are met:
|
|
||||||
|
|
||||||
Redistributions of source code must retain the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer.
|
|
||||||
Redistributions in binary form must reproduce the above copyright notice, this
|
|
||||||
list of conditions and the following disclaimer in the documentation and/or
|
|
||||||
other materials provided with the distribution.
|
|
||||||
|
|
||||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
||||||
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
||||||
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
||||||
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
||||||
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
||||||
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
||||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
||||||
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
|
|
||||||
|
|
||||||
[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master
|
[build-status-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master
|
||||||
[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
|
[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
|
||||||
[pypi-version]: https://pypip.in/version/djangorestframework/badge.svg
|
[pypi-version]: https://img.shields.io/pypi/v/djangorestframework.svg
|
||||||
[pypi]: https://pypi.python.org/pypi/djangorestframework
|
[pypi]: https://pypi.python.org/pypi/djangorestframework
|
||||||
[twitter]: https://twitter.com/_tomchristie
|
[twitter]: https://twitter.com/_tomchristie
|
||||||
[group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
|
[group]: https://groups.google.com/forum/?fromgroups#!forum/django-rest-framework
|
||||||
[0.4]: https://github.com/tomchristie/django-rest-framework/tree/0.4.X
|
|
||||||
[sandbox]: http://restframework.herokuapp.com/
|
[sandbox]: http://restframework.herokuapp.com/
|
||||||
|
|
||||||
[index]: http://www.django-rest-framework.org/
|
|
||||||
[oauth1-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth
|
[oauth1-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-rest-framework-oauth
|
||||||
[oauth2-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit
|
[oauth2-section]: http://www.django-rest-framework.org/api-guide/authentication/#django-oauth-toolkit
|
||||||
[serializer-section]: http://www.django-rest-framework.org/api-guide/serializers/#serializers
|
[serializer-section]: http://www.django-rest-framework.org/api-guide/serializers/#serializers
|
||||||
|
@ -200,18 +175,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
[routers]: http://www.django-rest-framework.org/api-guide/routers/
|
[routers]: http://www.django-rest-framework.org/api-guide/routers/
|
||||||
[serializers]: http://www.django-rest-framework.org/api-guide/serializers/
|
[serializers]: http://www.django-rest-framework.org/api-guide/serializers/
|
||||||
[authentication]: http://www.django-rest-framework.org/api-guide/authentication/
|
[authentication]: http://www.django-rest-framework.org/api-guide/authentication/
|
||||||
[rest-framework-2-announcement]: http://www.django-rest-framework.org/topics/rest-framework-2-announcement/
|
|
||||||
[2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
|
|
||||||
[image]: http://www.django-rest-framework.org/img/quickstart.png
|
[image]: http://www.django-rest-framework.org/img/quickstart.png
|
||||||
|
|
||||||
[tox]: http://testrun.org/tox/latest/
|
|
||||||
|
|
||||||
[tehjones]: https://twitter.com/tehjones/status/294986071979196416
|
|
||||||
[wlonk]: https://twitter.com/wlonk/status/261689665952833536
|
|
||||||
[laserllama]: https://twitter.com/laserllama/status/328688333750407168
|
|
||||||
|
|
||||||
[docs]: http://www.django-rest-framework.org/
|
[docs]: http://www.django-rest-framework.org/
|
||||||
[urlobject]: https://github.com/zacharyvoase/urlobject
|
|
||||||
[markdown]: http://pypi.python.org/pypi/Markdown/
|
|
||||||
[django-filter]: http://pypi.python.org/pypi/django-filter
|
|
||||||
[security-mail]: mailto:rest-framework-security@googlegroups.com
|
[security-mail]: mailto:rest-framework-security@googlegroups.com
|
||||||
|
[3.1-announcement]: http://www.django-rest-framework.org/topics/3.1-announcement/
|
||||||
|
|
5
docs/api-guide/authentication.md
Executable file → Normal file
5
docs/api-guide/authentication.md
Executable file → Normal file
|
@ -168,7 +168,6 @@ The `curl` command line tool may be useful for testing token authenticated APIs.
|
||||||
If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal.
|
If you want every user to have an automatically generated Token, you can simply catch the User's `post_save` signal.
|
||||||
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
@ -248,6 +247,10 @@ Unauthenticated responses that are denied permission will result in an `HTTP 403
|
||||||
|
|
||||||
If you're using an AJAX style API with SessionAuthentication, you'll need to make sure you include a valid CSRF token for any "unsafe" HTTP method calls, such as `PUT`, `PATCH`, `POST` or `DELETE` requests. See the [Django CSRF documentation][csrf-ajax] for more details.
|
If you're using an AJAX style API with SessionAuthentication, you'll need to make sure you include a valid CSRF token for any "unsafe" HTTP method calls, such as `PUT`, `PATCH`, `POST` or `DELETE` requests. See the [Django CSRF documentation][csrf-ajax] for more details.
|
||||||
|
|
||||||
|
**Warning**: Always use Django's standard login view when creating login pages. This will ensure your login views are properly protected.
|
||||||
|
|
||||||
|
CSRF validation in REST framework works slightly differently to standard Django due to the need to support both session and non-session based authentication to the same views. This means that only authenticated requests require CSRF tokens, and anonymous requests may be sent without CSRF tokens. This behaviour is not suitable for login views, which should always have CSRF validation applied.
|
||||||
|
|
||||||
# Custom authentication
|
# Custom authentication
|
||||||
|
|
||||||
To implement a custom authentication scheme, subclass `BaseAuthentication` and override the `.authenticate(self, request)` method. The method should return a two-tuple of `(user, auth)` if authentication succeeds, or `None` otherwise.
|
To implement a custom authentication scheme, subclass `BaseAuthentication` and override the `.authenticate(self, request)` method. The method should return a two-tuple of `(user, auth)` if authentication succeeds, or `None` otherwise.
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: fields.py
|
source: fields.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Serializer fields
|
# Serializer fields
|
||||||
|
|
||||||
> Each field in a Form class is responsible not only for validating data, but also for "cleaning" it — normalizing it to a consistent format.
|
> Each field in a Form class is responsible not only for validating data, but also for "cleaning" it — normalizing it to a consistent format.
|
||||||
|
@ -26,6 +20,8 @@ Each serializer field class constructor takes at least these arguments. Some Fi
|
||||||
|
|
||||||
### `read_only`
|
### `read_only`
|
||||||
|
|
||||||
|
Read-only fields are included in the API output, but should not be included in the input during create or update operations. Any 'read_only' fields that are incorrectly included in the serializer input will be ignored.
|
||||||
|
|
||||||
Set this to `True` to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization.
|
Set this to `True` to ensure that the field is used when serializing a representation, but is not used when creating or updating an instance during deserialization.
|
||||||
|
|
||||||
Defaults to `False`
|
Defaults to `False`
|
||||||
|
@ -189,6 +185,15 @@ A field that ensures the input is a valid UUID string. The `to_internal_value` m
|
||||||
|
|
||||||
"de305d54-75b4-431b-adb2-eb6b9e546013"
|
"de305d54-75b4-431b-adb2-eb6b9e546013"
|
||||||
|
|
||||||
|
**Signature:** `UUIDField(format='hex_verbose')`
|
||||||
|
|
||||||
|
- `format`: Determines the representation format of the uuid value
|
||||||
|
- `'hex_verbose'` - The cannoncical hex representation, including hyphens: `"5ce0e9a5-5ffa-654b-cee0-1238041fb31a"`
|
||||||
|
- `'hex'` - The compact hex representation of the UUID, not including hyphens: `"5ce0e9a55ffa654bcee01238041fb31a"`
|
||||||
|
- `'int'` - A 128 bit integer representation of the UUID: `"123456789012312313134124512351145145114"`
|
||||||
|
- `'urn'` - RFC 4122 URN representation of the UUID: `"urn:uuid:5ce0e9a5-5ffa-654b-cee0-1238041fb31a"`
|
||||||
|
Changing the `format` parameters only affects representation values. All formats are accepted by `to_internal_value`
|
||||||
|
|
||||||
## FilePathField
|
## FilePathField
|
||||||
|
|
||||||
A field whose choices are limited to the filenames in a certain directory on the filesystem
|
A field whose choices are limited to the filenames in a certain directory on the filesystem
|
||||||
|
@ -203,6 +208,17 @@ Corresponds to `django.forms.fields.FilePathField`.
|
||||||
- `allow_files` - Specifies whether files in the specified location should be included. Default is `True`. Either this or `allow_folders` must be `True`.
|
- `allow_files` - Specifies whether files in the specified location should be included. Default is `True`. Either this or `allow_folders` must be `True`.
|
||||||
- `allow_folders` - Specifies whether folders in the specified location should be included. Default is `False`. Either this or `allow_files` must be `True`.
|
- `allow_folders` - Specifies whether folders in the specified location should be included. Default is `False`. Either this or `allow_files` must be `True`.
|
||||||
|
|
||||||
|
## IPAddressField
|
||||||
|
|
||||||
|
A field that ensures the input is a valid IPv4 or IPv6 string.
|
||||||
|
|
||||||
|
Corresponds to `django.forms.fields.IPAddressField` and `django.forms.fields.GenericIPAddressField`.
|
||||||
|
|
||||||
|
**Signature**: `IPAddressField(protocol='both', unpack_ipv4=False, **options)`
|
||||||
|
|
||||||
|
- `protocol` Limits valid inputs to the specified protocol. Accepted values are 'both' (default), 'IPv4' or 'IPv6'. Matching is case insensitive.
|
||||||
|
- `unpack_ipv4` Unpacks IPv4 mapped addresses like ::ffff:192.0.2.1. If this option is enabled that address would be unpacked to 192.0.2.1. Default is disabled. Can only be used when protocol is set to 'both'.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Numeric fields
|
# Numeric fields
|
||||||
|
@ -322,6 +338,18 @@ Corresponds to `django.db.models.fields.TimeField`
|
||||||
|
|
||||||
Format strings may either be [Python strftime formats][strftime] which explicitly specify the format, or the special string `'iso-8601'`, which indicates that [ISO 8601][iso8601] style times should be used. (eg `'12:34:56.000000'`)
|
Format strings may either be [Python strftime formats][strftime] which explicitly specify the format, or the special string `'iso-8601'`, which indicates that [ISO 8601][iso8601] style times should be used. (eg `'12:34:56.000000'`)
|
||||||
|
|
||||||
|
## DurationField
|
||||||
|
|
||||||
|
A Duration representation.
|
||||||
|
Corresponds to `django.db.models.fields.DurationField`
|
||||||
|
|
||||||
|
The `validated_data` for these fields will contain a `datetime.timedelta` instance.
|
||||||
|
The representation is a string following this format `'[DD] [HH:[MM:]]ss[.uuuuuu]'`.
|
||||||
|
|
||||||
|
**Note:** This field is only available with Django versions >= 1.8.
|
||||||
|
|
||||||
|
**Signature:** `DurationField()`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Choice selection fields
|
# Choice selection fields
|
||||||
|
@ -454,7 +482,7 @@ A field class that does not take a value based on user input, but instead takes
|
||||||
|
|
||||||
For example, to include a field that always provides the current time as part of the serializer validated data, you would use the following:
|
For example, to include a field that always provides the current time as part of the serializer validated data, you would use the following:
|
||||||
|
|
||||||
modified = serializer.HiddenField(default=timezone.now)
|
modified = serializers.HiddenField(default=timezone.now)
|
||||||
|
|
||||||
The `HiddenField` class is usually only needed if you have some validation that needs to run based on some pre-provided field values, but you do not want to expose all of those fields to the end user.
|
The `HiddenField` class is usually only needed if you have some validation that needs to run based on some pre-provided field values, but you do not want to expose all of those fields to the end user.
|
||||||
|
|
||||||
|
@ -501,7 +529,7 @@ If you want to create a custom field, you'll need to subclass `Field` and then o
|
||||||
|
|
||||||
The `.to_representation()` method is called to convert the initial datatype into a primitive, serializable datatype.
|
The `.to_representation()` method is called to convert the initial datatype into a primitive, serializable datatype.
|
||||||
|
|
||||||
The `to_internal_value()` method is called to restore a primitive datatype into its internal python representation. This method should raise a `serializer.ValidationError` if the data is invalid.
|
The `to_internal_value()` method is called to restore a primitive datatype into its internal python representation. This method should raise a `serializers.ValidationError` if the data is invalid.
|
||||||
|
|
||||||
Note that the `WritableField` class that was present in version 2.x no longer exists. You should subclass `Field` and override `to_internal_value()` if the field supports data input.
|
Note that the `WritableField` class that was present in version 2.x no longer exists. You should subclass `Field` and override `to_internal_value()` if the field supports data input.
|
||||||
|
|
||||||
|
|
|
@ -72,7 +72,7 @@ We can override `.get_queryset()` to deal with URLs such as `http://example.com/
|
||||||
by filtering against a `username` query parameter in the URL.
|
by filtering against a `username` query parameter in the URL.
|
||||||
"""
|
"""
|
||||||
queryset = Purchase.objects.all()
|
queryset = Purchase.objects.all()
|
||||||
username = self.request.QUERY_PARAMS.get('username', None)
|
username = self.request.query_params.get('username', None)
|
||||||
if username is not None:
|
if username is not None:
|
||||||
queryset = queryset.filter(purchaser__username=username)
|
queryset = queryset.filter(purchaser__username=username)
|
||||||
return queryset
|
return queryset
|
||||||
|
@ -149,6 +149,7 @@ If all you need is simple equality-based filtering, you can set a `filter_fields
|
||||||
class ProductList(generics.ListAPIView):
|
class ProductList(generics.ListAPIView):
|
||||||
queryset = Product.objects.all()
|
queryset = Product.objects.all()
|
||||||
serializer_class = ProductSerializer
|
serializer_class = ProductSerializer
|
||||||
|
filter_backends = (filters.DjangoFilterBackend,)
|
||||||
filter_fields = ('category', 'in_stock')
|
filter_fields = ('category', 'in_stock')
|
||||||
|
|
||||||
This will automatically create a `FilterSet` class for the given fields, and will allow you to make requests such as:
|
This will automatically create a `FilterSet` class for the given fields, and will allow you to make requests such as:
|
||||||
|
@ -174,6 +175,7 @@ For more advanced filtering requirements you can specify a `FilterSet` class tha
|
||||||
class ProductList(generics.ListAPIView):
|
class ProductList(generics.ListAPIView):
|
||||||
queryset = Product.objects.all()
|
queryset = Product.objects.all()
|
||||||
serializer_class = ProductSerializer
|
serializer_class = ProductSerializer
|
||||||
|
filter_backends = (filters.DjangoFilterBackend,)
|
||||||
filter_class = ProductFilter
|
filter_class = ProductFilter
|
||||||
|
|
||||||
|
|
||||||
|
@ -395,6 +397,10 @@ The following third party packages provide additional filter implementations.
|
||||||
|
|
||||||
The [django-rest-framework-filters package][django-rest-framework-filters] works together with the `DjangoFilterBackend` class, and allows you to easily create filters across relationships, or create multiple filter lookup types for a given field.
|
The [django-rest-framework-filters package][django-rest-framework-filters] works together with the `DjangoFilterBackend` class, and allows you to easily create filters across relationships, or create multiple filter lookup types for a given field.
|
||||||
|
|
||||||
|
## Django REST framework full word search filter
|
||||||
|
|
||||||
|
The [djangorestframework-word-filter][django-rest-framework-word-search-filter] developed as alternative to `filters.SearchFilter` which will search full word in text, or exact match.
|
||||||
|
|
||||||
[cite]: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters
|
[cite]: https://docs.djangoproject.com/en/dev/topics/db/queries/#retrieving-specific-objects-with-filters
|
||||||
[django-filter]: https://github.com/alex/django-filter
|
[django-filter]: https://github.com/alex/django-filter
|
||||||
[django-filter-docs]: https://django-filter.readthedocs.org/en/latest/index.html
|
[django-filter-docs]: https://django-filter.readthedocs.org/en/latest/index.html
|
||||||
|
@ -404,3 +410,4 @@ The [django-rest-framework-filters package][django-rest-framework-filters] works
|
||||||
[nullbooleanselect]: https://github.com/django/django/blob/master/django/forms/widgets.py
|
[nullbooleanselect]: https://github.com/django/django/blob/master/django/forms/widgets.py
|
||||||
[search-django-admin]: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
|
[search-django-admin]: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.search_fields
|
||||||
[django-rest-framework-filters]: https://github.com/philipn/django-rest-framework-filters
|
[django-rest-framework-filters]: https://github.com/philipn/django-rest-framework-filters
|
||||||
|
[django-rest-framework-word-search-filter]: https://github.com/trollknurr/django-rest-framework-word-search-filter
|
||||||
|
|
49
docs/api-guide/generic-views.md
Executable file → Normal file
49
docs/api-guide/generic-views.md
Executable file → Normal file
|
@ -1,12 +1,6 @@
|
||||||
source: mixins.py
|
source: mixins.py
|
||||||
generics.py
|
generics.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Generic views
|
# Generic views
|
||||||
|
|
||||||
> Django’s generic views... were developed as a shortcut for common usage patterns... They take certain common idioms and patterns found in view development and abstract them so that you can quickly write common views of data without having to repeat yourself.
|
> Django’s generic views... were developed as a shortcut for common usage patterns... They take certain common idioms and patterns found in view development and abstract them so that you can quickly write common views of data without having to repeat yourself.
|
||||||
|
@ -57,7 +51,7 @@ For more complex cases you might also want to override various methods on the vi
|
||||||
|
|
||||||
For very simple cases you might want to pass through any class attributes using the `.as_view()` method. For example, your URLconf might include something like the following entry:
|
For very simple cases you might want to pass through any class attributes using the `.as_view()` method. For example, your URLconf might include something like the following entry:
|
||||||
|
|
||||||
url(r'^/users/', ListCreateAPIView.as_view(model=User), name='user-list')
|
url(r'^/users/', ListCreateAPIView.as_view(queryset=User.objects.all(), serializer_class=UserSerializer), name='user-list')
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -84,10 +78,9 @@ The following attributes control the basic view behavior.
|
||||||
|
|
||||||
The following attributes are used to control pagination when used with list views.
|
The following attributes are used to control pagination when used with list views.
|
||||||
|
|
||||||
* `paginate_by` - The size of pages to use with paginated data. If set to `None` then pagination is turned off. If unset this uses the same value as the `PAGINATE_BY` setting, which defaults to `None`.
|
* `pagination_class` - The pagination class that should be used when paginating list results. Defaults to the same value as the `DEFAULT_PAGINATION_CLASS` setting, which is `'rest_framework.pagination.PageNumberPagination'`.
|
||||||
* `paginate_by_param` - The name of a query parameter, which can be used by the client to override the default page size to use for pagination. If unset this uses the same value as the `PAGINATE_BY_PARAM` setting, which defaults to `None`.
|
|
||||||
* `pagination_serializer_class` - The pagination serializer class to use when determining the style of paginated responses. Defaults to the same value as the `DEFAULT_PAGINATION_SERIALIZER_CLASS` setting.
|
Note that usage of the `paginate_by`, `paginate_by_param` and `page_kwarg` attributes are now pending deprecation. The `pagination_serializer_class` attribute and `DEFAULT_PAGINATION_SERIALIZER_CLASS` setting have been removed completely. Pagination settings should instead be controlled by overriding a pagination class and setting any configuration attributes there. See the pagination documentation for more details.
|
||||||
* `page_kwarg` - The name of a URL kwarg or URL query parameter which can be used by the client to control which page is requested. Defaults to `'page'`.
|
|
||||||
|
|
||||||
**Filtering**:
|
**Filtering**:
|
||||||
|
|
||||||
|
@ -131,21 +124,24 @@ For example:
|
||||||
|
|
||||||
Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup.
|
Note that if your API doesn't include any object level permissions, you may optionally exclude the `self.check_object_permissions`, and simply return the object from the `get_object_or_404` lookup.
|
||||||
|
|
||||||
#### `get_filter_backends(self)`
|
#### `filter_queryset(self, queryset)`
|
||||||
|
|
||||||
Returns the classes that should be used to filter the queryset. Defaults to returning the `filter_backends` attribute.
|
Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
|
||||||
|
|
||||||
May be overridden to provide more complex behavior with filters, such as using different (or even exlusive) lists of filter_backends depending on different criteria.
|
|
||||||
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
def get_filter_backends(self):
|
def filter_queryset(self, queryset):
|
||||||
if "geo_route" in self.request.QUERY_PARAMS:
|
filter_backends = (CategoryFilter,)
|
||||||
return (GeoRouteFilter, CategoryFilter)
|
|
||||||
elif "geo_point" in self.request.QUERY_PARAMS:
|
|
||||||
return (GeoPointFilter, CategoryFilter)
|
|
||||||
|
|
||||||
return (CategoryFilter,)
|
if 'geo_route' in self.request.query_params:
|
||||||
|
filter_backends = (GeoRouteFilter, CategoryFilter)
|
||||||
|
elif 'geo_point' in self.request.query_params:
|
||||||
|
filter_backends = (GeoPointFilter, CategoryFilter)
|
||||||
|
|
||||||
|
for backend in list(filter_backends):
|
||||||
|
queryset = backend().filter_queryset(self.request, queryset, view=self)
|
||||||
|
|
||||||
|
return queryset
|
||||||
|
|
||||||
#### `get_serializer_class(self)`
|
#### `get_serializer_class(self)`
|
||||||
|
|
||||||
|
@ -199,8 +195,8 @@ These override points are also particularly useful for adding behavior that occu
|
||||||
You won't typically need to override the following methods, although you might need to call into them if you're writing custom views using `GenericAPIView`.
|
You won't typically need to override the following methods, although you might need to call into them if you're writing custom views using `GenericAPIView`.
|
||||||
|
|
||||||
* `get_serializer_context(self)` - Returns a dictionary containing any extra context that should be supplied to the serializer. Defaults to including `'request'`, `'view'` and `'format'` keys.
|
* `get_serializer_context(self)` - Returns a dictionary containing any extra context that should be supplied to the serializer. Defaults to including `'request'`, `'view'` and `'format'` keys.
|
||||||
* `get_serializer(self, instance=None, data=None, files=None, many=False, partial=False, allow_add_remove=False)` - Returns a serializer instance.
|
* `get_serializer(self, instance=None, data=None, many=False, partial=False)` - Returns a serializer instance.
|
||||||
* `get_pagination_serializer(self, page)` - Returns a serializer instance to use with paginated data.
|
* `get_paginated_response(self, data)` - Returns a paginated style `Response` object.
|
||||||
* `paginate_queryset(self, queryset)` - Paginate a queryset if required, either returning a page object, or `None` if pagination is not configured for this view.
|
* `paginate_queryset(self, queryset)` - Paginate a queryset if required, either returning a page object, or `None` if pagination is not configured for this view.
|
||||||
* `filter_queryset(self, queryset)` - Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
|
* `filter_queryset(self, queryset)` - Given a queryset, filter it with whichever filter backends are in use, returning a new queryset.
|
||||||
|
|
||||||
|
@ -398,6 +394,10 @@ The following third party packages provide additional generic view implementatio
|
||||||
|
|
||||||
The [django-rest-framework-bulk package][django-rest-framework-bulk] implements generic view mixins as well as some common concrete generic views to allow to apply bulk operations via API requests.
|
The [django-rest-framework-bulk package][django-rest-framework-bulk] implements generic view mixins as well as some common concrete generic views to allow to apply bulk operations via API requests.
|
||||||
|
|
||||||
|
## Django Rest Multiple Models
|
||||||
|
|
||||||
|
[Django Rest Multiple Models][django-rest-multiple-models] provides a generic view (and mixin) for sending multiple serialized models and/or querysets via a single API request.
|
||||||
|
|
||||||
|
|
||||||
[cite]: https://docs.djangoproject.com/en/dev/ref/class-based-views/#base-vs-generic-views
|
[cite]: https://docs.djangoproject.com/en/dev/ref/class-based-views/#base-vs-generic-views
|
||||||
[GenericAPIView]: #genericapiview
|
[GenericAPIView]: #genericapiview
|
||||||
|
@ -407,3 +407,6 @@ The [django-rest-framework-bulk package][django-rest-framework-bulk] implements
|
||||||
[UpdateModelMixin]: #updatemodelmixin
|
[UpdateModelMixin]: #updatemodelmixin
|
||||||
[DestroyModelMixin]: #destroymodelmixin
|
[DestroyModelMixin]: #destroymodelmixin
|
||||||
[django-rest-framework-bulk]: https://github.com/miki725/django-rest-framework-bulk
|
[django-rest-framework-bulk]: https://github.com/miki725/django-rest-framework-bulk
|
||||||
|
[django-rest-multiple-models]: https://github.com/Axiologue/DjangoRestMultipleModels
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: metadata.py
|
source: metadata.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Metadata
|
# Metadata
|
||||||
|
|
||||||
> [The `OPTIONS`] method allows a client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.
|
> [The `OPTIONS`] method allows a client to determine the options and/or requirements associated with a resource, or the capabilities of a server, without implying a resource action or initiating a resource retrieval.
|
||||||
|
@ -104,6 +98,12 @@ The following class could be used to limit the information that is returned to `
|
||||||
'description': view.get_view_description()
|
'description': view.get_view_description()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Then configure your settings to use this custom class:
|
||||||
|
|
||||||
|
REST_FRAMEWORK = {
|
||||||
|
'DEFAULT_METADATA_CLASS': 'myproject.apps.core.MinimalMetadata'
|
||||||
|
}
|
||||||
|
|
||||||
[cite]: http://tools.ietf.org/html/rfc7231#section-4.3.7
|
[cite]: http://tools.ietf.org/html/rfc7231#section-4.3.7
|
||||||
[no-options]: https://www.mnot.net/blog/2012/10/29/NO_OPTIONS
|
[no-options]: https://www.mnot.net/blog/2012/10/29/NO_OPTIONS
|
||||||
[json-schema]: http://json-schema.org/
|
[json-schema]: http://json-schema.org/
|
||||||
|
|
|
@ -51,7 +51,8 @@ You can then apply your new style to a view using the `.pagination_class` attrib
|
||||||
Or apply the style globally, using the `DEFAULT_PAGINATION_CLASS` settings key. For example:
|
Or apply the style globally, using the `DEFAULT_PAGINATION_CLASS` settings key. For example:
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PAGINATION_CLASS': 'apps.core.pagination.StandardResultsSetPagination'
}
|
'DEFAULT_PAGINATION_CLASS': 'apps.core.pagination.StandardResultsSetPagination'
|
||||||
|
}
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -79,11 +80,11 @@ This pagination style accepts a single number page number in the request query p
|
||||||
|
|
||||||
#### Setup
|
#### Setup
|
||||||
|
|
||||||
To enable the `PageNumberPagination` style globally, use the following configuration, modifying the `DEFAULT_PAGE_SIZE` as desired:
|
To enable the `PageNumberPagination` style globally, use the following configuration, modifying the `PAGE_SIZE` as desired:
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
||||||
'DEFAULT_PAGE_SIZE': 100
|
'PAGE_SIZE': 100
|
||||||
}
|
}
|
||||||
|
|
||||||
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `PageNumberPagination` on a per-view basis.
|
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `PageNumberPagination` on a per-view basis.
|
||||||
|
@ -94,7 +95,7 @@ The `PageNumberPagination` class includes a number of attributes that may be ove
|
||||||
|
|
||||||
To set these attributes you should override the `PageNumberPagination` class, and then enable your custom pagination class as above.
|
To set these attributes you should override the `PageNumberPagination` class, and then enable your custom pagination class as above.
|
||||||
|
|
||||||
* `page_size` - A numeric value indicating the page size. If set, this overrides the `DEFAULT_PAGE_SIZE` setting. Defaults to the same value as the `DEFAULT_PAGE_SIZE` settings key.
|
* `page_size` - A numeric value indicating the page size. If set, this overrides the `PAGE_SIZE` setting. Defaults to the same value as the `PAGE_SIZE` settings key.
|
||||||
* `page_query_param` - A string value indicating the name of the query parameter to use for the pagination control.
|
* `page_query_param` - A string value indicating the name of the query parameter to use for the pagination control.
|
||||||
* `page_size_query_param` - If set, this is a string value indicating the name of a query parameter that allows the client to set the page size on a per-request basis. Defaults to `None`, indicating that the client may not control the requested page size.
|
* `page_size_query_param` - If set, this is a string value indicating the name of a query parameter that allows the client to set the page size on a per-request basis. Defaults to `None`, indicating that the client may not control the requested page size.
|
||||||
* `max_page_size` - If set, this is a numeric value indicating the maximum allowable requested page size. This attribute is only valid if `page_size_query_param` is also set.
|
* `max_page_size` - If set, this is a numeric value indicating the maximum allowable requested page size. This attribute is only valid if `page_size_query_param` is also set.
|
||||||
|
@ -126,13 +127,13 @@ This pagination style mirrors the syntax used when looking up multiple database
|
||||||
|
|
||||||
#### Setup
|
#### Setup
|
||||||
|
|
||||||
To enable the `PageNumberPagination` style globally, use the following configuration:
|
To enable the `LimitOffsetPagination` style globally, use the following configuration:
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination'
|
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.LimitOffsetPagination'
|
||||||
}
|
}
|
||||||
|
|
||||||
Optionally, you may also set a `DEFAULT_PAGE_SIZE` key. If the `DEFAULT_PAGE_SIZE` parameter is also used then the `limit` query parameter will be optional, and may be omitted by the client.
|
Optionally, you may also set a `PAGE_SIZE` key. If the `PAGE_SIZE` parameter is also used then the `limit` query parameter will be optional, and may be omitted by the client.
|
||||||
|
|
||||||
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `LimitOffsetPagination` on a per-view basis.
|
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `LimitOffsetPagination` on a per-view basis.
|
||||||
|
|
||||||
|
@ -142,7 +143,7 @@ The `LimitOffsetPagination` class includes a number of attributes that may be ov
|
||||||
|
|
||||||
To set these attributes you should override the `LimitOffsetPagination` class, and then enable your custom pagination class as above.
|
To set these attributes you should override the `LimitOffsetPagination` class, and then enable your custom pagination class as above.
|
||||||
|
|
||||||
* `default_limit` - A numeric value indicating the limit to use if one is not provided by the client in a query parameter. Defaults to the same value as the `DEFAULT_PAGE_SIZE` settings key.
|
* `default_limit` - A numeric value indicating the limit to use if one is not provided by the client in a query parameter. Defaults to the same value as the `PAGE_SIZE` settings key.
|
||||||
* `limit_query_param` - A string value indicating the name of the "limit" query parameter. Defaults to `'limit'`.
|
* `limit_query_param` - A string value indicating the name of the "limit" query parameter. Defaults to `'limit'`.
|
||||||
* `offset_query_param` - A string value indicating the name of the "offset" query parameter. Defaults to `'offset'`.
|
* `offset_query_param` - A string value indicating the name of the "offset" query parameter. Defaults to `'offset'`.
|
||||||
* `max_limit` - If set this is a numeric value indicating the maximum allowable limit that may be requested by the client. Defaults to `None`.
|
* `max_limit` - If set this is a numeric value indicating the maximum allowable limit that may be requested by the client. Defaults to `None`.
|
||||||
|
@ -158,28 +159,33 @@ Cursor based pagination requires that there is a unique, unchanging ordering of
|
||||||
|
|
||||||
Cursor based pagination is more complex than other schemes. It also requires that the result set presents a fixed ordering, and does not allow the client to arbitrarily index into the result set. However it does provide the following benefits:
|
Cursor based pagination is more complex than other schemes. It also requires that the result set presents a fixed ordering, and does not allow the client to arbitrarily index into the result set. However it does provide the following benefits:
|
||||||
|
|
||||||
* Provides a consistent pagination view. When used properly `CursorPagination` ensures that the client will never see the same item twice when paging through records.
|
* Provides a consistent pagination view. When used properly `CursorPagination` ensures that the client will never see the same item twice when paging through records, even when new items are being inserted by other clients during the pagination process.
|
||||||
* Supports usage with very large datasets. With extremely large datasets pagination using offset-based pagination styles may become inefficient or unusable. Cursor based pagination schemes instead have fixed-time properties, and do not slow down as the dataset size increases.
|
* Supports usage with very large datasets. With extremely large datasets pagination using offset-based pagination styles may become inefficient or unusable. Cursor based pagination schemes instead have fixed-time properties, and do not slow down as the dataset size increases.
|
||||||
|
|
||||||
#### Details and limitations
|
#### Details and limitations
|
||||||
|
|
||||||
This implementation of cursor pagination uses a smart "position plus offset" style that allows it to properly support not-strictly-unique values as the ordering.
|
Proper use of cursor based pagination requires a little attention to detail. You'll need to think about what ordering you want the scheme to be applied against. The default is to order by `"-created"`. This assumes that **there must be a 'created' timestamp field** on the model instances, and will present a "timeline" style paginated view, with the most recently added items first.
|
||||||
|
|
||||||
It should be noted that using non-unique values the ordering does introduce the possibility of paging artifacts, where pagination consistency is no longer 100% guaranteed.
|
You can modify the ordering by overriding the `'ordering'` attribute on the pagination class, or by using the `OrderingFilter` filter class together with `CursorPagination`. When used with `OrderingFilter` you should strongly consider restricting the fields that the user may order by.
|
||||||
|
|
||||||
**TODO**: Notes on `None`.
|
Proper usage of cursor pagination should have an ordering field that satisfies the following:
|
||||||
|
|
||||||
The implementation also supports both forward and reverse pagination, which is often not supported in other implementations.
|
* Should be an unchanging value, such as a timestamp, slug, or other field that is only set once, on creation.
|
||||||
|
* Should be unique, or nearly unique. Millisecond precision timestamps are a good example. This implementation of cursor pagination uses a smart "position plus offset" style that allows it to properly support not-strictly-unique values as the ordering.
|
||||||
|
* Should be a non-nullable value that can be coerced to a string.
|
||||||
|
* The field should have a database index.
|
||||||
|
|
||||||
|
Using an ordering field that does not satisfy these constraints will generally still work, but you'll be loosing some of the benefits of cursor pagination.
|
||||||
|
|
||||||
For more technical details on the implementation we use for cursor pagination, the ["Building cursors for the Disqus API"][disqus-cursor-api] blog post gives a good overview of the basic approach.
|
For more technical details on the implementation we use for cursor pagination, the ["Building cursors for the Disqus API"][disqus-cursor-api] blog post gives a good overview of the basic approach.
|
||||||
|
|
||||||
#### Setup
|
#### Setup
|
||||||
|
|
||||||
To enable the `CursorPagination` style globally, use the following configuration, modifying the `DEFAULT_PAGE_SIZE` as desired:
|
To enable the `CursorPagination` style globally, use the following configuration, modifying the `PAGE_SIZE` as desired:
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
|
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.CursorPagination',
|
||||||
'DEFAULT_PAGE_SIZE': 100
|
'PAGE_SIZE': 100
|
||||||
}
|
}
|
||||||
|
|
||||||
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `CursorPagination` on a per-view basis.
|
On `GenericAPIView` subclasses you may also set the `pagination_class` attribute to select `CursorPagination` on a per-view basis.
|
||||||
|
@ -190,9 +196,9 @@ The `CursorPagination` class includes a number of attributes that may be overrid
|
||||||
|
|
||||||
To set these attributes you should override the `CursorPagination` class, and then enable your custom pagination class as above.
|
To set these attributes you should override the `CursorPagination` class, and then enable your custom pagination class as above.
|
||||||
|
|
||||||
* `page_size` = A numeric value indicating the page size. If set, this overrides the `DEFAULT_PAGE_SIZE` setting. Defaults to the same value as the `DEFAULT_PAGE_SIZE` settings key.
|
* `page_size` = A numeric value indicating the page size. If set, this overrides the `PAGE_SIZE` setting. Defaults to the same value as the `PAGE_SIZE` settings key.
|
||||||
* `cursor_query_param` = A string value indicating the name of the "cursor" query parameter. Defaults to `'cursor'`.
|
* `cursor_query_param` = A string value indicating the name of the "cursor" query parameter. Defaults to `'cursor'`.
|
||||||
* `ordering` = This should be a string, or list of strings, indicating the field against which the cursor based pagination will be applied. For example: `ordering = 'created'`. Any filters on the view which define a `get_ordering` will override this attribute. Defaults to `None`.
|
* `ordering` = This should be a string, or list of strings, indicating the field against which the cursor based pagination will be applied. For example: `ordering = 'slug'`. Defaults to `-created`. This value may also be overridden by using `OrderingFilter` on the view.
|
||||||
* `template` = The name of a template to use when rendering pagination controls in the browsable API. May be overridden to modify the rendering style, or set to `None` to disable HTML pagination controls completely. Defaults to `"rest_framework/pagination/previous_and_next.html"`.
|
* `template` = The name of a template to use when rendering pagination controls in the browsable API. May be overridden to modify the rendering style, or set to `None` to disable HTML pagination controls completely. Defaults to `"rest_framework/pagination/previous_and_next.html"`.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
@ -208,18 +214,43 @@ Note that the `paginate_queryset` method may set state on the pagination instanc
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
|
Suppose we want to replace the default pagination output style with a modified format that includes the next and previous links under in a nested 'links' key. We could specify a custom pagination class like so:
|
||||||
|
|
||||||
|
class CustomPagination(pagination.PageNumberPagination):
|
||||||
|
def get_paginated_response(self, data):
|
||||||
|
return Response({
|
||||||
|
'links': {
|
||||||
|
'next': self.get_next_link(),
|
||||||
|
'previous': self.get_previous_link()
|
||||||
|
},
|
||||||
|
'count': self.page.paginator.count,
|
||||||
|
'results': data
|
||||||
|
})
|
||||||
|
|
||||||
|
We'd then need to setup the custom class in our configuration:
|
||||||
|
|
||||||
|
REST_FRAMEWORK = {
|
||||||
|
'DEFAULT_PAGINATION_CLASS': 'my_project.apps.core.pagination.CustomPagination',
|
||||||
|
'PAGE_SIZE': 100
|
||||||
|
}
|
||||||
|
|
||||||
|
Note that if you care about how the ordering of keys is displayed in responses in the browsable API you might choose to use an `OrderedDict` when constructing the body of paginated responses, but this is optional.
|
||||||
|
|
||||||
|
## Header based pagination
|
||||||
|
|
||||||
Let's modify the built-in `PageNumberPagination` style, so that instead of include the pagination links in the body of the response, we'll instead include a `Link` header, in a [similar style to the GitHub API][github-link-pagination].
|
Let's modify the built-in `PageNumberPagination` style, so that instead of include the pagination links in the body of the response, we'll instead include a `Link` header, in a [similar style to the GitHub API][github-link-pagination].
|
||||||
|
|
||||||
class LinkHeaderPagination(pagination.PageNumberPagination):
|
class LinkHeaderPagination(pagination.PageNumberPagination):
|
||||||
def get_paginated_response(self, data):
|
def get_paginated_response(self, data):
|
||||||
next_url = self.get_next_link()
previous_url = self.get_previous_link()
|
next_url = self.get_next_link()
|
||||||
|
previous_url = self.get_previous_link()
|
||||||
|
|
||||||
if next_url is not None and previous_url is not None:
|
if next_url is not None and previous_url is not None:
|
||||||
link = '<{next_url}; rel="next">, <{previous_url}; rel="prev">'
|
link = '<{next_url}>; rel="next", <{previous_url}>; rel="prev"'
|
||||||
elif next_url is not None:
|
elif next_url is not None:
|
||||||
link = '<{next_url}; rel="next">'
|
link = '<{next_url}>; rel="next"'
|
||||||
elif previous_url is not None:
|
elif previous_url is not None:
|
||||||
link = '<{previous_url}; rel="prev">'
|
link = '<{previous_url}>; rel="prev"'
|
||||||
else:
|
else:
|
||||||
link = ''
|
link = ''
|
||||||
|
|
||||||
|
@ -234,7 +265,7 @@ To have your custom pagination class be used by default, use the `DEFAULT_PAGINA
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PAGINATION_CLASS': 'my_project.apps.core.pagination.LinkHeaderPagination',
|
'DEFAULT_PAGINATION_CLASS': 'my_project.apps.core.pagination.LinkHeaderPagination',
|
||||||
'DEFAULT_PAGE_SIZE': 10
|
'PAGE_SIZE': 100
|
||||||
}
|
}
|
||||||
|
|
||||||
API responses for list endpoints will now include a `Link` header, instead of including the pagination links as part of the body of the response, for example:
|
API responses for list endpoints will now include a `Link` header, instead of including the pagination links as part of the body of the response, for example:
|
||||||
|
|
|
@ -147,7 +147,6 @@ The following is an example plaintext parser that will populate the `request.dat
|
||||||
"""
|
"""
|
||||||
Plain text parser.
|
Plain text parser.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
media_type = 'text/plain'
|
media_type = 'text/plain'
|
||||||
|
|
||||||
def parse(self, stream, media_type=None, parser_context=None):
|
def parse(self, stream, media_type=None, parser_context=None):
|
||||||
|
|
|
@ -150,7 +150,7 @@ Similar to `DjangoModelPermissions`, but also allows unauthenticated users to ha
|
||||||
|
|
||||||
This permission class ties into Django's standard [object permissions framework][objectpermissions] that allows per-object permissions on models. In order to use this permission class, you'll also need to add a permission backend that supports object-level permissions, such as [django-guardian][guardian].
|
This permission class ties into Django's standard [object permissions framework][objectpermissions] that allows per-object permissions on models. In order to use this permission class, you'll also need to add a permission backend that supports object-level permissions, such as [django-guardian][guardian].
|
||||||
|
|
||||||
As with `DjangoModelPermissions`, this permission must only be applied to views that have a `.queryset` property. Authorization will only be granted if the user *is authenticated* and has the *relevant per-object permissions* and *relevant model permissions* assigned.
|
As with `DjangoModelPermissions`, this permission must only be applied to views that have a `.queryset` property or `.get_queryset()` method. Authorization will only be granted if the user *is authenticated* and has the *relevant per-object permissions* and *relevant model permissions* assigned.
|
||||||
|
|
||||||
* `POST` requests require the user to have the `add` permission on the model instance.
|
* `POST` requests require the user to have the `add` permission on the model instance.
|
||||||
* `PUT` and `PATCH` requests require the user to have the `change` permission on the model instance.
|
* `PUT` and `PATCH` requests require the user to have the `change` permission on the model instance.
|
||||||
|
@ -190,6 +190,16 @@ If you need to test if a request is a read operation or a write operation, you s
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
Custom permissions will raise a `PermissionDenied` exception if the test fails. To change the error message associated with the exception, implement a `message` attribute directly on your custom permission. Otherwise the `default_detail` attribute from `PermissionDenied` will be used.
|
||||||
|
|
||||||
|
from rest_framework import permissions
|
||||||
|
|
||||||
|
class CustomerAccessPermission(permissions.BasePermission):
|
||||||
|
message = 'Adding customers not allowed.'
|
||||||
|
|
||||||
|
def has_permission(self, request, view):
|
||||||
|
...
|
||||||
|
|
||||||
## Examples
|
## Examples
|
||||||
|
|
||||||
The following is an example of a permission class that checks the incoming request's IP address against a blacklist, and denies the request if the IP has been blacklisted.
|
The following is an example of a permission class that checks the incoming request's IP address against a blacklist, and denies the request if the IP has been blacklisted.
|
||||||
|
@ -233,10 +243,6 @@ Also note that the generic views will only check the object-level permissions fo
|
||||||
|
|
||||||
The following third party packages are also available.
|
The following third party packages are also available.
|
||||||
|
|
||||||
## DRF Any Permissions
|
|
||||||
|
|
||||||
The [DRF Any Permissions][drf-any-permissions] packages provides a different permission behavior in contrast to REST framework. Instead of all specified permissions being required, only one of the given permissions has to be true in order to get access to the view.
|
|
||||||
|
|
||||||
## Composed Permissions
|
## Composed Permissions
|
||||||
|
|
||||||
The [Composed Permissions][composed-permissions] package provides a simple way to define complex and multi-depth (with logic operators) permission objects, using small and reusable components.
|
The [Composed Permissions][composed-permissions] package provides a simple way to define complex and multi-depth (with logic operators) permission objects, using small and reusable components.
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: relations.py
|
source: relations.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Serializer relations
|
# Serializer relations
|
||||||
|
|
||||||
> Bad programmers worry about the code.
|
> Bad programmers worry about the code.
|
||||||
|
@ -52,7 +46,7 @@ In order to explain the various types of relational fields, we'll use a couple o
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('album', 'order')
|
unique_together = ('album', 'order')
|
||||||
order_by = 'order'
|
ordering = ['order']
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%d: %s' % (self.order, self.title)
|
return '%d: %s' % (self.order, self.title)
|
||||||
|
@ -122,6 +116,8 @@ By default this field is read-write, although you can change this behavior using
|
||||||
* `queryset` - The queryset used for model instance lookups when validating the field input. Relationships must either set a queryset explicitly, or set `read_only=True`.
|
* `queryset` - The queryset used for model instance lookups when validating the field input. Relationships must either set a queryset explicitly, or set `read_only=True`.
|
||||||
* `many` - If applied to a to-many relationship, you should set this argument to `True`.
|
* `many` - If applied to a to-many relationship, you should set this argument to `True`.
|
||||||
* `allow_null` - If set to `True`, the field will accept values of `None` or the empty string for nullable relationships. Defaults to `False`.
|
* `allow_null` - If set to `True`, the field will accept values of `None` or the empty string for nullable relationships. Defaults to `False`.
|
||||||
|
* `pk_field` - Set to a field to control serialization/deserialization of the primary key's value. For example, `pk_field=UUIDField(format='hex')` would serialize a UUID primary key into its compact hex representation.
|
||||||
|
|
||||||
|
|
||||||
## HyperlinkedRelatedField
|
## HyperlinkedRelatedField
|
||||||
|
|
||||||
|
@ -260,17 +256,64 @@ For example, the following serializer:
|
||||||
|
|
||||||
Would serialize to a nested representation like this:
|
Would serialize to a nested representation like this:
|
||||||
|
|
||||||
|
>>> album = Album.objects.create(album_name="The Grey Album", artist='Danger Mouse')
|
||||||
|
>>> Track.objects.create(album=album, order=1, title='Public Service Announcement', duration=245)
|
||||||
|
<Track: Track object>
|
||||||
|
>>> Track.objects.create(album=album, order=2, title='What More Can I Say', duration=264)
|
||||||
|
<Track: Track object>
|
||||||
|
>>> Track.objects.create(album=album, order=3, title='Encore', duration=159)
|
||||||
|
<Track: Track object>
|
||||||
|
>>> serializer = AlbumSerializer(instance=album)
|
||||||
|
>>> serializer.data
|
||||||
{
|
{
|
||||||
'album_name': 'The Grey Album',
|
'album_name': 'The Grey Album',
|
||||||
'artist': 'Danger Mouse',
|
'artist': 'Danger Mouse',
|
||||||
'tracks': [
|
'tracks': [
|
||||||
{'order': 1, 'title': 'Public Service Announcement'},
|
{'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
|
||||||
{'order': 2, 'title': 'What More Can I Say'},
|
{'order': 2, 'title': 'What More Can I Say', 'duration': 264},
|
||||||
{'order': 3, 'title': 'Encore'},
|
{'order': 3, 'title': 'Encore', 'duration': 159},
|
||||||
...
|
...
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Writable nested serializers
|
||||||
|
|
||||||
|
Be default nested serializers are read-only. If you want to to support write-operations to a nested serializer field you'll need to create either or both of the `create()` and/or `update()` methods, in order to explicitly specify how the child relationships should be saved.
|
||||||
|
|
||||||
|
class TrackSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Track
|
||||||
|
fields = ('order', 'title')
|
||||||
|
|
||||||
|
class AlbumSerializer(serializers.ModelSerializer):
|
||||||
|
tracks = TrackSerializer(many=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
model = Album
|
||||||
|
fields = ('album_name', 'artist', 'tracks')
|
||||||
|
|
||||||
|
def create(self, validated_data):
|
||||||
|
tracks_data = validated_data.pop('tracks')
|
||||||
|
album = Album.objects.create(**validated_data)
|
||||||
|
for track_data in tracks_data:
|
||||||
|
Track.objects.create(album=album, **track_data)
|
||||||
|
return album
|
||||||
|
|
||||||
|
>>> data = {
|
||||||
|
'album_name': 'The Grey Album',
|
||||||
|
'artist': 'Danger Mouse',
|
||||||
|
'tracks': [
|
||||||
|
{'order': 1, 'title': 'Public Service Announcement', 'duration': 245},
|
||||||
|
{'order': 2, 'title': 'What More Can I Say', 'duration': 264},
|
||||||
|
{'order': 3, 'title': 'Encore', 'duration': 159},
|
||||||
|
],
|
||||||
|
}
|
||||||
|
>>> serializer = AlbumSerializer(data=data)
|
||||||
|
>>> serializer.is_valid()
|
||||||
|
True
|
||||||
|
>>> serializer.save()
|
||||||
|
<Album: Album object>
|
||||||
|
|
||||||
# Custom relational fields
|
# Custom relational fields
|
||||||
|
|
||||||
To implement a custom relational field, you should override `RelatedField`, and implement the `.to_representation(self, value)` method. This method takes the target of the field as the `value` argument, and should return the representation that should be used to serialize the target. The `value` argument will typically be a model instance.
|
To implement a custom relational field, you should override `RelatedField`, and implement the `.to_representation(self, value)` method. This method takes the target of the field as the `value` argument, and should return the representation that should be used to serialize the target. The `value` argument will typically be a model instance.
|
||||||
|
@ -279,7 +322,7 @@ If you want to implement a read-write relational field, you must also implement
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
For, example, we could define a relational field, to serialize a track to a custom string representation, using its ordering, title, and duration.
|
For example, we could define a relational field to serialize a track to a custom string representation, using its ordering, title, and duration.
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
|
|
|
@ -110,7 +110,7 @@ An example of a view that uses `TemplateHTMLRenderer`:
|
||||||
|
|
||||||
class UserDetail(generics.RetrieveAPIView):
|
class UserDetail(generics.RetrieveAPIView):
|
||||||
"""
|
"""
|
||||||
A view that returns a templated HTML representations of a given user.
|
A view that returns a templated HTML representation of a given user.
|
||||||
"""
|
"""
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
renderer_classes = (TemplateHTMLRenderer,)
|
renderer_classes = (TemplateHTMLRenderer,)
|
||||||
|
@ -135,7 +135,7 @@ See also: `StaticHTMLRenderer`
|
||||||
|
|
||||||
A simple renderer that simply returns pre-rendered HTML. Unlike other renderers, the data passed to the response object should be a string representing the content to be returned.
|
A simple renderer that simply returns pre-rendered HTML. Unlike other renderers, the data passed to the response object should be a string representing the content to be returned.
|
||||||
|
|
||||||
An example of a view that uses `TemplateHTMLRenderer`:
|
An example of a view that uses `StaticHTMLRenderer`:
|
||||||
|
|
||||||
@api_view(('GET',))
|
@api_view(('GET',))
|
||||||
@renderer_classes((StaticHTMLRenderer,))
|
@renderer_classes((StaticHTMLRenderer,))
|
||||||
|
@ -143,7 +143,7 @@ An example of a view that uses `TemplateHTMLRenderer`:
|
||||||
data = '<html><body><h1>Hello, world</h1></body></html>'
|
data = '<html><body><h1>Hello, world</h1></body></html>'
|
||||||
return Response(data)
|
return Response(data)
|
||||||
|
|
||||||
You can use `TemplateHTMLRenderer` either to return regular HTML pages using REST framework, or to return both HTML and API responses from a single endpoint.
|
You can use `StaticHTMLRenderer` either to return regular HTML pages using REST framework, or to return both HTML and API responses from a single endpoint.
|
||||||
|
|
||||||
**.media_type**: `text/html`
|
**.media_type**: `text/html`
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ See also: `TemplateHTMLRenderer`
|
||||||
|
|
||||||
Renders data returned by a serializer into an HTML form. The output of this renderer does not include the enclosing `<form>` tags or an submit actions, as you'll probably need those to include the desired method and URL. Also note that the `HTMLFormRenderer` does not yet support including field error messages.
|
Renders data returned by a serializer into an HTML form. The output of this renderer does not include the enclosing `<form>` tags or an submit actions, as you'll probably need those to include the desired method and URL. Also note that the `HTMLFormRenderer` does not yet support including field error messages.
|
||||||
|
|
||||||
Note that the template used by the `HTMLFormRenderer` class, and the context submitted to it **may be subject to change**. If you need to use this renderer class it is advised that you either make a local copy of the class and templates, or follow the release note on REST framework upgrades closely.
|
**Note**: The `HTMLFormRenderer` class is intended for internal use with the browsable API. It should not be considered a fully documented or stable API. The template used by the `HTMLFormRenderer` class, and the context submitted to it **may be subject to change**. If you need to use this renderer class it is advised that you either make a local copy of the class and templates, or follow the release note on REST framework upgrades closely.
|
||||||
|
|
||||||
**.media_type**: `text/html`
|
**.media_type**: `text/html`
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ Renders data into HTML for the Browsable API. This renderer will determine whic
|
||||||
|
|
||||||
#### Customizing BrowsableAPIRenderer
|
#### Customizing BrowsableAPIRenderer
|
||||||
|
|
||||||
By default the response content will be rendered with the highest priority renderer apart from `BrowseableAPIRenderer`. If you need to customize this behavior, for example to use HTML as the default return format, but use JSON in the browsable API, you can do so by overriding the `get_default_renderer()` method. For example:
|
By default the response content will be rendered with the highest priority renderer apart from `BrowsableAPIRenderer`. If you need to customize this behavior, for example to use HTML as the default return format, but use JSON in the browsable API, you can do so by overriding the `get_default_renderer()` method. For example:
|
||||||
|
|
||||||
class CustomBrowsableAPIRenderer(BrowsableAPIRenderer):
|
class CustomBrowsableAPIRenderer(BrowsableAPIRenderer):
|
||||||
def get_default_renderer(self, view):
|
def get_default_renderer(self, view):
|
||||||
|
@ -406,7 +406,7 @@ Modify your REST framework settings.
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_RENDERER_CLASSES': (
|
'DEFAULT_RENDERER_CLASSES': (
|
||||||
'rest_framework_yaml.renderers.JSONPRenderer',
|
'rest_framework_jsonp.renderers.JSONPRenderer',
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: request.py
|
source: request.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Requests
|
# Requests
|
||||||
|
|
||||||
> If you're doing REST-based web service stuff ... you should ignore request.POST.
|
> If you're doing REST-based web service stuff ... you should ignore request.POST.
|
||||||
|
|
|
@ -290,14 +290,14 @@ The following third party packages are also available.
|
||||||
|
|
||||||
The [drf-nested-routers package][drf-nested-routers] provides routers and relationship fields for working with nested resources.
|
The [drf-nested-routers package][drf-nested-routers] provides routers and relationship fields for working with nested resources.
|
||||||
|
|
||||||
## wq.db
|
## ModelRouter (wq.db.rest)
|
||||||
|
|
||||||
The [wq.db package][wq.db] provides an advanced [Router][wq.db-router] class (and singleton instance) that extends `DefaultRouter` with a `register_model()` API. Much like Django's `admin.site.register`, the only required argument to `app.router.register_model` is a model class. Reasonable defaults for a url prefix and viewset will be inferred from the model and global configuration.
|
The [wq.db package][wq.db] provides an advanced [ModelRouter][wq.db-router] class (and singleton instance) that extends `DefaultRouter` with a `register_model()` API. Much like Django's `admin.site.register`, the only required argument to `rest.router.register_model` is a model class. Reasonable defaults for a url prefix, serializer, and viewset will be inferred from the model and global configuration.
|
||||||
|
|
||||||
from wq.db.rest import app
|
from wq.db import rest
|
||||||
from myapp.models import MyModel
|
from myapp.models import MyModel
|
||||||
|
|
||||||
app.router.register_model(MyModel)
|
rest.router.register_model(MyModel)
|
||||||
|
|
||||||
## DRF-extensions
|
## DRF-extensions
|
||||||
|
|
||||||
|
@ -307,7 +307,7 @@ The [`DRF-extensions` package][drf-extensions] provides [routers][drf-extensions
|
||||||
[route-decorators]: viewsets.md#marking-extra-actions-for-routing
|
[route-decorators]: viewsets.md#marking-extra-actions-for-routing
|
||||||
[drf-nested-routers]: https://github.com/alanjds/drf-nested-routers
|
[drf-nested-routers]: https://github.com/alanjds/drf-nested-routers
|
||||||
[wq.db]: http://wq.io/wq.db
|
[wq.db]: http://wq.io/wq.db
|
||||||
[wq.db-router]: http://wq.io/docs/app.py
|
[wq.db-router]: http://wq.io/docs/router
|
||||||
[drf-extensions]: http://chibisov.github.io/drf-extensions/docs/
|
[drf-extensions]: http://chibisov.github.io/drf-extensions/docs/
|
||||||
[drf-extensions-routers]: http://chibisov.github.io/drf-extensions/docs/#routers
|
[drf-extensions-routers]: http://chibisov.github.io/drf-extensions/docs/#routers
|
||||||
[drf-extensions-nested-viewsets]: http://chibisov.github.io/drf-extensions/docs/#nested-routes
|
[drf-extensions-nested-viewsets]: http://chibisov.github.io/drf-extensions/docs/#nested-routes
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: serializers.py
|
source: serializers.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Serializers
|
# Serializers
|
||||||
|
|
||||||
> Expanding the usefulness of the serializers is something that we would
|
> Expanding the usefulness of the serializers is something that we would
|
||||||
|
@ -350,7 +344,7 @@ Here's an example for an `update()` method on our previous `UserSerializer` clas
|
||||||
|
|
||||||
return instance
|
return instance
|
||||||
|
|
||||||
Because the behavior of nested creates and updates can be ambiguous, and may require complex dependancies between related models, REST framework 3 requires you to always write these methods explicitly. The default `ModelSerializer` `.create()` and `.update()` methods do not include support for writable nested representations.
|
Because the behavior of nested creates and updates can be ambiguous, and may require complex dependencies between related models, REST framework 3 requires you to always write these methods explicitly. The default `ModelSerializer` `.create()` and `.update()` methods do not include support for writable nested representations.
|
||||||
|
|
||||||
It is possible that a third party package, providing automatic support some kinds of automatic writable nested representations may be released alongside the 3.1 release.
|
It is possible that a third party package, providing automatic support some kinds of automatic writable nested representations may be released alongside the 3.1 release.
|
||||||
|
|
||||||
|
@ -484,7 +478,7 @@ The default `ModelSerializer` uses primary keys for relationships, but you can a
|
||||||
|
|
||||||
The `depth` option should be set to an integer value that indicates the depth of relationships that should be traversed before reverting to a flat representation.
|
The `depth` option should be set to an integer value that indicates the depth of relationships that should be traversed before reverting to a flat representation.
|
||||||
|
|
||||||
If you want to customize the way the serialization is done (e.g. using `allow_add_remove`) you'll need to define the field yourself.
|
If you want to customize the way the serialization is done you'll need to define the field yourself.
|
||||||
|
|
||||||
## Specifying fields explicitly
|
## Specifying fields explicitly
|
||||||
|
|
||||||
|
@ -818,7 +812,7 @@ There are four methods that can be overridden, depending on what functionality y
|
||||||
|
|
||||||
* `.to_representation()` - Override this to support serialization, for read operations.
|
* `.to_representation()` - Override this to support serialization, for read operations.
|
||||||
* `.to_internal_value()` - Override this to support deserialization, for write operations.
|
* `.to_internal_value()` - Override this to support deserialization, for write operations.
|
||||||
* `.create()` and `.update()` - Overide either or both of these to support saving instances.
|
* `.create()` and `.update()` - Override either or both of these to support saving instances.
|
||||||
|
|
||||||
Because this class provides the same interface as the `Serializer` class, you can use it with the existing generic class based views exactly as you would for a regular `Serializer` or `ModelSerializer`.
|
Because this class provides the same interface as the `Serializer` class, you can use it with the existing generic class based views exactly as you would for a regular `Serializer` or `ModelSerializer`.
|
||||||
|
|
||||||
|
|
|
@ -273,6 +273,8 @@ Default: `'accept'`
|
||||||
|
|
||||||
The name of a URL parameter that may be used to override the default `Accept` header based content negotiation.
|
The name of a URL parameter that may be used to override the default `Accept` header based content negotiation.
|
||||||
|
|
||||||
|
If the value of this setting is `None` then URL format overloading will be disabled.
|
||||||
|
|
||||||
Default: `'format'`
|
Default: `'format'`
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -65,7 +65,7 @@ When testing views directly using a request factory, it's often convenient to be
|
||||||
|
|
||||||
To forcibly authenticate a request, use the `force_authenticate()` method.
|
To forcibly authenticate a request, use the `force_authenticate()` method.
|
||||||
|
|
||||||
from rest_framework.tests import force_authenticate
|
from rest_framework.test import force_authenticate
|
||||||
|
|
||||||
factory = APIRequestFactory()
|
factory = APIRequestFactory()
|
||||||
user = User.objects.get(username='olivia')
|
user = User.objects.get(username='olivia')
|
||||||
|
|
|
@ -1,11 +1,5 @@
|
||||||
source: validators.py
|
source: validators.py
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Validators
|
# Validators
|
||||||
|
|
||||||
> Validators can be useful for re-using validation logic between different types of fields.
|
> Validators can be useful for re-using validation logic between different types of fields.
|
||||||
|
@ -178,7 +172,7 @@ REST framework includes a couple of defaults that may be useful in this context.
|
||||||
A default class that can be used to represent the current user. In order to use this, the 'request' must have been provided as part of the context dictionary when instantiating the serializer.
|
A default class that can be used to represent the current user. In order to use this, the 'request' must have been provided as part of the context dictionary when instantiating the serializer.
|
||||||
|
|
||||||
owner = serializers.HiddenField(
|
owner = serializers.HiddenField(
|
||||||
default=CurrentUserDefault()
|
default=serializers.CurrentUserDefault()
|
||||||
)
|
)
|
||||||
|
|
||||||
#### CreateOnlyDefault
|
#### CreateOnlyDefault
|
||||||
|
@ -210,12 +204,12 @@ A validator may be any callable that raises a `serializers.ValidationError` on f
|
||||||
|
|
||||||
To write a class based validator, use the `__call__` method. Class based validators are useful as they allow you to parameterize and reuse behavior.
|
To write a class based validator, use the `__call__` method. Class based validators are useful as they allow you to parameterize and reuse behavior.
|
||||||
|
|
||||||
class MultipleOf:
|
class MultipleOf(object):
|
||||||
def __init__(self, base):
|
def __init__(self, base):
|
||||||
self.base = base
|
self.base = base
|
||||||
|
|
||||||
def __call__(self, value):
|
def __call__(self, value):
|
||||||
if value % self.base != 0
|
if value % self.base != 0:
|
||||||
message = 'This field must be a multiple of %d.' % self.base
|
message = 'This field must be a multiple of %d.' % self.base
|
||||||
raise serializers.ValidationError(message)
|
raise serializers.ValidationError(message)
|
||||||
|
|
||||||
|
|
|
@ -31,6 +31,8 @@ How you vary the API behavior is up to you, but one example you might typically
|
||||||
|
|
||||||
The `reverse` function included by REST framework ties in with the versioning scheme. You need to make sure to include the current `request` as a keyword argument, like so.
|
The `reverse` function included by REST framework ties in with the versioning scheme. You need to make sure to include the current `request` as a keyword argument, like so.
|
||||||
|
|
||||||
|
from rest_framework.reverse import reverse
|
||||||
|
|
||||||
reverse('bookings-list', request=request)
|
reverse('bookings-list', request=request)
|
||||||
|
|
||||||
The above function will apply any URL transformations appropriate to the request version. For example:
|
The above function will apply any URL transformations appropriate to the request version. For example:
|
||||||
|
@ -69,9 +71,22 @@ You can also set the versioning scheme on an individual view. Typically you won'
|
||||||
The following settings keys are also used to control versioning:
|
The following settings keys are also used to control versioning:
|
||||||
|
|
||||||
* `DEFAULT_VERSION`. The value that should be used for `request.version` when no versioning information is present. Defaults to `None`.
|
* `DEFAULT_VERSION`. The value that should be used for `request.version` when no versioning information is present. Defaults to `None`.
|
||||||
* `ALLOWED_VERSIONS`. If set, this value will restrict the set of versions that may be returned by the versioning scheme, and will raise an error if the provided version if not in this set. Defaults to `None`.
|
* `ALLOWED_VERSIONS`. If set, this value will restrict the set of versions that may be returned by the versioning scheme, and will raise an error if the provided version if not in this set. Note that the value used for the `DEFAULT_VERSION` setting is always considered to be part of the `ALLOWED_VERSIONS` set. Defaults to `None`.
|
||||||
* `VERSION_PARAMETER`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
|
* `VERSION_PARAMETER`. The string that should used for any versioning parameters, such as in the media type or URL query parameters. Defaults to `'version'`.
|
||||||
|
|
||||||
|
You can also set your versioning class plus those three values on a per-view or a per-viewset basis by defining your own versioning scheme and using the `default_version`, `allowed_versions` and `version_param` class variables. For example, if you want to use `URLPathVersioning`:
|
||||||
|
|
||||||
|
from rest_framework.versioning import URLPathVersioning
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
class ExampleVersioning(URLPathVersioning):
|
||||||
|
default_version = ...
|
||||||
|
allowed_versions = ...
|
||||||
|
version_param = ...
|
||||||
|
|
||||||
|
class ExampleView(APIVIew):
|
||||||
|
versioning_class = ExampleVersioning
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# API Reference
|
# API Reference
|
||||||
|
@ -103,7 +118,7 @@ Your client requests would now look like this:
|
||||||
Host: example.com
|
Host: example.com
|
||||||
Accept: application/vnd.megacorp.bookings+json; version=1.0
|
Accept: application/vnd.megacorp.bookings+json; version=1.0
|
||||||
|
|
||||||
## URLParameterVersioning
|
## URLPathVersioning
|
||||||
|
|
||||||
This scheme requires the client to specify the version as part of the URL path.
|
This scheme requires the client to specify the version as part of the URL path.
|
||||||
|
|
||||||
|
@ -115,12 +130,12 @@ Your URL conf must include a pattern that matches the version with a `'version'`
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(
|
url(
|
||||||
r'^(?P<version>{v1,v2})/bookings/$',
|
r'^(?P<version>[v1|v2]+)/bookings/$',
|
||||||
bookings_list,
|
bookings_list,
|
||||||
name='bookings-list'
|
name='bookings-list'
|
||||||
),
|
),
|
||||||
url(
|
url(
|
||||||
r'^(?P<version>{v1,v2})/bookings/(?P<pk>[0-9]+)/$',
|
r'^(?P<version>[v1|v2]+)/bookings/(?P<pk>[0-9]+)/$',
|
||||||
bookings_detail,
|
bookings_detail,
|
||||||
name='bookings-detail'
|
name='bookings-detail'
|
||||||
)
|
)
|
||||||
|
|
|
@ -27,7 +27,7 @@ Let's define a simple viewset that can be used to list or retrieve all the users
|
||||||
|
|
||||||
class UserViewSet(viewsets.ViewSet):
|
class UserViewSet(viewsets.ViewSet):
|
||||||
"""
|
"""
|
||||||
A simple ViewSet that for listing or retrieving users.
|
A simple ViewSet for listing or retrieving users.
|
||||||
"""
|
"""
|
||||||
def list(self, request):
|
def list(self, request):
|
||||||
queryset = User.objects.all()
|
queryset = User.objects.all()
|
||||||
|
@ -136,8 +136,13 @@ For example:
|
||||||
@list_route()
|
@list_route()
|
||||||
def recent_users(self, request):
|
def recent_users(self, request):
|
||||||
recent_users = User.objects.all().order('-last_login')
|
recent_users = User.objects.all().order('-last_login')
|
||||||
|
|
||||||
page = self.paginate_queryset(recent_users)
|
page = self.paginate_queryset(recent_users)
|
||||||
serializer = self.get_pagination_serializer(page)
|
if page is not None:
|
||||||
|
serializer = self.get_serializer(page, many=True)
|
||||||
|
return self.get_paginated_response(serializer.data)
|
||||||
|
|
||||||
|
serializer = self.get_serializer(recent_users, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
||||||
|
|
||||||
The decorators can additionally take extra arguments that will be set for the routed view only. For example...
|
The decorators can additionally take extra arguments that will be set for the routed view only. For example...
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
<p class="badges" height=20px>
|
<p class="badges" height=20px>
|
||||||
<iframe src="http://ghbtns.com/github-btn.html?user=tomchristie&repo=django-rest-framework&type=watch&count=true" class="github-star-button" allowtransparency="true" frameborder="0" scrolling="0" width="110px" height="20px"></iframe>
|
<iframe src="http://ghbtns.com/github-btn.html?user=tomchristie&repo=django-rest-framework&type=watch&count=true" class="github-star-button" allowtransparency="true" frameborder="0" scrolling="0" width="110px" height="20px"></iframe>
|
||||||
|
|
||||||
<a href="https://twitter.com/share" class="twitter-share-button" data-url="django-rest-framework.org" data-text="Checking out the totally awesome Django REST framework! http://www.django-rest-framework.org" data-count="none"></a>
|
<a href="http://travis-ci.org/tomchristie/django-rest-framework?branch=master">
|
||||||
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="http://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
|
<img src="https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master" class="status-badge">
|
||||||
|
</a>
|
||||||
|
|
||||||
<img src="https://secure.travis-ci.org/tomchristie/django-rest-framework.svg?branch=master" class="travis-build-image">
|
<a href="https://pypi.python.org/pypi/djangorestframework">
|
||||||
|
<img src="https://img.shields.io/pypi/v/djangorestframework.svg" class="status-badge">
|
||||||
|
</a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note**: This is the documentation for the **version 3.0** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
**Note**: This is the documentation for the **version 3.1** of REST framework. Documentation for [version 2.4](http://tomchristie.github.io/rest-framework-2-docs/) is also available.
|
||||||
|
|
||||||
For more details see the [3.0 release notes][3.0-announcement].
|
For more details see the [3.1 release notes][3.1-announcement].
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -50,7 +53,7 @@ Some reasons you might want to use REST framework:
|
||||||
REST framework requires the following:
|
REST framework requires the following:
|
||||||
|
|
||||||
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
|
* Python (2.6.5+, 2.7, 3.2, 3.3, 3.4)
|
||||||
* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7, 1.8-beta)
|
* Django (1.4.11+, 1.5.6+, 1.6.3+, 1.7+, 1.8)
|
||||||
|
|
||||||
The following packages are optional:
|
The following packages are optional:
|
||||||
|
|
||||||
|
@ -248,8 +251,6 @@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||||
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
[travis]: http://travis-ci.org/tomchristie/django-rest-framework?branch=master
|
|
||||||
[travis-build-image]: https://secure.travis-ci.org/tomchristie/django-rest-framework.png?branch=master
|
|
||||||
[mozilla]: http://www.mozilla.org/en-US/about/
|
[mozilla]: http://www.mozilla.org/en-US/about/
|
||||||
[eventbrite]: https://www.eventbrite.co.uk/about/
|
[eventbrite]: https://www.eventbrite.co.uk/about/
|
||||||
[markdown]: http://pypi.python.org/pypi/Markdown/
|
[markdown]: http://pypi.python.org/pypi/Markdown/
|
||||||
|
|
|
@ -940,7 +940,7 @@ The default JSON renderer will return float objects for un-coerced `Decimal` ins
|
||||||
* The serializer `ChoiceField` does not currently display nested choices, as was the case in 2.4. This will be address as part of 3.1.
|
* The serializer `ChoiceField` does not currently display nested choices, as was the case in 2.4. This will be address as part of 3.1.
|
||||||
* Due to the new templated form rendering, the 'widget' option is no longer valid. This means there's no easy way of using third party "autocomplete" widgets for rendering select inputs that contain a large number of choices. You'll either need to use a regular select or a plain text input. We may consider addressing this in 3.1 or 3.2 if there's sufficient demand.
|
* Due to the new templated form rendering, the 'widget' option is no longer valid. This means there's no easy way of using third party "autocomplete" widgets for rendering select inputs that contain a large number of choices. You'll either need to use a regular select or a plain text input. We may consider addressing this in 3.1 or 3.2 if there's sufficient demand.
|
||||||
* Some of the default validation error messages were rewritten and might no longer be pre-translated. You can still [create language files with Django][django-localization] if you wish to localize them.
|
* Some of the default validation error messages were rewritten and might no longer be pre-translated. You can still [create language files with Django][django-localization] if you wish to localize them.
|
||||||
* `APIException` subclasses could previously take could previously take any arbitrary type in the `detail` argument. These exceptions now use translatable text strings, and as a result call `force_text` on the `detail` argument, which *must be a string*. If you need complex arguments to an `APIException` class, you should subclass it and override the `__init__()` method. Typically you'll instead want to use a custom exception handler to provide for non-standard error responses.
|
* `APIException` subclasses could previously take any arbitrary type in the `detail` argument. These exceptions now use translatable text strings, and as a result call `force_text` on the `detail` argument, which *must be a string*. If you need complex arguments to an `APIException` class, you should subclass it and override the `__init__()` method. Typically you'll instead want to use a custom exception handler to provide for non-standard error responses.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,15 @@ Some highlights include:
|
||||||
|
|
||||||
The pagination API has been improved, making it both easier to use, and more powerful.
|
The pagination API has been improved, making it both easier to use, and more powerful.
|
||||||
|
|
||||||
|
A guide to the headline features follows. For full details, see [the pagination documentation][pagination].
|
||||||
|
|
||||||
|
Note that as a result of this work a number of settings keys and generic view attributes are now moved to pending deprecation. Controlling pagination styles is now largely handled by overriding a pagination class and modifying its configuration attributes.
|
||||||
|
|
||||||
|
* The `PAGINATE_BY` settings key will continue to work but is now pending deprecation. The more obviously named `PAGE_SIZE` settings key should now be used instead.
|
||||||
|
* The `PAGINATE_BY_PARAM`, `MAX_PAGINATE_BY` settings keys will continue to work but are now pending deprecation, in favor of setting configuration attributes on the configured pagination class.
|
||||||
|
* The `paginate_by`, `page_query_param`, `paginate_by_param` and `max_paginate_by` generic view attributes will continue to work but are now pending deprecation, in favor of setting configuration attributes on the configured pagination class.
|
||||||
|
* The `pagination_serializer_class` view attribute and `DEFAULT_PAGINATION_SERIALIZER_CLASS` settings key **are no longer valid**. The pagination API does not use serializers to determine the output format, and you'll need to instead override the `get_paginated_response` method on a pagination class in order to specify how the output format is controlled.
|
||||||
|
|
||||||
#### New pagination schemes.
|
#### New pagination schemes.
|
||||||
|
|
||||||
Until now, there has only been a single built-in pagination style in REST framework. We now have page, limit/offset and cursor based schemes included by default.
|
Until now, there has only been a single built-in pagination style in REST framework. We now have page, limit/offset and cursor based schemes included by default.
|
||||||
|
@ -43,7 +52,7 @@ For more information, see the [custom pagination styles](../api-guide/pagination
|
||||||
|
|
||||||
## Versioning
|
## Versioning
|
||||||
|
|
||||||
We've made it easier to build versioned APIs. Built-in schemes for versioning include both URL based and Accept header based variations.
|
We've made it [easier to build versioned APIs][versioning]. Built-in schemes for versioning include both URL based and Accept header based variations.
|
||||||
|
|
||||||
When using a URL based scheme, hyperlinked serializers will resolve relationships to the same API version as used on the incoming request.
|
When using a URL based scheme, hyperlinked serializers will resolve relationships to the same API version as used on the incoming request.
|
||||||
|
|
||||||
|
@ -71,7 +80,7 @@ The output representation would match the version used on the incoming request.
|
||||||
|
|
||||||
## Internationalization
|
## Internationalization
|
||||||
|
|
||||||
REST framework now includes a built-in set of translations, and supports internationalized error responses. This allows you to either change the default language, or to allow clients to specify the language via the `Accept-Language` header.
|
REST framework now includes a built-in set of translations, and [supports internationalized error responses][internationalization]. This allows you to either change the default language, or to allow clients to specify the language via the `Accept-Language` header.
|
||||||
|
|
||||||
You can change the default language by using the standard Django `LANGUAGE_CODE` setting:
|
You can change the default language by using the standard Django `LANGUAGE_CODE` setting:
|
||||||
|
|
||||||
|
@ -136,7 +145,7 @@ If you're building a new 1.8 project, then you should probably consider using `U
|
||||||
|
|
||||||
The serializer redesign in 3.0 did not include any public API for modifying how ModelSerializer classes automatically generate a set of fields from a given mode class. We've now re-introduced an API for this, allowing you to create new ModelSerializer base classes that behave differently, such as using a different default style for relationships.
|
The serializer redesign in 3.0 did not include any public API for modifying how ModelSerializer classes automatically generate a set of fields from a given mode class. We've now re-introduced an API for this, allowing you to create new ModelSerializer base classes that behave differently, such as using a different default style for relationships.
|
||||||
|
|
||||||
For more information, see the documentation on [customizing field mappings](../api-guide/serializers/#customizing-field-mappings) for ModelSerializer classes.
|
For more information, see the documentation on [customizing field mappings][customizing-field-mappings] for ModelSerializer classes.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -194,3 +203,7 @@ The next focus will be on HTML renderings of API output and will include:
|
||||||
This will either be made as a single 3.2 release, or split across two separate releases, with the HTML forms and filter controls coming in 3.2, and the admin-style interface coming in a 3.3 release.
|
This will either be made as a single 3.2 release, or split across two separate releases, with the HTML forms and filter controls coming in 3.2, and the admin-style interface coming in a 3.3 release.
|
||||||
|
|
||||||
[custom-exception-handler]: ../api-guide/exceptions.md#custom-exception-handling
|
[custom-exception-handler]: ../api-guide/exceptions.md#custom-exception-handling
|
||||||
|
[pagination]: ../api-guide/pagination.md
|
||||||
|
[versioning]: ../api-guide/versioning.md
|
||||||
|
[internationalization]: internationalization.md
|
||||||
|
[customizing-field-mappings]: ../api-guide/serializers.md#customizing-field-mappings
|
||||||
|
|
|
@ -35,7 +35,7 @@ To replace the default theme, add a `bootstrap_theme` block to your `api.html` a
|
||||||
<link rel="stylesheet" href="/path/to/my/bootstrap.css" type="text/css">
|
<link rel="stylesheet" href="/path/to/my/bootstrap.css" type="text/css">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
A suitable replacement theme can be generated using Bootstrap's [Customize Tool][bcustomize]. There are also pre-made themes available at [Bootswatch][bswatch]. To use any of the Bootswatch themes, simply download the theme's `bootstrap.min.css` file, add it to your project, and replace the default one as described above.
|
Suitable pre-made replacement themes are available at [Bootswatch][bswatch]. To use any of the Bootswatch themes, simply download the theme's `bootstrap.min.css` file, add it to your project, and replace the default one as described above.
|
||||||
|
|
||||||
You can also change the navbar variant, which by default is `navbar-inverse`, using the `bootstrap_navbar_variant` block. The empty `{% block bootstrap_navbar_variant %}{% endblock %}` will use the original Bootstrap navbar style.
|
You can also change the navbar variant, which by default is `navbar-inverse`, using the `bootstrap_navbar_variant` block. The empty `{% block bootstrap_navbar_variant %}{% endblock %}` will use the original Bootstrap navbar style.
|
||||||
|
|
||||||
|
|
|
@ -97,9 +97,15 @@ The following template should be used for the description of the issue, and serv
|
||||||
Release manager is @***.
|
Release manager is @***.
|
||||||
Pull request is #***.
|
Pull request is #***.
|
||||||
|
|
||||||
|
During development cycle:
|
||||||
|
|
||||||
|
- [ ] Upload the new content to be translated to [transifex](http://www.django-rest-framework.org/topics/project-management/#translations).
|
||||||
|
|
||||||
|
|
||||||
Checklist:
|
Checklist:
|
||||||
|
|
||||||
- [ ] Create pull request for [release notes](https://github.com/tomchristie/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/tomchristie/django-rest-framework/milestones/***).
|
- [ ] Create pull request for [release notes](https://github.com/tomchristie/django-rest-framework/blob/master/docs/topics/release-notes.md) based on the [*.*.* milestone](https://github.com/tomchristie/django-rest-framework/milestones/***).
|
||||||
|
- [ ] Update the translations from [transifex](http://www.django-rest-framework.org/topics/project-management/#translations).
|
||||||
- [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/__init__.py).
|
- [ ] Ensure the pull request increments the version to `*.*.*` in [`restframework/__init__.py`](https://github.com/tomchristie/django-rest-framework/blob/master/rest_framework/__init__.py).
|
||||||
- [ ] Confirm with @tomchristie that release is finalized and ready to go.
|
- [ ] Confirm with @tomchristie that release is finalized and ready to go.
|
||||||
- [ ] Ensure that release date is included in pull request.
|
- [ ] Ensure that release date is included in pull request.
|
||||||
|
|
|
@ -38,8 +38,73 @@ You can determine your currently installed version using `pip freeze`:
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 3.0.x series
|
## 3.1.x series
|
||||||
|
|
||||||
|
### 3.1.3
|
||||||
|
|
||||||
|
**Date**: [4th June 2015][3.1.3-milestone].
|
||||||
|
|
||||||
|
* Add `DurationField`. ([#2481][gh2481], [#2989][gh2989])
|
||||||
|
* Add `format` argument to `UUIDField`. ([#2788][gh2788], [#3000][gh3000])
|
||||||
|
* `MultipleChoiceField` empties incorrectly on a partial update using multipart/form-data ([#2993][gh2993], [#2894][gh2894])
|
||||||
|
* Fix a bug in options related to read-only `RelatedField`. ([#2981][gh2981], [#2811][gh2811])
|
||||||
|
* Fix nested serializers with `unique_together` relations. ([#2975][gh2975])
|
||||||
|
* Allow unexpected values for `ChoiceField`/`MultipleChoiceField` representations. ([#2839][gh2839], [#2940][gh2940])
|
||||||
|
* Rollback the transaction on error if `ATOMIC_REQUESTS` is set. ([#2887][gh2887], [#2034][gh2034])
|
||||||
|
* Set the action on a view when override_method regardless of its None-ness. ([#2933][gh2933])
|
||||||
|
* `DecimalField` accepts `2E+2` as 200 and validates decimal place correctly. ([#2948][gh2948], [#2947][gh2947])
|
||||||
|
* Support basic authentication with custom `UserModel` that change `username`. ([#2952][gh2952])
|
||||||
|
* `IPAddressField` improvements. ([#2747][gh2747], [#2618][gh2618], [#3008][gh3008])
|
||||||
|
* Improve `DecimalField` for easier subclassing. ([#2695][gh2695])
|
||||||
|
|
||||||
|
|
||||||
|
### 3.1.2
|
||||||
|
|
||||||
|
**Date**: [13rd May 2015][3.1.2-milestone].
|
||||||
|
|
||||||
|
* `DateField.to_representation` can handle str and empty values. ([#2656][gh2656], [#2687][gh2687], [#2869][gh2869])
|
||||||
|
* Use default reason phrases from HTTP standard. ([#2764][gh2764], [#2763][gh2763])
|
||||||
|
* Raise error when `ModelSerializer` used with abstract model. ([#2757][gh2757], [#2630][gh2630])
|
||||||
|
* Handle reversal of non-API view_name in `HyperLinkedRelatedField` ([#2724][gh2724], [#2711][gh2711])
|
||||||
|
* Dont require pk strictly for related fields. ([#2745][gh2745], [#2754][gh2754])
|
||||||
|
* Metadata detects null boolean field type. ([#2762][gh2762])
|
||||||
|
* Proper handling of depth in nested serializers. ([#2798][gh2798])
|
||||||
|
* Display viewset without paginator. ([#2807][gh2807])
|
||||||
|
* Don't check for deprecated `.model` attribute in permissions ([#2818][gh2818])
|
||||||
|
* Restrict integer field to integers and strings. ([#2835][gh2835], [#2836][gh2836])
|
||||||
|
* Improve `IntegerField` to use compiled decimal regex. ([#2853][gh2853])
|
||||||
|
* Prevent empty `queryset` to raise AssertionError. ([#2862][gh2862])
|
||||||
|
* `DjangoModelPermissions` rely on `get_queryset`. ([#2863][gh2863])
|
||||||
|
* Check `AcceptHeaderVersioning` with content negotiation in place. ([#2868][gh2868])
|
||||||
|
* Allow `DjangoObjectPermissions` to use views that define `get_queryset`. ([#2905][gh2905])
|
||||||
|
|
||||||
|
|
||||||
|
### 3.1.1
|
||||||
|
|
||||||
|
**Date**: [23rd March 2015][3.1.1-milestone].
|
||||||
|
|
||||||
|
* **Security fix**: Escape tab switching cookie name in browsable API.
|
||||||
|
* Display input forms in browsable API if `serializer_class` is used, even when `get_serializer` method does not exist on the view. ([#2743][gh2743])
|
||||||
|
* Use a password input for the AuthTokenSerializer. ([#2741][gh2741])
|
||||||
|
* Fix missing anchor closing tag after next button. ([#2691][gh2691])
|
||||||
|
* Fix `lookup_url_kwarg` handling in viewsets. ([#2685][gh2685], [#2591][gh2591])
|
||||||
|
* Fix problem with importing `rest_framework.views` in `apps.py` ([#2678][gh2678])
|
||||||
|
* LimitOffsetPagination raises `TypeError` if PAGE_SIZE not set ([#2667][gh2667], [#2700][gh2700])
|
||||||
|
* German translation for `min_value` field error message references `max_value`. ([#2645][gh2645])
|
||||||
|
* Remove `MergeDict`. ([#2640][gh2640])
|
||||||
|
* Support serializing unsaved models with related fields. ([#2637][gh2637], [#2641][gh2641])
|
||||||
|
* Allow blank/null on radio.html choices. ([#2631][gh2631])
|
||||||
|
|
||||||
|
|
||||||
|
### 3.1.0
|
||||||
|
|
||||||
|
**Date**: [5th March 2015][3.1.0-milestone].
|
||||||
|
|
||||||
|
For full details see the [3.1 release announcement](3.1-announcement.md).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.0.x series
|
||||||
|
|
||||||
### 3.0.5
|
### 3.0.5
|
||||||
|
|
||||||
|
@ -137,7 +202,7 @@ For full details see the [3.0 release announcement](3.0-announcement.md).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
For older release notes, [please see the version 2.x documentation](old-release-notes).
|
For older release notes, [please see the version 2.x documentation][old-release-notes].
|
||||||
|
|
||||||
[cite]: http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html
|
[cite]: http://www.catb.org/~esr/writings/cathedral-bazaar/cathedral-bazaar/ar01s04.html
|
||||||
[deprecation-policy]: #deprecation-policy
|
[deprecation-policy]: #deprecation-policy
|
||||||
|
@ -149,13 +214,17 @@ For older release notes, [please see the version 2.x documentation](old-release-
|
||||||
[2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
|
[2.1.0-notes]: https://groups.google.com/d/topic/django-rest-framework/Vv2M0CMY9bg/discussion
|
||||||
[ticket-582]: https://github.com/tomchristie/django-rest-framework/issues/582
|
[ticket-582]: https://github.com/tomchristie/django-rest-framework/issues/582
|
||||||
[rfc-6266]: http://tools.ietf.org/html/rfc6266#section-4.3
|
[rfc-6266]: http://tools.ietf.org/html/rfc6266#section-4.3
|
||||||
[old-release-notes]: http://tomchristie.github.io/rest-framework-2-docs/topics/release-notes#24x-series
|
[old-release-notes]: https://github.com/tomchristie/django-rest-framework/blob/version-2.4.x/docs/topics/release-notes.md
|
||||||
|
|
||||||
[3.0.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22
|
[3.0.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.1+Release%22
|
||||||
[3.0.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22
|
[3.0.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.2+Release%22
|
||||||
[3.0.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22
|
[3.0.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.3+Release%22
|
||||||
[3.0.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22
|
[3.0.4-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.4+Release%22
|
||||||
[3.0.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22
|
[3.0.5-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.0.5+Release%22
|
||||||
|
[3.1.0-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.0+Release%22
|
||||||
|
[3.1.1-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.1+Release%22
|
||||||
|
[3.1.2-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.2+Release%22
|
||||||
|
[3.1.3-milestone]: https://github.com/tomchristie/django-rest-framework/issues?q=milestone%3A%223.1.3+Release%22
|
||||||
|
|
||||||
<!-- 3.0.1 -->
|
<!-- 3.0.1 -->
|
||||||
[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013
|
[gh2013]: https://github.com/tomchristie/django-rest-framework/issues/2013
|
||||||
|
@ -254,3 +323,62 @@ For older release notes, [please see the version 2.x documentation](old-release-
|
||||||
[gh2519]: https://github.com/tomchristie/django-rest-framework/issues/2519
|
[gh2519]: https://github.com/tomchristie/django-rest-framework/issues/2519
|
||||||
[gh2524]: https://github.com/tomchristie/django-rest-framework/issues/2524
|
[gh2524]: https://github.com/tomchristie/django-rest-framework/issues/2524
|
||||||
[gh2530]: https://github.com/tomchristie/django-rest-framework/issues/2530
|
[gh2530]: https://github.com/tomchristie/django-rest-framework/issues/2530
|
||||||
|
<!-- 3.1.1 -->
|
||||||
|
[gh2691]: https://github.com/tomchristie/django-rest-framework/issues/2691
|
||||||
|
[gh2685]: https://github.com/tomchristie/django-rest-framework/issues/2685
|
||||||
|
[gh2591]: https://github.com/tomchristie/django-rest-framework/issues/2591
|
||||||
|
[gh2678]: https://github.com/tomchristie/django-rest-framework/issues/2678
|
||||||
|
[gh2667]: https://github.com/tomchristie/django-rest-framework/issues/2667
|
||||||
|
[gh2700]: https://github.com/tomchristie/django-rest-framework/issues/2700
|
||||||
|
[gh2645]: https://github.com/tomchristie/django-rest-framework/issues/2645
|
||||||
|
[gh2640]: https://github.com/tomchristie/django-rest-framework/issues/2640
|
||||||
|
[gh2637]: https://github.com/tomchristie/django-rest-framework/issues/2637
|
||||||
|
[gh2641]: https://github.com/tomchristie/django-rest-framework/issues/2641
|
||||||
|
[gh2631]: https://github.com/tomchristie/django-rest-framework/issues/2631
|
||||||
|
[gh2741]: https://github.com/tomchristie/django-rest-framework/issues/2641
|
||||||
|
[gh2743]: https://github.com/tomchristie/django-rest-framework/issues/2643
|
||||||
|
<!-- 3.1.2 -->
|
||||||
|
[gh2656]: https://github.com/tomchristie/django-rest-framework/issues/2656
|
||||||
|
[gh2687]: https://github.com/tomchristie/django-rest-framework/issues/2687
|
||||||
|
[gh2869]: https://github.com/tomchristie/django-rest-framework/issues/2869
|
||||||
|
[gh2764]: https://github.com/tomchristie/django-rest-framework/issues/2764
|
||||||
|
[gh2763]: https://github.com/tomchristie/django-rest-framework/issues/2763
|
||||||
|
[gh2757]: https://github.com/tomchristie/django-rest-framework/issues/2757
|
||||||
|
[gh2630]: https://github.com/tomchristie/django-rest-framework/issues/2630
|
||||||
|
[gh2724]: https://github.com/tomchristie/django-rest-framework/issues/2724
|
||||||
|
[gh2711]: https://github.com/tomchristie/django-rest-framework/issues/2711
|
||||||
|
[gh2745]: https://github.com/tomchristie/django-rest-framework/issues/2745
|
||||||
|
[gh2754]: https://github.com/tomchristie/django-rest-framework/issues/2754
|
||||||
|
[gh2762]: https://github.com/tomchristie/django-rest-framework/issues/2762
|
||||||
|
[gh2798]: https://github.com/tomchristie/django-rest-framework/issues/2798
|
||||||
|
[gh2807]: https://github.com/tomchristie/django-rest-framework/issues/2807
|
||||||
|
[gh2818]: https://github.com/tomchristie/django-rest-framework/issues/2818
|
||||||
|
[gh2835]: https://github.com/tomchristie/django-rest-framework/issues/2835
|
||||||
|
[gh2836]: https://github.com/tomchristie/django-rest-framework/issues/2836
|
||||||
|
[gh2853]: https://github.com/tomchristie/django-rest-framework/issues/2853
|
||||||
|
[gh2862]: https://github.com/tomchristie/django-rest-framework/issues/2862
|
||||||
|
[gh2863]: https://github.com/tomchristie/django-rest-framework/issues/2863
|
||||||
|
[gh2868]: https://github.com/tomchristie/django-rest-framework/issues/2868
|
||||||
|
[gh2905]: https://github.com/tomchristie/django-rest-framework/issues/2905
|
||||||
|
<!-- 3.1.3 -->
|
||||||
|
[gh2481]: https://github.com/tomchristie/django-rest-framework/issues/2481
|
||||||
|
[gh2989]: https://github.com/tomchristie/django-rest-framework/issues/2989
|
||||||
|
[gh2788]: https://github.com/tomchristie/django-rest-framework/issues/2788
|
||||||
|
[gh3000]: https://github.com/tomchristie/django-rest-framework/issues/3000
|
||||||
|
[gh2993]: https://github.com/tomchristie/django-rest-framework/issues/2993
|
||||||
|
[gh2894]: https://github.com/tomchristie/django-rest-framework/issues/2894
|
||||||
|
[gh2981]: https://github.com/tomchristie/django-rest-framework/issues/2981
|
||||||
|
[gh2811]: https://github.com/tomchristie/django-rest-framework/issues/2811
|
||||||
|
[gh2975]: https://github.com/tomchristie/django-rest-framework/issues/2975
|
||||||
|
[gh2839]: https://github.com/tomchristie/django-rest-framework/issues/2839
|
||||||
|
[gh2940]: https://github.com/tomchristie/django-rest-framework/issues/2940
|
||||||
|
[gh2887]: https://github.com/tomchristie/django-rest-framework/issues/2887
|
||||||
|
[gh2034]: https://github.com/tomchristie/django-rest-framework/issues/2034
|
||||||
|
[gh2933]: https://github.com/tomchristie/django-rest-framework/issues/2933
|
||||||
|
[gh2948]: https://github.com/tomchristie/django-rest-framework/issues/2948
|
||||||
|
[gh2947]: https://github.com/tomchristie/django-rest-framework/issues/2947
|
||||||
|
[gh2952]: https://github.com/tomchristie/django-rest-framework/issues/2952
|
||||||
|
[gh2747]: https://github.com/tomchristie/django-rest-framework/issues/2747
|
||||||
|
[gh2618]: https://github.com/tomchristie/django-rest-framework/issues/2618
|
||||||
|
[gh3008]: https://github.com/tomchristie/django-rest-framework/issues/3008
|
||||||
|
[gh2695]: https://github.com/tomchristie/django-rest-framework/issues/2695
|
||||||
|
|
|
@ -32,7 +32,7 @@ REST framework also includes [serialization] and [parser]/[renderer] components
|
||||||
|
|
||||||
## What REST framework doesn't provide.
|
## What REST framework doesn't provide.
|
||||||
|
|
||||||
What REST framework doesn't do is give you is machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labelled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope.
|
What REST framework doesn't do is give you machine readable hypermedia formats such as [HAL][hal], [Collection+JSON][collection], [JSON API][json-api] or HTML [microformats] by default, or the ability to auto-magically create fully HATEOAS style APIs that include hypermedia-based form descriptions and semantically labelled hyperlinks. Doing so would involve making opinionated choices about API design that should really remain outside of the framework's scope.
|
||||||
|
|
||||||
[cite]: http://vimeo.com/channels/restfest/page:2
|
[cite]: http://vimeo.com/channels/restfest/page:2
|
||||||
[dissertation]: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
|
[dissertation]: http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm
|
||||||
|
|
|
@ -206,10 +206,12 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
|
||||||
|
|
||||||
* [drf-compound-fields][drf-compound-fields] - Provides "compound" serializer fields, such as lists of simple values.
|
* [drf-compound-fields][drf-compound-fields] - Provides "compound" serializer fields, such as lists of simple values.
|
||||||
* [django-extra-fields][django-extra-fields] - Provides extra serializer fields.
|
* [django-extra-fields][django-extra-fields] - Provides extra serializer fields.
|
||||||
|
* [django-versatileimagefield][django-versatileimagefield] - Provides a drop-in replacement for Django's stock `ImageField` that makes it easy to serve images in multiple sizes/renditions from a single field. For DRF-specific implementation docs, [click here][django-versatileimagefield-drf-docs].
|
||||||
|
|
||||||
### Views
|
### Views
|
||||||
|
|
||||||
* [djangorestframework-bulk][djangorestframework-bulk] - Implements generic view mixins as well as some common concrete generic views to allow to apply bulk operations via API requests.
|
* [djangorestframework-bulk][djangorestframework-bulk] - Implements generic view mixins as well as some common concrete generic views to allow to apply bulk operations via API requests.
|
||||||
|
* [django-rest-multiple-models][django-rest-multiple-models] - Provides a generic view (and mixin) for sending multiple serialized models and/or querysets via a single API request.
|
||||||
|
|
||||||
### Routers
|
### Routers
|
||||||
|
|
||||||
|
@ -236,9 +238,12 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
|
||||||
* [djangorestrelationalhyperlink][djangorestrelationalhyperlink] - A hyperlinked serialiser that can can be used to alter relationships via hyperlinks, but otherwise like a hyperlink model serializer.
|
* [djangorestrelationalhyperlink][djangorestrelationalhyperlink] - A hyperlinked serialiser that can can be used to alter relationships via hyperlinks, but otherwise like a hyperlink model serializer.
|
||||||
* [django-rest-swagger][django-rest-swagger] - An API documentation generator for Swagger UI.
|
* [django-rest-swagger][django-rest-swagger] - An API documentation generator for Swagger UI.
|
||||||
* [django-rest-framework-proxy][django-rest-framework-proxy] - Proxy to redirect incoming request to another API server.
|
* [django-rest-framework-proxy][django-rest-framework-proxy] - Proxy to redirect incoming request to another API server.
|
||||||
* [gaiarestframework][gaiarestframework] - Utils for django-rest-framewok
|
* [gaiarestframework][gaiarestframework] - Utils for django-rest-framework
|
||||||
* [drf-extensions][drf-extensions] - A collection of custom extensions
|
* [drf-extensions][drf-extensions] - A collection of custom extensions
|
||||||
* [ember-django-adapter][ember-django-adapter] - An adapter for working with Ember.js
|
* [ember-django-adapter][ember-django-adapter] - An adapter for working with Ember.js
|
||||||
|
* [django-versatileimagefield][django-versatileimagefield] - Provides a drop-in replacement for Django's stock `ImageField` that makes it easy to serve images in multiple sizes/renditions from a single field. For DRF-specific implementation docs, [click here][django-versatileimagefield-drf-docs].
|
||||||
|
* [drf-tracking][drf-tracking] - Utilities to track requests to DRF API views.
|
||||||
|
* [django-rest-framework-braces][django-rest-framework-braces] - Collection of utilities for working with Django Rest Framework. The most notable ones are [FormSerializer](https://django-rest-framework-braces.readthedocs.org/en/latest/overview.html#formserializer) and [SerializerForm](https://django-rest-framework-braces.readthedocs.org/en/latest/overview.html#serializerform), which are adapters between DRF serializers and Django forms.
|
||||||
|
|
||||||
## Other Resources
|
## Other Resources
|
||||||
|
|
||||||
|
@ -265,6 +270,9 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
|
||||||
* [Web API performance: profiling Django REST framework][web-api-performance-profiling-django-rest-framework]
|
* [Web API performance: profiling Django REST framework][web-api-performance-profiling-django-rest-framework]
|
||||||
* [API Development with Django and Django REST Framework][api-development-with-django-and-django-rest-framework]
|
* [API Development with Django and Django REST Framework][api-development-with-django-and-django-rest-framework]
|
||||||
|
|
||||||
|
### Documentations
|
||||||
|
* [Classy Django REST Framework][cdrf.co]
|
||||||
|
|
||||||
[cite]: http://www.software-ecosystems.com/Software_Ecosystems/Ecosystems.html
|
[cite]: http://www.software-ecosystems.com/Software_Ecosystems/Ecosystems.html
|
||||||
[cookiecutter]: https://github.com/jpadilla/cookiecutter-django-rest-framework
|
[cookiecutter]: https://github.com/jpadilla/cookiecutter-django-rest-framework
|
||||||
[new-repo]: https://github.com/new
|
[new-repo]: https://github.com/new
|
||||||
|
@ -297,6 +305,7 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
|
||||||
[drf-compound-fields]: https://github.com/estebistec/drf-compound-fields
|
[drf-compound-fields]: https://github.com/estebistec/drf-compound-fields
|
||||||
[django-extra-fields]: https://github.com/Hipo/drf-extra-fields
|
[django-extra-fields]: https://github.com/Hipo/drf-extra-fields
|
||||||
[djangorestframework-bulk]: https://github.com/miki725/django-rest-framework-bulk
|
[djangorestframework-bulk]: https://github.com/miki725/django-rest-framework-bulk
|
||||||
|
[django-rest-multiple-models]: https://github.com/Axiologue/DjangoRestMultipleModels
|
||||||
[drf-nested-routers]: https://github.com/alanjds/drf-nested-routers
|
[drf-nested-routers]: https://github.com/alanjds/drf-nested-routers
|
||||||
[wq.db.rest]: http://wq.io/docs/about-rest
|
[wq.db.rest]: http://wq.io/docs/about-rest
|
||||||
[djangorestframework-msgpack]: https://github.com/juanriaza/django-rest-framework-msgpack
|
[djangorestframework-msgpack]: https://github.com/juanriaza/django-rest-framework-msgpack
|
||||||
|
@ -326,3 +335,8 @@ To submit new content, [open an issue][drf-create-issue] or [create a pull reque
|
||||||
[web-api-performance-profiling-django-rest-framework]: http://dabapps.com/blog/api-performance-profiling-django-rest-framework/
|
[web-api-performance-profiling-django-rest-framework]: http://dabapps.com/blog/api-performance-profiling-django-rest-framework/
|
||||||
[api-development-with-django-and-django-rest-framework]: https://bnotions.com/api-development-with-django-and-django-rest-framework/
|
[api-development-with-django-and-django-rest-framework]: https://bnotions.com/api-development-with-django-and-django-rest-framework/
|
||||||
[django-rest-auth]: https://github.com/Tivix/django-rest-auth/
|
[django-rest-auth]: https://github.com/Tivix/django-rest-auth/
|
||||||
|
[django-versatileimagefield]: https://github.com/WGBH/django-versatileimagefield
|
||||||
|
[django-versatileimagefield-drf-docs]:http://django-versatileimagefield.readthedocs.org/en/latest/drf_integration.html
|
||||||
|
[cdrf.co]:http://www.cdrf.co
|
||||||
|
[drf-tracking]: https://github.com/aschn/drf-tracking
|
||||||
|
[django-rest-framework-braces]: https://github.com/dealertrack/django-rest-framework-braces
|
||||||
|
|
|
@ -28,11 +28,11 @@ Some example output from our serializer.
|
||||||
|
|
||||||
{
|
{
|
||||||
'title': 'Leaving party preperations',
|
'title': 'Leaving party preperations',
|
||||||
'items': {
|
'items': [
|
||||||
{'text': 'Compile playlist', 'is_completed': True},
|
{'text': 'Compile playlist', 'is_completed': True},
|
||||||
{'text': 'Send invites', 'is_completed': False},
|
{'text': 'Send invites', 'is_completed': False},
|
||||||
{'text': 'Clean house', 'is_completed': False}
|
{'text': 'Clean house', 'is_completed': False}
|
||||||
}
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
Let's take a look at updating our nested one-to-many data structure.
|
Let's take a look at updating our nested one-to-many data structure.
|
||||||
|
|
|
@ -89,7 +89,6 @@ We'll also need to create an initial migration for our snippet model, and sync t
|
||||||
|
|
||||||
The first thing we need to get started on our Web API is to provide a way of serializing and deserializing the snippet instances into representations such as `json`. We can do this by declaring serializers that work very similar to Django's forms. Create a file in the `snippets` directory named `serializers.py` and add the following.
|
The first thing we need to get started on our Web API is to provide a way of serializing and deserializing the snippet instances into representations such as `json`. We can do this by declaring serializers that work very similar to Django's forms. Create a file in the `snippets` directory named `serializers.py` and add the following.
|
||||||
|
|
||||||
from django.forms import widgets
|
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
|
from snippets.models import Snippet, LANGUAGE_CHOICES, STYLE_CHOICES
|
||||||
|
|
||||||
|
@ -124,7 +123,7 @@ The first part of the serializer class defines the fields that get serialized/de
|
||||||
|
|
||||||
A serializer class is very similar to a Django `Form` class, and includes similar validation flags on the various fields, such as `required`, `max_length` and `default`.
|
A serializer class is very similar to a Django `Form` class, and includes similar validation flags on the various fields, such as `required`, `max_length` and `default`.
|
||||||
|
|
||||||
The field flags can also control how the serializer should be displayed in certain circumstances, such as when rendering to HTML. The `{'base_template': 'textarea.html'}` flag above is equivelent to using `widget=widgets.Textarea` on a Django `Form` class. This is particularly useful for controlling how the browsable API should be displayed, as we'll see later in the tutorial.
|
The field flags can also control how the serializer should be displayed in certain circumstances, such as when rendering to HTML. The `{'base_template': 'textarea.html'}` flag above is equivalent to using `widget=widgets.Textarea` on a Django `Form` class. This is particularly useful for controlling how the browsable API should be displayed, as we'll see later in the tutorial.
|
||||||
|
|
||||||
We can actually also save ourselves some time by using the `ModelSerializer` class, as we'll see later, but for now we'll keep our serializer definition explicit.
|
We can actually also save ourselves some time by using the `ModelSerializer` class, as we'll see later, but for now we'll keep our serializer definition explicit.
|
||||||
|
|
||||||
|
|
|
@ -108,7 +108,7 @@ and
|
||||||
|
|
||||||
Now update the `urls.py` file slightly, to append a set of `format_suffix_patterns` in addition to the existing URLs.
|
Now update the `urls.py` file slightly, to append a set of `format_suffix_patterns` in addition to the existing URLs.
|
||||||
|
|
||||||
from django.conf.urls import patterns, url
|
from django.conf.urls import url
|
||||||
from rest_framework.urlpatterns import format_suffix_patterns
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
from snippets import views
|
from snippets import views
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ See the [browsable api][browsable-api] topic for more information about the brow
|
||||||
|
|
||||||
In [tutorial part 3][tut-3], we'll start using class based views, and see how generic views reduce the amount of code we need to write.
|
In [tutorial part 3][tut-3], we'll start using class based views, and see how generic views reduce the amount of code we need to write.
|
||||||
|
|
||||||
[json-url]: http://example.com/api/items/4.json
|
[json-url]: http://example.com/api/items/4/.json
|
||||||
[devserver]: http://127.0.0.1:8000/snippets/
|
[devserver]: http://127.0.0.1:8000/snippets/
|
||||||
[browsable-api]: ../topics/browsable-api.md
|
[browsable-api]: ../topics/browsable-api.md
|
||||||
[tut-1]: 1-serialization.md
|
[tut-1]: 1-serialization.md
|
||||||
|
|
|
@ -18,7 +18,7 @@ Right now we have endpoints for 'snippets' and 'users', but we don't have a sing
|
||||||
'snippets': reverse('snippet-list', request=request, format=format)
|
'snippets': reverse('snippet-list', request=request, format=format)
|
||||||
})
|
})
|
||||||
|
|
||||||
Notice that we're using REST framework's `reverse` function in order to return fully-qualified URLs.
|
Two things should be noticed here. First, we're using REST framework's `reverse` function in order to return fully-qualified URLs; second, URL patterns are identified by convenience names that we will declare later on in our `snippets/urls.py`.
|
||||||
|
|
||||||
## Creating an endpoint for the highlighted snippets
|
## Creating an endpoint for the highlighted snippets
|
||||||
|
|
||||||
|
@ -104,9 +104,11 @@ If we're going to have a hyperlinked API, we need to make sure we name our URL p
|
||||||
* Our user serializer includes a field that refers to `'snippet-detail'`.
|
* Our user serializer includes a field that refers to `'snippet-detail'`.
|
||||||
* Our snippet and user serializers include `'url'` fields that by default will refer to `'{model_name}-detail'`, which in this case will be `'snippet-detail'` and `'user-detail'`.
|
* Our snippet and user serializers include `'url'` fields that by default will refer to `'{model_name}-detail'`, which in this case will be `'snippet-detail'` and `'user-detail'`.
|
||||||
|
|
||||||
After adding all those names into our URLconf, our final `snippets/urls.py` file should look something like this:
|
After adding all those names into our URLconf, our final `snippets/urls.py` file should look like this:
|
||||||
|
|
||||||
from django.conf.urls import url, include
|
from django.conf.urls import url, include
|
||||||
|
from rest_framework.urlpatterns import format_suffix_patterns
|
||||||
|
from snippets import views
|
||||||
|
|
||||||
# API endpoints
|
# API endpoints
|
||||||
urlpatterns = format_suffix_patterns([
|
urlpatterns = format_suffix_patterns([
|
||||||
|
@ -141,7 +143,7 @@ The list views for users and code snippets could end up returning quite a lot of
|
||||||
We can change the default list style to use pagination, by modifying our `tutorial/settings.py` file slightly. Add the following setting:
|
We can change the default list style to use pagination, by modifying our `tutorial/settings.py` file slightly. Add the following setting:
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'PAGINATE_BY': 10
|
'PAGE_SIZE': 10
|
||||||
}
|
}
|
||||||
|
|
||||||
Note that settings in REST framework are all namespaced into a single dictionary setting, named 'REST_FRAMEWORK', which helps keep them well separated from your other project settings.
|
Note that settings in REST framework are all namespaced into a single dictionary setting, named 'REST_FRAMEWORK', which helps keep them well separated from your other project settings.
|
||||||
|
|
|
@ -83,8 +83,6 @@ Rather than write multiple views we're grouping together all the common behavior
|
||||||
|
|
||||||
We can easily break these down into individual views if we need to, but using viewsets keeps the view logic nicely organized as well as being very concise.
|
We can easily break these down into individual views if we need to, but using viewsets keeps the view logic nicely organized as well as being very concise.
|
||||||
|
|
||||||
Notice that our viewset classes here are a little different from those in the [frontpage example][readme-example-api], as they include `queryset` and `serializer_class` attributes, instead of a `model` attribute.
|
|
||||||
|
|
||||||
For trivial cases you can simply set a `model` attribute on the `ViewSet` class and the serializer and queryset will be automatically generated for you. Setting the `queryset` and/or `serializer_class` attributes gives you more explicit control of the API behaviour, and is the recommended style for most applications.
|
For trivial cases you can simply set a `model` attribute on the `ViewSet` class and the serializer and queryset will be automatically generated for you. Setting the `queryset` and/or `serializer_class` attributes gives you more explicit control of the API behaviour, and is the recommended style for most applications.
|
||||||
|
|
||||||
## URLs
|
## URLs
|
||||||
|
@ -123,7 +121,7 @@ We'd also like to set a few global settings. We'd like to turn on pagination, a
|
||||||
|
|
||||||
REST_FRAMEWORK = {
|
REST_FRAMEWORK = {
|
||||||
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
|
'DEFAULT_PERMISSION_CLASSES': ('rest_framework.permissions.IsAdminUser',),
|
||||||
'PAGINATE_BY': 10
|
'PAGE_SIZE': 10
|
||||||
}
|
}
|
||||||
|
|
||||||
Okay, we're done.
|
Okay, we're done.
|
||||||
|
|
|
@ -1,216 +1,9 @@
|
||||||
<!DOCTYPE html>
|
{% extends "base.html" %}
|
||||||
<html lang="en">
|
|
||||||
|
|
||||||
<head>
|
{% block content %}
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
|
||||||
<meta charset="utf-8">
|
|
||||||
<title>Django REST framework - 404 - Page not found</title>
|
|
||||||
<link href="http://www.django-rest-framework.org/img/favicon.ico" rel="icon" type="image/x-icon">
|
|
||||||
<link rel="canonical" href="http://www.django-rest-framework.org/404" />
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<meta name="description" content="Django, API, REST, 404 - Page not found">
|
|
||||||
<meta name="author" content="Tom Christie">
|
|
||||||
|
|
||||||
<!-- Le styles -->
|
|
||||||
<link href="http://www.django-rest-framework.org/css/prettify.css" rel="stylesheet">
|
|
||||||
<link href="http://www.django-rest-framework.org/css/bootstrap.css" rel="stylesheet">
|
|
||||||
<link href="http://www.django-rest-framework.org/css/bootstrap-responsive.css" rel="stylesheet">
|
|
||||||
<link href="http://www.django-rest-framework.org/css/default.css" rel="stylesheet">
|
|
||||||
|
|
||||||
<!-- Le HTML5 shim, for IE6-8 support of HTML5 elements -->
|
|
||||||
<!--[if lt IE 9]>
|
|
||||||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
|
|
||||||
<![endif]-->
|
|
||||||
|
|
||||||
<script type="text/javascript">
|
|
||||||
var _gaq = _gaq || [];
|
|
||||||
_gaq.push(['_setAccount', 'UA-18852272-2']);
|
|
||||||
_gaq.push(['_trackPageview']);
|
|
||||||
|
|
||||||
(function() {
|
|
||||||
var ga = document.createElement('script');
|
|
||||||
ga.type = 'text/javascript';
|
|
||||||
ga.async = true;
|
|
||||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
|
||||||
var s = document.getElementsByTagName('script')[0];
|
|
||||||
s.parentNode.insertBefore(ga, s);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body onload="prettyPrint()" class="404-page">
|
|
||||||
|
|
||||||
<div class="wrapper">
|
|
||||||
|
|
||||||
<div class="navbar navbar-inverse navbar-fixed-top">
|
|
||||||
<div class="navbar-inner">
|
|
||||||
<div class="container-fluid">
|
|
||||||
<a class="repo-link btn btn-primary btn-small" href="https://github.com/tomchristie/django-rest-framework/tree/master">GitHub</a>
|
|
||||||
<a class="repo-link btn btn-inverse btn-small disabled" href="#">Next <i class="icon-arrow-right icon-white"></i></a>
|
|
||||||
<a class="repo-link btn btn-inverse btn-small disabled" href="#"><i class="icon-arrow-left icon-white"></i> Previous</a>
|
|
||||||
<a class="repo-link btn btn-inverse btn-small" href="#searchModal" data-toggle="modal"><i class="icon-search icon-white"></i> Search</a>
|
|
||||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
<span class="icon-bar"></span>
|
|
||||||
</a>
|
|
||||||
<a class="brand" href="http://www.django-rest-framework.org">Django REST framework</a>
|
|
||||||
<div class="nav-collapse collapse">
|
|
||||||
<ul class="nav">
|
|
||||||
<li><a href="http://www.django-rest-framework.org">Home</a></li>
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Tutorial <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/quickstart">Quickstart</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/1-serialization">1 - Serialization</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/2-requests-and-responses">2 - Requests and responses</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/3-class-based-views">3 - Class based views</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/4-authentication-and-permissions">4 - Authentication and permissions</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/5-relationships-and-hyperlinked-apis">5 - Relationships and hyperlinked APIs</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/tutorial/6-viewsets-and-routers">6 - Viewsets and routers</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">API Guide <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/requests">Requests</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/responses">Responses</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/views">Views</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/generic-views">Generic views</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/viewsets">Viewsets</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/routers">Routers</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/parsers">Parsers</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/renderers">Renderers</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/serializers">Serializers</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/fields">Serializer fields</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/relations">Serializer relations</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/authentication">Authentication</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/permissions">Permissions</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/throttling">Throttling</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/filtering">Filtering</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/pagination">Pagination</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/content-negotiation">Content negotiation</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/format-suffixes">Format suffixes</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/reverse">Returning URLs</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/exceptions">Exceptions</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/status-codes">Status codes</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/testing">Testing</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/api-guide/settings">Settings</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Topics <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/documenting-your-api">Documenting your API</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/ajax-csrf-cors">AJAX, CSRF & CORS</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/browser-enhancements">Browser enhancements</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/browsable-api">The Browsable API</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/rest-hypermedia-hateoas">REST, Hypermedia & HATEOAS</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/rest-framework-2-announcement">2.0 Announcement</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/2.2-announcement">2.2 Announcement</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/2.3-announcement">2.3 Announcement</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/release-notes">Release Notes</a></li>
|
|
||||||
<li><a href="http://www.django-rest-framework.org/topics/credits">Credits</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
<ul class="nav pull-right">
|
|
||||||
<!-- TODO
|
|
||||||
<li class="dropdown">
|
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Version: 2.0.0 <b class="caret"></b></a>
|
|
||||||
<ul class="dropdown-menu">
|
|
||||||
<li><a href="#">Trunk</a></li>
|
|
||||||
<li><a href="#">2.0.0</a></li>
|
|
||||||
</ul>
|
|
||||||
</li>
|
|
||||||
-->
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<!--/.nav-collapse -->
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="body-content">
|
|
||||||
<div class="container-fluid">
|
|
||||||
<!-- Search Modal -->
|
|
||||||
<div id="searchModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-header">
|
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
|
||||||
<h3 id="myModalLabel">Documentation search</h3>
|
|
||||||
</div>
|
|
||||||
<div class="modal-body">
|
|
||||||
<!-- Custom google search -->
|
|
||||||
<script>
|
|
||||||
(function() {
|
|
||||||
var cx = '015016005043623903336:rxraeohqk6w';
|
|
||||||
var gcse = document.createElement('script');
|
|
||||||
gcse.type = 'text/javascript';
|
|
||||||
gcse.async = true;
|
|
||||||
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
|
|
||||||
'//www.google.com/cse/cse.js?cx=' + cx;
|
|
||||||
var s = document.getElementsByTagName('script')[0];
|
|
||||||
s.parentNode.insertBefore(gcse, s);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<gcse:search></gcse:search>
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="row-fluid">
|
|
||||||
<div id="main-content" class="span12">
|
|
||||||
<h1 id="404-page-not-found" style="text-align: center">404</h1>
|
<h1 id="404-page-not-found" style="text-align: center">404</h1>
|
||||||
<p style="text-align: center"><strong>Page not found</strong>
|
<p style="text-align: center"><strong>Page not found</strong></p>
|
||||||
</p>
|
|
||||||
<p style="text-align: center">Try the <a href="http://www.django-rest-framework.org/">homepage</a>, or <a href="#searchModal" data-toggle="modal">search the documentation</a>.</p>
|
<p style="text-align: center">Try the <a href="http://www.django-rest-framework.org/">homepage</a>, or <a href="#searchModal" data-toggle="modal">search the documentation</a>.</p>
|
||||||
</div>
|
|
||||||
<!--/span-->
|
|
||||||
</div>
|
|
||||||
<!--/row-->
|
|
||||||
</div>
|
|
||||||
<!--/.fluid-container-->
|
|
||||||
</div>
|
|
||||||
<!--/.body content-->
|
|
||||||
|
|
||||||
<div id="push"></div>
|
{% endblock %}
|
||||||
</div>
|
|
||||||
<!--/.wrapper -->
|
|
||||||
|
|
||||||
<footer class="span12">
|
|
||||||
<p>Sponsored by <a href="http://dabapps.com/">DabApps</a>.</a>
|
|
||||||
</p>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<!-- Le javascript
|
|
||||||
================================================== -->
|
|
||||||
<!-- Placed at the end of the document so the pages load faster -->
|
|
||||||
<script src="http://www.django-rest-framework.org/js/jquery-1.8.1-min.js"></script>
|
|
||||||
<script src="http://www.django-rest-framework.org/js/prettify-1.0.js"></script>
|
|
||||||
<script src="http://www.django-rest-framework.org/js/bootstrap-2.1.1-min.js"></script>
|
|
||||||
<script>
|
|
||||||
//$('.side-nav').scrollspy()
|
|
||||||
var shiftWindow = function() {
|
|
||||||
scrollBy(0, -50)
|
|
||||||
};
|
|
||||||
if (location.hash) shiftWindow();
|
|
||||||
window.addEventListener("hashchange", shiftWindow);
|
|
||||||
|
|
||||||
$('.dropdown-menu').on('click touchstart', function(event) {
|
|
||||||
event.stopPropagation();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Dynamically force sidenav to no higher than browser window
|
|
||||||
$('.side-nav').css('max-height', window.innerHeight - 130);
|
|
||||||
|
|
||||||
$(function() {
|
|
||||||
$(window).resize(function() {
|
|
||||||
$('.side-nav').css('max-height', window.innerHeight - 130);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
|
|
||||||
</html>
|
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>{{ page_title }}</title>
|
<title>{% if page_title %}{{ page_title }} - {% endif %}{{ site_name }}</title>
|
||||||
<link href="{{ base_url }}/img/favicon.ico" rel="icon" type="image/x-icon">
|
<link href="{{ base_url }}/img/favicon.ico" rel="icon" type="image/x-icon">
|
||||||
<link rel="canonical" href="{{ canonical_url }}" />
|
<link rel="canonical" href="{{ canonical_url }}" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<meta name="description" content="Django, API, REST, {{ current_page.title }}">
|
<meta name="description" content="Django, API, REST{% if current_page %}, {{ current_page.title }}{% endif %}">
|
||||||
<meta name="author" content="Tom Christie">
|
<meta name="author" content="Tom Christie">
|
||||||
|
|
||||||
<!-- Le styles -->
|
<!-- Le styles -->
|
||||||
|
@ -54,37 +54,27 @@
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body onload="prettyPrint()" class="{% if current_page.is_homepage %}index{% endif %}-page">
|
<body onload="prettyPrint()" class="{% if current_page and current_page.is_homepage %}index{% endif %}-page">
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
|
|
||||||
{% include "nav.html" %}
|
{% include "nav.html" %}
|
||||||
|
|
||||||
<div class="body-content">
|
<div class="body-content">
|
||||||
<div class="container-fluid">
|
<div class="container-fluid">
|
||||||
|
|
||||||
<!-- Search Modal -->
|
<!-- Search Modal -->
|
||||||
<div id="searchModal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
<div id="mkdocs_search_modal" class="modal hide fade" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h3 id="myModalLabel">Documentation search</h3>
|
<h3 id="myModalLabel">Documentation search</h3>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<!-- Custom google search -->
|
<form role="form">
|
||||||
<script>
|
<div class="form-group">
|
||||||
(function() {
|
<input type="text" name="q" class="form-control" placeholder="Search..." id="mkdocs-search-query">
|
||||||
var cx = '015016005043623903336:rxraeohqk6w';
|
</div>
|
||||||
var gcse = document.createElement('script');
|
</form>
|
||||||
gcse.type = 'text/javascript';
|
<div id="mkdocs-search-results"></div>
|
||||||
gcse.async = true;
|
|
||||||
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
|
|
||||||
'//www.google.com/cse/cse.js?cx=' + cx;
|
|
||||||
var s = document.getElementsByTagName('script')[0];
|
|
||||||
s.parentNode.insertBefore(gcse, s);
|
|
||||||
})();
|
|
||||||
</script>
|
|
||||||
<gcse:search></gcse:search>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="modal-footer">
|
<div class="modal-footer">
|
||||||
|
@ -93,26 +83,17 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="row-fluid">
|
<div class="row-fluid">
|
||||||
|
|
||||||
<div class="span3">
|
<div class="span3">
|
||||||
<!-- TODO
|
|
||||||
<p style="margin-top: -12px">
|
|
||||||
<a class="btn btn-mini btn-primary" style="width: 60px">« previous</a>
|
|
||||||
<a class="btn btn-mini btn-primary" style="float: right; margin-right: 8px; width: 60px;">next »</a>
|
|
||||||
</p>
|
|
||||||
-->
|
|
||||||
<div id="table-of-contents">
|
<div id="table-of-contents">
|
||||||
<ul class="nav nav-list side-nav well sidebar-nav-fixed">
|
<ul class="nav nav-list side-nav well sidebar-nav-fixed">
|
||||||
|
{% if current_page and current_page.is_homepage %}
|
||||||
{% if current_page.is_homepage %}
|
|
||||||
<li class="main">
|
<li class="main">
|
||||||
<a href="#">Django REST framework</a>
|
<a href="#">Django REST framework</a>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% for toc_item in toc %}
|
{% for toc_item in toc %}
|
||||||
|
<li class="{% if current_page and not current_page.is_homepage %}main{% endif %}">
|
||||||
<li class="{% if not current_page.is_homepage %}main{% endif %}">
|
|
||||||
<a href="{{ toc_item.url }}">{{ toc_item.title }}</a>
|
<a href="{{ toc_item.url }}">{{ toc_item.title }}</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
|
@ -121,22 +102,21 @@
|
||||||
<a href="{{ toc_item.url }}">{{ toc_item.title }}</a>
|
<a href="{{ toc_item.url }}">{{ toc_item.title }}</a>
|
||||||
</li>
|
</li>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% if current_page.is_homepage %}
|
{% if current_page and current_page.is_homepage %}
|
||||||
<div class="promo">
|
<div class="promo">
|
||||||
<hr/>
|
<hr/>
|
||||||
<script type="text/javascript" src="//cdn.fusionads.net/fusion.js?zoneid=1332&serve=C6SDP2Y&placement=djangorestframework" id="_fusionads_js"></script>
|
<script type="text/javascript" src="//cdn.fusionads.net/fusion.js?zoneid=1332&serve=C6SDP2Y&placement=djangorestframework" id="_fusionads_js"></script>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="main-content" class="span9">
|
<div id="main-content" class="span9">
|
||||||
|
{% block content %}
|
||||||
{% if meta.source %}
|
{% if meta.source %}
|
||||||
{% for filename in meta.source %}
|
{% for filename in meta.source %}
|
||||||
<a class="github" href="https://github.com/tomchristie/django-rest-framework/tree/master/rest_framework/{{ filename }}">
|
<a class="github" href="https://github.com/tomchristie/django-rest-framework/tree/master/rest_framework/{{ filename }}">
|
||||||
|
@ -146,17 +126,14 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{{ content }}
|
{{ content }}
|
||||||
</div>
|
{% endblock %}
|
||||||
<!--/span-->
|
|
||||||
</div>
|
</div> <!--/span-->
|
||||||
<!--/row-->
|
</div> <!--/row-->
|
||||||
</div>
|
</div> <!--/.fluid-container-->
|
||||||
<!--/.fluid-container-->
|
</div> <!--/.body content-->
|
||||||
</div>
|
|
||||||
<!--/.body content-->
|
|
||||||
<div id="push"></div>
|
<div id="push"></div>
|
||||||
</div>
|
</div> <!--/.wrapper -->
|
||||||
<!--/.wrapper -->
|
|
||||||
|
|
||||||
<footer class="span12">
|
<footer class="span12">
|
||||||
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</a>
|
<p>Documentation built with <a href="http://www.mkdocs.org/">MkDocs</a>.</a>
|
||||||
|
@ -169,13 +146,15 @@
|
||||||
<script src="{{ base_url }}/js/jquery-1.8.1-min.js"></script>
|
<script src="{{ base_url }}/js/jquery-1.8.1-min.js"></script>
|
||||||
<script src="{{ base_url }}/js/prettify-1.0.js"></script>
|
<script src="{{ base_url }}/js/prettify-1.0.js"></script>
|
||||||
<script src="{{ base_url }}/js/bootstrap-2.1.1-min.js"></script>
|
<script src="{{ base_url }}/js/bootstrap-2.1.1-min.js"></script>
|
||||||
|
<script>var base_url = '{{ base_url }}';</script>
|
||||||
|
<script src="{{ base_url }}/mkdocs/js/require.js"></script>
|
||||||
<script src="{{ base_url }}/js/theme.js"></script>
|
<script src="{{ base_url }}/js/theme.js"></script>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
//$('.side-nav').scrollspy()
|
|
||||||
var shiftWindow = function() {
|
var shiftWindow = function() {
|
||||||
scrollBy(0, -50)
|
scrollBy(0, -50)
|
||||||
};
|
};
|
||||||
|
|
||||||
if (location.hash) shiftWindow();
|
if (location.hash) shiftWindow();
|
||||||
window.addEventListener("hashchange", shiftWindow);
|
window.addEventListener("hashchange", shiftWindow);
|
||||||
|
|
||||||
|
@ -183,12 +162,12 @@
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Dynamically force sidenav to no higher than browser window
|
// Dynamically force sidenav/dropdown to no higher than browser window
|
||||||
$('.side-nav').css('max-height', window.innerHeight - 130);
|
$('.side-nav, .dropdown-menu').css('max-height', window.innerHeight - 130);
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
$(window).resize(function() {
|
$(window).resize(function() {
|
||||||
$('.side-nav').css('max-height', window.innerHeight - 130);
|
$('.side-nav, .dropdown-menu').css('max-height', window.innerHeight - 130);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
|
@ -6,6 +6,7 @@ pre {
|
||||||
|
|
||||||
.dropdown .dropdown-menu {
|
.dropdown .dropdown-menu {
|
||||||
display: none;
|
display: none;
|
||||||
|
overflow-y: scroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dropdown.open .dropdown-menu {
|
.dropdown.open .dropdown-menu {
|
||||||
|
@ -36,15 +37,8 @@ body.index-page #main-content iframe.github-star-button {
|
||||||
margin-right: -15px;
|
margin-right: -15px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tweet button */
|
/* Travis CI and PyPI badge */
|
||||||
body.index-page #main-content iframe.twitter-share-button {
|
body.index-page #main-content img.status-badge {
|
||||||
float: right;
|
|
||||||
margin-top: -12px;
|
|
||||||
margin-right: 8px;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Travis CI badge */
|
|
||||||
body.index-page #main-content img.travis-build-image {
|
|
||||||
float: right;
|
float: right;
|
||||||
margin-right: 8px;
|
margin-right: 8px;
|
||||||
margin-top: -11px;
|
margin-top: -11px;
|
||||||
|
@ -415,3 +409,7 @@ ul.sponsor {
|
||||||
list-style: none;
|
list-style: none;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#mkdocs_search_modal article p{
|
||||||
|
word-wrap: break-word;
|
||||||
|
}
|
||||||
|
|
|
@ -1,5 +1,35 @@
|
||||||
|
function getSearchTerm()
|
||||||
|
{
|
||||||
|
var sPageURL = window.location.search.substring(1);
|
||||||
|
var sURLVariables = sPageURL.split('&');
|
||||||
|
for (var i = 0; i < sURLVariables.length; i++)
|
||||||
|
{
|
||||||
|
var sParameterName = sURLVariables[i].split('=');
|
||||||
|
if (sParameterName[0] == 'q')
|
||||||
|
{
|
||||||
|
return sParameterName[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$(function() {
|
$(function() {
|
||||||
|
|
||||||
|
var initialise_search = function(){
|
||||||
|
require.config({"baseUrl":"/mkdocs/js"});
|
||||||
|
require(["search",]);
|
||||||
|
}
|
||||||
|
|
||||||
|
var search_term = getSearchTerm();
|
||||||
|
if(search_term){
|
||||||
|
$('#mkdocs_search_modal').modal();
|
||||||
|
}
|
||||||
|
|
||||||
$('pre code').parent().addClass('prettyprint well');
|
$('pre code').parent().addClass('prettyprint well');
|
||||||
|
|
||||||
|
$(document).on("submit", "#mkdocs_search_modal form", function (e) {
|
||||||
|
$("#mkdocs-search-results").html("Searching...");
|
||||||
|
initialise_search();
|
||||||
|
return false;
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<a class="repo-link btn btn-inverse btn-small {% if not previous_page %}disabled{% endif %}" rel="next" {% if previous_page %}href="{{ previous_page.url }}"{% endif %}>
|
<a class="repo-link btn btn-inverse btn-small {% if not previous_page %}disabled{% endif %}" rel="next" {% if previous_page %}href="{{ previous_page.url }}"{% endif %}>
|
||||||
<i class="icon-arrow-left icon-white"></i> Previous
|
<i class="icon-arrow-left icon-white"></i> Previous
|
||||||
</a>
|
</a>
|
||||||
<a class="repo-link btn btn-inverse btn-small" href="#searchModal" data-toggle="modal"><i class="icon-search icon-white"></i> Search</a>
|
<a id="search_modal_show" class="repo-link btn btn-inverse btn-small" href="#mkdocs_search_modal" data-toggle="modal" data-target="#mkdocs_search_modal"><i class="icon-search icon-white"></i> Search</a>
|
||||||
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
<span class="icon-bar"></span>
|
<span class="icon-bar"></span>
|
||||||
|
@ -19,7 +19,6 @@
|
||||||
{% if include_nav %}
|
{% if include_nav %}
|
||||||
<!-- Main navigation -->
|
<!-- Main navigation -->
|
||||||
<ul class="nav navbar-nav">
|
<ul class="nav navbar-nav">
|
||||||
<li {% if current_page.is_homepage %}class="active"{% endif %}><a href="/">Home</a></li>
|
|
||||||
{% for nav_item in nav %} {% if nav_item.children %}
|
{% for nav_item in nav %} {% if nav_item.children %}
|
||||||
<li class="dropdown{% if nav_item.active %} active{% endif %}">
|
<li class="dropdown{% if nav_item.active %} active{% endif %}">
|
||||||
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ nav_item.title }} <b class="caret"></b></a>
|
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{ nav_item.title }} <b class="caret"></b></a>
|
||||||
|
|
97
mkdocs.yml
97
mkdocs.yml
|
@ -7,50 +7,53 @@ repo_url: https://github.com/tomchristie/django-rest-framework
|
||||||
theme_dir: docs_theme
|
theme_dir: docs_theme
|
||||||
|
|
||||||
pages:
|
pages:
|
||||||
- ['index.md', 'Home']
|
- Home: 'index.md'
|
||||||
- ['tutorial/quickstart.md', 'Tutorial', 'Quickstart']
|
- Tutorial:
|
||||||
- ['tutorial/1-serialization.md', 'Tutorial', '1 - Serialization']
|
- 'Quickstart': 'tutorial/quickstart.md'
|
||||||
- ['tutorial/2-requests-and-responses.md', 'Tutorial', '2 - Requests and responses']
|
- '1 - Serialization': 'tutorial/1-serialization.md'
|
||||||
- ['tutorial/3-class-based-views.md', 'Tutorial', '3 - Class based views']
|
- '2 - Requests and responses': 'tutorial/2-requests-and-responses.md'
|
||||||
- ['tutorial/4-authentication-and-permissions.md', 'Tutorial', '4 - Authentication and permissions']
|
- '3 - Class based views': 'tutorial/3-class-based-views.md'
|
||||||
- ['tutorial/5-relationships-and-hyperlinked-apis.md', 'Tutorial', '5 - Relationships and hyperlinked APIs']
|
- '4 - Authentication and permissions': 'tutorial/4-authentication-and-permissions.md'
|
||||||
- ['tutorial/6-viewsets-and-routers.md', 'Tutorial', '6 - Viewsets and routers']
|
- '5 - Relationships and hyperlinked APIs': 'tutorial/5-relationships-and-hyperlinked-apis.md'
|
||||||
- ['api-guide/requests.md', 'API Guide', 'Requests']
|
- '6 - Viewsets and routers': 'tutorial/6-viewsets-and-routers.md'
|
||||||
- ['api-guide/responses.md', 'API Guide', 'Responses']
|
- API Guide:
|
||||||
- ['api-guide/views.md', 'API Guide', 'Views']
|
- 'Requests': 'api-guide/requests.md'
|
||||||
- ['api-guide/generic-views.md', 'API Guide', 'Generic views']
|
- 'Responses': 'api-guide/responses.md'
|
||||||
- ['api-guide/viewsets.md', 'API Guide', 'Viewsets']
|
- 'Views': 'api-guide/views.md'
|
||||||
- ['api-guide/routers.md', 'API Guide', 'Routers']
|
- 'Generic views': 'api-guide/generic-views.md'
|
||||||
- ['api-guide/parsers.md', 'API Guide', 'Parsers']
|
- 'Viewsets': 'api-guide/viewsets.md'
|
||||||
- ['api-guide/renderers.md', 'API Guide', 'Renderers']
|
- 'Routers': 'api-guide/routers.md'
|
||||||
- ['api-guide/serializers.md', 'API Guide', 'Serializers']
|
- 'Parsers': 'api-guide/parsers.md'
|
||||||
- ['api-guide/fields.md', 'API Guide', 'Serializer fields']
|
- 'Renderers': 'api-guide/renderers.md'
|
||||||
- ['api-guide/relations.md', 'API Guide', 'Serializer relations']
|
- 'Serializers': 'api-guide/serializers.md'
|
||||||
- ['api-guide/validators.md', 'API Guide', 'Validators']
|
- 'Serializer fields': 'api-guide/fields.md'
|
||||||
- ['api-guide/authentication.md', 'API Guide', 'Authentication']
|
- 'Serializer relations': 'api-guide/relations.md'
|
||||||
- ['api-guide/permissions.md', 'API Guide', 'Permissions']
|
- 'Validators': 'api-guide/validators.md'
|
||||||
- ['api-guide/throttling.md', 'API Guide', 'Throttling']
|
- 'Authentication': 'api-guide/authentication.md'
|
||||||
- ['api-guide/filtering.md', 'API Guide', 'Filtering']
|
- 'Permissions': 'api-guide/permissions.md'
|
||||||
- ['api-guide/pagination.md', 'API Guide', 'Pagination']
|
- 'Throttling': 'api-guide/throttling.md'
|
||||||
- ['api-guide/versioning.md', 'API Guide', 'Versioning']
|
- 'Filtering': 'api-guide/filtering.md'
|
||||||
- ['api-guide/content-negotiation.md', 'API Guide', 'Content negotiation']
|
- 'Pagination': 'api-guide/pagination.md'
|
||||||
- ['api-guide/metadata.md', 'API Guide', 'Metadata']
|
- 'Versioning': 'api-guide/versioning.md'
|
||||||
- ['api-guide/format-suffixes.md', 'API Guide', 'Format suffixes']
|
- 'Content negotiation': 'api-guide/content-negotiation.md'
|
||||||
- ['api-guide/reverse.md', 'API Guide', 'Returning URLs']
|
- 'Metadata': 'api-guide/metadata.md'
|
||||||
- ['api-guide/exceptions.md', 'API Guide', 'Exceptions']
|
- 'Format suffixes': 'api-guide/format-suffixes.md'
|
||||||
- ['api-guide/status-codes.md', 'API Guide', 'Status codes']
|
- 'Returning URLs': 'api-guide/reverse.md'
|
||||||
- ['api-guide/testing.md', 'API Guide', 'Testing']
|
- 'Exceptions': 'api-guide/exceptions.md'
|
||||||
- ['api-guide/settings.md', 'API Guide', 'Settings']
|
- 'Status codes': 'api-guide/status-codes.md'
|
||||||
- ['topics/documenting-your-api.md', 'Topics', 'Documenting your API']
|
- 'Testing': 'api-guide/testing.md'
|
||||||
- ['topics/internationalization.md', 'Topics', 'Internationalization']
|
- 'Settings': 'api-guide/settings.md'
|
||||||
- ['topics/ajax-csrf-cors.md', 'Topics', 'AJAX, CSRF & CORS']
|
- Topics:
|
||||||
- ['topics/browser-enhancements.md', 'Topics',]
|
- 'Documenting your API': 'topics/documenting-your-api.md'
|
||||||
- ['topics/browsable-api.md', 'Topics', 'The Browsable API']
|
- 'Internationalization': 'topics/internationalization.md'
|
||||||
- ['topics/rest-hypermedia-hateoas.md', 'Topics', 'REST, Hypermedia & HATEOAS']
|
- 'AJAX, CSRF & CORS': 'topics/ajax-csrf-cors.md'
|
||||||
- ['topics/third-party-resources.md', 'Topics', 'Third Party Resources']
|
- 'Browser Enhancements': 'topics/browser-enhancements.md'
|
||||||
- ['topics/contributing.md', 'Topics', 'Contributing to REST framework']
|
- 'The Browsable API': 'topics/browsable-api.md'
|
||||||
- ['topics/project-management.md', 'Topics', 'Project management']
|
- 'REST, Hypermedia & HATEOAS': 'topics/rest-hypermedia-hateoas.md'
|
||||||
- ['topics/3.0-announcement.md', 'Topics', '3.0 Announcement']
|
- 'Third Party Resources': 'topics/third-party-resources.md'
|
||||||
- ['topics/3.1-announcement.md', 'Topics', '3.1 Announcement']
|
- 'Contributing to REST framework': 'topics/contributing.md'
|
||||||
- ['topics/kickstarter-announcement.md', 'Topics', 'Kickstarter Announcement']
|
- 'Project management': 'topics/project-management.md'
|
||||||
- ['topics/release-notes.md', 'Topics', 'Release Notes']
|
- '3.0 Announcement': 'topics/3.0-announcement.md'
|
||||||
|
- '3.1 Announcement': 'topics/3.1-announcement.md'
|
||||||
|
- 'Kickstarter Announcement': 'topics/kickstarter-announcement.md'
|
||||||
|
- 'Release Notes': 'topics/release-notes.md'
|
||||||
|
|
|
@ -1,3 +1,6 @@
|
||||||
# PEP8 code linting, which we run on all commits.
|
# PEP8 code linting, which we run on all commits.
|
||||||
flake8==2.3.0
|
flake8==2.4.0
|
||||||
pep8==1.6.2
|
pep8==1.5.7
|
||||||
|
|
||||||
|
# Sort and lint imports
|
||||||
|
isort==3.9.6
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
# MkDocs to build our documentation.
|
# MkDocs to build our documentation.
|
||||||
mkdocs==0.11.1
|
mkdocs==0.13.2
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# Optional packages which may be used with REST framework.
|
# Optional packages which may be used with REST framework.
|
||||||
markdown==2.5.2
|
markdown==2.5.2
|
||||||
django-guardian==1.2.5
|
django-guardian==1.3.0
|
||||||
django-filter==0.9.2
|
django-filter==0.10.0
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
# PyTest for running the tests.
|
# PyTest for running the tests.
|
||||||
pytest==2.6.4
|
pytest==2.6.4
|
||||||
pytest-django==2.8.0
|
pytest-django==2.8.0
|
||||||
|
pytest-cov==1.8.1
|
||||||
|
|
|
@ -8,7 +8,7 @@ ______ _____ _____ _____ __
|
||||||
"""
|
"""
|
||||||
|
|
||||||
__title__ = 'Django REST framework'
|
__title__ = 'Django REST framework'
|
||||||
__version__ = '3.1.0'
|
__version__ = '3.1.3'
|
||||||
__author__ = 'Tom Christie'
|
__author__ = 'Tom Christie'
|
||||||
__license__ = 'BSD 2-Clause'
|
__license__ = 'BSD 2-Clause'
|
||||||
__copyright__ = 'Copyright 2011-2015 Tom Christie'
|
__copyright__ = 'Copyright 2011-2015 Tom Christie'
|
||||||
|
|
|
@ -2,12 +2,16 @@
|
||||||
Provides various authentication policies.
|
Provides various authentication policies.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
from django.contrib.auth import authenticate
|
from django.contrib.auth import authenticate
|
||||||
from django.middleware.csrf import CsrfViewMiddleware
|
from django.middleware.csrf import CsrfViewMiddleware
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import exceptions, HTTP_HEADER_ENCODING
|
|
||||||
|
from rest_framework import HTTP_HEADER_ENCODING, exceptions
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
from rest_framework.compat import get_user_model
|
||||||
|
|
||||||
|
|
||||||
def get_authorization_header(request):
|
def get_authorization_header(request):
|
||||||
|
@ -85,7 +89,12 @@ class BasicAuthentication(BaseAuthentication):
|
||||||
"""
|
"""
|
||||||
Authenticate the userid and password against username and password.
|
Authenticate the userid and password against username and password.
|
||||||
"""
|
"""
|
||||||
user = authenticate(username=userid, password=password)
|
username_field = getattr(get_user_model(), 'USERNAME_FIELD', 'username')
|
||||||
|
credentials = {
|
||||||
|
username_field: userid,
|
||||||
|
'password': password
|
||||||
|
}
|
||||||
|
user = authenticate(**credentials)
|
||||||
|
|
||||||
if user is None:
|
if user is None:
|
||||||
raise exceptions.AuthenticationFailed(_('Invalid username/password.'))
|
raise exceptions.AuthenticationFailed(_('Invalid username/password.'))
|
||||||
|
@ -164,7 +173,13 @@ class TokenAuthentication(BaseAuthentication):
|
||||||
msg = _('Invalid token header. Token string should not contain spaces.')
|
msg = _('Invalid token header. Token string should not contain spaces.')
|
||||||
raise exceptions.AuthenticationFailed(msg)
|
raise exceptions.AuthenticationFailed(msg)
|
||||||
|
|
||||||
return self.authenticate_credentials(auth[1])
|
try:
|
||||||
|
token = auth[1].decode()
|
||||||
|
except UnicodeError:
|
||||||
|
msg = _('Invalid token header. Token string should not contain invalid characters.')
|
||||||
|
raise exceptions.AuthenticationFailed(msg)
|
||||||
|
|
||||||
|
return self.authenticate_credentials(token)
|
||||||
|
|
||||||
def authenticate_credentials(self, key):
|
def authenticate_credentials(self, key):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from django.contrib import admin
|
from django.contrib import admin
|
||||||
|
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db import models, migrations
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
|
||||||
|
|
||||||
class Migration(migrations.Migration):
|
class Migration(migrations.Migration):
|
||||||
|
|
|
@ -5,7 +5,6 @@ from django.conf import settings
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
|
|
||||||
|
|
||||||
# Prior to Django 1.5, the AUTH_USER_MODEL setting does not exist.
|
# Prior to Django 1.5, the AUTH_USER_MODEL setting does not exist.
|
||||||
# Note that we don't perform this code in the compat module due to
|
# Note that we don't perform this code in the compat module due to
|
||||||
# bug report #1297
|
# bug report #1297
|
||||||
|
|
|
@ -6,7 +6,7 @@ from rest_framework import exceptions, serializers
|
||||||
|
|
||||||
class AuthTokenSerializer(serializers.Serializer):
|
class AuthTokenSerializer(serializers.Serializer):
|
||||||
username = serializers.CharField()
|
username = serializers.CharField()
|
||||||
password = serializers.CharField()
|
password = serializers.CharField(style={'input_type': 'password'})
|
||||||
|
|
||||||
def validate(self, attrs):
|
def validate(self, attrs):
|
||||||
username = attrs.get('username')
|
username = attrs.get('username')
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
from rest_framework.views import APIView
|
from rest_framework import parsers, renderers
|
||||||
from rest_framework import parsers
|
|
||||||
from rest_framework import renderers
|
|
||||||
from rest_framework.response import Response
|
|
||||||
from rest_framework.authtoken.models import Token
|
from rest_framework.authtoken.models import Token
|
||||||
from rest_framework.authtoken.serializers import AuthTokenSerializer
|
from rest_framework.authtoken.serializers import AuthTokenSerializer
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
|
||||||
class ObtainAuthToken(APIView):
|
class ObtainAuthToken(APIView):
|
||||||
|
@ -11,9 +10,10 @@ class ObtainAuthToken(APIView):
|
||||||
permission_classes = ()
|
permission_classes = ()
|
||||||
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
|
parser_classes = (parsers.FormParser, parsers.MultiPartParser, parsers.JSONParser,)
|
||||||
renderer_classes = (renderers.JSONRenderer,)
|
renderer_classes = (renderers.JSONRenderer,)
|
||||||
|
serializer_class = AuthTokenSerializer
|
||||||
|
|
||||||
def post(self, request):
|
def post(self, request):
|
||||||
serializer = AuthTokenSerializer(data=request.data)
|
serializer = self.serializer_class(data=request.data)
|
||||||
serializer.is_valid(raise_exception=True)
|
serializer.is_valid(raise_exception=True)
|
||||||
user = serializer.validated_data['user']
|
user = serializer.validated_data['user']
|
||||||
token, created = Token.objects.get_or_create(user=user)
|
token, created = Token.objects.get_or_create(user=user)
|
||||||
|
|
|
@ -5,13 +5,18 @@ versions of django/python, and compatibility wrappers around optional packages.
|
||||||
|
|
||||||
# flake8: noqa
|
# flake8: noqa
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
import django
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
|
from django.db import connection, transaction
|
||||||
|
from django.test.client import FakePayload
|
||||||
|
from django.utils import six
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_text
|
||||||
from django.utils.six.moves.urllib.parse import urlparse as _urlparse
|
from django.utils.six.moves.urllib.parse import urlparse as _urlparse
|
||||||
from django.utils import six
|
|
||||||
import django
|
|
||||||
import inspect
|
|
||||||
try:
|
try:
|
||||||
import importlib
|
import importlib
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -119,6 +124,14 @@ def get_model_name(model_cls):
|
||||||
return model_cls._meta.module_name
|
return model_cls._meta.module_name
|
||||||
|
|
||||||
|
|
||||||
|
# Support custom user models in Django 1.5+
|
||||||
|
try:
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
except ImportError:
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
get_user_model = lambda: User
|
||||||
|
|
||||||
|
|
||||||
# View._allowed_methods only present from 1.5 onwards
|
# View._allowed_methods only present from 1.5 onwards
|
||||||
if django.VERSION >= (1, 5):
|
if django.VERSION >= (1, 5):
|
||||||
from django.views.generic import View
|
from django.views.generic import View
|
||||||
|
@ -190,9 +203,6 @@ if 'patch' not in View.http_method_names:
|
||||||
View.http_method_names = View.http_method_names + ['patch']
|
View.http_method_names = View.http_method_names + ['patch']
|
||||||
|
|
||||||
|
|
||||||
# RequestFactory only provides `generic` from 1.5 onwards
|
|
||||||
from django.test.client import RequestFactory as DjangoRequestFactory
|
|
||||||
from django.test.client import FakePayload
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
# In 1.5 the test client uses force_bytes
|
# In 1.5 the test client uses force_bytes
|
||||||
|
@ -202,6 +212,12 @@ except ImportError:
|
||||||
from django.utils.encoding import smart_str as force_bytes_or_smart_bytes
|
from django.utils.encoding import smart_str as force_bytes_or_smart_bytes
|
||||||
|
|
||||||
|
|
||||||
|
# RequestFactory only provides `generic` from 1.5 onwards
|
||||||
|
if django.VERSION >= (1, 5):
|
||||||
|
from django.test.client import RequestFactory
|
||||||
|
else:
|
||||||
|
from django.test.client import RequestFactory as DjangoRequestFactory
|
||||||
|
|
||||||
class RequestFactory(DjangoRequestFactory):
|
class RequestFactory(DjangoRequestFactory):
|
||||||
def generic(self, method, path,
|
def generic(self, method, path,
|
||||||
data='', content_type='application/octet-stream', **extra):
|
data='', content_type='application/octet-stream', **extra):
|
||||||
|
@ -250,3 +266,28 @@ else:
|
||||||
SHORT_SEPARATORS = (b',', b':')
|
SHORT_SEPARATORS = (b',', b':')
|
||||||
LONG_SEPARATORS = (b', ', b': ')
|
LONG_SEPARATORS = (b', ', b': ')
|
||||||
INDENT_SEPARATORS = (b',', b': ')
|
INDENT_SEPARATORS = (b',', b': ')
|
||||||
|
|
||||||
|
|
||||||
|
if django.VERSION >= (1, 8):
|
||||||
|
from django.db.models import DurationField
|
||||||
|
from django.utils.dateparse import parse_duration
|
||||||
|
from django.utils.duration import duration_string
|
||||||
|
else:
|
||||||
|
DurationField = duration_string = parse_duration = None
|
||||||
|
|
||||||
|
|
||||||
|
def set_rollback():
|
||||||
|
if hasattr(transaction, 'set_rollback'):
|
||||||
|
if connection.settings_dict.get('ATOMIC_REQUESTS', False):
|
||||||
|
# If running in >=1.6 then mark a rollback as required,
|
||||||
|
# and allow it to be handled by Django.
|
||||||
|
if connection.in_atomic_block:
|
||||||
|
transaction.set_rollback(True)
|
||||||
|
elif transaction.is_managed():
|
||||||
|
# Otherwise handle it explicitly if in managed mode.
|
||||||
|
if transaction.is_dirty():
|
||||||
|
transaction.rollback()
|
||||||
|
transaction.leave_transaction_management()
|
||||||
|
else:
|
||||||
|
# transaction not managed
|
||||||
|
pass
|
||||||
|
|
|
@ -7,10 +7,13 @@ based views, as well as the `@detail_route` and `@list_route` decorators, which
|
||||||
used to annotate methods on viewsets that should be included by routers.
|
used to annotate methods on viewsets that should be included by routers.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
from django.utils import six
|
|
||||||
from rest_framework.views import APIView
|
|
||||||
import types
|
import types
|
||||||
|
|
||||||
|
from django.utils import six
|
||||||
|
|
||||||
|
from rest_framework.views import APIView
|
||||||
|
|
||||||
|
|
||||||
def api_view(http_method_names=None):
|
def api_view(http_method_names=None):
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,15 @@ In addition Django's built in 403 and 404 exceptions are handled.
|
||||||
(`django.http.Http404` and `django.core.exceptions.PermissionDenied`)
|
(`django.http.Http404` and `django.core.exceptions.PermissionDenied`)
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import math
|
||||||
|
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from django.utils.encoding import force_text
|
from django.utils.encoding import force_text
|
||||||
from django.utils.translation import ugettext_lazy as _, ungettext
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
from django.utils.translation import ungettext
|
||||||
|
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
import math
|
|
||||||
|
|
||||||
|
|
||||||
def _force_text_recursive(data):
|
def _force_text_recursive(data):
|
||||||
|
|
|
@ -1,32 +1,36 @@
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import collections
|
||||||
|
import copy
|
||||||
|
import datetime
|
||||||
|
import decimal
|
||||||
|
import inspect
|
||||||
|
import re
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
import django
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
|
||||||
from django.core.exceptions import ValidationError as DjangoValidationError
|
from django.core.exceptions import ValidationError as DjangoValidationError
|
||||||
from django.core.validators import RegexValidator
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
|
from django.core.validators import RegexValidator, ip_address_validators
|
||||||
from django.forms import (
|
from django.forms import (
|
||||||
ImageField as DjangoImageField, FilePathField as DjangoFilePathField
|
ImageField as DjangoImageField, FilePathField as DjangoFilePathField
|
||||||
)
|
)
|
||||||
from django.utils import six, timezone
|
from django.utils import six, timezone
|
||||||
from django.utils.dateparse import parse_date, parse_datetime, parse_time
|
from django.utils.dateparse import parse_date, parse_datetime, parse_time
|
||||||
from django.utils.encoding import is_protected_type, smart_text
|
from django.utils.encoding import is_protected_type, smart_text
|
||||||
|
from django.utils.ipv6 import clean_ipv6_address
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from rest_framework import ISO_8601
|
from rest_framework import ISO_8601
|
||||||
from rest_framework.compat import (
|
from rest_framework.compat import (
|
||||||
EmailValidator, MinValueValidator, MaxValueValidator,
|
EmailValidator, MaxLengthValidator, MaxValueValidator, MinLengthValidator,
|
||||||
MinLengthValidator, MaxLengthValidator, URLValidator, OrderedDict,
|
MinValueValidator, OrderedDict, URLValidator, duration_string,
|
||||||
unicode_repr, unicode_to_repr
|
parse_duration, unicode_repr, unicode_to_repr
|
||||||
)
|
)
|
||||||
from rest_framework.exceptions import ValidationError
|
from rest_framework.exceptions import ValidationError
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
from rest_framework.utils import html, representation, humanize_datetime
|
from rest_framework.utils import html, humanize_datetime, representation
|
||||||
import collections
|
|
||||||
import copy
|
|
||||||
import datetime
|
|
||||||
import decimal
|
|
||||||
import django
|
|
||||||
import inspect
|
|
||||||
import re
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
|
|
||||||
class empty:
|
class empty:
|
||||||
|
@ -106,7 +110,7 @@ def set_value(dictionary, keys, value):
|
||||||
dictionary[keys[-1]] = value
|
dictionary[keys[-1]] = value
|
||||||
|
|
||||||
|
|
||||||
class CreateOnlyDefault:
|
class CreateOnlyDefault(object):
|
||||||
"""
|
"""
|
||||||
This class may be used to provide default values that are only used
|
This class may be used to provide default values that are only used
|
||||||
for create operations, but that do not return any value for update
|
for create operations, but that do not return any value for update
|
||||||
|
@ -117,7 +121,7 @@ class CreateOnlyDefault:
|
||||||
|
|
||||||
def set_context(self, serializer_field):
|
def set_context(self, serializer_field):
|
||||||
self.is_update = serializer_field.parent.instance is not None
|
self.is_update = serializer_field.parent.instance is not None
|
||||||
if callable(self.default) and hasattr(self.default, 'set_context'):
|
if callable(self.default) and hasattr(self.default, 'set_context') and not self.is_update:
|
||||||
self.default.set_context(serializer_field)
|
self.default.set_context(serializer_field)
|
||||||
|
|
||||||
def __call__(self):
|
def __call__(self):
|
||||||
|
@ -133,7 +137,7 @@ class CreateOnlyDefault:
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class CurrentUserDefault:
|
class CurrentUserDefault(object):
|
||||||
def set_context(self, serializer_field):
|
def set_context(self, serializer_field):
|
||||||
self.user = serializer_field.context['request'].user
|
self.user = serializer_field.context['request'].user
|
||||||
|
|
||||||
|
@ -290,6 +294,8 @@ class Field(object):
|
||||||
# If the field is blank, and null is a valid value then
|
# If the field is blank, and null is a valid value then
|
||||||
# determine if we should use null instead.
|
# determine if we should use null instead.
|
||||||
return '' if getattr(self, 'allow_blank', False) else None
|
return '' if getattr(self, 'allow_blank', False) else None
|
||||||
|
elif ret == '' and self.default:
|
||||||
|
return empty
|
||||||
return ret
|
return ret
|
||||||
return dictionary.get(self.field_name, empty)
|
return dictionary.get(self.field_name, empty)
|
||||||
|
|
||||||
|
@ -342,7 +348,7 @@ class Field(object):
|
||||||
* Raise `ValidationError`, indicating invalid data.
|
* Raise `ValidationError`, indicating invalid data.
|
||||||
* Raise `SkipField`, indicating that the field should be ignored.
|
* Raise `SkipField`, indicating that the field should be ignored.
|
||||||
* Return (True, data), indicating an empty value that should be
|
* Return (True, data), indicating an empty value that should be
|
||||||
returned without any furhter validation being applied.
|
returned without any further validation being applied.
|
||||||
* Return (False, data), indicating a non-empty value, that should
|
* Return (False, data), indicating a non-empty value, that should
|
||||||
have validation applied as normal.
|
have validation applied as normal.
|
||||||
"""
|
"""
|
||||||
|
@ -419,10 +425,11 @@ class Field(object):
|
||||||
Transform the *outgoing* native value into primitive data.
|
Transform the *outgoing* native value into primitive data.
|
||||||
"""
|
"""
|
||||||
raise NotImplementedError(
|
raise NotImplementedError(
|
||||||
'{cls}.to_representation() must be implemented.\n'
|
'{cls}.to_representation() must be implemented for field '
|
||||||
'If you are upgrading from REST framework version 2 '
|
'{field_name}. If you do not need to support write operations '
|
||||||
'you might want `ReadOnlyField`.'.format(
|
'you probably want to subclass `ReadOnlyField` instead.'.format(
|
||||||
cls=self.__class__.__name__
|
cls=self.__class__.__name__,
|
||||||
|
field_name=self.field_name,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -582,7 +589,7 @@ class CharField(Field):
|
||||||
# Test for the empty string here so that it does not get validated,
|
# Test for the empty string here so that it does not get validated,
|
||||||
# and so that subclasses do not need to handle it explicitly
|
# and so that subclasses do not need to handle it explicitly
|
||||||
# inside the `to_internal_value()` method.
|
# inside the `to_internal_value()` method.
|
||||||
if data == '':
|
if data == '' or (self.trim_whitespace and six.text_type(data).strip() == ''):
|
||||||
if not self.allow_blank:
|
if not self.allow_blank:
|
||||||
self.fail('blank')
|
self.fail('blank')
|
||||||
return ''
|
return ''
|
||||||
|
@ -642,20 +649,62 @@ class URLField(CharField):
|
||||||
|
|
||||||
|
|
||||||
class UUIDField(Field):
|
class UUIDField(Field):
|
||||||
|
valid_formats = ('hex_verbose', 'hex', 'int', 'urn')
|
||||||
|
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'invalid': _('"{value}" is not a valid UUID.'),
|
'invalid': _('"{value}" is not a valid UUID.'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.uuid_format = kwargs.pop('format', 'hex_verbose')
|
||||||
|
if self.uuid_format not in self.valid_formats:
|
||||||
|
raise ValueError(
|
||||||
|
'Invalid format for uuid representation. '
|
||||||
|
'Must be one of "{0}"'.format('", "'.join(self.valid_formats))
|
||||||
|
)
|
||||||
|
super(UUIDField, self).__init__(**kwargs)
|
||||||
|
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
if not isinstance(data, uuid.UUID):
|
if not isinstance(data, uuid.UUID):
|
||||||
try:
|
try:
|
||||||
return uuid.UUID(data)
|
if isinstance(data, six.integer_types):
|
||||||
|
return uuid.UUID(int=data)
|
||||||
|
else:
|
||||||
|
return uuid.UUID(hex=data)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
self.fail('invalid', value=data)
|
self.fail('invalid', value=data)
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
|
if self.uuid_format == 'hex_verbose':
|
||||||
return str(value)
|
return str(value)
|
||||||
|
else:
|
||||||
|
return getattr(value, self.uuid_format)
|
||||||
|
|
||||||
|
|
||||||
|
class IPAddressField(CharField):
|
||||||
|
"""Support both IPAddressField and GenericIPAddressField"""
|
||||||
|
|
||||||
|
default_error_messages = {
|
||||||
|
'invalid': _('Enter a valid IPv4 or IPv6 address.'),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, protocol='both', **kwargs):
|
||||||
|
self.protocol = protocol.lower()
|
||||||
|
self.unpack_ipv4 = (self.protocol == 'both')
|
||||||
|
super(IPAddressField, self).__init__(**kwargs)
|
||||||
|
validators, error_message = ip_address_validators(protocol, self.unpack_ipv4)
|
||||||
|
self.validators.extend(validators)
|
||||||
|
|
||||||
|
def to_internal_value(self, data):
|
||||||
|
if data and ':' in data:
|
||||||
|
try:
|
||||||
|
if self.protocol in ('both', 'ipv6'):
|
||||||
|
return clean_ipv6_address(data, self.unpack_ipv4)
|
||||||
|
except DjangoValidationError:
|
||||||
|
self.fail('invalid', value=data)
|
||||||
|
|
||||||
|
return super(IPAddressField, self).to_internal_value(data)
|
||||||
|
|
||||||
|
|
||||||
class FilePathField(CharField):
|
class FilePathField(CharField):
|
||||||
|
@ -709,6 +758,7 @@ class IntegerField(Field):
|
||||||
'max_string_length': _('String value too large.')
|
'max_string_length': _('String value too large.')
|
||||||
}
|
}
|
||||||
MAX_STRING_LENGTH = 1000 # Guard against malicious string inputs.
|
MAX_STRING_LENGTH = 1000 # Guard against malicious string inputs.
|
||||||
|
re_decimal = re.compile(r'\.0*\s*$') # allow e.g. '1.0' as an int, but not '1.2'
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
self.max_value = kwargs.pop('max_value', None)
|
self.max_value = kwargs.pop('max_value', None)
|
||||||
|
@ -726,7 +776,7 @@ class IntegerField(Field):
|
||||||
self.fail('max_string_length')
|
self.fail('max_string_length')
|
||||||
|
|
||||||
try:
|
try:
|
||||||
data = int(data)
|
data = int(self.re_decimal.sub('', str(data)))
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
self.fail('invalid')
|
self.fail('invalid')
|
||||||
return data
|
return data
|
||||||
|
@ -801,10 +851,8 @@ class DecimalField(Field):
|
||||||
|
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
"""
|
"""
|
||||||
Validates that the input is a decimal number. Returns a Decimal
|
Validate that the input is a decimal number and return a Decimal
|
||||||
instance. Returns None for empty values. Ensures that there are no more
|
instance.
|
||||||
than max_digits in the number, and no more than decimal_places digits
|
|
||||||
after the decimal point.
|
|
||||||
"""
|
"""
|
||||||
data = smart_text(data).strip()
|
data = smart_text(data).strip()
|
||||||
if len(data) > self.MAX_STRING_LENGTH:
|
if len(data) > self.MAX_STRING_LENGTH:
|
||||||
|
@ -824,8 +872,19 @@ class DecimalField(Field):
|
||||||
if value in (decimal.Decimal('Inf'), decimal.Decimal('-Inf')):
|
if value in (decimal.Decimal('Inf'), decimal.Decimal('-Inf')):
|
||||||
self.fail('invalid')
|
self.fail('invalid')
|
||||||
|
|
||||||
|
return self.validate_precision(value)
|
||||||
|
|
||||||
|
def validate_precision(self, value):
|
||||||
|
"""
|
||||||
|
Ensure that there are no more than max_digits in the number, and no
|
||||||
|
more than decimal_places digits after the decimal point.
|
||||||
|
|
||||||
|
Override this method to disable the precision validation for input
|
||||||
|
values or to enhance it in any way you need to.
|
||||||
|
"""
|
||||||
sign, digittuple, exponent = value.as_tuple()
|
sign, digittuple, exponent = value.as_tuple()
|
||||||
decimals = abs(exponent)
|
decimals = exponent * decimal.Decimal(-1) if exponent < 0 else 0
|
||||||
|
|
||||||
# digittuple doesn't include any leading zeros.
|
# digittuple doesn't include any leading zeros.
|
||||||
digits = len(digittuple)
|
digits = len(digittuple)
|
||||||
if decimals > digits:
|
if decimals > digits:
|
||||||
|
@ -849,16 +908,22 @@ class DecimalField(Field):
|
||||||
if not isinstance(value, decimal.Decimal):
|
if not isinstance(value, decimal.Decimal):
|
||||||
value = decimal.Decimal(six.text_type(value).strip())
|
value = decimal.Decimal(six.text_type(value).strip())
|
||||||
|
|
||||||
context = decimal.getcontext().copy()
|
quantized = self.quantize(value)
|
||||||
context.prec = self.max_digits
|
|
||||||
quantized = value.quantize(
|
|
||||||
decimal.Decimal('.1') ** self.decimal_places,
|
|
||||||
context=context
|
|
||||||
)
|
|
||||||
if not self.coerce_to_string:
|
if not self.coerce_to_string:
|
||||||
return quantized
|
return quantized
|
||||||
return '{0:f}'.format(quantized)
|
return '{0:f}'.format(quantized)
|
||||||
|
|
||||||
|
def quantize(self, value):
|
||||||
|
"""
|
||||||
|
Quantize the decimal value to the configured precision.
|
||||||
|
"""
|
||||||
|
context = decimal.getcontext().copy()
|
||||||
|
context.prec = self.max_digits
|
||||||
|
return value.quantize(
|
||||||
|
decimal.Decimal('.1') ** self.decimal_places,
|
||||||
|
context=context)
|
||||||
|
|
||||||
|
|
||||||
# Date & time fields...
|
# Date & time fields...
|
||||||
|
|
||||||
|
@ -870,6 +935,7 @@ class DateTimeField(Field):
|
||||||
format = api_settings.DATETIME_FORMAT
|
format = api_settings.DATETIME_FORMAT
|
||||||
input_formats = api_settings.DATETIME_INPUT_FORMATS
|
input_formats = api_settings.DATETIME_INPUT_FORMATS
|
||||||
default_timezone = timezone.get_default_timezone() if settings.USE_TZ else None
|
default_timezone = timezone.get_default_timezone() if settings.USE_TZ else None
|
||||||
|
datetime_parser = datetime.datetime.strptime
|
||||||
|
|
||||||
def __init__(self, format=empty, input_formats=None, default_timezone=None, *args, **kwargs):
|
def __init__(self, format=empty, input_formats=None, default_timezone=None, *args, **kwargs):
|
||||||
self.format = format if format is not empty else self.format
|
self.format = format if format is not empty else self.format
|
||||||
|
@ -906,7 +972,7 @@ class DateTimeField(Field):
|
||||||
return self.enforce_timezone(parsed)
|
return self.enforce_timezone(parsed)
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
parsed = datetime.datetime.strptime(value, format)
|
parsed = self.datetime_parser(value, format)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -934,6 +1000,7 @@ class DateField(Field):
|
||||||
}
|
}
|
||||||
format = api_settings.DATE_FORMAT
|
format = api_settings.DATE_FORMAT
|
||||||
input_formats = api_settings.DATE_INPUT_FORMATS
|
input_formats = api_settings.DATE_INPUT_FORMATS
|
||||||
|
datetime_parser = datetime.datetime.strptime
|
||||||
|
|
||||||
def __init__(self, format=empty, input_formats=None, *args, **kwargs):
|
def __init__(self, format=empty, input_formats=None, *args, **kwargs):
|
||||||
self.format = format if format is not empty else self.format
|
self.format = format if format is not empty else self.format
|
||||||
|
@ -958,7 +1025,7 @@ class DateField(Field):
|
||||||
return parsed
|
return parsed
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
parsed = datetime.datetime.strptime(value, format)
|
parsed = self.datetime_parser(value, format)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -968,6 +1035,9 @@ class DateField(Field):
|
||||||
self.fail('invalid', format=humanized_format)
|
self.fail('invalid', format=humanized_format)
|
||||||
|
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
|
if not value:
|
||||||
|
return None
|
||||||
|
|
||||||
if self.format is None:
|
if self.format is None:
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
@ -981,7 +1051,10 @@ class DateField(Field):
|
||||||
)
|
)
|
||||||
|
|
||||||
if self.format.lower() == ISO_8601:
|
if self.format.lower() == ISO_8601:
|
||||||
|
if (isinstance(value, str)):
|
||||||
|
value = datetime.datetime.strptime(value, '%Y-%m-%d').date()
|
||||||
return value.isoformat()
|
return value.isoformat()
|
||||||
|
|
||||||
return value.strftime(self.format)
|
return value.strftime(self.format)
|
||||||
|
|
||||||
|
|
||||||
|
@ -991,6 +1064,7 @@ class TimeField(Field):
|
||||||
}
|
}
|
||||||
format = api_settings.TIME_FORMAT
|
format = api_settings.TIME_FORMAT
|
||||||
input_formats = api_settings.TIME_INPUT_FORMATS
|
input_formats = api_settings.TIME_INPUT_FORMATS
|
||||||
|
datetime_parser = datetime.datetime.strptime
|
||||||
|
|
||||||
def __init__(self, format=empty, input_formats=None, *args, **kwargs):
|
def __init__(self, format=empty, input_formats=None, *args, **kwargs):
|
||||||
self.format = format if format is not empty else self.format
|
self.format = format if format is not empty else self.format
|
||||||
|
@ -1012,7 +1086,7 @@ class TimeField(Field):
|
||||||
return parsed
|
return parsed
|
||||||
else:
|
else:
|
||||||
try:
|
try:
|
||||||
parsed = datetime.datetime.strptime(value, format)
|
parsed = self.datetime_parser(value, format)
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
pass
|
pass
|
||||||
else:
|
else:
|
||||||
|
@ -1039,6 +1113,29 @@ class TimeField(Field):
|
||||||
return value.strftime(self.format)
|
return value.strftime(self.format)
|
||||||
|
|
||||||
|
|
||||||
|
class DurationField(Field):
|
||||||
|
default_error_messages = {
|
||||||
|
'invalid': _('Duration has wrong format. Use one of these formats instead: {format}.'),
|
||||||
|
}
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
if parse_duration is None:
|
||||||
|
raise NotImplementedError(
|
||||||
|
'DurationField not supported for django versions prior to 1.8')
|
||||||
|
return super(DurationField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
|
def to_internal_value(self, value):
|
||||||
|
if isinstance(value, datetime.timedelta):
|
||||||
|
return value
|
||||||
|
parsed = parse_duration(value)
|
||||||
|
if parsed is not None:
|
||||||
|
return parsed
|
||||||
|
self.fail('invalid', format='[DD] [HH:[MM:]]ss[.uuuuuu]')
|
||||||
|
|
||||||
|
def to_representation(self, value):
|
||||||
|
return duration_string(value)
|
||||||
|
|
||||||
|
|
||||||
# Choice types...
|
# Choice types...
|
||||||
|
|
||||||
class ChoiceField(Field):
|
class ChoiceField(Field):
|
||||||
|
@ -1082,26 +1179,37 @@ class ChoiceField(Field):
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
if value in ('', None):
|
if value in ('', None):
|
||||||
return value
|
return value
|
||||||
return self.choice_strings_to_values[six.text_type(value)]
|
return self.choice_strings_to_values.get(six.text_type(value), value)
|
||||||
|
|
||||||
|
|
||||||
class MultipleChoiceField(ChoiceField):
|
class MultipleChoiceField(ChoiceField):
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'invalid_choice': _('"{input}" is not a valid choice.'),
|
'invalid_choice': _('"{input}" is not a valid choice.'),
|
||||||
'not_a_list': _('Expected a list of items but got type "{input_type}".')
|
'not_a_list': _('Expected a list of items but got type "{input_type}".'),
|
||||||
|
'empty': _('This selection may not be empty.')
|
||||||
}
|
}
|
||||||
default_empty_html = []
|
default_empty_html = []
|
||||||
|
|
||||||
|
def __init__(self, *args, **kwargs):
|
||||||
|
self.allow_empty = kwargs.pop('allow_empty', True)
|
||||||
|
super(MultipleChoiceField, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def get_value(self, dictionary):
|
def get_value(self, dictionary):
|
||||||
# We override the default field access in order to support
|
# We override the default field access in order to support
|
||||||
# lists in HTML forms.
|
# lists in HTML forms.
|
||||||
if html.is_html_input(dictionary):
|
if html.is_html_input(dictionary):
|
||||||
return dictionary.getlist(self.field_name)
|
ret = dictionary.getlist(self.field_name)
|
||||||
|
if getattr(self.root, 'partial', False) and not ret:
|
||||||
|
ret = empty
|
||||||
|
return ret
|
||||||
|
|
||||||
return dictionary.get(self.field_name, empty)
|
return dictionary.get(self.field_name, empty)
|
||||||
|
|
||||||
def to_internal_value(self, data):
|
def to_internal_value(self, data):
|
||||||
if isinstance(data, type('')) or not hasattr(data, '__iter__'):
|
if isinstance(data, type('')) or not hasattr(data, '__iter__'):
|
||||||
self.fail('not_a_list', input_type=type(data).__name__)
|
self.fail('not_a_list', input_type=type(data).__name__)
|
||||||
|
if not self.allow_empty and len(data) == 0:
|
||||||
|
self.fail('empty')
|
||||||
|
|
||||||
return set([
|
return set([
|
||||||
super(MultipleChoiceField, self).to_internal_value(item)
|
super(MultipleChoiceField, self).to_internal_value(item)
|
||||||
|
@ -1110,7 +1218,7 @@ class MultipleChoiceField(ChoiceField):
|
||||||
|
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
return set([
|
return set([
|
||||||
self.choice_strings_to_values[six.text_type(item)] for item in value
|
self.choice_strings_to_values.get(six.text_type(item), item) for item in value
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
@ -1150,9 +1258,13 @@ class FileField(Field):
|
||||||
return data
|
return data
|
||||||
|
|
||||||
def to_representation(self, value):
|
def to_representation(self, value):
|
||||||
if self.use_url:
|
|
||||||
if not value:
|
if not value:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
if self.use_url:
|
||||||
|
if not getattr(value, 'url', None):
|
||||||
|
# If the file has not been saved it may not have a URL.
|
||||||
|
return None
|
||||||
url = value.url
|
url = value.url
|
||||||
request = self.context.get('request', None)
|
request = self.context.get('request', None)
|
||||||
if request is not None:
|
if request is not None:
|
||||||
|
@ -1202,11 +1314,13 @@ class ListField(Field):
|
||||||
child = _UnvalidatedField()
|
child = _UnvalidatedField()
|
||||||
initial = []
|
initial = []
|
||||||
default_error_messages = {
|
default_error_messages = {
|
||||||
'not_a_list': _('Expected a list of items but got type "{input_type}".')
|
'not_a_list': _('Expected a list of items but got type "{input_type}".'),
|
||||||
|
'empty': _('This list may not be empty.')
|
||||||
}
|
}
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.child = kwargs.pop('child', copy.deepcopy(self.child))
|
self.child = kwargs.pop('child', copy.deepcopy(self.child))
|
||||||
|
self.allow_empty = kwargs.pop('allow_empty', True)
|
||||||
assert not inspect.isclass(self.child), '`child` has not been instantiated.'
|
assert not inspect.isclass(self.child), '`child` has not been instantiated.'
|
||||||
super(ListField, self).__init__(*args, **kwargs)
|
super(ListField, self).__init__(*args, **kwargs)
|
||||||
self.child.bind(field_name='', parent=self)
|
self.child.bind(field_name='', parent=self)
|
||||||
|
@ -1215,6 +1329,10 @@ class ListField(Field):
|
||||||
# We override the default field access in order to support
|
# We override the default field access in order to support
|
||||||
# lists in HTML forms.
|
# lists in HTML forms.
|
||||||
if html.is_html_input(dictionary):
|
if html.is_html_input(dictionary):
|
||||||
|
val = dictionary.getlist(self.field_name, [])
|
||||||
|
if len(val) > 1:
|
||||||
|
# Support QueryDict lists in HTML input.
|
||||||
|
return val
|
||||||
return html.parse_html_list(dictionary, prefix=self.field_name)
|
return html.parse_html_list(dictionary, prefix=self.field_name)
|
||||||
return dictionary.get(self.field_name, empty)
|
return dictionary.get(self.field_name, empty)
|
||||||
|
|
||||||
|
@ -1226,6 +1344,8 @@ class ListField(Field):
|
||||||
data = html.parse_html_list(data)
|
data = html.parse_html_list(data)
|
||||||
if isinstance(data, type('')) or not hasattr(data, '__iter__'):
|
if isinstance(data, type('')) or not hasattr(data, '__iter__'):
|
||||||
self.fail('not_a_list', input_type=type(data).__name__)
|
self.fail('not_a_list', input_type=type(data).__name__)
|
||||||
|
if not self.allow_empty and len(data) == 0:
|
||||||
|
self.fail('empty')
|
||||||
return [self.child.run_validation(item) for item in data]
|
return [self.child.run_validation(item) for item in data]
|
||||||
|
|
||||||
def to_representation(self, data):
|
def to_representation(self, data):
|
||||||
|
|
|
@ -4,13 +4,16 @@ returned by list views.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
import operator
|
||||||
|
from functools import reduce
|
||||||
|
|
||||||
|
from django.conf import settings
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils import six
|
from django.utils import six
|
||||||
from rest_framework.compat import django_filters, guardian, get_model_name
|
|
||||||
|
from rest_framework.compat import django_filters, get_model_name, guardian
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
from functools import reduce
|
|
||||||
import operator
|
|
||||||
|
|
||||||
FilterSet = django_filters and django_filters.FilterSet or None
|
FilterSet = django_filters and django_filters.FilterSet or None
|
||||||
|
|
||||||
|
@ -57,6 +60,7 @@ class DjangoFilterBackend(BaseFilterBackend):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = queryset.model
|
model = queryset.model
|
||||||
fields = filter_fields
|
fields = filter_fields
|
||||||
|
|
||||||
return AutoFilterSet
|
return AutoFilterSet
|
||||||
|
|
||||||
return None
|
return None
|
||||||
|
@ -98,13 +102,20 @@ class SearchFilter(BaseFilterBackend):
|
||||||
if not search_fields:
|
if not search_fields:
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
original_queryset = queryset
|
||||||
orm_lookups = [self.construct_search(six.text_type(search_field))
|
orm_lookups = [self.construct_search(six.text_type(search_field))
|
||||||
for search_field in search_fields]
|
for search_field in search_fields]
|
||||||
|
|
||||||
for search_term in self.get_search_terms(request):
|
for search_term in self.get_search_terms(request):
|
||||||
or_queries = [models.Q(**{orm_lookup: search_term})
|
or_queries = [models.Q(**{orm_lookup: search_term})
|
||||||
for orm_lookup in orm_lookups]
|
for orm_lookup in orm_lookups]
|
||||||
queryset = queryset.filter(reduce(operator.or_, or_queries)).distinct()
|
queryset = queryset.filter(reduce(operator.or_, or_queries))
|
||||||
|
|
||||||
|
if settings.DATABASES[queryset.db]["ENGINE"] == "django.db.backends.oracle":
|
||||||
|
# distinct analogue for Oracle users
|
||||||
|
queryset = original_queryset.filter(pk__in=set(queryset.values_list('pk', flat=True)))
|
||||||
|
else:
|
||||||
|
queryset = queryset.distinct()
|
||||||
|
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
@ -187,4 +198,7 @@ class DjangoObjectPermissionsFilter(BaseFilterBackend):
|
||||||
'model_name': get_model_name(model_cls)
|
'model_name': get_model_name(model_cls)
|
||||||
}
|
}
|
||||||
permission = self.perm_format % kwargs
|
permission = self.perm_format % kwargs
|
||||||
return guardian.shortcuts.get_objects_for_user(user, permission, queryset)
|
if guardian.VERSION >= (1, 3):
|
||||||
|
# Maintain behavior compatibility with versions prior to 1.3
|
||||||
|
extra = {'accept_global_perms': False}
|
||||||
|
return guardian.shortcuts.get_objects_for_user(user, permission, queryset, **extra)
|
||||||
|
|
|
@ -2,10 +2,12 @@
|
||||||
Generic views that provide commonly needed behaviour.
|
Generic views that provide commonly needed behaviour.
|
||||||
"""
|
"""
|
||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.db.models.query import QuerySet
|
from django.db.models.query import QuerySet
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.shortcuts import get_object_or_404 as _get_object_or_404
|
from django.shortcuts import get_object_or_404 as _get_object_or_404
|
||||||
from rest_framework import views, mixins
|
|
||||||
|
from rest_framework import mixins, views
|
||||||
from rest_framework.settings import api_settings
|
from rest_framework.settings import api_settings
|
||||||
|
|
||||||
|
|
||||||
|
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Arabic (http://www.transifex.com/projects/p/django-rest-framework/language/ar/)\n"
|
"Language-Team: Arabic (http://www.transifex.com/projects/p/django-rest-framework/language/ar/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +18,49 @@ msgstr ""
|
||||||
"Language: ar\n"
|
"Language: ar\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"
|
"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"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "اسم المستخدم/كلمة السر غير صحيحين."
|
msgstr "اسم المستخدم/كلمة السر غير صحيحين."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "المستخدم غير مفعل او تم حذفه."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "المستخدم غير مفعل او تم حذفه."
|
msgstr "حساب المستخدم غير مفعل."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "تعذر تسجيل الدخول بالبيانات التي ادخلتها."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "يجب أن تتضمن \"اسم المستخدم\" و \"كلمة المرور\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,11 +82,12 @@ msgstr "لم يتم تزويد بيانات الدخول."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "ليس لديك صلاحية للقيام بهذا الإجراء."
|
msgstr "ليس لديك صلاحية للقيام بهذا الإجراء."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "غير موجود."
|
msgstr "غير موجود."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -83,6 +96,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -90,161 +104,185 @@ msgstr ""
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "هذا الحقل مطلوب."
|
msgstr "هذا الحقل مطلوب."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "لا يمكن لهذا الحقل ان يكون فارغاً null."
|
msgstr "لا يمكن لهذا الحقل ان يكون فارغاً null."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" ليس قيمة منطقية."
|
msgstr "\"{input}\" ليس قيمة منطقية."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "لا يمكن لهذا الحقل ان يكون فارغاً."
|
msgstr "لا يمكن لهذا الحقل ان يكون فارغاً."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "تأكد ان الحقل لا يزيد عن {max_length} محرف."
|
msgstr "تأكد ان الحقل لا يزيد عن {max_length} محرف."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "تأكد ان الحقل {min_length} محرف على الاقل."
|
msgstr "تأكد ان الحقل {min_length} محرف على الاقل."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "عليك ان تدخل بريد إلكتروني صالح."
|
msgstr "عليك ان تدخل بريد إلكتروني صالح."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "هذه القيمة لا تطابق النمط المطلوب."
|
msgstr "هذه القيمة لا تطابق النمط المطلوب."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "الرجاء إدخال رابط إلكتروني صالح."
|
msgstr "الرجاء إدخال رابط إلكتروني صالح."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "الرجاء إدخال رقم صحيح صالح."
|
msgstr "الرجاء إدخال رقم صحيح صالح."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "تأكد ان القيمة أقل أو تساوي {max_value}."
|
msgstr "تأكد ان القيمة أقل أو تساوي {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "تأكد ان القيمة أكبر أو تساوي {min_value}."
|
msgstr "تأكد ان القيمة أكبر أو تساوي {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "الرجاء إدخال رقم صالح."
|
msgstr "الرجاء إدخال رقم صالح."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "تأكد ان القيمة لا تحوي أكثر من {max_digits} رقم."
|
msgstr "تأكد ان القيمة لا تحوي أكثر من {max_digits} رقم."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "صيغة التاريخ و الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
msgstr "صيغة التاريخ و الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "صيغة التاريخ غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
msgstr "صيغة التاريخ غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "صيغة الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
msgstr "صيغة الوقت غير صحيحة. عليك أن تستخدم واحدة من هذه الصيغ التالية: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" ليست واحدة من الخيارات الصالحة."
|
msgstr "\"{input}\" ليست واحدة من الخيارات الصالحة."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "لم يتم إرسال أي ملف."
|
msgstr "لم يتم إرسال أي ملف."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "الملف الذي تم إرساله فارغ."
|
msgstr "الملف الذي تم إرساله فارغ."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "تأكد ان اسم الملف لا يحوي أكثر من {max_length} محرف (الإسم المرسل يحوي {length} محرف)."
|
msgstr "تأكد ان اسم الملف لا يحوي أكثر من {max_length} محرف (الإسم المرسل يحوي {length} محرف)."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "رقم الصفحة \"{page_number}\" غير صالح : {message}."
|
msgstr "رقم الصفحة \"{page_number}\" غير صالح : {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "معرف العنصر \"{pk_value}\" غير صالح - العنصر غير موجود."
|
msgstr "معرف العنصر \"{pk_value}\" غير صالح - العنصر غير موجود."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -261,38 +299,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "قيمة غير صالحة."
|
msgstr "قيمة غير صالحة."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -304,22 +361,14 @@ msgstr ""
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "حساب المستخدم غير مفعل."
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "تعذر تسجيل الدخول بالبيانات التي ادخلتها."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "يجب أن تتضمن \"اسم المستخدم\" و \"كلمة المرور\"."
|
|
||||||
|
|
BIN
rest_framework/locale/be/LC_MESSAGES/django.mo
Normal file
BIN
rest_framework/locale/be/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
373
rest_framework/locale/be/LC_MESSAGES/django.po
Normal file
373
rest_framework/locale/be/LC_MESSAGES/django.po
Normal file
|
@ -0,0 +1,373 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Django REST framework\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
|
"Language-Team: Belarusian (http://www.transifex.com/projects/p/django-rest-framework/language/be/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: be\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"
|
||||||
|
|
||||||
|
#: authentication.py:70
|
||||||
|
msgid "Invalid basic header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:73
|
||||||
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:79
|
||||||
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:97
|
||||||
|
msgid "Invalid username/password."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
|
msgid "Invalid token header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:170
|
||||||
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:179
|
||||||
|
msgid "Invalid token."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:20
|
||||||
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:38
|
||||||
|
msgid "A server error occurred."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:73
|
||||||
|
msgid "Malformed request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:78
|
||||||
|
msgid "Incorrect authentication credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:83
|
||||||
|
msgid "Authentication credentials were not provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:88
|
||||||
|
msgid "You do not have permission to perform this action."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:93 views.py:78
|
||||||
|
msgid "Not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Method \"{method}\" not allowed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:109
|
||||||
|
msgid "Could not satisfy the request Accept header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:134
|
||||||
|
msgid "Request was throttled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
|
#: validators.py:160
|
||||||
|
msgid "This field is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:163
|
||||||
|
msgid "This field may not be null."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:559
|
||||||
|
msgid "This field may not be blank."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:598
|
||||||
|
msgid "Enter a valid email address."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:609
|
||||||
|
msgid "This value does not match the required pattern."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:620
|
||||||
|
msgid ""
|
||||||
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
|
"hyphens."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:632
|
||||||
|
msgid "Enter a valid URL."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:679
|
||||||
|
msgid "A valid integer is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
|
msgid "String value too large."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:714 fields.py:747
|
||||||
|
msgid "A valid number is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
|
"decimal point."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:843
|
||||||
|
msgid "Expected a datetime but got a date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:908
|
||||||
|
msgid "Expected a date but got a datetime."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1129
|
||||||
|
msgid "No file was submitted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1130
|
||||||
|
msgid ""
|
||||||
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1131
|
||||||
|
msgid "No filename could be determined."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1132
|
||||||
|
msgid "The submitted file is empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1175
|
||||||
|
msgid ""
|
||||||
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
|
"corrupted image."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:492
|
||||||
|
msgid "Invalid cursor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:157
|
||||||
|
msgid "Invalid hyperlink - No URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:158
|
||||||
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:159
|
||||||
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:303
|
||||||
|
msgid "Invalid value."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The fields {field_names} must make a unique set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:39
|
||||||
|
msgid "Invalid version in \"Accept\" header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:70 versioning.py:112
|
||||||
|
msgid "Invalid version in URL path."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:141
|
||||||
|
msgid "Invalid version in hostname."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:163
|
||||||
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
|
msgstr ""
|
Binary file not shown.
|
@ -4,13 +4,14 @@
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Jirka Vejrazka <Jirka.Vejrazka@gmail.com>, 2015
|
# Jirka Vejrazka <Jirka.Vejrazka@gmail.com>, 2015
|
||||||
|
# Tomáš Ehrlich <tomas.ehrlich@gmail.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Czech (http://www.transifex.com/projects/p/django-rest-framework/language/cs/)\n"
|
"Language-Team: Czech (http://www.transifex.com/projects/p/django-rest-framework/language/cs/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +19,49 @@ msgstr ""
|
||||||
"Language: cs\n"
|
"Language: cs\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Chybná hlavička. Nebyly poskytnuty přihlašovací údaje."
|
msgstr "Chybná hlavička. Nebyly poskytnuty přihlašovací údaje."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Chybná hlavička. Přihlašovací údaje by neměly obsahovat mezery."
|
msgstr "Chybná hlavička. Přihlašovací údaje by neměly obsahovat mezery."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Chybná hlavička. Přihlašovací údaje nebyly správně zakódovány pomocí base64."
|
msgstr "Chybná hlavička. Přihlašovací údaje nebyly správně zakódovány pomocí base64."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Chybné uživatelské jméno nebo heslo."
|
msgstr "Chybné uživatelské jméno nebo heslo."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Uživatelský účet je neaktivní nebo byl smazán."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Chybná hlavička tokenu. Nebyly zadány přihlašovací údaje."
|
msgstr "Chybná hlavička tokenu. Nebyly zadány přihlašovací údaje."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Chybná hlavička tokenu. Přihlašovací údaje by neměly obsahovat mezery."
|
msgstr "Chybná hlavička tokenu. Přihlašovací údaje by neměly obsahovat mezery."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Chybný token."
|
msgstr "Chybný token."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Uživatelský účet je neaktivní nebo byl smazán."
|
msgstr "Uživatelský účet je uzamčen."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Zadanými údaji se nebylo možné přihlásit."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Musí obsahovat \"uživatelské jméno\" a \"heslo\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -64,17 +77,18 @@ msgstr "Chybné přihlašovací údaje."
|
||||||
|
|
||||||
#: exceptions.py:83
|
#: exceptions.py:83
|
||||||
msgid "Authentication credentials were not provided."
|
msgid "Authentication credentials were not provided."
|
||||||
msgstr "Přihlašovací údaje nebyly zadány."
|
msgstr "Nebyly zadány přihlašovací údaje."
|
||||||
|
|
||||||
#: exceptions.py:88
|
#: exceptions.py:88
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "K této akci nemáte oprávnění."
|
msgstr "K této akci nemáte oprávnění."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Nenalezeno."
|
msgstr "Nenalezeno."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Metoda \"{method}\" není povolena."
|
msgstr "Metoda \"{method}\" není povolena."
|
||||||
|
|
||||||
|
@ -83,168 +97,193 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Nelze vyhovět požadavku v hlavičce Accept."
|
msgstr "Nelze vyhovět požadavku v hlavičce Accept."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Nepodporovaný media type \"{media_type}\" v požadavku."
|
msgstr "Nepodporovaný media type \"{media_type}\" v požadavku."
|
||||||
|
|
||||||
#: exceptions.py:134
|
#: exceptions.py:134
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Pořadavek byl limitován kvůli omezení počtu požadavků za časovou periodu."
|
msgstr "Požadavek byl limitován kvůli omezení počtu požadavků za časovou periodu."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Toto pole je vyžadováno."
|
msgstr "Toto pole je vyžadováno."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Toto pole nesmí být prázdné (null)."
|
msgstr "Toto pole nesmí být prázdné (null)."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" nelze použít jako typ boolean."
|
msgstr "\"{input}\" nelze použít jako typ boolean."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Toto pole nesmí být prázdné.."
|
msgstr "Toto pole nesmí být prázdné."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Zkontrolujte, že toto pole není delší než {max_length} znaků."
|
msgstr "Zkontrolujte, že toto pole není delší než {max_length} znaků."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Zkontrolujte, že toto obsahuje alespoň {min_length} znaků"
|
msgstr "Zkontrolujte, že toto pole obsahuje alespoň {min_length} znaků."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Vložte platnou e-mailovou adresu."
|
msgstr "Vložte platnou e-mailovou adresu."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Hodnota v tomto poli neodpovídá požadovanému formátu."
|
msgstr "Hodnota v tomto poli neodpovídá požadovanému formátu."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Vložte platnou \"zkrácenou formu\" obsahující pouze malá písmena, čísla, spojovník nebo podtržítko."
|
msgstr "Vložte platnou \"zkrácenou formu\" obsahující pouze malá písmena, čísla, spojovník nebo podtržítko."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Vložte platný odkaz."
|
msgstr "Vložte platný odkaz."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" není platné UUID."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Je vyžadováno číslo."
|
msgstr "Je vyžadováno celé číslo."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Zkontrolujte, že hodnota je menší nebo rovna {max_value}."
|
msgstr "Zkontrolujte, že hodnota je menší nebo rovna {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Zkontrolujte, že hodnota je větší nebo rovna {min_value}."
|
msgstr "Zkontrolujte, že hodnota je větší nebo rovna {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Řetězec je příliš dlouhý"
|
msgstr "Řetězec je příliš dlouhý."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Je vyžadováno číslo."
|
msgstr "Je vyžadováno číslo."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Zkontrolujte, že číslo neobsahuje více než {max_digits} čislic."
|
msgstr "Zkontrolujte, že číslo neobsahuje více než {max_digits} čislic."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Zkontrolujte, že číslo nemá více než {max_decimal_places} desetinných míst."
|
msgstr "Zkontrolujte, že číslo nemá více než {max_decimal_places} desetinných míst."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Zkontrolujte, že číslo neobsahuje více než {max_whole_digits} čislic před desetinnou čárkou."
|
msgstr "Zkontrolujte, že číslo neobsahuje více než {max_whole_digits} čislic před desetinnou čárkou."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Chybný formát data a času. Použijte jeden z těchto formátů: {format}."
|
msgstr "Chybný formát data a času. Použijte jeden z těchto formátů: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Bylo zadáno pouze datum místo data a času."
|
msgstr "Bylo zadáno pouze datum bez času."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Chybný formát data. Použijte jeden z těchto formátů: {format}."
|
msgstr "Chybný formát data. Použijte jeden z těchto formátů: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Bylo zadáno datum a čas, místo samotného data."
|
msgstr "Bylo zadáno datum a čas, místo samotného data."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Chybný formát času. Použijte jeden z těchto formátů: {format}."
|
msgstr "Chybný formát času. Použijte jeden z těchto formátů: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" není platnou možností."
|
msgstr "\"{input}\" není platnou možností."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Byl očekáván seznam položek ale nalezen \"{input_type}\"."
|
msgstr "Byl očekáván seznam položek ale nalezen \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Nebyl zaslán žádný soubor."
|
msgstr "Nebyl zaslán žádný soubor."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Zaslaná data neobsahují soubor. Zkontrolujte typ kódování ve formuláři."
|
msgstr "Zaslaná data neobsahují soubor. Zkontrolujte typ kódování ve formuláři."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Nebylo možno zjistit jméno souboru."
|
msgstr "Nebylo možné zjistit jméno souboru."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Zaslaný soubor je prázdný."
|
msgstr "Zaslaný soubor je prázdný."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Zajistěte, aby jméno souboru obsahovalo maximálně {max_length} znaků (teď má {length} znaků)."
|
msgstr "Zajistěte, aby jméno souboru obsahovalo maximálně {max_length} znaků (teď má {length} znaků)."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Nahrajte platný obrázek. Nahraný soubor buď není obrázkem, nebo je poškozen."
|
msgstr "Nahrajte platný obrázek. Nahraný soubor buď není obrázkem nebo je poškozen."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Byl očekáván slovník položek ale nalezen \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Chybné čislo stránky \"{page_number}\": {message}."
|
msgstr "Chybné čislo stránky \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Chybný kurzor."
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Chybný primární klíč \"{pk_value}\" - objekt neexistuje."
|
msgstr "Chybný primární klíč \"{pk_value}\" - objekt neexistuje."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Chybný typ. Byl přijat typ {data_type} místo hodnoty primárního klíče."
|
msgstr "Chybný typ. Byl přijat typ {data_type} místo hodnoty primárního klíče."
|
||||||
|
|
||||||
|
@ -261,65 +300,76 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Chybný odkaz - objekt neexistuje."
|
msgstr "Chybný odkaz - objekt neexistuje."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Chybný typ. Byl přijat typ {data_type} místo očekávaného odkazu."
|
msgstr "Chybný typ. Byl přijat typ {data_type} místo očekávaného odkazu."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Objekt s {slug_name}={value} neexistuje."
|
msgstr "Objekt s {slug_name}={value} neexistuje."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Chybná hodnota."
|
msgstr "Chybná hodnota."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Chybná data. Byl přijat typ {datatype} místo očakávaného slovníku."
|
msgstr "Chybná data. Byl přijat typ {datatype} místo očekávaného slovníku."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Tato položka musí být unikátní."
|
msgstr "Tato položka musí být unikátní."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Položka {field_names} musí tvořit unikátní množinu."
|
msgstr "Položka {field_names} musí tvořit unikátní množinu."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "Tato položka musí být pro datum \"{date_field}\" unikátní."
|
msgstr "Tato položka musí být pro datum \"{date_field}\" unikátní."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "Tato položka musí být pro měsíc \"{date_field}\" unikátní."
|
msgstr "Tato položka musí být pro měsíc \"{date_field}\" unikátní."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "Tato položka musí být pro rok \"{date_field}\" unikátní."
|
msgstr "Tato položka musí být pro rok \"{date_field}\" unikátní."
|
||||||
|
|
||||||
#: versioning.py:39
|
#: versioning.py:39
|
||||||
msgid "Invalid version in \"Accept\" header."
|
msgid "Invalid version in \"Accept\" header."
|
||||||
msgstr "Chybné číslo verze v hlavičce Accept"
|
msgstr "Chybné číslo verze v hlavičce Accept."
|
||||||
|
|
||||||
#: versioning.py:70 versioning.py:112
|
#: versioning.py:70 versioning.py:112
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Chybné číslo verze v odkazu."
|
msgstr "Chybné číslo verze v odkazu."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Chybné číslo verze v hostname."
|
msgstr "Chybné číslo verze v hostname."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Chybné čislo verze v URL parametru."
|
msgstr "Chybné čislo verze v URL parametru."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Uživatelský účet je zamčen."
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Se zadanými údaji nebylo možné se přihlásit."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Musí obsahovat \"uživatelské jméno! a \"heslo\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Danish (http://www.transifex.com/projects/p/django-rest-framework/language/da/)\n"
|
"Language-Team: Danish (http://www.transifex.com/projects/p/django-rest-framework/language/da/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +18,49 @@ msgstr ""
|
||||||
"Language: da\n"
|
"Language: da\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Ugyldig basic header. Ingen legitimation angivet."
|
msgstr "Ugyldig basic header. Ingen legitimation angivet."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Ugyldig basic header. Legitimationsstrenge må ikke indeholde mellemrum."
|
msgstr "Ugyldig basic header. Legitimationsstrenge må ikke indeholde mellemrum."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Ugyldig basic header. Legitimationen er ikke base64 encoded på korrekt vis."
|
msgstr "Ugyldig basic header. Legitimationen er ikke base64 encoded på korrekt vis."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Ugyldigt brugernavn/kodeord."
|
msgstr "Ugyldigt brugernavn/kodeord."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Inaktiv eller slettet bruger."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Ugyldig token header."
|
msgstr "Ugyldig token header."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Ugyldig token header. Token-strenge må ikke indeholde mellemrum."
|
msgstr "Ugyldig token header. Token-strenge må ikke indeholde mellemrum."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Ugyldigt token."
|
msgstr "Ugyldigt token."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Inaktiv eller slettet bruger."
|
msgstr "Brugerkontoen er deaktiveret."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Kunne ikke logge ind med den angivne legitimation."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Skal indeholde \"username\" og \"password\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,11 +82,12 @@ msgstr "Legitimation til autentificering blev ikke angivet."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Du har ikke lov til at udføre denne handling."
|
msgstr "Du har ikke lov til at udføre denne handling."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Ikke fundet."
|
msgstr "Ikke fundet."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Metoden \"{method}\" er ikke tilladt."
|
msgstr "Metoden \"{method}\" er ikke tilladt."
|
||||||
|
|
||||||
|
@ -83,6 +96,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Kunne ikke efterkomme forespørgslens Accept header."
|
msgstr "Kunne ikke efterkomme forespørgslens Accept header."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Forespørgslens media type, \"{media_type}\", er ikke understøttet."
|
msgstr "Forespørgslens media type, \"{media_type}\", er ikke understøttet."
|
||||||
|
|
||||||
|
@ -90,161 +104,185 @@ msgstr "Forespørgslens media type, \"{media_type}\", er ikke understøttet."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Forespørgslen blev neddroslet."
|
msgstr "Forespørgslen blev neddroslet."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Dette felt er påkrævet."
|
msgstr "Dette felt er påkrævet."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Dette felt må ikke være null."
|
msgstr "Dette felt må ikke være null."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" er ikke en tilladt boolsk værdi."
|
msgstr "\"{input}\" er ikke en tilladt boolsk værdi."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Dette felt må ikke være tomt."
|
msgstr "Dette felt må ikke være tomt."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Tjek at dette felt ikke indeholder flere end {max_length} tegn."
|
msgstr "Tjek at dette felt ikke indeholder flere end {max_length} tegn."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Tjek at dette felt indeholder mindst {min_length} tegn."
|
msgstr "Tjek at dette felt indeholder mindst {min_length} tegn."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Angiv en gyldig e-mailadresse."
|
msgstr "Angiv en gyldig e-mailadresse."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Denne værdi passer ikke med det påkrævede mønster."
|
msgstr "Denne værdi passer ikke med det påkrævede mønster."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Indtast en gyldig \"slug\", bestående af bogstaver, tal, bund- og bindestreger."
|
msgstr "Indtast en gyldig \"slug\", bestående af bogstaver, tal, bund- og bindestreger."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Indtast en gyldig URL."
|
msgstr "Indtast en gyldig URL."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" er ikke et gyldigt UUID."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Et gyldigt heltal er påkrævet."
|
msgstr "Et gyldigt heltal er påkrævet."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Tjek at værdien er mindre end eller lig med {max_value}."
|
msgstr "Tjek at værdien er mindre end eller lig med {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Tjek at værdien er større end eller lig med {min_value}."
|
msgstr "Tjek at værdien er større end eller lig med {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Strengværdien er for stor."
|
msgstr "Strengværdien er for stor."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Et gyldigt tal er påkrævet."
|
msgstr "Et gyldigt tal er påkrævet."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Tjek at der ikke er flere end {max_digits} cifre i alt."
|
msgstr "Tjek at der ikke er flere end {max_digits} cifre i alt."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Tjek at der ikke er flere end {max_decimal_places} cifre efter kommaet."
|
msgstr "Tjek at der ikke er flere end {max_decimal_places} cifre efter kommaet."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Tjek at der ikke er flere end {max_whole_digits} cifre før kommaet."
|
msgstr "Tjek at der ikke er flere end {max_whole_digits} cifre før kommaet."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Datotid har et forkert format. Brug i stedet et af disse formater: {format}."
|
msgstr "Datotid har et forkert format. Brug i stedet et af disse formater: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Forventede en datotid, men fik en dato."
|
msgstr "Forventede en datotid, men fik en dato."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Dato har et forkert format. Brug i stedet et af disse formater: {format}."
|
msgstr "Dato har et forkert format. Brug i stedet et af disse formater: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Forventede en dato men fik en datotid."
|
msgstr "Forventede en dato men fik en datotid."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Klokkeslæt har forkert format. Brug i stedet et af disse formater: {format}. "
|
msgstr "Klokkeslæt har forkert format. Brug i stedet et af disse formater: {format}. "
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" er ikke et gyldigt valg."
|
msgstr "\"{input}\" er ikke et gyldigt valg."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Forventede en liste, men fik noget af typen \"{input_type}\"."
|
msgstr "Forventede en liste, men fik noget af typen \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Ingen medsendt fil."
|
msgstr "Ingen medsendt fil."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Det medsendte data var ikke en fil. Tjek typen af indkodning på formularen."
|
msgstr "Det medsendte data var ikke en fil. Tjek typen af indkodning på formularen."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Filnavnet kunne ikke afgøres."
|
msgstr "Filnavnet kunne ikke afgøres."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Den medsendte fil er tom."
|
msgstr "Den medsendte fil er tom."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Sørg for at filnavnet er højst {max_length} langt (det er {length})."
|
msgstr "Sørg for at filnavnet er højst {max_length} langt (det er {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Medsend et gyldigt billede. Den medsendte fil var enten ikke et billede eller billedfilen var ødelagt."
|
msgstr "Medsend et gyldigt billede. Den medsendte fil var enten ikke et billede eller billedfilen var ødelagt."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Forventede en dictionary, men fik noget af typen \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Ugyldig side \"{page_number}\": {message}."
|
msgstr "Ugyldig side \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Ugyldig cursor"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Ugyldig primærnøgle \"{pk_value}\" - objektet findes ikke."
|
msgstr "Ugyldig primærnøgle \"{pk_value}\" - objektet findes ikke."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Ugyldig type. Forventet værdi er primærnøgle, fik {data_type}."
|
msgstr "Ugyldig type. Forventet værdi er primærnøgle, fik {data_type}."
|
||||||
|
|
||||||
|
@ -261,38 +299,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Ugyldigt hyperlink - objektet findes ikke."
|
msgstr "Ugyldigt hyperlink - objektet findes ikke."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Forkert type. Forventede en URL-streng, fik {data_type}."
|
msgstr "Forkert type. Forventede en URL-streng, fik {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Object med {slug_name}={value} findes ikke."
|
msgstr "Object med {slug_name}={value} findes ikke."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Ugyldig værdi."
|
msgstr "Ugyldig værdi."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Ugyldig data. Forventede en dictionary, men fik {datatype}."
|
msgstr "Ugyldig data. Forventede en dictionary, men fik {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr "Ingen"
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr "Intet at vælge."
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Dette felt skal være unikt."
|
msgstr "Dette felt skal være unikt."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Felterne {field_names} skal udgøre et unikt sæt."
|
msgstr "Felterne {field_names} skal udgøre et unikt sæt."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "Dette felt skal være unikt for \"{date_field}\"-datoen."
|
msgstr "Dette felt skal være unikt for \"{date_field}\"-datoen."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "Dette felt skal være unikt for \"{date_field}\"-måneden."
|
msgstr "Dette felt skal være unikt for \"{date_field}\"-måneden."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "Dette felt skal være unikt for \"{date_field}\"-året."
|
msgstr "Dette felt skal være unikt for \"{date_field}\"-året."
|
||||||
|
|
||||||
|
@ -304,22 +361,14 @@ msgstr "Ugyldig version i \"Accept\" headeren."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Ugyldig version i URL-stien."
|
msgstr "Ugyldig version i URL-stien."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Ugyldig version i hostname."
|
msgstr "Ugyldig version i hostname."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Ugyldig version i forespørgselsparameteren."
|
msgstr "Ugyldig version i forespørgselsparameteren."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Brugerkontoen er deaktiveret."
|
msgstr "Adgang nægtet."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Kunne ikke logge ind med den angivne legitimation."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Skal indeholde \"username\" og \"password\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -3,14 +3,16 @@
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Fabian Büchler <fabian@buechler.io>, 2015
|
||||||
# Thomas Tanner, 2015
|
# Thomas Tanner, 2015
|
||||||
|
# Xavier Ordoquy <xordoquy@linovia.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: German (http://www.transifex.com/projects/p/django-rest-framework/language/de/)\n"
|
"Language-Team: German (http://www.transifex.com/projects/p/django-rest-framework/language/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +20,49 @@ msgstr ""
|
||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Ungültiger basic header. Keine Zugangsdaten angegeben."
|
msgstr "Ungültiger basic header. Keine Zugangsdaten angegeben."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Ungültiger basic header. Zugangsdaten sollen keine Leerzeichen enthalten."
|
msgstr "Ungültiger basic header. Zugangsdaten sollen keine Leerzeichen enthalten."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Ungültiger basic header. Zugangsdaten sind nicht korrekt mit base64 kodiert."
|
msgstr "Ungültiger basic header. Zugangsdaten sind nicht korrekt mit base64 kodiert."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Ungültiger Benutzername/Passwort"
|
msgstr "Ungültiger Benutzername/Passwort"
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Benutzer inaktiv oder gelöscht."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Ungültiger token header. Keine Zugangsdaten angegeben."
|
msgstr "Ungültiger token header. Keine Zugangsdaten angegeben."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Ungültiger token header. Zugangsdaten sollen keine Leerzeichen enthalten."
|
msgstr "Ungültiger token header. Zugangsdaten sollen keine Leerzeichen enthalten."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Ungültiges Token"
|
msgstr "Ungültiges Token"
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Benutzer inaktiv oder gelöscht."
|
msgstr "Benutzerkonto ist gesperrt."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Kann nicht mit den angegeben Zugangsdaten anmelden."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "\"username\" und \"password\" sind erforderlich."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,19 +84,21 @@ msgstr "Anmeldedaten fehlen."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Sie sind nicht berechtigt, diese Aktion durchzuführen."
|
msgstr "Sie sind nicht berechtigt, diese Aktion durchzuführen."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Nicht gefunden."
|
msgstr "Nicht gefunden."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Methode \"{method}\" nicht erlaubt."
|
msgstr "Methode \"{method}\" nicht erlaubt."
|
||||||
|
|
||||||
#: exceptions.py:109
|
#: exceptions.py:109
|
||||||
msgid "Could not satisfy the request Accept header."
|
msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Kann den Accept header der Anfrage nicht erfüllen."
|
msgstr "Kann die Accept Kopfzeile der Anfrage nicht erfüllen."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Nicht unterstützter Medientyp \"{media_type}\" in der Anfrage."
|
msgstr "Nicht unterstützter Medientyp \"{media_type}\" in der Anfrage."
|
||||||
|
|
||||||
|
@ -90,236 +106,271 @@ msgstr "Nicht unterstützter Medientyp \"{media_type}\" in der Anfrage."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Die Anfrage wurde gedrosselt."
|
msgstr "Die Anfrage wurde gedrosselt."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Dieses Feld ist erforderlich."
|
msgstr "Dieses Feld ist erforderlich."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Dieses Feld darf nicht Null sein."
|
msgstr "Dieses Feld darf nicht Null sein."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" ist kein gültiger Boole'scher Wert."
|
msgstr "\"{input}\" ist kein gültiger Wahrheitswert."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Dieses Feld darf nicht leer sein."
|
msgstr "Dieses Feld darf nicht leer sein."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Stelle sicher, dass dieses Feld nicht mehr als {max_length} Zeichen lang ist."
|
msgstr "Stelle sicher, dass dieses Feld nicht mehr als {max_length} Zeichen lang ist."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Stelle sicher, dass dieses Feld mindestens {min_length} Zeichen lang ist."
|
msgstr "Stelle sicher, dass dieses Feld mindestens {min_length} Zeichen lang ist."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Gebe eine gültige E-Mail Adresse an."
|
msgstr "Gib eine gültige E-Mail Adresse an."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Dieser Wert passt nicht zu dem erforderlichen Muster."
|
msgstr "Dieser Wert passt nicht zu dem erforderlichen Muster."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Gebe ein gültiges \"slug\" aus Buchstaben, Ziffern, Unterstrichen und Minuszeichen ein."
|
msgstr "Gib ein gültiges \"slug\" aus Buchstaben, Ziffern, Unterstrichen und Minuszeichen ein."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Gebe eine gültige URL ein."
|
msgstr "Gib eine gültige URL ein."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" ist keine gültige UUID."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Eine gültige Ganzzahl ist erforderlich."
|
msgstr "Eine gültige Ganzzahl ist erforderlich."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Stelle sicher, dass dieser Wert kleiner oder gleich {max_value} ist."
|
msgstr "Stelle sicher, dass dieser Wert kleiner oder gleich {max_value} ist."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Stelle sicher, dass dieser Wert größer oder gleich {max_value} ist."
|
msgstr "Stelle sicher, dass dieser Wert größer oder gleich {min_value} ist."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Zeichenkette zu lang."
|
msgstr "Zeichenkette zu lang."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Eine gültige Zahl ist erforderlich."
|
msgstr "Eine gültige Zahl ist erforderlich."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Stelle sicher, dass es insgesamt nicht mehr als {max_digits} Ziffern lang ist."
|
msgstr "Stelle sicher, dass es insgesamt nicht mehr als {max_digits} Ziffern lang ist."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Stelle sicher, dass es nicht mehr als {max_decimal_places} Nachkommastellen lang ist."
|
msgstr "Stelle sicher, dass es nicht mehr als {max_decimal_places} Nachkommastellen lang ist."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Stelle sicher, dass es nicht mehr als {max_whole_places} Stellen vor dem Komma lang ist."
|
msgstr "Stelle sicher, dass es nicht mehr als {max_whole_digits} Stellen vor dem Komma lang ist."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Datum- und Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
msgstr "Datums- und Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Erwarte eine Datum- und Zeitangabe, erhielt aber ein Datum."
|
msgstr "Erwarte eine Datums- und Zeitangabe, erhielt aber ein Datum."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Datum hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
msgstr "Datum hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Erwarte ein Datum, erhielt aber eine Datum- und Zeitangabe."
|
msgstr "Erwarte ein Datum, erhielt aber eine Datums- und Zeitangabe."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
msgstr "Zeitangabe hat das falsche Format. Nutze stattdessen eines dieser Formate: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" ist keine gültige Option."
|
msgstr "\"{input}\" ist keine gültige Option."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Erwarte eine Liste von Elementen, erhielt aber den Typ \"{input_type}\"."
|
msgstr "Erwarte eine Liste von Elementen, erhielt aber den Typ \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Es wurde keine Datei übermittelt."
|
msgstr "Es wurde keine Datei übermittelt."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Die übermittelten Daten sind keine Datei. Prüfe den Kodierungstyp im Formular."
|
msgstr "Die übermittelten Daten stellen keine Datei dar. Prüfe den Kodierungstyp im Formular."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Der Dateiname konnte nicht ermittelt werden."
|
msgstr "Der Dateiname konnte nicht ermittelt werden."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Die übermittelte Datei ist leer."
|
msgstr "Die übermittelte Datei ist leer."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr ""
|
msgstr "Stelle sicher, dass dieser Dateiname höchstens {max_length} Zeichen lang ist (er hat {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr "Lade ein gültiges Bild hoch. Die hochgeladene Datei ist entweder kein Bild oder ein beschädigtes Bild."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Erwarte ein Dictionary mit Elementen, erhielt aber den Typ \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr ""
|
msgstr "Ungültige Seite \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Ungültiger Zeiger"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr ""
|
msgstr "Ungültiger pk \"{pk_value}\" - Object existiert nicht."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Falscher Typ. Erwarte pk Wert, erhielt aber {data_type}."
|
||||||
|
|
||||||
#: relations.py:157
|
#: relations.py:157
|
||||||
msgid "Invalid hyperlink - No URL match."
|
msgid "Invalid hyperlink - No URL match."
|
||||||
msgstr ""
|
msgstr "Ungültiger Hyperlink - entspricht keiner URL."
|
||||||
|
|
||||||
#: relations.py:158
|
#: relations.py:158
|
||||||
msgid "Invalid hyperlink - Incorrect URL match."
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
msgstr ""
|
msgstr "Ungültiger Hyperlink - URL stimmt nicht überein."
|
||||||
|
|
||||||
#: relations.py:159
|
#: relations.py:159
|
||||||
msgid "Invalid hyperlink - Object does not exist."
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr "Ungültiger Hyperlink - Objekt existiert nicht."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Falscher Typ. Erwarte URL Zeichenkette, erhielt aber {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr "Objekt mit {slug_name}={value} existiert nicht."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Ungültiger Wert."
|
msgstr "Ungültiger Wert."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Ungültige Daten. Dictionary erwartet, aber {datatype} erhalten."
|
msgstr "Ungültige Daten. Dictionary erwartet, aber {datatype} erhalten."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Dieses Feld muss eineindeutig sein."
|
msgstr "Dieses Feld muss eindeutig sein."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr "Die Felder {field_names} müssen eine eindeutige Menge bilden."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Datums eindeutig sein."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Monats eindeutig sein."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr "Dieses Feld muss bezüglich des \"{date_field}\" Jahrs eindeutig sein."
|
||||||
|
|
||||||
#: versioning.py:39
|
#: versioning.py:39
|
||||||
msgid "Invalid version in \"Accept\" header."
|
msgid "Invalid version in \"Accept\" header."
|
||||||
msgstr ""
|
msgstr "Ungültige Version in der \"Accept\" Kopfzeile."
|
||||||
|
|
||||||
#: versioning.py:70 versioning.py:112
|
#: versioning.py:70 versioning.py:112
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr "Ungültige Version im URL Pfad."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr "Ungültige Version im Hostname."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr "Ungültige Version im Anfrageparameter."
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
|
||||||
msgid "User account is disabled."
|
|
||||||
msgstr "Benutzerkonto ist gesperrt."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Kann nicht mit den angegeben Zugangsdaten anmelden."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "\"username\" und \"password\" sind erforderlich."
|
|
||||||
|
|
Binary file not shown.
|
@ -7,9 +7,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: English (http://www.transifex.com/projects/p/django-rest-framework/language/en/)\n"
|
"Language-Team: English (http://www.transifex.com/projects/p/django-rest-framework/language/en/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -17,37 +17,49 @@ msgstr ""
|
||||||
"Language: en\n"
|
"Language: en\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Invalid basic header. No credentials provided."
|
msgstr "Invalid basic header. No credentials provided."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Invalid basic header. Credentials string should not contain spaces."
|
msgstr "Invalid basic header. Credentials string should not contain spaces."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Invalid basic header. Credentials not correctly base64 encoded."
|
msgstr "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Invalid username/password."
|
msgstr "Invalid username/password."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "User inactive or deleted."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Invalid token header. No credentials provided."
|
msgstr "Invalid token header. No credentials provided."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Invalid token header. Token string should not contain spaces."
|
msgstr "Invalid token header. Token string should not contain spaces."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Invalid token."
|
msgstr "Invalid token."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "User inactive or deleted."
|
msgstr "User account is disabled."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Unable to log in with provided credentials."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Must include \"username\" and \"password\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -69,11 +81,12 @@ msgstr "Authentication credentials were not provided."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "You do not have permission to perform this action."
|
msgstr "You do not have permission to perform this action."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Not found."
|
msgstr "Not found."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Method \"{method}\" not allowed."
|
msgstr "Method \"{method}\" not allowed."
|
||||||
|
|
||||||
|
@ -82,6 +95,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Could not satisfy the request Accept header."
|
msgstr "Could not satisfy the request Accept header."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Unsupported media type \"{media_type}\" in request."
|
msgstr "Unsupported media type \"{media_type}\" in request."
|
||||||
|
|
||||||
|
@ -89,161 +103,185 @@ msgstr "Unsupported media type \"{media_type}\" in request."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Request was throttled."
|
msgstr "Request was throttled."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "This field is required."
|
msgstr "This field is required."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "This field may not be null."
|
msgstr "This field may not be null."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" is not a valid boolean."
|
msgstr "\"{input}\" is not a valid boolean."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "This field may not be blank."
|
msgstr "This field may not be blank."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Ensure this field has no more than {max_length} characters."
|
msgstr "Ensure this field has no more than {max_length} characters."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Ensure this field has at least {min_length} characters."
|
msgstr "Ensure this field has at least {min_length} characters."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Enter a valid email address."
|
msgstr "Enter a valid email address."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "This value does not match the required pattern."
|
msgstr "This value does not match the required pattern."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Enter a valid \"slug\" consisting of letters, numbers, underscores or hyphens."
|
msgstr "Enter a valid \"slug\" consisting of letters, numbers, underscores or hyphens."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Enter a valid URL."
|
msgstr "Enter a valid URL."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr "\"{value}\" is not a valid UUID."
|
msgstr "\"{value}\" is not a valid UUID."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "A valid integer is required."
|
msgstr "A valid integer is required."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Ensure this value is less than or equal to {max_value}."
|
msgstr "Ensure this value is less than or equal to {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Ensure this value is greater than or equal to {min_value}."
|
msgstr "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "String value too large."
|
msgstr "String value too large."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "A valid number is required."
|
msgstr "A valid number is required."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Ensure that there are no more than {max_digits} digits in total."
|
msgstr "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Ensure that there are no more than {max_decimal_places} decimal places."
|
msgstr "Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Ensure that there are no more than {max_whole_digits} digits before the decimal point."
|
msgstr "Ensure that there are no more than {max_whole_digits} digits before the decimal point."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgstr "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Expected a datetime but got a date."
|
msgstr "Expected a datetime but got a date."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Date has wrong format. Use one of these formats instead: {format}."
|
msgstr "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Expected a date but got a datetime."
|
msgstr "Expected a date but got a datetime."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Time has wrong format. Use one of these formats instead: {format}."
|
msgstr "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" is not a valid choice."
|
msgstr "\"{input}\" is not a valid choice."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Expected a list of items but got type \"{input_type}\"."
|
msgstr "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "No file was submitted."
|
msgstr "No file was submitted."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "The submitted data was not a file. Check the encoding type on the form."
|
msgstr "The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "No filename could be determined."
|
msgstr "No filename could be determined."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "The submitted file is empty."
|
msgstr "The submitted file is empty."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Ensure this filename has at most {max_length} characters (it has {length})."
|
msgstr "Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
|
msgstr "Upload a valid image. The file you uploaded was either not an image or a corrupted image."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr "Expected a dictionary of items but got type \"{input_type}\"."
|
msgstr "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Invalid page \"{page_number}\": {message}."
|
msgstr "Invalid page \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr "Invalid cursor"
|
msgstr "Invalid cursor"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Invalid pk \"{pk_value}\" - object does not exist."
|
msgstr "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Incorrect type. Expected pk value, received {data_type}."
|
msgstr "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
|
||||||
|
@ -260,38 +298,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Invalid hyperlink - Object does not exist."
|
msgstr "Invalid hyperlink - Object does not exist."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Incorrect type. Expected URL string, received {data_type}."
|
msgstr "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Object with {slug_name}={value} does not exist."
|
msgstr "Object with {slug_name}={value} does not exist."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Invalid value."
|
msgstr "Invalid value."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Invalid data. Expected a dictionary, but got {datatype}."
|
msgstr "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr "None"
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr "No items to select."
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "This field must be unique."
|
msgstr "This field must be unique."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "The fields {field_names} must make a unique set."
|
msgstr "The fields {field_names} must make a unique set."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "This field must be unique for the \"{date_field}\" date."
|
msgstr "This field must be unique for the \"{date_field}\" date."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "This field must be unique for the \"{date_field}\" month."
|
msgstr "This field must be unique for the \"{date_field}\" month."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "This field must be unique for the \"{date_field}\" year."
|
msgstr "This field must be unique for the \"{date_field}\" year."
|
||||||
|
|
||||||
|
@ -303,22 +360,14 @@ msgstr "Invalid version in \"Accept\" header."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Invalid version in URL path."
|
msgstr "Invalid version in URL path."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Invalid version in hostname."
|
msgstr "Invalid version in hostname."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Invalid version in query parameter."
|
msgstr "Invalid version in query parameter."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "User account is disabled."
|
msgstr "Permission denied."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Unable to log in with provided credentials."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Must include \"username\" and \"password\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:40+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -17,36 +17,48 @@ msgstr ""
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
|
@ -69,11 +81,12 @@ msgstr ""
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:93 views.py:77
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -82,6 +95,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -89,159 +103,183 @@ msgstr ""
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_decimal_places} decimal places."
|
msgid "Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid "The submitted data was not a file. Check the encoding type on the form."
|
msgid "The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -258,38 +296,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -301,26 +358,14 @@ msgstr ""
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:81
|
#: views.py:85
|
||||||
msgid "Permission denied."
|
msgid "Permission denied."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
|
||||||
msgid "User account is disabled."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr ""
|
|
||||||
|
|
Binary file not shown.
|
@ -3,16 +3,17 @@
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# nnrcschmdt <e.rico.schmidt@gmail.com>, 2015
|
||||||
# José Padilla <jpadilla@webapplicate.com>, 2015
|
# José Padilla <jpadilla@webapplicate.com>, 2015
|
||||||
# Miguel González <migonzalvar@activitycentral.com>, 2015
|
# Miguel González <migonzalvar@gmail.com>, 2015
|
||||||
# Sergio Infante <rsinfante@gmail.com>, 2015
|
# Sergio Infante <rsinfante@gmail.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Spanish (http://www.transifex.com/projects/p/django-rest-framework/language/es/)\n"
|
"Language-Team: Spanish (http://www.transifex.com/projects/p/django-rest-framework/language/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -20,37 +21,49 @@ msgstr ""
|
||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Cabecera básica inválida. Las credenciales no fueron suministradas."
|
msgstr "Cabecera básica inválida. Las credenciales no fueron suministradas."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Cabecera básica inválida. La cadena con las credenciales no debe contener espacios."
|
msgstr "Cabecera básica inválida. La cadena con las credenciales no debe contener espacios."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Cabecera básica inválida. Las credenciales incorrectamente codificadas en base64."
|
msgstr "Cabecera básica inválida. Las credenciales incorrectamente codificadas en base64."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Nombre de usuario/contraseña inválidos."
|
msgstr "Nombre de usuario/contraseña inválidos."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Usuario inactivo o borrado."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Cabecera token inválida. Las credenciales no fueron suministradas."
|
msgstr "Cabecera token inválida. Las credenciales no fueron suministradas."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Cabecera token inválida. La cadena token no debe contener espacios."
|
msgstr "Cabecera token inválida. La cadena token no debe contener espacios."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Token inválido."
|
msgstr "Token inválido."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Usuario inactivo o borrado."
|
msgstr "Cuenta de usuario está deshabilitada."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "No puede iniciar sesión con las credenciales proporcionadas."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Debe incluir \"username\" y \"password\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -72,11 +85,12 @@ msgstr "Las credenciales de autenticación no se proveyeron."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Usted no tiene permiso para realizar esta acción."
|
msgstr "Usted no tiene permiso para realizar esta acción."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "No encontrado."
|
msgstr "No encontrado."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Método \"{method}\" no permitido."
|
msgstr "Método \"{method}\" no permitido."
|
||||||
|
|
||||||
|
@ -85,6 +99,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "No se ha podido satisfacer la solicitud de cabecera de Accept."
|
msgstr "No se ha podido satisfacer la solicitud de cabecera de Accept."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Tipo de medio \"{media_type}\" incompatible en la solicitud."
|
msgstr "Tipo de medio \"{media_type}\" incompatible en la solicitud."
|
||||||
|
|
||||||
|
@ -92,161 +107,185 @@ msgstr "Tipo de medio \"{media_type}\" incompatible en la solicitud."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Solicitud fue regulada (throttled)."
|
msgstr "Solicitud fue regulada (throttled)."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Este campo es requerido."
|
msgstr "Este campo es requerido."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Este campo no puede ser nulo."
|
msgstr "Este campo no puede ser nulo."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" no es un booleano válido."
|
msgstr "\"{input}\" no es un booleano válido."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Este campo no puede estar en blanco."
|
msgstr "Este campo no puede estar en blanco."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Asegúrese de que este campo no tenga más de {max_length} caracteres."
|
msgstr "Asegúrese de que este campo no tenga más de {max_length} caracteres."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Asegúrese de que este campo tenga al menos {min_length} caracteres."
|
msgstr "Asegúrese de que este campo tenga al menos {min_length} caracteres."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Introduzca una dirección de correo electrónico válida."
|
msgstr "Introduzca una dirección de correo electrónico válida."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Este valor no coincide con el patrón requerido."
|
msgstr "Este valor no coincide con el patrón requerido."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Introduzca un \"slug\" válido consistente en letras, números, guiones o guiones bajos."
|
msgstr "Introduzca un \"slug\" válido consistente en letras, números, guiones o guiones bajos."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Introduzca una URL válida."
|
msgstr "Introduzca una URL válida."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" no es un UUID válido."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Introduzca un número entero válido."
|
msgstr "Introduzca un número entero válido."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Asegúrese de que este valor es menor o igual a {max_value}."
|
msgstr "Asegúrese de que este valor es menor o igual a {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Asegúrese de que este valor es mayor o igual a {min_value}."
|
msgstr "Asegúrese de que este valor es mayor o igual a {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Cadena demasiado larga."
|
msgstr "Cadena demasiado larga."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Se requiere un número válido."
|
msgstr "Se requiere un número válido."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Asegúrese de que no haya más de {max_digits} dígitos en total."
|
msgstr "Asegúrese de que no haya más de {max_digits} dígitos en total."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Asegúrese de que no haya más de {max_decimal_places} decimales."
|
msgstr "Asegúrese de que no haya más de {max_decimal_places} decimales."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Asegúrese de que no haya más de {max_whole_digits} dígitos en la parte entera."
|
msgstr "Asegúrese de que no haya más de {max_whole_digits} dígitos en la parte entera."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Fecha/hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
msgstr "Fecha/hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Se esperaba un fecha/hora en vez de una fecha."
|
msgstr "Se esperaba un fecha/hora en vez de una fecha."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Fecha con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
msgstr "Fecha con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Se esperaba una fecha en vez de una fecha/hora."
|
msgstr "Se esperaba una fecha en vez de una fecha/hora."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
msgstr "Hora con formato erróneo. Use uno de los siguientes formatos en su lugar: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" no es una elección válida."
|
msgstr "\"{input}\" no es una elección válida."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Se esperaba una lista de elementos en vez del tipo \"{input_type}\"."
|
msgstr "Se esperaba una lista de elementos en vez del tipo \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "No se envió ningún archivo."
|
msgstr "No se envió ningún archivo."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "La información enviada no era un archivo. Compruebe el tipo de codificación del formulario."
|
msgstr "La información enviada no era un archivo. Compruebe el tipo de codificación del formulario."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "No se pudo determinar un nombre de archivo."
|
msgstr "No se pudo determinar un nombre de archivo."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "El archivo enviado está vació."
|
msgstr "El archivo enviado está vació."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Asegúrese de que el nombre de archivo no tenga más de {max_length} caracteres (tiene {length})."
|
msgstr "Asegúrese de que el nombre de archivo no tenga más de {max_length} caracteres (tiene {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Adjunte una imagen válida. El archivo adjunto o bien no es una imagen o bien está dañado."
|
msgstr "Adjunte una imagen válida. El archivo adjunto o bien no es una imagen o bien está dañado."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Se esperaba un diccionario de elementos en vez del tipo \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Página \"{page_number}\" inválida: {message}."
|
msgstr "Página \"{page_number}\" inválida: {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Cursor inválido"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Clave primaria \"{pk_value}\" inválida - objeto no existe."
|
msgstr "Clave primaria \"{pk_value}\" inválida - objeto no existe."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Tipo incorrecto. Se esperaba valor de clave primaria y se recibió {data_type}."
|
msgstr "Tipo incorrecto. Se esperaba valor de clave primaria y se recibió {data_type}."
|
||||||
|
|
||||||
|
@ -263,38 +302,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Hiperenlace inválido - Objeto no existe."
|
msgstr "Hiperenlace inválido - Objeto no existe."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Tipo incorrecto. Se esperaba una URL y se recibió {data_type}."
|
msgstr "Tipo incorrecto. Se esperaba una URL y se recibió {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Objeto con {slug_name}={value} no existe."
|
msgstr "Objeto con {slug_name}={value} no existe."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Valor inválido."
|
msgstr "Valor inválido."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Datos inválidos. Se esperaba un diccionario pero es un {datatype}."
|
msgstr "Datos inválidos. Se esperaba un diccionario pero es un {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr "Ninguno"
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr "No hay elementos para seleccionar."
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Este campo debe ser único."
|
msgstr "Este campo debe ser único."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Los campos {field_names} deben formar un conjunto único."
|
msgstr "Los campos {field_names} deben formar un conjunto único."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "Este campo debe ser único para el día \"{date_field}\"."
|
msgstr "Este campo debe ser único para el día \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "Este campo debe ser único para el mes \"{date_field}\"."
|
msgstr "Este campo debe ser único para el mes \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "Este campo debe ser único para el año \"{date_field}\"."
|
msgstr "Este campo debe ser único para el año \"{date_field}\"."
|
||||||
|
|
||||||
|
@ -306,22 +364,14 @@ msgstr "Versión inválida en la cabecera \"Accept\"."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Versión inválida en la ruta de la URL."
|
msgstr "Versión inválida en la ruta de la URL."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Versión inválida en el nombre de host."
|
msgstr "Versión inválida en el nombre de host."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Versión inválida en el parámetro de consulta."
|
msgstr "Versión inválida en el parámetro de consulta."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Cuenta de usuario está deshabilitada."
|
msgstr "Permiso denegado."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "No puede iniciar sesión con las credenciales proporcionadas."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Debe incluir \"username\" y \"password\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Estonian (http://www.transifex.com/projects/p/django-rest-framework/language/et/)\n"
|
"Language-Team: Estonian (http://www.transifex.com/projects/p/django-rest-framework/language/et/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,303 +18,41 @@ msgstr ""
|
||||||
"Language: et\n"
|
"Language: et\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr "Sobimatu lihtpäis. Kasutajatunnus on esitamata."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr "Sobimatu lihtpäis. Kasutajatunnus ei tohi sisaldada tühikuid."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr "Sobimatu lihtpäis. Kasutajatunnus pole korrektselt base64-kodeeritud."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Vale kasutajatunnus/salasõna."
|
msgstr "Sobimatu kasutajatunnus/salasõna."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
msgid "Invalid token header. No credentials provided."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authentication.py:159
|
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authentication.py:168
|
|
||||||
msgid "Invalid token."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authentication.py:171
|
|
||||||
msgid "User inactive or deleted."
|
msgid "User inactive or deleted."
|
||||||
msgstr "Kasutaja on inaktiivne või kustutatud."
|
msgstr "Kasutaja on inaktiivne või kustutatud."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: authentication.py:167
|
||||||
msgid "A server error occurred."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr ""
|
msgstr "Sobimatu lubakaardi päis. Kasutajatunnus on esitamata."
|
||||||
|
|
||||||
#: exceptions.py:73
|
#: authentication.py:170
|
||||||
msgid "Malformed request."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr ""
|
msgstr "Sobimatu lubakaardi päis. Loa sõne ei tohi sisaldada tühikuid."
|
||||||
|
|
||||||
#: exceptions.py:78
|
#: authentication.py:179
|
||||||
msgid "Incorrect authentication credentials."
|
msgid "Invalid token."
|
||||||
msgstr ""
|
msgstr "Sobimatu lubakaart."
|
||||||
|
|
||||||
#: exceptions.py:83
|
|
||||||
msgid "Authentication credentials were not provided."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:88
|
|
||||||
msgid "You do not have permission to perform this action."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:93
|
|
||||||
msgid "Not found."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:98
|
|
||||||
msgid "Method \"{method}\" not allowed."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:109
|
|
||||||
msgid "Could not satisfy the request Accept header."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:121
|
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: exceptions.py:134
|
|
||||||
msgid "Request was throttled."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
|
||||||
#: validators.py:155
|
|
||||||
msgid "This field is required."
|
|
||||||
msgstr "Väli on kohustuslik."
|
|
||||||
|
|
||||||
#: fields.py:154
|
|
||||||
msgid "This field may not be null."
|
|
||||||
msgstr "Väli ei tohi olla tühi."
|
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:550
|
|
||||||
msgid "This field may not be blank."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:552
|
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:587
|
|
||||||
msgid "Enter a valid email address."
|
|
||||||
msgstr "Sisesta kehtiv e-posti aadress."
|
|
||||||
|
|
||||||
#: fields.py:604
|
|
||||||
msgid "This value does not match the required pattern."
|
|
||||||
msgstr "Väärtus ei ühti etteantud mustriga."
|
|
||||||
|
|
||||||
#: fields.py:615
|
|
||||||
msgid ""
|
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
|
||||||
"hyphens."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:627
|
|
||||||
msgid "Enter a valid URL."
|
|
||||||
msgstr "Sisesta korrektne URL."
|
|
||||||
|
|
||||||
#: fields.py:638
|
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:657
|
|
||||||
msgid "A valid integer is required."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
|
||||||
msgstr "Veendu, et väärtus on väiksem kui või võrdne väärtusega {max_value}. "
|
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
|
||||||
msgstr "Veendu, et väärtus on suurem kui või võrdne väärtusega {min_value}."
|
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
|
||||||
msgid "String value too large."
|
|
||||||
msgstr "Sõne on liiga pikk."
|
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
|
||||||
msgid "A valid number is required."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:727
|
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
|
||||||
msgstr "Veendu, et kokku pole rohkem kui {max_digits}."
|
|
||||||
|
|
||||||
#: fields.py:728
|
|
||||||
msgid ""
|
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
|
||||||
msgstr "Veendu, et komakohti pole rohkem kui {max_decimal_places}. "
|
|
||||||
|
|
||||||
#: fields.py:729
|
|
||||||
msgid ""
|
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
|
||||||
"decimal point."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:813
|
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:814
|
|
||||||
msgid "Expected a datetime but got a date."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:878
|
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:879
|
|
||||||
msgid "Expected a date but got a datetime."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:936
|
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
|
||||||
msgid "\"{input}\" is not a valid choice."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1067
|
|
||||||
msgid "No file was submitted."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1068
|
|
||||||
msgid ""
|
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1069
|
|
||||||
msgid "No filename could be determined."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1070
|
|
||||||
msgid "The submitted file is empty."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1071
|
|
||||||
msgid ""
|
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1113
|
|
||||||
msgid ""
|
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
|
||||||
"corrupted image."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: fields.py:1188
|
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pagination.py:221
|
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: pagination.py:442
|
|
||||||
msgid "Invalid cursor"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:133
|
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:134
|
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:157
|
|
||||||
msgid "Invalid hyperlink - No URL match."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:158
|
|
||||||
msgid "Invalid hyperlink - Incorrect URL match."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:159
|
|
||||||
msgid "Invalid hyperlink - Object does not exist."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:160
|
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:295
|
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: relations.py:296
|
|
||||||
msgid "Invalid value."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: serializers.py:299
|
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: validators.py:22
|
|
||||||
msgid "This field must be unique."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: validators.py:76
|
|
||||||
msgid "The fields {field_names} must make a unique set."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: validators.py:219
|
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: validators.py:234
|
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: validators.py:247
|
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: versioning.py:39
|
|
||||||
msgid "Invalid version in \"Accept\" header."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: versioning.py:70 versioning.py:112
|
|
||||||
msgid "Invalid version in URL path."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: versioning.py:138
|
|
||||||
msgid "Invalid version in hostname."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: versioning.py:160
|
|
||||||
msgid "Invalid version in query parameter."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: authtoken/serializers.py:20
|
||||||
msgid "User account is disabled."
|
msgid "User account is disabled."
|
||||||
msgstr "Kasutajakonto on suletud"
|
msgstr "Kasutajakonto on suletud."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
#: authtoken/serializers.py:23
|
||||||
msgid "Unable to log in with provided credentials."
|
msgid "Unable to log in with provided credentials."
|
||||||
|
@ -323,3 +61,314 @@ msgstr "Sisselogimine antud tunnusega ebaõnnestus."
|
||||||
#: authtoken/serializers.py:26
|
#: authtoken/serializers.py:26
|
||||||
msgid "Must include \"username\" and \"password\"."
|
msgid "Must include \"username\" and \"password\"."
|
||||||
msgstr "Peab sisaldama \"kasutajatunnust\" ja \"slasõna\"."
|
msgstr "Peab sisaldama \"kasutajatunnust\" ja \"slasõna\"."
|
||||||
|
|
||||||
|
#: exceptions.py:38
|
||||||
|
msgid "A server error occurred."
|
||||||
|
msgstr "Viga serveril."
|
||||||
|
|
||||||
|
#: exceptions.py:73
|
||||||
|
msgid "Malformed request."
|
||||||
|
msgstr "Väändunud päring."
|
||||||
|
|
||||||
|
#: exceptions.py:78
|
||||||
|
msgid "Incorrect authentication credentials."
|
||||||
|
msgstr "Ebakorrektne autentimistunnus."
|
||||||
|
|
||||||
|
#: exceptions.py:83
|
||||||
|
msgid "Authentication credentials were not provided."
|
||||||
|
msgstr "Autentimistunnus on esitamata."
|
||||||
|
|
||||||
|
#: exceptions.py:88
|
||||||
|
msgid "You do not have permission to perform this action."
|
||||||
|
msgstr "Teil puuduvad piisavad õigused selle tegevuse teostamiseks."
|
||||||
|
|
||||||
|
#: exceptions.py:93 views.py:78
|
||||||
|
msgid "Not found."
|
||||||
|
msgstr "Ei leidnud."
|
||||||
|
|
||||||
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Method \"{method}\" not allowed."
|
||||||
|
msgstr "Meetod \"{method}\" pole lubatud."
|
||||||
|
|
||||||
|
#: exceptions.py:109
|
||||||
|
msgid "Could not satisfy the request Accept header."
|
||||||
|
msgstr "Päringu Accept-päist ei suutnud täita."
|
||||||
|
|
||||||
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
|
msgstr "Meedia tüüpi {media_type} päringus ei toetata."
|
||||||
|
|
||||||
|
#: exceptions.py:134
|
||||||
|
msgid "Request was throttled."
|
||||||
|
msgstr "Liiga palju päringuid."
|
||||||
|
|
||||||
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
|
#: validators.py:160
|
||||||
|
msgid "This field is required."
|
||||||
|
msgstr "Väli on kohustuslik."
|
||||||
|
|
||||||
|
#: fields.py:163
|
||||||
|
msgid "This field may not be null."
|
||||||
|
msgstr "Väli ei tohi olla tühi."
|
||||||
|
|
||||||
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
|
msgstr "\"{input}\" pole kehtiv kahendarv."
|
||||||
|
|
||||||
|
#: fields.py:559
|
||||||
|
msgid "This field may not be blank."
|
||||||
|
msgstr "See väli ei tohi olla tühi."
|
||||||
|
|
||||||
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
|
msgstr "Veendu, et see väli poleks pikem kui {max_length} tähemärki."
|
||||||
|
|
||||||
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
|
msgstr "Veendu, et see väli oleks vähemalt {min_length} tähemärki pikk."
|
||||||
|
|
||||||
|
#: fields.py:598
|
||||||
|
msgid "Enter a valid email address."
|
||||||
|
msgstr "Sisestage kehtiv e-posti aadress."
|
||||||
|
|
||||||
|
#: fields.py:609
|
||||||
|
msgid "This value does not match the required pattern."
|
||||||
|
msgstr "Väärtus ei ühti etteantud mustriga."
|
||||||
|
|
||||||
|
#: fields.py:620
|
||||||
|
msgid ""
|
||||||
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
|
"hyphens."
|
||||||
|
msgstr "Sisestage kehtiv \"slug\", mis koosneks tähtedest, numbritest, ala- või sidekriipsudest."
|
||||||
|
|
||||||
|
#: fields.py:632
|
||||||
|
msgid "Enter a valid URL."
|
||||||
|
msgstr "Sisestage korrektne URL."
|
||||||
|
|
||||||
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
|
msgstr "\"{value}\" pole kehtiv UUID."
|
||||||
|
|
||||||
|
#: fields.py:679
|
||||||
|
msgid "A valid integer is required."
|
||||||
|
msgstr "Sisendiks peab olema täisarv."
|
||||||
|
|
||||||
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
|
msgstr "Veenduge, et väärtus on väiksem kui või võrdne väärtusega {max_value}. "
|
||||||
|
|
||||||
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
msgstr "Veenduge, et väärtus on suurem kui või võrdne väärtusega {min_value}."
|
||||||
|
|
||||||
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
|
msgid "String value too large."
|
||||||
|
msgstr "Sõne on liiga pikk."
|
||||||
|
|
||||||
|
#: fields.py:714 fields.py:747
|
||||||
|
msgid "A valid number is required."
|
||||||
|
msgstr "Sisendiks peab olema arv."
|
||||||
|
|
||||||
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
msgstr "Veenduge, et kokku pole rohkem kui {max_digits} numbit."
|
||||||
|
|
||||||
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
msgstr "Veenduge, et komakohti pole rohkem kui {max_decimal_places}. "
|
||||||
|
|
||||||
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
|
"decimal point."
|
||||||
|
msgstr "Veenduge, et täiskohti poleks rohkem kui {max_whole_digits}."
|
||||||
|
|
||||||
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "Valesti formaaditud kuupäev-kellaaeg. Kasutage mõnda neist: {format}."
|
||||||
|
|
||||||
|
#: fields.py:843
|
||||||
|
msgid "Expected a datetime but got a date."
|
||||||
|
msgstr "Ootasin kuupäev-kellaaeg andmetüüpi, kuid sain hoopis kuupäeva."
|
||||||
|
|
||||||
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "Valesti formaaditud kuupäev. Kasutage mõnda neist: {format}."
|
||||||
|
|
||||||
|
#: fields.py:908
|
||||||
|
msgid "Expected a date but got a datetime."
|
||||||
|
msgstr "Ootasin kuupäeva andmetüüpi, kuid sain hoopis kuupäev-kellaaja."
|
||||||
|
|
||||||
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "Valesti formaaditud kellaaeg. Kasutage mõnda neist: {format}."
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid choice."
|
||||||
|
msgstr "\"{input}\" on sobimatu valik."
|
||||||
|
|
||||||
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
msgstr "Ootasin kirjete järjendit, kuid sain \"{input_type}\" - tüübi."
|
||||||
|
|
||||||
|
#: fields.py:1129
|
||||||
|
msgid "No file was submitted."
|
||||||
|
msgstr "Ühtegi faili ei esitatud."
|
||||||
|
|
||||||
|
#: fields.py:1130
|
||||||
|
msgid ""
|
||||||
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
msgstr "Esitatud andmetes ei olnud faili. Kontrollige vormi kodeeringut."
|
||||||
|
|
||||||
|
#: fields.py:1131
|
||||||
|
msgid "No filename could be determined."
|
||||||
|
msgstr "Ei suutnud tuvastada failinime."
|
||||||
|
|
||||||
|
#: fields.py:1132
|
||||||
|
msgid "The submitted file is empty."
|
||||||
|
msgstr "Esitatud fail oli tühi."
|
||||||
|
|
||||||
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
msgstr "Veenduge, et failinimi oleks maksimaalselt {max_length} tähemärki pikk (praegu on {length})."
|
||||||
|
|
||||||
|
#: fields.py:1175
|
||||||
|
msgid ""
|
||||||
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
|
"corrupted image."
|
||||||
|
msgstr "Laadige üles kehtiv pildifail. Üles laetud fail ei olnud pilt või oli see katki."
|
||||||
|
|
||||||
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
msgstr "Ootasin kirjete sõnastikku, kuid sain \"{input_type}\"."
|
||||||
|
|
||||||
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
|
msgstr "Sobimatu lehekülg \"{page_number}\": {message}."
|
||||||
|
|
||||||
|
#: pagination.py:492
|
||||||
|
msgid "Invalid cursor"
|
||||||
|
msgstr "Sobimatu kursor."
|
||||||
|
|
||||||
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
msgstr "Sobimatu primaarvõti \"{pk_value}\" - objekti pole olemas."
|
||||||
|
|
||||||
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
msgstr "Sobimatu andmetüüp. Ootasin primaarvõtit, sain {data_type}."
|
||||||
|
|
||||||
|
#: relations.py:157
|
||||||
|
msgid "Invalid hyperlink - No URL match."
|
||||||
|
msgstr "Sobimatu hüperlink - ei leidnud URLi vastet."
|
||||||
|
|
||||||
|
#: relations.py:158
|
||||||
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
|
msgstr "Sobimatu hüperlink - vale URLi vaste."
|
||||||
|
|
||||||
|
#: relations.py:159
|
||||||
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
|
msgstr "Sobimatu hüperlink - objekti ei eksisteeri."
|
||||||
|
|
||||||
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
msgstr "Sobimatu andmetüüp. Ootasin URLi sõne, sain {data_type}."
|
||||||
|
|
||||||
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
|
msgstr "Objekti {slug_name}={value} ei eksisteeri."
|
||||||
|
|
||||||
|
#: relations.py:303
|
||||||
|
msgid "Invalid value."
|
||||||
|
msgstr "Sobimatu väärtus."
|
||||||
|
|
||||||
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr "Sobimatud andmed. Ootasin sõnastikku, kuid sain {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr "Selle välja väärtus peab olema unikaalne."
|
||||||
|
|
||||||
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The fields {field_names} must make a unique set."
|
||||||
|
msgstr "Veerud {field_names} peavad moodustama unikaalse hulga."
|
||||||
|
|
||||||
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
|
msgstr "Selle välja väärtus peab olema unikaalne veerus \"{date_field}\" märgitud kuupäeval."
|
||||||
|
|
||||||
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
|
msgstr "Selle välja väärtus peab olema unikaalneveerus \"{date_field}\" märgitud kuul."
|
||||||
|
|
||||||
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
|
msgstr "Selle välja väärtus peab olema unikaalneveerus \"{date_field}\" märgitud aastal."
|
||||||
|
|
||||||
|
#: versioning.py:39
|
||||||
|
msgid "Invalid version in \"Accept\" header."
|
||||||
|
msgstr "Sobimatu versioon \"Accept\" päises."
|
||||||
|
|
||||||
|
#: versioning.py:70 versioning.py:112
|
||||||
|
msgid "Invalid version in URL path."
|
||||||
|
msgstr "Sobimatu versioon URLi rajas."
|
||||||
|
|
||||||
|
#: versioning.py:141
|
||||||
|
msgid "Invalid version in hostname."
|
||||||
|
msgstr "Sobimatu versioon hostinimes."
|
||||||
|
|
||||||
|
#: versioning.py:163
|
||||||
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr "Sobimatu versioon päringu parameetris."
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
|
msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -5,13 +5,15 @@
|
||||||
# Translators:
|
# Translators:
|
||||||
# Etienne Desgagné <etienne.desgagne@evimbec.ca>, 2015
|
# Etienne Desgagné <etienne.desgagne@evimbec.ca>, 2015
|
||||||
# Martin Maillard <martin.maillard@gmail.com>, 2015
|
# Martin Maillard <martin.maillard@gmail.com>, 2015
|
||||||
|
# Martin Maillard <martin.maillard@gmail.com>, 2015
|
||||||
|
# Xavier Ordoquy <xordoquy@linovia.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: French (http://www.transifex.com/projects/p/django-rest-framework/language/fr/)\n"
|
"Language-Team: French (http://www.transifex.com/projects/p/django-rest-framework/language/fr/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -19,37 +21,49 @@ msgstr ""
|
||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "En-tête « basic » non valide. Informations d'identification non fournies."
|
msgstr "En-tête « basic » non valide. Informations d'identification non fournies."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "En-tête « basic » non valide. Les informations d'identification ne doivent pas contenir d'espaces."
|
msgstr "En-tête « basic » non valide. Les informations d'identification ne doivent pas contenir d'espaces."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "En-tête « basic » non valide. Encodage base64 des informations d'identification incorrect."
|
msgstr "En-tête « basic » non valide. Encodage base64 des informations d'identification incorrect."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Nom d'utilisateur et/ou mot de passe non valide(s)."
|
msgstr "Nom d'utilisateur et/ou mot de passe non valide(s)."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Utilisateur inactif ou supprimé."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "En-tête « token » non valide. Informations d'identification non fournies."
|
msgstr "En-tête « token » non valide. Informations d'identification non fournies."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "En-tête « token » non valide. Un token ne doit pas contenir d'espaces."
|
msgstr "En-tête « token » non valide. Un token ne doit pas contenir d'espaces."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Token non valide."
|
msgstr "Token non valide."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Utilisateur inactif ou supprimé."
|
msgstr "Ce compte est désactivé."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Impossible de se connecter avec les informations d'identification fournies."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "\"username\" et \"password\" doivent être inclus."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -71,229 +85,274 @@ msgstr "Informations d'authentification non fournies."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Vous n'avez pas la permission d'effectuer cette action."
|
msgstr "Vous n'avez pas la permission d'effectuer cette action."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr ""
|
msgstr "Pas trouvé."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Méthode \"{method}\" non autorisée."
|
msgstr "Méthode \"{method}\" non autorisée."
|
||||||
|
|
||||||
#: exceptions.py:109
|
#: exceptions.py:109
|
||||||
msgid "Could not satisfy the request Accept header."
|
msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr "L'en-tête « Accept » n'a pas pu être satisfaite."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr ""
|
msgstr "Type de média \"{media_type}\" non supporté."
|
||||||
|
|
||||||
#: exceptions.py:134
|
#: exceptions.py:134
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr "Requête ralentie."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Ce champ est obligatoire."
|
msgstr "Ce champ est obligatoire."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Ce champ ne peut être null."
|
msgstr "Ce champ ne peut être null."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" n'est pas un booléen valide."
|
msgstr "\"{input}\" n'est pas un booléen valide."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Ce champ ne peut être vide."
|
msgstr "Ce champ ne peut être vide."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Assurez-vous que ce champ comporte au plus {max_length} caractères."
|
msgstr "Assurez-vous que ce champ comporte au plus {max_length} caractères."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Assurez-vous que ce champ comporte au moins {min_length} caractères."
|
msgstr "Assurez-vous que ce champ comporte au moins {min_length} caractères."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Saisissez une adresse email valable."
|
msgstr "Saisissez une adresse email valable."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Cette valeur ne satisfait pas le motif imposé."
|
msgstr "Cette valeur ne satisfait pas le motif imposé."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union."
|
msgstr "Ce champ ne doit contenir que des lettres, des nombres, des tirets bas _ et des traits d'union."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Saisissez une URL valide."
|
msgstr "Saisissez une URL valide."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" n'est pas un UUID valide."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Saisissez un nombre entier valide."
|
msgstr "Un nombre entier valide est requis."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Assurez-vous que cette valeur est inférieure ou égale à {max_value}."
|
msgstr "Assurez-vous que cette valeur est inférieure ou égale à {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Assurez-vous que cette valeur est supérieure ou égale à {min_value}."
|
msgstr "Assurez-vous que cette valeur est supérieure ou égale à {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Chaîne de caractères trop longue."
|
msgstr "Chaîne de caractères trop longue."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Un nombre valide est requis."
|
msgstr "Un nombre valide est requis."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Assurez-vous qu'il n'y a pas plus de {max_digits} chiffres au total."
|
msgstr "Assurez-vous qu'il n'y a pas plus de {max_digits} chiffres au total."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Assurez-vous qu'il n'y a pas plus de {max_decimal_places} chiffres après la virgule."
|
msgstr "Assurez-vous qu'il n'y a pas plus de {max_decimal_places} chiffres après la virgule."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Assurez-vous qu'il n'y a pas plus de {max_whole_digits} chiffres avant la virgule."
|
msgstr "Assurez-vous qu'il n'y a pas plus de {max_whole_digits} chiffres avant la virgule."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr "La date + heure n'a pas le bon format. Utilisez un des formats suivants : {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr ""
|
msgstr "Attendait une date + heure mais a reçu une date."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr "La date n'a pas le bon format. Utilisez un des formats suivants : {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr ""
|
msgstr "Attendait une date mais a reçu une date + heure."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "L'heure n'a pas le bon format. Utilisez un des formats suivants : {format}."
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" n'est pas un choix valide."
|
msgstr "\"{input}\" n'est pas un choix valide."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Attendait une liste d'éléments mais a reçu \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Aucun fichier n'a été soumis."
|
msgstr "Aucun fichier n'a été soumis."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "La donnée soumise n'est pas un fichier. Vérifiez le type d'encodage du formulaire."
|
msgstr "La donnée soumise n'est pas un fichier. Vérifiez le type d'encodage du formulaire."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Le nom de fichier n'a pu être déterminé."
|
msgstr "Le nom de fichier n'a pu être déterminé."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Le fichier soumis est vide."
|
msgstr "Le fichier soumis est vide."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Assurez-vous que le nom de fichier comporte au plus {max_length} caractères (il en comporte {length})."
|
msgstr "Assurez-vous que le nom de fichier comporte au plus {max_length} caractères (il en comporte {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Transférez une image valide. Le fichier que vous avez transféré n'est pas une image, ou il est corrompu."
|
msgstr "Transférez une image valide. Le fichier que vous avez transféré n'est pas une image, ou il est corrompu."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Attendait un dictionnaire d'éléments mais a reçu \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Page \"{page_number}\" non valide : {message}."
|
msgstr "Page \"{page_number}\" non valide : {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Curseur non valide"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Clé primaire \"{pk_value}\" non valide - l'objet n'existe pas."
|
msgstr "Clé primaire \"{pk_value}\" non valide - l'objet n'existe pas."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Type incorrect. Attendait une clé primaire, a reçu {data_type}."
|
||||||
|
|
||||||
#: relations.py:157
|
#: relations.py:157
|
||||||
msgid "Invalid hyperlink - No URL match."
|
msgid "Invalid hyperlink - No URL match."
|
||||||
msgstr ""
|
msgstr "Lien non valide : pas d'URL correspondante."
|
||||||
|
|
||||||
#: relations.py:158
|
#: relations.py:158
|
||||||
msgid "Invalid hyperlink - Incorrect URL match."
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
msgstr ""
|
msgstr "Lien non valide : URL correspondante incorrecte."
|
||||||
|
|
||||||
#: relations.py:159
|
#: relations.py:159
|
||||||
msgid "Invalid hyperlink - Object does not exist."
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr "Lien non valide : l'objet n'existe pas."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Type incorrect. Attendait une URL, a reçu {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "L'object avec {slug_name}={value} n'existe pas."
|
msgstr "L'object avec {slug_name}={value} n'existe pas."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Valeur non valide."
|
msgstr "Valeur non valide."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr ""
|
msgstr "Donnée non valide. Attendait un dictionnaire, a reçu {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr "Aucune"
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr "Aucun élément à sélectionner."
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Ce champ doit être unique."
|
msgstr "Ce champ doit être unique."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Les champs {field_names} doivent former un ensemble unique."
|
msgstr "Les champs {field_names} doivent former un ensemble unique."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "Ce champ doit être unique pour la date \"{date_field}\"."
|
msgstr "Ce champ doit être unique pour la date \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "Ce champ doit être unique pour le mois \"{date_field}\"."
|
msgstr "Ce champ doit être unique pour le mois \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "Ce champ doit être unique pour l'année \"{date_field}\"."
|
msgstr "Ce champ doit être unique pour l'année \"{date_field}\"."
|
||||||
|
|
||||||
|
@ -305,22 +364,14 @@ msgstr "Version non valide dans l'en-tête « Accept »."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Version non valide dans l'URL."
|
msgstr "Version non valide dans l'URL."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Version non valide dans le nom d'hôte."
|
msgstr "Version non valide dans le nom d'hôte."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Version non valide dans le paramètre de requête."
|
msgstr "Version non valide dans le paramètre de requête."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Ce compte est désactivé."
|
msgstr "Permission refusée."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Impossible de se connecter avec les informations d'identification fournies."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "\"username\" et \"password\" doivent être inclus."
|
|
||||||
|
|
BIN
rest_framework/locale/gl/LC_MESSAGES/django.mo
Normal file
BIN
rest_framework/locale/gl/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
373
rest_framework/locale/gl/LC_MESSAGES/django.po
Normal file
373
rest_framework/locale/gl/LC_MESSAGES/django.po
Normal file
|
@ -0,0 +1,373 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Django REST framework\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
|
"Language-Team: Galician (http://www.transifex.com/projects/p/django-rest-framework/language/gl/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: gl\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: authentication.py:70
|
||||||
|
msgid "Invalid basic header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:73
|
||||||
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:79
|
||||||
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:97
|
||||||
|
msgid "Invalid username/password."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
|
msgid "Invalid token header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:170
|
||||||
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:179
|
||||||
|
msgid "Invalid token."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:20
|
||||||
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:38
|
||||||
|
msgid "A server error occurred."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:73
|
||||||
|
msgid "Malformed request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:78
|
||||||
|
msgid "Incorrect authentication credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:83
|
||||||
|
msgid "Authentication credentials were not provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:88
|
||||||
|
msgid "You do not have permission to perform this action."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:93 views.py:78
|
||||||
|
msgid "Not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Method \"{method}\" not allowed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:109
|
||||||
|
msgid "Could not satisfy the request Accept header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:134
|
||||||
|
msgid "Request was throttled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
|
#: validators.py:160
|
||||||
|
msgid "This field is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:163
|
||||||
|
msgid "This field may not be null."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:559
|
||||||
|
msgid "This field may not be blank."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:598
|
||||||
|
msgid "Enter a valid email address."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:609
|
||||||
|
msgid "This value does not match the required pattern."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:620
|
||||||
|
msgid ""
|
||||||
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
|
"hyphens."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:632
|
||||||
|
msgid "Enter a valid URL."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:679
|
||||||
|
msgid "A valid integer is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
|
msgid "String value too large."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:714 fields.py:747
|
||||||
|
msgid "A valid number is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
|
"decimal point."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:843
|
||||||
|
msgid "Expected a datetime but got a date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:908
|
||||||
|
msgid "Expected a date but got a datetime."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1129
|
||||||
|
msgid "No file was submitted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1130
|
||||||
|
msgid ""
|
||||||
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1131
|
||||||
|
msgid "No filename could be determined."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1132
|
||||||
|
msgid "The submitted file is empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1175
|
||||||
|
msgid ""
|
||||||
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
|
"corrupted image."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:492
|
||||||
|
msgid "Invalid cursor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:157
|
||||||
|
msgid "Invalid hyperlink - No URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:158
|
||||||
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:159
|
||||||
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:303
|
||||||
|
msgid "Invalid value."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The fields {field_names} must make a unique set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:39
|
||||||
|
msgid "Invalid version in \"Accept\" header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:70 versioning.py:112
|
||||||
|
msgid "Invalid version in URL path."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:141
|
||||||
|
msgid "Invalid version in hostname."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:163
|
||||||
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
|
msgstr ""
|
BIN
rest_framework/locale/gl_ES/LC_MESSAGES/django.mo
Normal file
BIN
rest_framework/locale/gl_ES/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
373
rest_framework/locale/gl_ES/LC_MESSAGES/django.po
Normal file
373
rest_framework/locale/gl_ES/LC_MESSAGES/django.po
Normal file
|
@ -0,0 +1,373 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Django REST framework\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
|
"Language-Team: Galician (Spain) (http://www.transifex.com/projects/p/django-rest-framework/language/gl_ES/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: gl_ES\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: authentication.py:70
|
||||||
|
msgid "Invalid basic header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:73
|
||||||
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:79
|
||||||
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:97
|
||||||
|
msgid "Invalid username/password."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
|
msgid "Invalid token header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:170
|
||||||
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:179
|
||||||
|
msgid "Invalid token."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:20
|
||||||
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:38
|
||||||
|
msgid "A server error occurred."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:73
|
||||||
|
msgid "Malformed request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:78
|
||||||
|
msgid "Incorrect authentication credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:83
|
||||||
|
msgid "Authentication credentials were not provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:88
|
||||||
|
msgid "You do not have permission to perform this action."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:93 views.py:78
|
||||||
|
msgid "Not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Method \"{method}\" not allowed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:109
|
||||||
|
msgid "Could not satisfy the request Accept header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:134
|
||||||
|
msgid "Request was throttled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
|
#: validators.py:160
|
||||||
|
msgid "This field is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:163
|
||||||
|
msgid "This field may not be null."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:559
|
||||||
|
msgid "This field may not be blank."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:598
|
||||||
|
msgid "Enter a valid email address."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:609
|
||||||
|
msgid "This value does not match the required pattern."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:620
|
||||||
|
msgid ""
|
||||||
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
|
"hyphens."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:632
|
||||||
|
msgid "Enter a valid URL."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:679
|
||||||
|
msgid "A valid integer is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
|
msgid "String value too large."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:714 fields.py:747
|
||||||
|
msgid "A valid number is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
|
"decimal point."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:843
|
||||||
|
msgid "Expected a datetime but got a date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:908
|
||||||
|
msgid "Expected a date but got a datetime."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1129
|
||||||
|
msgid "No file was submitted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1130
|
||||||
|
msgid ""
|
||||||
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1131
|
||||||
|
msgid "No filename could be determined."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1132
|
||||||
|
msgid "The submitted file is empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1175
|
||||||
|
msgid ""
|
||||||
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
|
"corrupted image."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:492
|
||||||
|
msgid "Invalid cursor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:157
|
||||||
|
msgid "Invalid hyperlink - No URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:158
|
||||||
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:159
|
||||||
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:303
|
||||||
|
msgid "Invalid value."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The fields {field_names} must make a unique set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:39
|
||||||
|
msgid "Invalid version in \"Accept\" header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:70 versioning.py:112
|
||||||
|
msgid "Invalid version in URL path."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:141
|
||||||
|
msgid "Invalid version in hostname."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:163
|
||||||
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
|
msgstr ""
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Hungarian (http://www.transifex.com/projects/p/django-rest-framework/language/hu/)\n"
|
"Language-Team: Hungarian (http://www.transifex.com/projects/p/django-rest-framework/language/hu/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +18,49 @@ msgstr ""
|
||||||
"Language: hu\n"
|
"Language: hu\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Érvénytelen basic fejlécmező. Nem voltak megadva azonosítók."
|
msgstr "Érvénytelen basic fejlécmező. Nem voltak megadva azonosítók."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Érvénytelen basic fejlécmező. Az azonosító karakterlánc nem tartalmazhat szóközöket."
|
msgstr "Érvénytelen basic fejlécmező. Az azonosító karakterlánc nem tartalmazhat szóközöket."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Érvénytelen basic fejlécmező. Az azonosítók base64 kódolása nem megfelelő."
|
msgstr "Érvénytelen basic fejlécmező. Az azonosítók base64 kódolása nem megfelelő."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Érvénytelen felhasználónév/jelszó."
|
msgstr "Érvénytelen felhasználónév/jelszó."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "A felhasználó nincs aktiválva vagy törölve lett."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Érvénytelen token fejlécmező. Nem voltak megadva azonosítók."
|
msgstr "Érvénytelen token fejlécmező. Nem voltak megadva azonosítók."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Érvénytelen token fejlécmező. A token karakterlánc nem tartalmazhat szóközöket."
|
msgstr "Érvénytelen token fejlécmező. A token karakterlánc nem tartalmazhat szóközöket."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Érvénytelen token."
|
msgstr "Érvénytelen token."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "A felhasználó nincs aktiválva vagy törölve lett."
|
msgstr "A felhasználó tiltva van."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "A megadott azonosítókkal nem lehet bejelentkezni."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Tartalmaznia kell a \"felhasználónevet\" és a \"jelszót\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,11 +82,12 @@ msgstr "Nem voltak megadva azonosítók."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Nincs jogosultsága a művelet végrehajtásához."
|
msgstr "Nincs jogosultsága a művelet végrehajtásához."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Nem található."
|
msgstr "Nem található."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "A \"{method}\" metódus nem megengedett."
|
msgstr "A \"{method}\" metódus nem megengedett."
|
||||||
|
|
||||||
|
@ -83,6 +96,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "A kérés Accept fejlécmezőjét nem lehetett kiszolgálni."
|
msgstr "A kérés Accept fejlécmezőjét nem lehetett kiszolgálni."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Nem támogatott média típus \"{media_type}\" a kérésben."
|
msgstr "Nem támogatott média típus \"{media_type}\" a kérésben."
|
||||||
|
|
||||||
|
@ -90,161 +104,185 @@ msgstr "Nem támogatott média típus \"{media_type}\" a kérésben."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "A kérés korlátozva lett."
|
msgstr "A kérés korlátozva lett."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Ennek a mezőnek a megadása kötelező."
|
msgstr "Ennek a mezőnek a megadása kötelező."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Ez a mező nem lehet null értékű."
|
msgstr "Ez a mező nem lehet null értékű."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "Az \"{input}\" nem egy érvényes logikai érték."
|
msgstr "Az \"{input}\" nem egy érvényes logikai érték."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Ez a mező nem lehet üres."
|
msgstr "Ez a mező nem lehet üres."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy ez a mező legfeljebb {max_length} karakterből áll."
|
msgstr "Bizonyosodjon meg arról, hogy ez a mező legfeljebb {max_length} karakterből áll."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy ez a mező legalább {min_length} karakterből áll."
|
msgstr "Bizonyosodjon meg arról, hogy ez a mező legalább {min_length} karakterből áll."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Adjon meg egy érvényes e-mail címet!"
|
msgstr "Adjon meg egy érvényes e-mail címet!"
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Ez az érték nem illeszkedik a szükséges mintázatra."
|
msgstr "Ez az érték nem illeszkedik a szükséges mintázatra."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Az URL barát cím csak betűket, számokat, aláhúzásokat és kötőjeleket tartalmazhat."
|
msgstr "Az URL barát cím csak betűket, számokat, aláhúzásokat és kötőjeleket tartalmazhat."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Adjon meg egy érvényes URL-t!"
|
msgstr "Adjon meg egy érvényes URL-t!"
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Egy érvényes egész szám megadása szükséges."
|
msgstr "Egy érvényes egész szám megadása szükséges."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy ez az érték legfeljebb {max_value}."
|
msgstr "Bizonyosodjon meg arról, hogy ez az érték legfeljebb {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy ez az érték legalább {min_value}."
|
msgstr "Bizonyosodjon meg arról, hogy ez az érték legalább {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "A karakterlánc túl hosszú."
|
msgstr "A karakterlánc túl hosszú."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Egy érvényes szám megadása szükséges."
|
msgstr "Egy érvényes szám megadása szükséges."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy a számjegyek száma összesen legfeljebb {max_digits}."
|
msgstr "Bizonyosodjon meg arról, hogy a számjegyek száma összesen legfeljebb {max_digits}."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy a tizedes tört törtrészében levő számjegyek száma összesen legfeljebb {max_decimal_places}."
|
msgstr "Bizonyosodjon meg arról, hogy a tizedes tört törtrészében levő számjegyek száma összesen legfeljebb {max_decimal_places}."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy a tizedes tört egész részében levő számjegyek száma összesen legfeljebb {max_whole_digits}."
|
msgstr "Bizonyosodjon meg arról, hogy a tizedes tört egész részében levő számjegyek száma összesen legfeljebb {max_whole_digits}."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Időt is tartalmazó dátum helyett egy időt nem tartalmazó dátum lett elküldve."
|
msgstr "Időt is tartalmazó dátum helyett egy időt nem tartalmazó dátum lett elküldve."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
msgstr "A dátum formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Időt nem tartalmazó dátum helyett egy időt is tartalmazó dátum lett elküldve."
|
msgstr "Időt nem tartalmazó dátum helyett egy időt is tartalmazó dátum lett elküldve."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Az idő formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
msgstr "Az idő formátuma hibás. Használja ezek valamelyikét helyette: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "Az \"{input}\" nem egy érvényes elem."
|
msgstr "Az \"{input}\" nem egy érvényes elem."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Elemek listája helyett \"{input_type}\" lett elküldve."
|
msgstr "Elemek listája helyett \"{input_type}\" lett elküldve."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Semmilyen fájl sem került feltöltésre."
|
msgstr "Semmilyen fájl sem került feltöltésre."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Az elküldött adat nem egy fájl volt. Ellenőrizze a kódolás típusát az űrlapon!"
|
msgstr "Az elküldött adat nem egy fájl volt. Ellenőrizze a kódolás típusát az űrlapon!"
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "A fájlnév nem megállapítható."
|
msgstr "A fájlnév nem megállapítható."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "A küldött fájl üres."
|
msgstr "A küldött fájl üres."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Bizonyosodjon meg arról, hogy a fájlnév legfeljebb {max_length} karakterből áll (jelenlegi hossza: {length})."
|
msgstr "Bizonyosodjon meg arról, hogy a fájlnév legfeljebb {max_length} karakterből áll (jelenlegi hossza: {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Töltsön fel egy érvényes képfájlt! A feltöltött fájl nem kép volt, vagy megsérült."
|
msgstr "Töltsön fel egy érvényes képfájlt! A feltöltött fájl nem kép volt, vagy megsérült."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Érvénytelen oldal \"{page_number}\": {message}."
|
msgstr "Érvénytelen oldal \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Érvénytelen pk \"{pk_value}\" - az objektum nem létezik."
|
msgstr "Érvénytelen pk \"{pk_value}\" - az objektum nem létezik."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Helytelen típus. pk érték helyett {data_type} lett elküldve."
|
msgstr "Helytelen típus. pk érték helyett {data_type} lett elküldve."
|
||||||
|
|
||||||
|
@ -261,38 +299,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Érvénytelen link - Az objektum nem létezik."
|
msgstr "Érvénytelen link - Az objektum nem létezik."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Helytelen típus. URL karakterlánc helyett {data_type} lett elküldve."
|
msgstr "Helytelen típus. URL karakterlánc helyett {data_type} lett elküldve."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Nem létezik olyan objektum, amelynél {slug_name}={value}."
|
msgstr "Nem létezik olyan objektum, amelynél {slug_name}={value}."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Érvénytelen érték."
|
msgstr "Érvénytelen érték."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Érvénytelen adat. Egy dictionary helyett {datatype} lett elküldve."
|
msgstr "Érvénytelen adat. Egy dictionary helyett {datatype} lett elküldve."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Ennek a mezőnek egyedinek kell lennie."
|
msgstr "Ennek a mezőnek egyedinek kell lennie."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "A {field_names} mezőnevek nem tartalmazhatnak duplikátumot."
|
msgstr "A {field_names} mezőnevek nem tartalmazhatnak duplikátumot."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" dátumra."
|
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" dátumra."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" hónapra."
|
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" hónapra."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" évre."
|
msgstr "A mezőnek egyedinek kell lennie a \"{date_field}\" évre."
|
||||||
|
|
||||||
|
@ -304,22 +361,14 @@ msgstr "Érvénytelen verzió az \"Accept\" fejlécmezőben."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Érvénytelen verzió az URL elérési útban."
|
msgstr "Érvénytelen verzió az URL elérési útban."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Érvénytelen verzió a hosztnévben."
|
msgstr "Érvénytelen verzió a hosztnévben."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Érvénytelen verzió a lekérdezési paraméterben."
|
msgstr "Érvénytelen verzió a lekérdezési paraméterben."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "A felhasználó tiltva van."
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "A megadott azonosítókkal nem lehet bejelentkezni."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Tartalmaznia kell a \"felhasználónevet\" és a \"jelszót\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -7,9 +7,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Indonesian (http://www.transifex.com/projects/p/django-rest-framework/language/id/)\n"
|
"Language-Team: Indonesian (http://www.transifex.com/projects/p/django-rest-framework/language/id/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -17,36 +17,48 @@ msgstr ""
|
||||||
"Language: id\n"
|
"Language: id\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
|
@ -69,11 +81,12 @@ msgstr ""
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -82,6 +95,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -89,161 +103,185 @@ msgstr ""
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -260,38 +298,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -303,22 +360,14 @@ msgstr ""
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -3,14 +3,16 @@
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Antonio Mancina <antomicx@gmail.com>, 2015
|
||||||
# Mattia Procopio <promat85@gmail.com>, 2015
|
# Mattia Procopio <promat85@gmail.com>, 2015
|
||||||
|
# Xavier Ordoquy <xordoquy@linovia.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Italian (http://www.transifex.com/projects/p/django-rest-framework/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/projects/p/django-rest-framework/language/it/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +20,49 @@ msgstr ""
|
||||||
"Language: it\n"
|
"Language: it\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr "Header di base invalido. Credenziali non fornite."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr "Header di base invalido. Le credenziali non dovrebbero contenere spazi."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr "Credenziali non correttamente codificate in base64."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Nome utente/password non validi"
|
msgstr "Nome utente/password non validi"
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Utente inattivo o eliminato."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Header del token non valido. Credenziali non fornite."
|
msgstr "Header del token non valido. Credenziali non fornite."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Header del token non valido. Il contenuto del token non dovrebbe contenere spazi."
|
msgstr "Header del token non valido. Il contenuto del token non dovrebbe contenere spazi."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Token invalido."
|
msgstr "Token invalido."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Utente inattivo o eliminato."
|
msgstr "L'account dell'utente è disabilitato"
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Impossibile eseguire il log in con le credenziali immesse."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Deve includere \"nome utente\" e \"password\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,11 +84,12 @@ msgstr "Non sono state immesse le credenziali di autenticazione."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Non hai l'autorizzazione per eseguire questa azione."
|
msgstr "Non hai l'autorizzazione per eseguire questa azione."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Non trovato."
|
msgstr "Non trovato."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Metodo \"{method}\" non consentito"
|
msgstr "Metodo \"{method}\" non consentito"
|
||||||
|
|
||||||
|
@ -83,197 +98,237 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Impossibile soddisfare l'header \"Accept\" presente nella richiesta."
|
msgstr "Impossibile soddisfare l'header \"Accept\" presente nella richiesta."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Tipo di media \"{media_type}\"non supportato."
|
msgstr "Tipo di media \"{media_type}\"non supportato."
|
||||||
|
|
||||||
#: exceptions.py:134
|
#: exceptions.py:134
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr "La richiesta è stata limitata (throttled)."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Campo obbligatorio."
|
msgstr "Campo obbligatorio."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Il campo non puà essere nullo."
|
msgstr "Il campo non puà essere nullo."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" non è un valido valore booleano."
|
msgstr "\"{input}\" non è un valido valore booleano."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Questo campo non può essere omesso."
|
msgstr "Questo campo non può essere omesso."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Assicurati che questo campo non abbia più di {max_length} caratteri."
|
msgstr "Assicurati che questo campo non abbia più di {max_length} caratteri."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Assicurati che questo campo abbia almeno {max_length} caratteri."
|
msgstr "Assicurati che questo campo abbia almeno {min_length} caratteri."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Inserisci un indirizzo email valido."
|
msgstr "Inserisci un indirizzo email valido."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr ""
|
msgstr "Questo valore non corrisponde alla sequenza richiesta."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Immetti uno \"slug\" valido che consista di lettere, numeri, underscore o trattini."
|
msgstr "Immetti uno \"slug\" valido che consista di lettere, numeri, underscore o trattini."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Inserisci un URL valido"
|
msgstr "Inserisci un URL valido"
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" non è un UUID valido."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "È richiesto un numero intero valido."
|
msgstr "È richiesto un numero intero valido."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Assicurati che il valore sia minore o uguale a {max_value}."
|
msgstr "Assicurati che il valore sia minore o uguale a {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Assicurati che il valore sia maggiore o uguale a {min_value}."
|
msgstr "Assicurati che il valore sia maggiore o uguale a {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr ""
|
msgstr "Stringa troppo lunga."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "È richiesto un numero valido."
|
msgstr "È richiesto un numero valido."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Assicurati che non ci siano più di {max_digits} cifre in totale."
|
msgstr "Assicurati che non ci siano più di {max_digits} cifre in totale."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Assicurati che non ci siano più di {max_decimal_places} cifre decimali."
|
msgstr "Assicurati che non ci siano più di {max_decimal_places} cifre decimali."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Assicurati che non ci siano più di {max_whole_digits} cifre prima del separatore decimale."
|
msgstr "Assicurati che non ci siano più di {max_whole_digits} cifre prima del separatore decimale."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "L'oggetto di tipo datetime è in un formato errato. Usa uno dei seguenti formati: {format}."
|
msgstr "L'oggetto di tipo datetime è in un formato errato. Usa uno dei seguenti formati: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Atteso un oggetto di tipo datetime ma l'oggetto ricevuto è di tipo date."
|
msgstr "Atteso un oggetto di tipo datetime ma l'oggetto ricevuto è di tipo date."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "La data è in un formato errato. Usa uno dei seguenti formati: {format}."
|
msgstr "La data è in un formato errato. Usa uno dei seguenti formati: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Atteso un oggetto di tipo date ma l'oggetto ricevuto è di tipo datetime."
|
msgstr "Atteso un oggetto di tipo date ma l'oggetto ricevuto è di tipo datetime."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr "L'orario ha un formato errato. Usa uno dei seguenti formati: {format}."
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" non è una scelta valida."
|
msgstr "\"{input}\" non è una scelta valida."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Attesa una lista di oggetti ma l'oggetto ricevuto è di tipo \"{input_type}\"."
|
msgstr "Attesa una lista di oggetti ma l'oggetto ricevuto è di tipo \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Non è stato inviato alcun file."
|
msgstr "Non è stato inviato alcun file."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr ""
|
msgstr "I dati inviati non corrispondono ad un file. Si prega di controllare il tipo di codifica nel form."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Il nome del file non può essere determinato."
|
msgstr "Il nome del file non può essere determinato."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Il file inviato è vuoto."
|
msgstr "Il file inviato è vuoto."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr ""
|
msgstr "Assicurati che il nome del file abbia, al più, {max_length} caratteri (attualmente ne ha {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr "Invia un'immagine valida. Il file che hai inviato non era un'immagine o era corrotto."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Era atteso un dizionario di oggetti ma il dato ricevuto è di tipo \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr ""
|
msgstr "Pagina \"{page_number}\" non valida: {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Cursore non valido"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr ""
|
msgstr "Pk \"{pk_value}\" non valido - l'oggetto non esiste."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Tipo non corretto. Era atteso un valore pk, ma è stato ricevuto {data_type}."
|
||||||
|
|
||||||
#: relations.py:157
|
#: relations.py:157
|
||||||
msgid "Invalid hyperlink - No URL match."
|
msgid "Invalid hyperlink - No URL match."
|
||||||
msgstr ""
|
msgstr "Collegamento non valido - Nessuna corrispondenza di URL."
|
||||||
|
|
||||||
#: relations.py:158
|
#: relations.py:158
|
||||||
msgid "Invalid hyperlink - Incorrect URL match."
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
msgstr ""
|
msgstr "Collegamento non valido - Corrispondenza di URL non corretta."
|
||||||
|
|
||||||
#: relations.py:159
|
#: relations.py:159
|
||||||
msgid "Invalid hyperlink - Object does not exist."
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr "Collegamento non valido - L'oggetto non esiste."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr "Tipo non corretto. Era attesa una stringa URL, ma è stato ricevuto {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr "L'oggetto con {slug_name}={value} non esiste."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Valore non valido."
|
msgstr "Valore non valido."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr "Dati non validi. Era atteso un dizionario, ma si è ricevuto {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
|
@ -281,45 +336,41 @@ msgid "This field must be unique."
|
||||||
msgstr "Questo campo deve essere unico."
|
msgstr "Questo campo deve essere unico."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr "I campi {field_names} devono costituire un insieme unico."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr "Questo campo deve essere unico per la data \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr "Questo campo deve essere unico per il mese \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr "Questo campo deve essere unico per l'anno \"{date_field}\"."
|
||||||
|
|
||||||
#: versioning.py:39
|
#: versioning.py:39
|
||||||
msgid "Invalid version in \"Accept\" header."
|
msgid "Invalid version in \"Accept\" header."
|
||||||
msgstr ""
|
msgstr "Versione non valida nell'header \"Accept\"."
|
||||||
|
|
||||||
#: versioning.py:70 versioning.py:112
|
#: versioning.py:70 versioning.py:112
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr "Versione non valida nella sequenza URL."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr "Versione non valida nel nome dell'host."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr "Versione non valida nel parametro della query."
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
|
||||||
msgid "User account is disabled."
|
|
||||||
msgstr "L'account dell'utente è disabilitato"
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Impossibile eseguire il log in con le credenziali immesse."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Deve includere \"nome utente\" e \"password\"."
|
|
||||||
|
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/django-rest-framework/language/ko_KR/)\n"
|
"Language-Team: Korean (Korea) (http://www.transifex.com/projects/p/django-rest-framework/language/ko_KR/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +18,49 @@ msgstr ""
|
||||||
"Language: ko_KR\n"
|
"Language: ko_KR\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다."
|
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials) 문자열은 빈칸(spaces)을 포함하지 않아야 합니다."
|
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials) 문자열은 빈칸(spaces)을 포함하지 않아야 합니다."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 base64로 적절히 부호화(encode)되지 않았습니다."
|
msgstr "기본 헤더(basic header)가 유효하지 않습니다. 인증데이터(credentials)가 base64로 적절히 부호화(encode)되지 않았습니다."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "아이디/비밀번호가 유효하지 않습니다."
|
msgstr "아이디/비밀번호가 유효하지 않습니다."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "계정이 중지되었거나 삭제되었습니다."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "토큰 헤더가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다."
|
msgstr "토큰 헤더가 유효하지 않습니다. 인증데이터(credentials)가 제공되지 않았습니다."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 빈칸(spaces)를 포함하지 않아야 합니다."
|
msgstr "토큰 헤더가 유효하지 않습니다. 토큰 문자열은 빈칸(spaces)를 포함하지 않아야 합니다."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "토큰이 유효하지 않습니다."
|
msgstr "토큰이 유효하지 않습니다."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "계정이 중지되었거나 삭제되었습니다."
|
msgstr "사용자 계정을 사용할 수 없습니다."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "제공된 인증데이터(credentials)로는 로그인할 수 없습니다."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "\"아이디\"와 \"비밀번호\"를 포함해야 합니다."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,19 +82,21 @@ msgstr "자격 인증데이터(authentication credentials)가 제공되지 않
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "이 작업을 "
|
msgstr "이 작업을 "
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "찾을 수 없습니다."
|
msgstr "찾을 수 없습니다."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "메소드(Method) \"{method}\"는 허용되지 않습니다."
|
msgstr "메소드(Method) \"{method}\"는 허용되지 않습니다."
|
||||||
|
|
||||||
#: exceptions.py:109
|
#: exceptions.py:109
|
||||||
msgid "Could not satisfy the request Accept header."
|
msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr "Accept header 요청을 만족할 수 없습니다."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "요청된 \"{media_type}\"가 지원되지 않는 미디어 형태입니다."
|
msgstr "요청된 \"{media_type}\"가 지원되지 않는 미디어 형태입니다."
|
||||||
|
|
||||||
|
@ -90,161 +104,185 @@ msgstr "요청된 \"{media_type}\"가 지원되지 않는 미디어 형태입니
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "요청이 지연(throttled)되었습니다."
|
msgstr "요청이 지연(throttled)되었습니다."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "이 항목을 채워주십시오."
|
msgstr "이 항목을 채워주십시오."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr ""
|
msgstr "이 칸은 null일 수 없습니다."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\"이 유효하지 않은 부울(boolean)입니다."
|
msgstr "\"{input}\"이 유효하지 않은 부울(boolean)입니다."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr ""
|
msgstr "이 칸은 blank일 수 없습니다."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "이 칸이 글자 수가 {max_length} 이하인지 확인하십시오."
|
msgstr "이 칸이 글자 수가 {max_length} 이하인지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "이 칸이 글자 수가 적어도 {min_length} 이상인지 확인하십시오."
|
msgstr "이 칸이 글자 수가 적어도 {min_length} 이상인지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "유효한 이메일 주소를 입력하십시오."
|
msgstr "유효한 이메일 주소를 입력하십시오."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "형식에 맞지 않는 값입니다."
|
msgstr "형식에 맞지 않는 값입니다."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하십시오."
|
msgstr "문자, 숫자, 밑줄( _ ) 또는 하이픈( - )으로 이루어진 유효한 \"slug\"를 입력하십시오."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "유효한 URL을 입력하십시오."
|
msgstr "유효한 URL을 입력하십시오."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\"가 유효하지 않은 UUID 입니다."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "유효한 정수(integer)를 넣어주세요."
|
msgstr "유효한 정수(integer)를 넣어주세요."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "이 값이 {max_value}보다 작거나 같은지 확인하십시오."
|
msgstr "이 값이 {max_value}보다 작거나 같은지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "이 값이 {min_value}보다 크거나 같은지 확인하십시오."
|
msgstr "이 값이 {min_value}보다 크거나 같은지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "문자열 값이 너무 큽니다."
|
msgstr "문자열 값이 너무 큽니다."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "유효한 숫자를 넣어주세요."
|
msgstr "유효한 숫자를 넣어주세요."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "전체 숫자(digits)가 {max_digits} 이하인지 확인하십시오."
|
msgstr "전체 숫자(digits)가 {max_digits} 이하인지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "소수점 자릿수가 {max_decimal_places} 이하인지 확인하십시오."
|
msgstr "소수점 자릿수가 {max_decimal_places} 이하인지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "소수점 자리 앞에 숫자(digits)가 {max_whole_digits} 이하인지 확인하십시오."
|
msgstr "소수점 자리 앞에 숫자(digits)가 {max_whole_digits} 이하인지 확인하십시오."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Datetime의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
msgstr "Datetime의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "예상된 datatime 대신 date를 받았습니다."
|
msgstr "예상된 datatime 대신 date를 받았습니다."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Date의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
msgstr "Date의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "예상된 date 대신 datetime을 받았습니다."
|
msgstr "예상된 date 대신 datetime을 받았습니다."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Time의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
msgstr "Time의 포멧이 잘못되었습니다. 이 형식들 중 한가지를 사용하세요: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\"이 유효하지 않은 선택(choice)입니다."
|
msgstr "\"{input}\"이 유효하지 않은 선택(choice)입니다."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "아이템 리스트가 예상되었으나 \"{input_type}\"를 받았습니다."
|
msgstr "아이템 리스트가 예상되었으나 \"{input_type}\"를 받았습니다."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "파일이 제출되지 않았습니다."
|
msgstr "파일이 제출되지 않았습니다."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "제출된 데이터는 파일이 아닙니다. 제출된 서식의 인코딩 형식을 확인하세요."
|
msgstr "제출된 데이터는 파일이 아닙니다. 제출된 서식의 인코딩 형식을 확인하세요."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "파일명을 알 수 없습니다."
|
msgstr "파일명을 알 수 없습니다."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "제출된 파일이 비어있습니다."
|
msgstr "제출된 파일이 비어있습니다."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "이 파일명의 글자수가 최대 {max_length}를 넘지 않는지 확인하십시오. (이것은 {length}가 있습니다)."
|
msgstr "이 파일명의 글자수가 최대 {max_length}를 넘지 않는지 확인하십시오. (이것은 {length}가 있습니다)."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "유효한 이미지 파일을 업로드 하십시오. 업로드 하신 파일은 이미지 파일이 아니거나 손상된 이미지 파일입니다."
|
msgstr "유효한 이미지 파일을 업로드 하십시오. 업로드 하신 파일은 이미지 파일이 아니거나 손상된 이미지 파일입니다."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "아이템 딕셔너리가 예상되었으나 \"{input_type}\" 타입을 받았습니다."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "유효하지 않은 page \"{page_number}\": {message}."
|
msgstr "유효하지 않은 page \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "커서(cursor)가 유효하지 않습니다."
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "유효하지 않은 pk \"{pk_value}\" - 객체가 존재하지 않습니다."
|
msgstr "유효하지 않은 pk \"{pk_value}\" - 객체가 존재하지 않습니다."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "잘못된 형식입니다. pk 값 대신 {data_type}를 받았습니다."
|
msgstr "잘못된 형식입니다. pk 값 대신 {data_type}를 받았습니다."
|
||||||
|
|
||||||
|
@ -261,65 +299,76 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "유효하지 않은 하이퍼링크 - 객체가 존재하지 않습니다."
|
msgstr "유효하지 않은 하이퍼링크 - 객체가 존재하지 않습니다."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "잘못된 형식입니다. URL 문자열을 예상했으나 {data_type}을 받았습니다."
|
msgstr "잘못된 형식입니다. URL 문자열을 예상했으나 {data_type}을 받았습니다."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "{slug_name}={value} 객체가 존재하지 않습니다."
|
msgstr "{slug_name}={value} 객체가 존재하지 않습니다."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "값이 유효하지 않습니다."
|
msgstr "값이 유효하지 않습니다."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "유효하지 않은 데이터. 딕셔너리(dictionary)대신 {datatype}를 받았습니다."
|
msgstr "유효하지 않은 데이터. 딕셔너리(dictionary)대신 {datatype}를 받았습니다."
|
||||||
|
|
||||||
#: validators.py:22
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
msgid "This field must be unique."
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr "이 칸은 반드시 고유해야 합니다."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:39
|
#: versioning.py:39
|
||||||
msgid "Invalid version in \"Accept\" header."
|
msgid "Invalid version in \"Accept\" header."
|
||||||
msgstr ""
|
msgstr "\"Accept\" header내 버전이 유효하지 않습니다."
|
||||||
|
|
||||||
#: versioning.py:70 versioning.py:112
|
#: versioning.py:70 versioning.py:112
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr "URL path내 버전이 유효하지 않습니다."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr "hostname내 버전이 유효하지 않습니다."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr "쿼리 파라메터내 버전이 유효하지 않습니다."
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
|
||||||
msgid "User account is disabled."
|
|
||||||
msgstr "사용자 계정을 사용할 수 없습니다."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "제공된 인증데이터(credentials)로는 로그인할 수 없습니다."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "\"아이디\"와 \"비밀번호\"를 포함해야 합니다."
|
|
||||||
|
|
Binary file not shown.
|
@ -8,9 +8,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Macedonian (http://www.transifex.com/projects/p/django-rest-framework/language/mk/)\n"
|
"Language-Team: Macedonian (http://www.transifex.com/projects/p/django-rest-framework/language/mk/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -18,37 +18,49 @@ msgstr ""
|
||||||
"Language: mk\n"
|
"Language: mk\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
|
"Plural-Forms: nplurals=2; plural=(n % 10 == 1 && n % 100 != 11) ? 0 : 1;\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Невалиден основен header. Не се внесени податоци за автентикација."
|
msgstr "Невалиден основен header. Не се внесени податоци за автентикација."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Невалиден основен header. Автентикационата низа не треба да содржи празни места."
|
msgstr "Невалиден основен header. Автентикационата низа не треба да содржи празни места."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Невалиден основен header. Податоците за автентикација не се енкодирани со base64."
|
msgstr "Невалиден основен header. Податоците за автентикација не се енкодирани со base64."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Невалидно корисничко име/лозинка."
|
msgstr "Невалидно корисничко име/лозинка."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Корисникот е деактивиран или избришан."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Невалиден токен header. Не се внесени податоци за најава."
|
msgstr "Невалиден токен header. Не се внесени податоци за најава."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Невалиден токен во header. Токенот не треба да содржи празни места."
|
msgstr "Невалиден токен во header. Токенот не треба да содржи празни места."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Невалиден токен."
|
msgstr "Невалиден токен."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Корисникот е деактивиран или избришан."
|
msgstr "Сметката на корисникот е деактивирана."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Не може да се најавите со податоците за најава."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Мора да се внесе „username“ и „password“."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -70,11 +82,12 @@ msgstr "Не се внесени податоци за најава."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Немате дозвола да го сторите ова."
|
msgstr "Немате дозвола да го сторите ова."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Не е пронајдено ништо."
|
msgstr "Не е пронајдено ништо."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Методата \"{method}\" не е дозволена."
|
msgstr "Методата \"{method}\" не е дозволена."
|
||||||
|
|
||||||
|
@ -83,6 +96,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Не може да се исполни барањето на Accept header-от."
|
msgstr "Не може да се исполни барањето на Accept header-от."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Media типот „{media_type}“ не е поддржан."
|
msgstr "Media типот „{media_type}“ не е поддржан."
|
||||||
|
|
||||||
|
@ -90,161 +104,185 @@ msgstr "Media типот „{media_type}“ не е поддржан."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Request-от е забранет заради ограничувања."
|
msgstr "Request-от е забранет заради ограничувања."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "Ова поле е задолжително."
|
msgstr "Ова поле е задолжително."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Ова поле не смее да биде недефинирано."
|
msgstr "Ова поле не смее да биде недефинирано."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" не е валиден boolean."
|
msgstr "\"{input}\" не е валиден boolean."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "Ова поле не смее да биде празно."
|
msgstr "Ова поле не смее да биде празно."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Ова поле не смее да има повеќе од {max_length} знаци."
|
msgstr "Ова поле не смее да има повеќе од {max_length} знаци."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Ова поле мора да има барем {min_length} знаци."
|
msgstr "Ова поле мора да има барем {min_length} знаци."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Внесете валидна email адреса."
|
msgstr "Внесете валидна email адреса."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Ова поле не е по правилната шема/барање."
|
msgstr "Ова поле не е по правилната шема/барање."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Внесете валидно име што содржи букви, бројки, долни црти или црти."
|
msgstr "Внесете валидно име што содржи букви, бројки, долни црти или црти."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Внесете валиден URL."
|
msgstr "Внесете валиден URL."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Задолжителен е валиден цел број."
|
msgstr "Задолжителен е валиден цел број."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Вредноста треба да биде помала или еднаква на {max_value}."
|
msgstr "Вредноста треба да биде помала или еднаква на {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Вредноста треба да биде поголема или еднаква на {min_value}."
|
msgstr "Вредноста треба да биде поголема или еднаква на {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Вредноста е преголема."
|
msgstr "Вредноста е преголема."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Задолжителен е валиден број."
|
msgstr "Задолжителен е валиден број."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Не смее да има повеќе од {max_digits} цифри вкупно."
|
msgstr "Не смее да има повеќе од {max_digits} цифри вкупно."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Не смее да има повеќе од {max_decimal_places} децимални места."
|
msgstr "Не смее да има повеќе од {max_decimal_places} децимални места."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Не смее да има повеќе од {max_whole_digits} цифри пред децималната точка."
|
msgstr "Не смее да има повеќе од {max_whole_digits} цифри пред децималната точка."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Датата и времето се со погрешен формат. Користете го овој формат: {format}."
|
msgstr "Датата и времето се со погрешен формат. Користете го овој формат: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Очекувано беше дата и време, а внесено беше само дата."
|
msgstr "Очекувано беше дата и време, а внесено беше само дата."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Датата е со погрешен формат. Користете го овој формат: {format}."
|
msgstr "Датата е со погрешен формат. Користете го овој формат: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Очекувана беше дата, а внесени беа и дата и време."
|
msgstr "Очекувана беше дата, а внесени беа и дата и време."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Времето е со погрешен формат. Користете го овој формат: {format}."
|
msgstr "Времето е со погрешен формат. Користете го овој формат: {format}."
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "„{input}“ не е валиден избор."
|
msgstr "„{input}“ не е валиден избор."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Очекувана беше листа, а внесено беше „{input_type}“."
|
msgstr "Очекувана беше листа, а внесено беше „{input_type}“."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Ниеден фајл не е качен (upload-иран)."
|
msgstr "Ниеден фајл не е качен (upload-иран)."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Испратените податоци не се фајл. Проверете го encoding-от на формата."
|
msgstr "Испратените податоци не се фајл. Проверете го encoding-от на формата."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Не може да се открие име на фајлот."
|
msgstr "Не може да се открие име на фајлот."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Качениот (upload-иран) фајл е празен."
|
msgstr "Качениот (upload-иран) фајл е празен."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Името на фајлот треба да има највеќе {max_length} знаци (а има {length})."
|
msgstr "Името на фајлот треба да има највеќе {max_length} знаци (а има {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Качете (upload-ирајте) валидна слика. Фајлот што го качивте не е валидна слика или е расипан."
|
msgstr "Качете (upload-ирајте) валидна слика. Фајлот што го качивте не е валидна слика или е расипан."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Невалидна страна „{page_number}“: {message}."
|
msgstr "Невалидна страна „{page_number}“: {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Невалиден pk „{pk_value}“ - објектот не постои."
|
msgstr "Невалиден pk „{pk_value}“ - објектот не постои."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Неточен тип. Очекувано беше pk, а внесено {data_type}."
|
msgstr "Неточен тип. Очекувано беше pk, а внесено {data_type}."
|
||||||
|
|
||||||
|
@ -261,38 +299,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Невалиден хиперлинк - Објектот не постои."
|
msgstr "Невалиден хиперлинк - Објектот не постои."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Неточен тип. Очекувано беше URL, a внесено {data_type}."
|
msgstr "Неточен тип. Очекувано беше URL, a внесено {data_type}."
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Објектот со {slug_name}={value} не постои."
|
msgstr "Објектот со {slug_name}={value} не постои."
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Невалидна вредност."
|
msgstr "Невалидна вредност."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Невалидни податоци. Очекуван беше dictionary, а внесен {datatype}."
|
msgstr "Невалидни податоци. Очекуван беше dictionary, а внесен {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Ова поле мора да биде уникатно."
|
msgstr "Ова поле мора да биде уникатно."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Полињата {field_names} заедно мора да формираат уникатен збир."
|
msgstr "Полињата {field_names} заедно мора да формираат уникатен збир."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "Ова поле мора да биде уникатно за „{date_field}“ датата."
|
msgstr "Ова поле мора да биде уникатно за „{date_field}“ датата."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "Ова поле мора да биде уникатно за „{date_field}“ месецот."
|
msgstr "Ова поле мора да биде уникатно за „{date_field}“ месецот."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "Ова поле мора да биде уникатно за „{date_field}“ годината."
|
msgstr "Ова поле мора да биде уникатно за „{date_field}“ годината."
|
||||||
|
|
||||||
|
@ -304,22 +361,14 @@ msgstr "Невалидна верзија во „Accept“ header-от."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Невалидна верзија во URL патеката."
|
msgstr "Невалидна верзија во URL патеката."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Невалидна верзија во hostname-от."
|
msgstr "Невалидна верзија во hostname-от."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Невалидна верзија во query параметарот."
|
msgstr "Невалидна верзија во query параметарот."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Сметката на корисникот е деактивирана."
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Не може да се најавите со податоците за најава."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Мора да се внесе „username“ и „password“."
|
|
||||||
|
|
BIN
rest_framework/locale/nb/LC_MESSAGES/django.mo
Normal file
BIN
rest_framework/locale/nb/LC_MESSAGES/django.mo
Normal file
Binary file not shown.
373
rest_framework/locale/nb/LC_MESSAGES/django.po
Normal file
373
rest_framework/locale/nb/LC_MESSAGES/django.po
Normal file
|
@ -0,0 +1,373 @@
|
||||||
|
# SOME DESCRIPTIVE TITLE.
|
||||||
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
msgid ""
|
||||||
|
msgstr ""
|
||||||
|
"Project-Id-Version: Django REST framework\n"
|
||||||
|
"Report-Msgid-Bugs-To: \n"
|
||||||
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
|
"Language-Team: Norwegian Bokmål (http://www.transifex.com/projects/p/django-rest-framework/language/nb/)\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Language: nb\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
|
#: authentication.py:70
|
||||||
|
msgid "Invalid basic header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:73
|
||||||
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:79
|
||||||
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:97
|
||||||
|
msgid "Invalid username/password."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
|
msgid "Invalid token header. No credentials provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:170
|
||||||
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:179
|
||||||
|
msgid "Invalid token."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:20
|
||||||
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:38
|
||||||
|
msgid "A server error occurred."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:73
|
||||||
|
msgid "Malformed request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:78
|
||||||
|
msgid "Incorrect authentication credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:83
|
||||||
|
msgid "Authentication credentials were not provided."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:88
|
||||||
|
msgid "You do not have permission to perform this action."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:93 views.py:78
|
||||||
|
msgid "Not found."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Method \"{method}\" not allowed."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:109
|
||||||
|
msgid "Could not satisfy the request Accept header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: exceptions.py:134
|
||||||
|
msgid "Request was throttled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
|
#: validators.py:160
|
||||||
|
msgid "This field is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:163
|
||||||
|
msgid "This field may not be null."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:559
|
||||||
|
msgid "This field may not be blank."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:598
|
||||||
|
msgid "Enter a valid email address."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:609
|
||||||
|
msgid "This value does not match the required pattern."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:620
|
||||||
|
msgid ""
|
||||||
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
|
"hyphens."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:632
|
||||||
|
msgid "Enter a valid URL."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:679
|
||||||
|
msgid "A valid integer is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
|
msgid "String value too large."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:714 fields.py:747
|
||||||
|
msgid "A valid number is required."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
|
"decimal point."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:843
|
||||||
|
msgid "Expected a datetime but got a date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:908
|
||||||
|
msgid "Expected a date but got a datetime."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "\"{input}\" is not a valid choice."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1129
|
||||||
|
msgid "No file was submitted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1130
|
||||||
|
msgid ""
|
||||||
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1131
|
||||||
|
msgid "No filename could be determined."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1132
|
||||||
|
msgid "The submitted file is empty."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid ""
|
||||||
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1175
|
||||||
|
msgid ""
|
||||||
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
|
"corrupted image."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: pagination.py:492
|
||||||
|
msgid "Invalid cursor"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:157
|
||||||
|
msgid "Invalid hyperlink - No URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:158
|
||||||
|
msgid "Invalid hyperlink - Incorrect URL match."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:159
|
||||||
|
msgid "Invalid hyperlink - Object does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: relations.py:303
|
||||||
|
msgid "Invalid value."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:22
|
||||||
|
msgid "This field must be unique."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "The fields {field_names} must make a unique set."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:39
|
||||||
|
msgid "Invalid version in \"Accept\" header."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:70 versioning.py:112
|
||||||
|
msgid "Invalid version in URL path."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:141
|
||||||
|
msgid "Invalid version in hostname."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: versioning.py:163
|
||||||
|
msgid "Invalid version in query parameter."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:85
|
||||||
|
msgid "Permission denied."
|
||||||
|
msgstr ""
|
Binary file not shown.
|
@ -7,9 +7,9 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Dutch (http://www.transifex.com/projects/p/django-rest-framework/language/nl/)\n"
|
"Language-Team: Dutch (http://www.transifex.com/projects/p/django-rest-framework/language/nl/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -17,36 +17,48 @@ msgstr ""
|
||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
|
@ -69,11 +81,12 @@ msgstr ""
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -82,6 +95,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -89,161 +103,185 @@ msgstr ""
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -260,38 +298,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -303,22 +360,14 @@ msgstr ""
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
Binary file not shown.
|
@ -4,14 +4,15 @@
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Janusz Harkot <jh@blueice.pl>, 2015
|
# Janusz Harkot <jh@blueice.pl>, 2015
|
||||||
|
# Piotr Jakimiak <legolass71@gmail.com>, 2015
|
||||||
# Maciek Olko <maciej.olko@gmail.com>, 2015
|
# Maciek Olko <maciej.olko@gmail.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Django REST framework\n"
|
"Project-Id-Version: Django REST framework\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-01-30 16:23+0000\n"
|
"POT-Creation-Date: 2015-06-03 17:30+0100\n"
|
||||||
"PO-Revision-Date: 2015-01-30 16:27+0000\n"
|
"PO-Revision-Date: 2015-06-03 16:30+0000\n"
|
||||||
"Last-Translator: Thomas Christie <tom@tomchristie.com>\n"
|
"Last-Translator: Xavier Ordoquy <xordoquy@linovia.com>\n"
|
||||||
"Language-Team: Polish (http://www.transifex.com/projects/p/django-rest-framework/language/pl/)\n"
|
"Language-Team: Polish (http://www.transifex.com/projects/p/django-rest-framework/language/pl/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
@ -19,37 +20,49 @@ msgstr ""
|
||||||
"Language: pl\n"
|
"Language: pl\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: authentication.py:69
|
#: authentication.py:70
|
||||||
msgid "Invalid basic header. No credentials provided."
|
msgid "Invalid basic header. No credentials provided."
|
||||||
msgstr "Niepoprawny podstawowy nagłówek. Brak danych uwierzytelniających."
|
msgstr "Niepoprawny podstawowy nagłówek. Brak danych uwierzytelniających."
|
||||||
|
|
||||||
#: authentication.py:72
|
#: authentication.py:73
|
||||||
msgid "Invalid basic header. Credentials string should not contain spaces."
|
msgid "Invalid basic header. Credentials string should not contain spaces."
|
||||||
msgstr "Niepoprawny podstawowy nagłówek. Ciąg znaków danych uwierzytelniających nie powinien zawierać spacji."
|
msgstr "Niepoprawny podstawowy nagłówek. Ciąg znaków danych uwierzytelniających nie powinien zawierać spacji."
|
||||||
|
|
||||||
#: authentication.py:78
|
#: authentication.py:79
|
||||||
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
msgid "Invalid basic header. Credentials not correctly base64 encoded."
|
||||||
msgstr "Niepoprawny podstawowy nagłówek. Niewłaściwe kodowanie base64 danych uwierzytelniających."
|
msgstr "Niepoprawny podstawowy nagłówek. Niewłaściwe kodowanie base64 danych uwierzytelniających."
|
||||||
|
|
||||||
#: authentication.py:90
|
#: authentication.py:97
|
||||||
msgid "Invalid username/password."
|
msgid "Invalid username/password."
|
||||||
msgstr "Niepoprawna nazwa użytkownika lub hasło."
|
msgstr "Niepoprawna nazwa użytkownika lub hasło."
|
||||||
|
|
||||||
#: authentication.py:156
|
#: authentication.py:100 authentication.py:182
|
||||||
|
msgid "User inactive or deleted."
|
||||||
|
msgstr "Użytkownik nieaktywny lub usunięty."
|
||||||
|
|
||||||
|
#: authentication.py:167
|
||||||
msgid "Invalid token header. No credentials provided."
|
msgid "Invalid token header. No credentials provided."
|
||||||
msgstr "Niepoprawny nagłówek tokena. Brak danych uwierzytelniających."
|
msgstr "Niepoprawny nagłówek tokena. Brak danych uwierzytelniających."
|
||||||
|
|
||||||
#: authentication.py:159
|
#: authentication.py:170
|
||||||
msgid "Invalid token header. Token string should not contain spaces."
|
msgid "Invalid token header. Token string should not contain spaces."
|
||||||
msgstr "Niepoprawny nagłówek tokena. Token nie może zawierać odstępów."
|
msgstr "Niepoprawny nagłówek tokena. Token nie może zawierać odstępów."
|
||||||
|
|
||||||
#: authentication.py:168
|
#: authentication.py:179
|
||||||
msgid "Invalid token."
|
msgid "Invalid token."
|
||||||
msgstr "Niepoprawny token."
|
msgstr "Niepoprawny token."
|
||||||
|
|
||||||
#: authentication.py:171
|
#: authtoken/serializers.py:20
|
||||||
msgid "User inactive or deleted."
|
msgid "User account is disabled."
|
||||||
msgstr "Użytkownik nieaktywny lub usunięty."
|
msgstr "Konto użytkownika jest nieaktywne."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:23
|
||||||
|
msgid "Unable to log in with provided credentials."
|
||||||
|
msgstr "Podane dane uwierzytelniające nie pozwalają na zalogowanie."
|
||||||
|
|
||||||
|
#: authtoken/serializers.py:26
|
||||||
|
msgid "Must include \"username\" and \"password\"."
|
||||||
|
msgstr "Musi zawierać \"username\" i \"password\"."
|
||||||
|
|
||||||
#: exceptions.py:38
|
#: exceptions.py:38
|
||||||
msgid "A server error occurred."
|
msgid "A server error occurred."
|
||||||
|
@ -71,11 +84,12 @@ msgstr "Nie podano danych uwierzytelniających."
|
||||||
msgid "You do not have permission to perform this action."
|
msgid "You do not have permission to perform this action."
|
||||||
msgstr "Nie masz uprawnień, by wykonać tę czynność."
|
msgstr "Nie masz uprawnień, by wykonać tę czynność."
|
||||||
|
|
||||||
#: exceptions.py:93
|
#: exceptions.py:93 views.py:78
|
||||||
msgid "Not found."
|
msgid "Not found."
|
||||||
msgstr "Nie znaleziono."
|
msgstr "Nie znaleziono."
|
||||||
|
|
||||||
#: exceptions.py:98
|
#: exceptions.py:98
|
||||||
|
#, python-brace-format
|
||||||
msgid "Method \"{method}\" not allowed."
|
msgid "Method \"{method}\" not allowed."
|
||||||
msgstr "Niedozwolona metoda \"{method}\"."
|
msgstr "Niedozwolona metoda \"{method}\"."
|
||||||
|
|
||||||
|
@ -84,6 +98,7 @@ msgid "Could not satisfy the request Accept header."
|
||||||
msgstr "Nie można zaspokoić nagłówka Accept żądania."
|
msgstr "Nie można zaspokoić nagłówka Accept żądania."
|
||||||
|
|
||||||
#: exceptions.py:121
|
#: exceptions.py:121
|
||||||
|
#, python-brace-format
|
||||||
msgid "Unsupported media type \"{media_type}\" in request."
|
msgid "Unsupported media type \"{media_type}\" in request."
|
||||||
msgstr "Brak wsparcia dla żądanego typu danych \"{media_type}\"."
|
msgstr "Brak wsparcia dla żądanego typu danych \"{media_type}\"."
|
||||||
|
|
||||||
|
@ -91,161 +106,185 @@ msgstr "Brak wsparcia dla żądanego typu danych \"{media_type}\"."
|
||||||
msgid "Request was throttled."
|
msgid "Request was throttled."
|
||||||
msgstr "Żądanie zostało zdławione."
|
msgstr "Żądanie zostało zdławione."
|
||||||
|
|
||||||
#: fields.py:153 relations.py:132 relations.py:156 validators.py:77
|
#: fields.py:162 relations.py:132 relations.py:156 validators.py:77
|
||||||
#: validators.py:155
|
#: validators.py:160
|
||||||
msgid "This field is required."
|
msgid "This field is required."
|
||||||
msgstr "To pole jest wymagane."
|
msgstr "To pole jest wymagane."
|
||||||
|
|
||||||
#: fields.py:154
|
#: fields.py:163
|
||||||
msgid "This field may not be null."
|
msgid "This field may not be null."
|
||||||
msgstr "Pole nie może mieć wartości null."
|
msgstr "Pole nie może mieć wartości null."
|
||||||
|
|
||||||
#: fields.py:487 fields.py:515
|
#: fields.py:496 fields.py:524
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid boolean."
|
msgid "\"{input}\" is not a valid boolean."
|
||||||
msgstr "\"{input}\" nie jest poprawną wartością logiczną."
|
msgstr "\"{input}\" nie jest poprawną wartością logiczną."
|
||||||
|
|
||||||
#: fields.py:550
|
#: fields.py:559
|
||||||
msgid "This field may not be blank."
|
msgid "This field may not be blank."
|
||||||
msgstr "To pole nie może być puste."
|
msgstr "To pole nie może być puste."
|
||||||
|
|
||||||
#: fields.py:551 fields.py:1324
|
#: fields.py:560 fields.py:1386
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has no more than {max_length} characters."
|
msgid "Ensure this field has no more than {max_length} characters."
|
||||||
msgstr "Upewnij się, że to pole ma nie więcej niż {max_length} znaków."
|
msgstr "Upewnij się, że to pole ma nie więcej niż {max_length} znaków."
|
||||||
|
|
||||||
#: fields.py:552
|
#: fields.py:561
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this field has at least {min_length} characters."
|
msgid "Ensure this field has at least {min_length} characters."
|
||||||
msgstr "Upewnij się, że pole ma co najmniej {min_length} znaków."
|
msgstr "Upewnij się, że pole ma co najmniej {min_length} znaków."
|
||||||
|
|
||||||
#: fields.py:587
|
#: fields.py:598
|
||||||
msgid "Enter a valid email address."
|
msgid "Enter a valid email address."
|
||||||
msgstr "Podaj poprawny adres e-mail."
|
msgstr "Podaj poprawny adres e-mail."
|
||||||
|
|
||||||
#: fields.py:604
|
#: fields.py:609
|
||||||
msgid "This value does not match the required pattern."
|
msgid "This value does not match the required pattern."
|
||||||
msgstr "Ta wartość nie pasuje do wymaganego wzorca."
|
msgstr "Ta wartość nie pasuje do wymaganego wzorca."
|
||||||
|
|
||||||
#: fields.py:615
|
#: fields.py:620
|
||||||
msgid ""
|
msgid ""
|
||||||
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
"Enter a valid \"slug\" consisting of letters, numbers, underscores or "
|
||||||
"hyphens."
|
"hyphens."
|
||||||
msgstr "Wprowadź poprawną wartość pola typu \"slug\", składającą się ze znaków łacińskich, cyfr, podkreślenia lub myślnika."
|
msgstr "Wprowadź poprawną wartość pola typu \"slug\", składającą się ze znaków łacińskich, cyfr, podkreślenia lub myślnika."
|
||||||
|
|
||||||
#: fields.py:627
|
#: fields.py:632
|
||||||
msgid "Enter a valid URL."
|
msgid "Enter a valid URL."
|
||||||
msgstr "Wprowadź poprawny adres URL."
|
msgstr "Wprowadź poprawny adres URL."
|
||||||
|
|
||||||
#: fields.py:638
|
#: fields.py:645
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{value}\" is not a valid UUID."
|
msgid "\"{value}\" is not a valid UUID."
|
||||||
msgstr ""
|
msgstr "\"{value}\" nie jest poprawnym UUID."
|
||||||
|
|
||||||
#: fields.py:657
|
#: fields.py:679
|
||||||
msgid "A valid integer is required."
|
msgid "A valid integer is required."
|
||||||
msgstr "Wymagana poprawna liczba całkowita."
|
msgstr "Wymagana poprawna liczba całkowita."
|
||||||
|
|
||||||
#: fields.py:658 fields.py:692 fields.py:725
|
#: fields.py:680 fields.py:715 fields.py:748
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is less than or equal to {max_value}."
|
msgid "Ensure this value is less than or equal to {max_value}."
|
||||||
msgstr "Upewnij się, że ta wartość jest mniejsza lub równa {max_value}."
|
msgstr "Upewnij się, że ta wartość jest mniejsza lub równa {max_value}."
|
||||||
|
|
||||||
#: fields.py:659 fields.py:693 fields.py:726
|
#: fields.py:681 fields.py:716 fields.py:749
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure this value is greater than or equal to {min_value}."
|
msgid "Ensure this value is greater than or equal to {min_value}."
|
||||||
msgstr "Upewnij się, że ta wartość jest większa lub równa {min_value}."
|
msgstr "Upewnij się, że ta wartość jest większa lub równa {min_value}."
|
||||||
|
|
||||||
#: fields.py:660 fields.py:694 fields.py:730
|
#: fields.py:682 fields.py:717 fields.py:753
|
||||||
msgid "String value too large."
|
msgid "String value too large."
|
||||||
msgstr "Za długi ciąg znaków."
|
msgstr "Za długi ciąg znaków."
|
||||||
|
|
||||||
#: fields.py:691 fields.py:724
|
#: fields.py:714 fields.py:747
|
||||||
msgid "A valid number is required."
|
msgid "A valid number is required."
|
||||||
msgstr "Wymagana poprawna liczba."
|
msgstr "Wymagana poprawna liczba."
|
||||||
|
|
||||||
#: fields.py:727
|
#: fields.py:750
|
||||||
|
#, python-brace-format
|
||||||
msgid "Ensure that there are no more than {max_digits} digits in total."
|
msgid "Ensure that there are no more than {max_digits} digits in total."
|
||||||
msgstr "Upewnij się, że liczba ma nie więcej niż {max_digits} cyfr."
|
msgstr "Upewnij się, że liczba ma nie więcej niż {max_digits} cyfr."
|
||||||
|
|
||||||
#: fields.py:728
|
#: fields.py:751
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_decimal_places} decimal places."
|
"Ensure that there are no more than {max_decimal_places} decimal places."
|
||||||
msgstr "Upewnij się, że liczba ma nie więcej niż {max_decimal_places} cyfr dziesiętnych."
|
msgstr "Upewnij się, że liczba ma nie więcej niż {max_decimal_places} cyfr dziesiętnych."
|
||||||
|
|
||||||
#: fields.py:729
|
#: fields.py:752
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure that there are no more than {max_whole_digits} digits before the "
|
"Ensure that there are no more than {max_whole_digits} digits before the "
|
||||||
"decimal point."
|
"decimal point."
|
||||||
msgstr "Upewnij się, że liczba ma nie więcej niż {max_whole_digits} cyfr całkowitych."
|
msgstr "Upewnij się, że liczba ma nie więcej niż {max_whole_digits} cyfr całkowitych."
|
||||||
|
|
||||||
#: fields.py:813
|
#: fields.py:842
|
||||||
|
#, python-brace-format
|
||||||
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
msgid "Datetime has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Wartość daty z czasem ma zły format. Użyj jednego z dostępnych formatów: {format}."
|
msgstr "Wartość daty z czasem ma zły format. Użyj jednego z dostępnych formatów: {format}."
|
||||||
|
|
||||||
#: fields.py:814
|
#: fields.py:843
|
||||||
msgid "Expected a datetime but got a date."
|
msgid "Expected a datetime but got a date."
|
||||||
msgstr "Oczekiwano datę z czasem, otrzymano tylko datę."
|
msgstr "Oczekiwano datę z czasem, otrzymano tylko datę."
|
||||||
|
|
||||||
#: fields.py:878
|
#: fields.py:907
|
||||||
|
#, python-brace-format
|
||||||
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
msgid "Date has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Data ma zły format. Użyj jednego z tych formatów: {format}."
|
msgstr "Data ma zły format. Użyj jednego z tych formatów: {format}."
|
||||||
|
|
||||||
#: fields.py:879
|
#: fields.py:908
|
||||||
msgid "Expected a date but got a datetime."
|
msgid "Expected a date but got a datetime."
|
||||||
msgstr "Oczekiwano daty a otrzymano datę z czasem."
|
msgstr "Oczekiwano daty a otrzymano datę z czasem."
|
||||||
|
|
||||||
#: fields.py:936
|
#: fields.py:971
|
||||||
|
#, python-brace-format
|
||||||
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
msgid "Time has wrong format. Use one of these formats instead: {format}."
|
||||||
msgstr "Błędny format czasu. Użyj jednego z dostępnych formatów: {format}"
|
msgstr "Błędny format czasu. Użyj jednego z dostępnych formatów: {format}"
|
||||||
|
|
||||||
#: fields.py:992 fields.py:1036
|
#: fields.py:1025
|
||||||
|
#, python-brace-format
|
||||||
|
msgid "Duration has wrong format. Use one of these formats instead: {format}."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: fields.py:1050 fields.py:1094
|
||||||
|
#, python-brace-format
|
||||||
msgid "\"{input}\" is not a valid choice."
|
msgid "\"{input}\" is not a valid choice."
|
||||||
msgstr "\"{input}\" nie jest poprawnym wyborem."
|
msgstr "\"{input}\" nie jest poprawnym wyborem."
|
||||||
|
|
||||||
#: fields.py:1037 fields.py:1151 serializers.py:482
|
#: fields.py:1095 fields.py:1213 serializers.py:487
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a list of items but got type \"{input_type}\"."
|
msgid "Expected a list of items but got type \"{input_type}\"."
|
||||||
msgstr "Oczekiwano listy elementów, a otrzymano dane typu \"{input_type}\"."
|
msgstr "Oczekiwano listy elementów, a otrzymano dane typu \"{input_type}\"."
|
||||||
|
|
||||||
#: fields.py:1067
|
#: fields.py:1129
|
||||||
msgid "No file was submitted."
|
msgid "No file was submitted."
|
||||||
msgstr "Nie przesłano pliku."
|
msgstr "Nie przesłano pliku."
|
||||||
|
|
||||||
#: fields.py:1068
|
#: fields.py:1130
|
||||||
msgid ""
|
msgid ""
|
||||||
"The submitted data was not a file. Check the encoding type on the form."
|
"The submitted data was not a file. Check the encoding type on the form."
|
||||||
msgstr "Przesłane dane nie były plikiem. Sprawdź typ kodowania formatki."
|
msgstr "Przesłane dane nie były plikiem. Sprawdź typ kodowania formatki."
|
||||||
|
|
||||||
#: fields.py:1069
|
#: fields.py:1131
|
||||||
msgid "No filename could be determined."
|
msgid "No filename could be determined."
|
||||||
msgstr "Nie można określić nazwy pliku."
|
msgstr "Nie można określić nazwy pliku."
|
||||||
|
|
||||||
#: fields.py:1070
|
#: fields.py:1132
|
||||||
msgid "The submitted file is empty."
|
msgid "The submitted file is empty."
|
||||||
msgstr "Przesłany plik jest pusty."
|
msgstr "Przesłany plik jest pusty."
|
||||||
|
|
||||||
#: fields.py:1071
|
#: fields.py:1133
|
||||||
|
#, python-brace-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"Ensure this filename has at most {max_length} characters (it has {length})."
|
"Ensure this filename has at most {max_length} characters (it has {length})."
|
||||||
msgstr "Upewnij się, że nazwa pliku ma długość co najwyżej {max_length} znaków (aktualnie ma {length})."
|
msgstr "Upewnij się, że nazwa pliku ma długość co najwyżej {max_length} znaków (aktualnie ma {length})."
|
||||||
|
|
||||||
#: fields.py:1113
|
#: fields.py:1175
|
||||||
msgid ""
|
msgid ""
|
||||||
"Upload a valid image. The file you uploaded was either not an image or a "
|
"Upload a valid image. The file you uploaded was either not an image or a "
|
||||||
"corrupted image."
|
"corrupted image."
|
||||||
msgstr "Prześlij poprawny plik graficzny. Przesłany plik albo nie jest grafiką lub jest uszkodzony."
|
msgstr "Prześlij poprawny plik graficzny. Przesłany plik albo nie jest grafiką lub jest uszkodzony."
|
||||||
|
|
||||||
#: fields.py:1188
|
#: fields.py:1250
|
||||||
|
#, python-brace-format
|
||||||
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
msgid "Expected a dictionary of items but got type \"{input_type}\"."
|
||||||
msgstr ""
|
msgstr "Oczekiwano słownika, ale otrzymano \"{input_type}\"."
|
||||||
|
|
||||||
#: pagination.py:221
|
#: pagination.py:231
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid page \"{page_number}\": {message}."
|
msgid "Invalid page \"{page_number}\": {message}."
|
||||||
msgstr "Niepoprawna strona \"{page_number}\": {message}."
|
msgstr "Niepoprawna strona \"{page_number}\": {message}."
|
||||||
|
|
||||||
#: pagination.py:442
|
#: pagination.py:492
|
||||||
msgid "Invalid cursor"
|
msgid "Invalid cursor"
|
||||||
msgstr ""
|
msgstr "Niepoprawny wskaźnik"
|
||||||
|
|
||||||
#: relations.py:133
|
#: relations.py:133
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
msgid "Invalid pk \"{pk_value}\" - object does not exist."
|
||||||
msgstr "Błędny klucz główny \"{pk_value}\" - obiekt nie istnieje."
|
msgstr "Błędny klucz główny \"{pk_value}\" - obiekt nie istnieje."
|
||||||
|
|
||||||
#: relations.py:134
|
#: relations.py:134
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected pk value, received {data_type}."
|
msgid "Incorrect type. Expected pk value, received {data_type}."
|
||||||
msgstr "Błędny typ danych. Oczekiwano wartość klucza głównego, otrzymano {data_type}."
|
msgstr "Błędny typ danych. Oczekiwano wartość klucza głównego, otrzymano {data_type}."
|
||||||
|
|
||||||
|
@ -262,38 +301,57 @@ msgid "Invalid hyperlink - Object does not exist."
|
||||||
msgstr "Błędny hyperlink - obiekt nie istnieje."
|
msgstr "Błędny hyperlink - obiekt nie istnieje."
|
||||||
|
|
||||||
#: relations.py:160
|
#: relations.py:160
|
||||||
|
#, python-brace-format
|
||||||
msgid "Incorrect type. Expected URL string, received {data_type}."
|
msgid "Incorrect type. Expected URL string, received {data_type}."
|
||||||
msgstr "Błędny typ danych. Oczekiwano adresu URL, otrzymano {data_type}"
|
msgstr "Błędny typ danych. Oczekiwano adresu URL, otrzymano {data_type}"
|
||||||
|
|
||||||
#: relations.py:295
|
#: relations.py:302
|
||||||
|
#, python-brace-format
|
||||||
msgid "Object with {slug_name}={value} does not exist."
|
msgid "Object with {slug_name}={value} does not exist."
|
||||||
msgstr "Obiekt z polem {slug_name}={value} nie istnieje"
|
msgstr "Obiekt z polem {slug_name}={value} nie istnieje"
|
||||||
|
|
||||||
#: relations.py:296
|
#: relations.py:303
|
||||||
msgid "Invalid value."
|
msgid "Invalid value."
|
||||||
msgstr "Niepoprawna wartość."
|
msgstr "Niepoprawna wartość."
|
||||||
|
|
||||||
#: serializers.py:299
|
#: serializers.py:304
|
||||||
|
#, python-brace-format
|
||||||
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
msgid "Invalid data. Expected a dictionary, but got {datatype}."
|
||||||
msgstr "Niepoprawne dane. Oczekiwano słownika, otrzymano {datatype}."
|
msgstr "Niepoprawne dane. Oczekiwano słownika, otrzymano {datatype}."
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/radio.html:2
|
||||||
|
#: templates/rest_framework/inline/radio.html:2
|
||||||
|
#: templates/rest_framework/vertical/radio.html:2
|
||||||
|
msgid "None"
|
||||||
|
msgstr "None"
|
||||||
|
|
||||||
|
#: templates/rest_framework/horizontal/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/inline/select_multiple.html:2
|
||||||
|
#: templates/rest_framework/vertical/select_multiple.html:2
|
||||||
|
msgid "No items to select."
|
||||||
|
msgstr "Nie wybrano wartości."
|
||||||
|
|
||||||
#: validators.py:22
|
#: validators.py:22
|
||||||
msgid "This field must be unique."
|
msgid "This field must be unique."
|
||||||
msgstr "Wartość dla tego pola musi być unikalna."
|
msgstr "Wartość dla tego pola musi być unikalna."
|
||||||
|
|
||||||
#: validators.py:76
|
#: validators.py:76
|
||||||
|
#, python-brace-format
|
||||||
msgid "The fields {field_names} must make a unique set."
|
msgid "The fields {field_names} must make a unique set."
|
||||||
msgstr "Pola {field_names} muszą tworzyć unikalny zestaw."
|
msgstr "Pola {field_names} muszą tworzyć unikalny zestaw."
|
||||||
|
|
||||||
#: validators.py:219
|
#: validators.py:224
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" date."
|
msgid "This field must be unique for the \"{date_field}\" date."
|
||||||
msgstr "To pole musi mieć unikalną wartość dla jednej daty z pola \"{date_field}\"."
|
msgstr "To pole musi mieć unikalną wartość dla jednej daty z pola \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:234
|
#: validators.py:239
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" month."
|
msgid "This field must be unique for the \"{date_field}\" month."
|
||||||
msgstr "To pole musi mieć unikalną wartość dla konkretnego miesiąca z pola \"{date_field}\"."
|
msgstr "To pole musi mieć unikalną wartość dla konkretnego miesiąca z pola \"{date_field}\"."
|
||||||
|
|
||||||
#: validators.py:247
|
#: validators.py:252
|
||||||
|
#, python-brace-format
|
||||||
msgid "This field must be unique for the \"{date_field}\" year."
|
msgid "This field must be unique for the \"{date_field}\" year."
|
||||||
msgstr "To pole musi mieć unikalną wartość dla konkretnego roku z pola \"{date_field}\"."
|
msgstr "To pole musi mieć unikalną wartość dla konkretnego roku z pola \"{date_field}\"."
|
||||||
|
|
||||||
|
@ -305,22 +363,14 @@ msgstr "Błędna wersja w nagłówku \"Accept\"."
|
||||||
msgid "Invalid version in URL path."
|
msgid "Invalid version in URL path."
|
||||||
msgstr "Błędna wersja w ścieżce URL."
|
msgstr "Błędna wersja w ścieżce URL."
|
||||||
|
|
||||||
#: versioning.py:138
|
#: versioning.py:141
|
||||||
msgid "Invalid version in hostname."
|
msgid "Invalid version in hostname."
|
||||||
msgstr "Błędna wersja w nazwie hosta."
|
msgstr "Błędna wersja w nazwie hosta."
|
||||||
|
|
||||||
#: versioning.py:160
|
#: versioning.py:163
|
||||||
msgid "Invalid version in query parameter."
|
msgid "Invalid version in query parameter."
|
||||||
msgstr "Błędna wersja w parametrach zapytania."
|
msgstr "Błędna wersja w parametrach zapytania."
|
||||||
|
|
||||||
#: authtoken/serializers.py:20
|
#: views.py:85
|
||||||
msgid "User account is disabled."
|
msgid "Permission denied."
|
||||||
msgstr "Konto użytkownika jest nieaktywne."
|
msgstr "Brak uprawnień."
|
||||||
|
|
||||||
#: authtoken/serializers.py:23
|
|
||||||
msgid "Unable to log in with provided credentials."
|
|
||||||
msgstr "Podane dane uwierzytelniające nie pozwalają na zalogowanie."
|
|
||||||
|
|
||||||
#: authtoken/serializers.py:26
|
|
||||||
msgid "Must include \"username\" and \"password\"."
|
|
||||||
msgstr "Musi zawierać \"username\" i \"password\"."
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user