docker setup
This commit is contained in:
		| @ -0,0 +1,2 @@ | ||||
| from .general import *  # NOQA | ||||
| from .statistics import *  # NOQA | ||||
| @ -0,0 +1,155 @@ | ||||
| import json | ||||
| import warnings | ||||
|  | ||||
| from django.contrib.postgres.fields import ArrayField | ||||
| from django.db.models import Aggregate, BooleanField, JSONField, TextField, Value | ||||
| from django.utils.deprecation import RemovedInDjango50Warning, RemovedInDjango51Warning | ||||
|  | ||||
| from .mixins import OrderableAggMixin | ||||
|  | ||||
| __all__ = [ | ||||
|     "ArrayAgg", | ||||
|     "BitAnd", | ||||
|     "BitOr", | ||||
|     "BitXor", | ||||
|     "BoolAnd", | ||||
|     "BoolOr", | ||||
|     "JSONBAgg", | ||||
|     "StringAgg", | ||||
| ] | ||||
|  | ||||
|  | ||||
| # RemovedInDjango50Warning | ||||
| NOT_PROVIDED = object() | ||||
|  | ||||
|  | ||||
| class DeprecatedConvertValueMixin: | ||||
|     def __init__(self, *expressions, default=NOT_PROVIDED, **extra): | ||||
|         if default is NOT_PROVIDED: | ||||
|             default = None | ||||
|             self._default_provided = False | ||||
|         else: | ||||
|             self._default_provided = True | ||||
|         super().__init__(*expressions, default=default, **extra) | ||||
|  | ||||
|     def resolve_expression(self, *args, **kwargs): | ||||
|         resolved = super().resolve_expression(*args, **kwargs) | ||||
|         if not self._default_provided: | ||||
|             resolved.empty_result_set_value = getattr( | ||||
|                 self, "deprecation_empty_result_set_value", self.deprecation_value | ||||
|             ) | ||||
|         return resolved | ||||
|  | ||||
|     def convert_value(self, value, expression, connection): | ||||
|         if value is None and not self._default_provided: | ||||
|             warnings.warn(self.deprecation_msg, category=RemovedInDjango50Warning) | ||||
|             return self.deprecation_value | ||||
|         return value | ||||
|  | ||||
|  | ||||
| class ArrayAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): | ||||
|     function = "ARRAY_AGG" | ||||
|     template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" | ||||
|     allow_distinct = True | ||||
|  | ||||
|     # RemovedInDjango50Warning | ||||
|     deprecation_value = property(lambda self: []) | ||||
|     deprecation_msg = ( | ||||
|         "In Django 5.0, ArrayAgg() will return None instead of an empty list " | ||||
|         "if there are no rows. Pass default=None to opt into the new behavior " | ||||
|         "and silence this warning or default=[] to keep the previous behavior." | ||||
|     ) | ||||
|  | ||||
|     @property | ||||
|     def output_field(self): | ||||
|         return ArrayField(self.source_expressions[0].output_field) | ||||
|  | ||||
|  | ||||
| class BitAnd(Aggregate): | ||||
|     function = "BIT_AND" | ||||
|  | ||||
|  | ||||
| class BitOr(Aggregate): | ||||
|     function = "BIT_OR" | ||||
|  | ||||
|  | ||||
| class BitXor(Aggregate): | ||||
|     function = "BIT_XOR" | ||||
|  | ||||
|  | ||||
| class BoolAnd(Aggregate): | ||||
|     function = "BOOL_AND" | ||||
|     output_field = BooleanField() | ||||
|  | ||||
|  | ||||
| class BoolOr(Aggregate): | ||||
|     function = "BOOL_OR" | ||||
|     output_field = BooleanField() | ||||
|  | ||||
|  | ||||
| class JSONBAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): | ||||
|     function = "JSONB_AGG" | ||||
|     template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" | ||||
|     allow_distinct = True | ||||
|     output_field = JSONField() | ||||
|  | ||||
|     # RemovedInDjango50Warning | ||||
|     deprecation_value = "[]" | ||||
|     deprecation_empty_result_set_value = property(lambda self: []) | ||||
|     deprecation_msg = ( | ||||
|         "In Django 5.0, JSONBAgg() will return None instead of an empty list " | ||||
|         "if there are no rows. Pass default=None to opt into the new behavior " | ||||
|         "and silence this warning or default=[] to keep the previous " | ||||
|         "behavior." | ||||
|     ) | ||||
|  | ||||
|     # RemovedInDjango51Warning: When the deprecation ends, remove __init__(). | ||||
|     # | ||||
|     # RemovedInDjango50Warning: When the deprecation ends, replace with: | ||||
|     # def __init__(self, *expressions, default=None, **extra): | ||||
|     def __init__(self, *expressions, default=NOT_PROVIDED, **extra): | ||||
|         super().__init__(*expressions, default=default, **extra) | ||||
|         if ( | ||||
|             isinstance(default, Value) | ||||
|             and isinstance(default.value, str) | ||||
|             and not isinstance(default.output_field, JSONField) | ||||
|         ): | ||||
|             value = default.value | ||||
|             try: | ||||
|                 decoded = json.loads(value) | ||||
|             except json.JSONDecodeError: | ||||
|                 warnings.warn( | ||||
|                     "Passing a Value() with an output_field that isn't a JSONField as " | ||||
|                     "JSONBAgg(default) is deprecated. Pass default=" | ||||
|                     f"Value({value!r}, output_field=JSONField()) instead.", | ||||
|                     stacklevel=2, | ||||
|                     category=RemovedInDjango51Warning, | ||||
|                 ) | ||||
|                 self.default.output_field = self.output_field | ||||
|             else: | ||||
|                 self.default = Value(decoded, self.output_field) | ||||
|                 warnings.warn( | ||||
|                     "Passing an encoded JSON string as JSONBAgg(default) is " | ||||
|                     f"deprecated. Pass default={decoded!r} instead.", | ||||
|                     stacklevel=2, | ||||
|                     category=RemovedInDjango51Warning, | ||||
|                 ) | ||||
|  | ||||
|  | ||||
| class StringAgg(DeprecatedConvertValueMixin, OrderableAggMixin, Aggregate): | ||||
|     function = "STRING_AGG" | ||||
|     template = "%(function)s(%(distinct)s%(expressions)s %(ordering)s)" | ||||
|     allow_distinct = True | ||||
|     output_field = TextField() | ||||
|  | ||||
|     # RemovedInDjango50Warning | ||||
|     deprecation_value = "" | ||||
|     deprecation_msg = ( | ||||
|         "In Django 5.0, StringAgg() will return None instead of an empty " | ||||
|         "string if there are no rows. Pass default=None to opt into the new " | ||||
|         'behavior and silence this warning or default="" to keep the previous behavior.' | ||||
|     ) | ||||
|  | ||||
|     def __init__(self, expression, delimiter, **extra): | ||||
|         delimiter_expr = Value(str(delimiter)) | ||||
|         super().__init__(expression, delimiter_expr, **extra) | ||||
| @ -0,0 +1,29 @@ | ||||
| from django.db.models.expressions import OrderByList | ||||
|  | ||||
|  | ||||
| class OrderableAggMixin: | ||||
|     def __init__(self, *expressions, ordering=(), **extra): | ||||
|         if isinstance(ordering, (list, tuple)): | ||||
|             self.order_by = OrderByList(*ordering) | ||||
|         else: | ||||
|             self.order_by = OrderByList(ordering) | ||||
|         super().__init__(*expressions, **extra) | ||||
|  | ||||
|     def resolve_expression(self, *args, **kwargs): | ||||
|         self.order_by = self.order_by.resolve_expression(*args, **kwargs) | ||||
|         return super().resolve_expression(*args, **kwargs) | ||||
|  | ||||
|     def get_source_expressions(self): | ||||
|         if self.order_by.source_expressions: | ||||
|             return super().get_source_expressions() + [self.order_by] | ||||
|         return super().get_source_expressions() | ||||
|  | ||||
|     def set_source_expressions(self, exprs): | ||||
|         if isinstance(exprs[-1], OrderByList): | ||||
|             *exprs, self.order_by = exprs | ||||
|         return super().set_source_expressions(exprs) | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         order_by_sql, order_by_params = compiler.compile(self.order_by) | ||||
|         sql, sql_params = super().as_sql(compiler, connection, ordering=order_by_sql) | ||||
|         return sql, (*sql_params, *order_by_params) | ||||
| @ -0,0 +1,75 @@ | ||||
| from django.db.models import Aggregate, FloatField, IntegerField | ||||
|  | ||||
| __all__ = [ | ||||
|     "CovarPop", | ||||
|     "Corr", | ||||
|     "RegrAvgX", | ||||
|     "RegrAvgY", | ||||
|     "RegrCount", | ||||
|     "RegrIntercept", | ||||
|     "RegrR2", | ||||
|     "RegrSlope", | ||||
|     "RegrSXX", | ||||
|     "RegrSXY", | ||||
|     "RegrSYY", | ||||
|     "StatAggregate", | ||||
| ] | ||||
|  | ||||
|  | ||||
| class StatAggregate(Aggregate): | ||||
|     output_field = FloatField() | ||||
|  | ||||
|     def __init__(self, y, x, output_field=None, filter=None, default=None): | ||||
|         if not x or not y: | ||||
|             raise ValueError("Both y and x must be provided.") | ||||
|         super().__init__( | ||||
|             y, x, output_field=output_field, filter=filter, default=default | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class Corr(StatAggregate): | ||||
|     function = "CORR" | ||||
|  | ||||
|  | ||||
| class CovarPop(StatAggregate): | ||||
|     def __init__(self, y, x, sample=False, filter=None, default=None): | ||||
|         self.function = "COVAR_SAMP" if sample else "COVAR_POP" | ||||
|         super().__init__(y, x, filter=filter, default=default) | ||||
|  | ||||
|  | ||||
| class RegrAvgX(StatAggregate): | ||||
|     function = "REGR_AVGX" | ||||
|  | ||||
|  | ||||
| class RegrAvgY(StatAggregate): | ||||
|     function = "REGR_AVGY" | ||||
|  | ||||
|  | ||||
| class RegrCount(StatAggregate): | ||||
|     function = "REGR_COUNT" | ||||
|     output_field = IntegerField() | ||||
|     empty_result_set_value = 0 | ||||
|  | ||||
|  | ||||
| class RegrIntercept(StatAggregate): | ||||
|     function = "REGR_INTERCEPT" | ||||
|  | ||||
|  | ||||
| class RegrR2(StatAggregate): | ||||
|     function = "REGR_R2" | ||||
|  | ||||
|  | ||||
| class RegrSlope(StatAggregate): | ||||
|     function = "REGR_SLOPE" | ||||
|  | ||||
|  | ||||
| class RegrSXX(StatAggregate): | ||||
|     function = "REGR_SXX" | ||||
|  | ||||
|  | ||||
| class RegrSXY(StatAggregate): | ||||
|     function = "REGR_SXY" | ||||
|  | ||||
|  | ||||
| class RegrSYY(StatAggregate): | ||||
|     function = "REGR_SYY" | ||||
| @ -0,0 +1,84 @@ | ||||
| from django.apps import AppConfig | ||||
| from django.core.signals import setting_changed | ||||
| from django.db import connections | ||||
| from django.db.backends.postgresql.psycopg_any import RANGE_TYPES | ||||
| from django.db.backends.signals import connection_created | ||||
| from django.db.migrations.writer import MigrationWriter | ||||
| from django.db.models import CharField, OrderBy, TextField | ||||
| from django.db.models.functions import Collate | ||||
| from django.db.models.indexes import IndexExpression | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| from .indexes import OpClass | ||||
| from .lookups import ( | ||||
|     SearchLookup, | ||||
|     TrigramSimilar, | ||||
|     TrigramStrictWordSimilar, | ||||
|     TrigramWordSimilar, | ||||
|     Unaccent, | ||||
| ) | ||||
| from .serializers import RangeSerializer | ||||
| from .signals import register_type_handlers | ||||
|  | ||||
|  | ||||
| def uninstall_if_needed(setting, value, enter, **kwargs): | ||||
|     """ | ||||
|     Undo the effects of PostgresConfig.ready() when django.contrib.postgres | ||||
|     is "uninstalled" by override_settings(). | ||||
|     """ | ||||
|     if ( | ||||
|         not enter | ||||
|         and setting == "INSTALLED_APPS" | ||||
|         and "django.contrib.postgres" not in set(value) | ||||
|     ): | ||||
|         connection_created.disconnect(register_type_handlers) | ||||
|         CharField._unregister_lookup(Unaccent) | ||||
|         TextField._unregister_lookup(Unaccent) | ||||
|         CharField._unregister_lookup(SearchLookup) | ||||
|         TextField._unregister_lookup(SearchLookup) | ||||
|         CharField._unregister_lookup(TrigramSimilar) | ||||
|         TextField._unregister_lookup(TrigramSimilar) | ||||
|         CharField._unregister_lookup(TrigramWordSimilar) | ||||
|         TextField._unregister_lookup(TrigramWordSimilar) | ||||
|         CharField._unregister_lookup(TrigramStrictWordSimilar) | ||||
|         TextField._unregister_lookup(TrigramStrictWordSimilar) | ||||
|         # Disconnect this receiver until the next time this app is installed | ||||
|         # and ready() connects it again to prevent unnecessary processing on | ||||
|         # each setting change. | ||||
|         setting_changed.disconnect(uninstall_if_needed) | ||||
|         MigrationWriter.unregister_serializer(RANGE_TYPES) | ||||
|  | ||||
|  | ||||
| class PostgresConfig(AppConfig): | ||||
|     name = "django.contrib.postgres" | ||||
|     verbose_name = _("PostgreSQL extensions") | ||||
|  | ||||
|     def ready(self): | ||||
|         setting_changed.connect(uninstall_if_needed) | ||||
|         # Connections may already exist before we are called. | ||||
|         for conn in connections.all(initialized_only=True): | ||||
|             if conn.vendor == "postgresql": | ||||
|                 conn.introspection.data_types_reverse.update( | ||||
|                     { | ||||
|                         3904: "django.contrib.postgres.fields.IntegerRangeField", | ||||
|                         3906: "django.contrib.postgres.fields.DecimalRangeField", | ||||
|                         3910: "django.contrib.postgres.fields.DateTimeRangeField", | ||||
|                         3912: "django.contrib.postgres.fields.DateRangeField", | ||||
|                         3926: "django.contrib.postgres.fields.BigIntegerRangeField", | ||||
|                     } | ||||
|                 ) | ||||
|                 if conn.connection is not None: | ||||
|                     register_type_handlers(conn) | ||||
|         connection_created.connect(register_type_handlers) | ||||
|         CharField.register_lookup(Unaccent) | ||||
|         TextField.register_lookup(Unaccent) | ||||
|         CharField.register_lookup(SearchLookup) | ||||
|         TextField.register_lookup(SearchLookup) | ||||
|         CharField.register_lookup(TrigramSimilar) | ||||
|         TextField.register_lookup(TrigramSimilar) | ||||
|         CharField.register_lookup(TrigramWordSimilar) | ||||
|         TextField.register_lookup(TrigramWordSimilar) | ||||
|         CharField.register_lookup(TrigramStrictWordSimilar) | ||||
|         TextField.register_lookup(TrigramStrictWordSimilar) | ||||
|         MigrationWriter.register_serializer(RANGE_TYPES, RangeSerializer) | ||||
|         IndexExpression.register_wrappers(OrderBy, OpClass, Collate) | ||||
| @ -0,0 +1,233 @@ | ||||
| import warnings | ||||
|  | ||||
| from django.contrib.postgres.indexes import OpClass | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.db import DEFAULT_DB_ALIAS, NotSupportedError | ||||
| from django.db.backends.ddl_references import Expressions, Statement, Table | ||||
| from django.db.models import BaseConstraint, Deferrable, F, Q | ||||
| from django.db.models.expressions import Exists, ExpressionList | ||||
| from django.db.models.indexes import IndexExpression | ||||
| from django.db.models.lookups import PostgresOperatorLookup | ||||
| from django.db.models.sql import Query | ||||
| from django.utils.deprecation import RemovedInDjango50Warning | ||||
|  | ||||
| __all__ = ["ExclusionConstraint"] | ||||
|  | ||||
|  | ||||
| class ExclusionConstraintExpression(IndexExpression): | ||||
|     template = "%(expressions)s WITH %(operator)s" | ||||
|  | ||||
|  | ||||
| class ExclusionConstraint(BaseConstraint): | ||||
|     template = ( | ||||
|         "CONSTRAINT %(name)s EXCLUDE USING %(index_type)s " | ||||
|         "(%(expressions)s)%(include)s%(where)s%(deferrable)s" | ||||
|     ) | ||||
|  | ||||
|     def __init__( | ||||
|         self, | ||||
|         *, | ||||
|         name, | ||||
|         expressions, | ||||
|         index_type=None, | ||||
|         condition=None, | ||||
|         deferrable=None, | ||||
|         include=None, | ||||
|         opclasses=(), | ||||
|         violation_error_message=None, | ||||
|     ): | ||||
|         if index_type and index_type.lower() not in {"gist", "spgist"}: | ||||
|             raise ValueError( | ||||
|                 "Exclusion constraints only support GiST or SP-GiST indexes." | ||||
|             ) | ||||
|         if not expressions: | ||||
|             raise ValueError( | ||||
|                 "At least one expression is required to define an exclusion " | ||||
|                 "constraint." | ||||
|             ) | ||||
|         if not all( | ||||
|             isinstance(expr, (list, tuple)) and len(expr) == 2 for expr in expressions | ||||
|         ): | ||||
|             raise ValueError("The expressions must be a list of 2-tuples.") | ||||
|         if not isinstance(condition, (type(None), Q)): | ||||
|             raise ValueError("ExclusionConstraint.condition must be a Q instance.") | ||||
|         if not isinstance(deferrable, (type(None), Deferrable)): | ||||
|             raise ValueError( | ||||
|                 "ExclusionConstraint.deferrable must be a Deferrable instance." | ||||
|             ) | ||||
|         if not isinstance(include, (type(None), list, tuple)): | ||||
|             raise ValueError("ExclusionConstraint.include must be a list or tuple.") | ||||
|         if not isinstance(opclasses, (list, tuple)): | ||||
|             raise ValueError("ExclusionConstraint.opclasses must be a list or tuple.") | ||||
|         if opclasses and len(expressions) != len(opclasses): | ||||
|             raise ValueError( | ||||
|                 "ExclusionConstraint.expressions and " | ||||
|                 "ExclusionConstraint.opclasses must have the same number of " | ||||
|                 "elements." | ||||
|             ) | ||||
|         self.expressions = expressions | ||||
|         self.index_type = index_type or "GIST" | ||||
|         self.condition = condition | ||||
|         self.deferrable = deferrable | ||||
|         self.include = tuple(include) if include else () | ||||
|         self.opclasses = opclasses | ||||
|         if self.opclasses: | ||||
|             warnings.warn( | ||||
|                 "The opclasses argument is deprecated in favor of using " | ||||
|                 "django.contrib.postgres.indexes.OpClass in " | ||||
|                 "ExclusionConstraint.expressions.", | ||||
|                 category=RemovedInDjango50Warning, | ||||
|                 stacklevel=2, | ||||
|             ) | ||||
|         super().__init__(name=name, violation_error_message=violation_error_message) | ||||
|  | ||||
|     def _get_expressions(self, schema_editor, query): | ||||
|         expressions = [] | ||||
|         for idx, (expression, operator) in enumerate(self.expressions): | ||||
|             if isinstance(expression, str): | ||||
|                 expression = F(expression) | ||||
|             try: | ||||
|                 expression = OpClass(expression, self.opclasses[idx]) | ||||
|             except IndexError: | ||||
|                 pass | ||||
|             expression = ExclusionConstraintExpression(expression, operator=operator) | ||||
|             expression.set_wrapper_classes(schema_editor.connection) | ||||
|             expressions.append(expression) | ||||
|         return ExpressionList(*expressions).resolve_expression(query) | ||||
|  | ||||
|     def _get_condition_sql(self, compiler, schema_editor, query): | ||||
|         if self.condition is None: | ||||
|             return None | ||||
|         where = query.build_where(self.condition) | ||||
|         sql, params = where.as_sql(compiler, schema_editor.connection) | ||||
|         return sql % tuple(schema_editor.quote_value(p) for p in params) | ||||
|  | ||||
|     def constraint_sql(self, model, schema_editor): | ||||
|         query = Query(model, alias_cols=False) | ||||
|         compiler = query.get_compiler(connection=schema_editor.connection) | ||||
|         expressions = self._get_expressions(schema_editor, query) | ||||
|         table = model._meta.db_table | ||||
|         condition = self._get_condition_sql(compiler, schema_editor, query) | ||||
|         include = [ | ||||
|             model._meta.get_field(field_name).column for field_name in self.include | ||||
|         ] | ||||
|         return Statement( | ||||
|             self.template, | ||||
|             table=Table(table, schema_editor.quote_name), | ||||
|             name=schema_editor.quote_name(self.name), | ||||
|             index_type=self.index_type, | ||||
|             expressions=Expressions( | ||||
|                 table, expressions, compiler, schema_editor.quote_value | ||||
|             ), | ||||
|             where=" WHERE (%s)" % condition if condition else "", | ||||
|             include=schema_editor._index_include_sql(model, include), | ||||
|             deferrable=schema_editor._deferrable_constraint_sql(self.deferrable), | ||||
|         ) | ||||
|  | ||||
|     def create_sql(self, model, schema_editor): | ||||
|         self.check_supported(schema_editor) | ||||
|         return Statement( | ||||
|             "ALTER TABLE %(table)s ADD %(constraint)s", | ||||
|             table=Table(model._meta.db_table, schema_editor.quote_name), | ||||
|             constraint=self.constraint_sql(model, schema_editor), | ||||
|         ) | ||||
|  | ||||
|     def remove_sql(self, model, schema_editor): | ||||
|         return schema_editor._delete_constraint_sql( | ||||
|             schema_editor.sql_delete_check, | ||||
|             model, | ||||
|             schema_editor.quote_name(self.name), | ||||
|         ) | ||||
|  | ||||
|     def check_supported(self, schema_editor): | ||||
|         if ( | ||||
|             self.include | ||||
|             and self.index_type.lower() == "spgist" | ||||
|             and not schema_editor.connection.features.supports_covering_spgist_indexes | ||||
|         ): | ||||
|             raise NotSupportedError( | ||||
|                 "Covering exclusion constraints using an SP-GiST index " | ||||
|                 "require PostgreSQL 14+." | ||||
|             ) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         kwargs["expressions"] = self.expressions | ||||
|         if self.condition is not None: | ||||
|             kwargs["condition"] = self.condition | ||||
|         if self.index_type.lower() != "gist": | ||||
|             kwargs["index_type"] = self.index_type | ||||
|         if self.deferrable: | ||||
|             kwargs["deferrable"] = self.deferrable | ||||
|         if self.include: | ||||
|             kwargs["include"] = self.include | ||||
|         if self.opclasses: | ||||
|             kwargs["opclasses"] = self.opclasses | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def __eq__(self, other): | ||||
|         if isinstance(other, self.__class__): | ||||
|             return ( | ||||
|                 self.name == other.name | ||||
|                 and self.index_type == other.index_type | ||||
|                 and self.expressions == other.expressions | ||||
|                 and self.condition == other.condition | ||||
|                 and self.deferrable == other.deferrable | ||||
|                 and self.include == other.include | ||||
|                 and self.opclasses == other.opclasses | ||||
|                 and self.violation_error_message == other.violation_error_message | ||||
|             ) | ||||
|         return super().__eq__(other) | ||||
|  | ||||
|     def __repr__(self): | ||||
|         return "<%s: index_type=%s expressions=%s name=%s%s%s%s%s>" % ( | ||||
|             self.__class__.__qualname__, | ||||
|             repr(self.index_type), | ||||
|             repr(self.expressions), | ||||
|             repr(self.name), | ||||
|             "" if self.condition is None else " condition=%s" % self.condition, | ||||
|             "" if self.deferrable is None else " deferrable=%r" % self.deferrable, | ||||
|             "" if not self.include else " include=%s" % repr(self.include), | ||||
|             "" if not self.opclasses else " opclasses=%s" % repr(self.opclasses), | ||||
|         ) | ||||
|  | ||||
|     def validate(self, model, instance, exclude=None, using=DEFAULT_DB_ALIAS): | ||||
|         queryset = model._default_manager.using(using) | ||||
|         replacement_map = instance._get_field_value_map( | ||||
|             meta=model._meta, exclude=exclude | ||||
|         ) | ||||
|         replacements = {F(field): value for field, value in replacement_map.items()} | ||||
|         lookups = [] | ||||
|         for idx, (expression, operator) in enumerate(self.expressions): | ||||
|             if isinstance(expression, str): | ||||
|                 expression = F(expression) | ||||
|             if exclude: | ||||
|                 if isinstance(expression, F): | ||||
|                     if expression.name in exclude: | ||||
|                         return | ||||
|                 else: | ||||
|                     for expr in expression.flatten(): | ||||
|                         if isinstance(expr, F) and expr.name in exclude: | ||||
|                             return | ||||
|             rhs_expression = expression.replace_expressions(replacements) | ||||
|             # Remove OpClass because it only has sense during the constraint | ||||
|             # creation. | ||||
|             if isinstance(expression, OpClass): | ||||
|                 expression = expression.get_source_expressions()[0] | ||||
|             if isinstance(rhs_expression, OpClass): | ||||
|                 rhs_expression = rhs_expression.get_source_expressions()[0] | ||||
|             lookup = PostgresOperatorLookup(lhs=expression, rhs=rhs_expression) | ||||
|             lookup.postgres_operator = operator | ||||
|             lookups.append(lookup) | ||||
|         queryset = queryset.filter(*lookups) | ||||
|         model_class_pk = instance._get_pk_val(model._meta) | ||||
|         if not instance._state.adding and model_class_pk is not None: | ||||
|             queryset = queryset.exclude(pk=model_class_pk) | ||||
|         if not self.condition: | ||||
|             if queryset.exists(): | ||||
|                 raise ValidationError(self.get_violation_error_message()) | ||||
|         else: | ||||
|             if (self.condition & Exists(queryset.filter(self.condition))).check( | ||||
|                 replacement_map, using=using | ||||
|             ): | ||||
|                 raise ValidationError(self.get_violation_error_message()) | ||||
| @ -0,0 +1,14 @@ | ||||
| from django.contrib.postgres.fields import ArrayField | ||||
| from django.db.models import Subquery | ||||
| from django.utils.functional import cached_property | ||||
|  | ||||
|  | ||||
| class ArraySubquery(Subquery): | ||||
|     template = "ARRAY(%(subquery)s)" | ||||
|  | ||||
|     def __init__(self, queryset, **kwargs): | ||||
|         super().__init__(queryset, **kwargs) | ||||
|  | ||||
|     @cached_property | ||||
|     def output_field(self): | ||||
|         return ArrayField(self.query.output_field) | ||||
| @ -0,0 +1,5 @@ | ||||
| from .array import *  # NOQA | ||||
| from .citext import *  # NOQA | ||||
| from .hstore import *  # NOQA | ||||
| from .jsonb import *  # NOQA | ||||
| from .ranges import *  # NOQA | ||||
| @ -0,0 +1,365 @@ | ||||
| import json | ||||
|  | ||||
| from django.contrib.postgres import lookups | ||||
| from django.contrib.postgres.forms import SimpleArrayField | ||||
| from django.contrib.postgres.validators import ArrayMaxLengthValidator | ||||
| from django.core import checks, exceptions | ||||
| from django.db.models import Field, Func, IntegerField, Transform, Value | ||||
| from django.db.models.fields.mixins import CheckFieldDefaultMixin | ||||
| from django.db.models.lookups import Exact, In | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| from ..utils import prefix_validation_error | ||||
| from .utils import AttributeSetter | ||||
|  | ||||
| __all__ = ["ArrayField"] | ||||
|  | ||||
|  | ||||
| class ArrayField(CheckFieldDefaultMixin, Field): | ||||
|     empty_strings_allowed = False | ||||
|     default_error_messages = { | ||||
|         "item_invalid": _("Item %(nth)s in the array did not validate:"), | ||||
|         "nested_array_mismatch": _("Nested arrays must have the same length."), | ||||
|     } | ||||
|     _default_hint = ("list", "[]") | ||||
|  | ||||
|     def __init__(self, base_field, size=None, **kwargs): | ||||
|         self.base_field = base_field | ||||
|         self.db_collation = getattr(self.base_field, "db_collation", None) | ||||
|         self.size = size | ||||
|         if self.size: | ||||
|             self.default_validators = [ | ||||
|                 *self.default_validators, | ||||
|                 ArrayMaxLengthValidator(self.size), | ||||
|             ] | ||||
|         # For performance, only add a from_db_value() method if the base field | ||||
|         # implements it. | ||||
|         if hasattr(self.base_field, "from_db_value"): | ||||
|             self.from_db_value = self._from_db_value | ||||
|         super().__init__(**kwargs) | ||||
|  | ||||
|     @property | ||||
|     def model(self): | ||||
|         try: | ||||
|             return self.__dict__["model"] | ||||
|         except KeyError: | ||||
|             raise AttributeError( | ||||
|                 "'%s' object has no attribute 'model'" % self.__class__.__name__ | ||||
|             ) | ||||
|  | ||||
|     @model.setter | ||||
|     def model(self, model): | ||||
|         self.__dict__["model"] = model | ||||
|         self.base_field.model = model | ||||
|  | ||||
|     @classmethod | ||||
|     def _choices_is_value(cls, value): | ||||
|         return isinstance(value, (list, tuple)) or super()._choices_is_value(value) | ||||
|  | ||||
|     def check(self, **kwargs): | ||||
|         errors = super().check(**kwargs) | ||||
|         if self.base_field.remote_field: | ||||
|             errors.append( | ||||
|                 checks.Error( | ||||
|                     "Base field for array cannot be a related field.", | ||||
|                     obj=self, | ||||
|                     id="postgres.E002", | ||||
|                 ) | ||||
|             ) | ||||
|         else: | ||||
|             # Remove the field name checks as they are not needed here. | ||||
|             base_checks = self.base_field.check() | ||||
|             if base_checks: | ||||
|                 error_messages = "\n    ".join( | ||||
|                     "%s (%s)" % (base_check.msg, base_check.id) | ||||
|                     for base_check in base_checks | ||||
|                     if isinstance(base_check, checks.Error) | ||||
|                 ) | ||||
|                 if error_messages: | ||||
|                     errors.append( | ||||
|                         checks.Error( | ||||
|                             "Base field for array has errors:\n    %s" % error_messages, | ||||
|                             obj=self, | ||||
|                             id="postgres.E001", | ||||
|                         ) | ||||
|                     ) | ||||
|                 warning_messages = "\n    ".join( | ||||
|                     "%s (%s)" % (base_check.msg, base_check.id) | ||||
|                     for base_check in base_checks | ||||
|                     if isinstance(base_check, checks.Warning) | ||||
|                 ) | ||||
|                 if warning_messages: | ||||
|                     errors.append( | ||||
|                         checks.Warning( | ||||
|                             "Base field for array has warnings:\n    %s" | ||||
|                             % warning_messages, | ||||
|                             obj=self, | ||||
|                             id="postgres.W004", | ||||
|                         ) | ||||
|                     ) | ||||
|         return errors | ||||
|  | ||||
|     def set_attributes_from_name(self, name): | ||||
|         super().set_attributes_from_name(name) | ||||
|         self.base_field.set_attributes_from_name(name) | ||||
|  | ||||
|     @property | ||||
|     def description(self): | ||||
|         return "Array of %s" % self.base_field.description | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         size = self.size or "" | ||||
|         return "%s[%s]" % (self.base_field.db_type(connection), size) | ||||
|  | ||||
|     def cast_db_type(self, connection): | ||||
|         size = self.size or "" | ||||
|         return "%s[%s]" % (self.base_field.cast_db_type(connection), size) | ||||
|  | ||||
|     def db_parameters(self, connection): | ||||
|         db_params = super().db_parameters(connection) | ||||
|         db_params["collation"] = self.db_collation | ||||
|         return db_params | ||||
|  | ||||
|     def get_placeholder(self, value, compiler, connection): | ||||
|         return "%s::{}".format(self.db_type(connection)) | ||||
|  | ||||
|     def get_db_prep_value(self, value, connection, prepared=False): | ||||
|         if isinstance(value, (list, tuple)): | ||||
|             return [ | ||||
|                 self.base_field.get_db_prep_value(i, connection, prepared=False) | ||||
|                 for i in value | ||||
|             ] | ||||
|         return value | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         name, path, args, kwargs = super().deconstruct() | ||||
|         if path == "django.contrib.postgres.fields.array.ArrayField": | ||||
|             path = "django.contrib.postgres.fields.ArrayField" | ||||
|         kwargs.update( | ||||
|             { | ||||
|                 "base_field": self.base_field.clone(), | ||||
|                 "size": self.size, | ||||
|             } | ||||
|         ) | ||||
|         return name, path, args, kwargs | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         if isinstance(value, str): | ||||
|             # Assume we're deserializing | ||||
|             vals = json.loads(value) | ||||
|             value = [self.base_field.to_python(val) for val in vals] | ||||
|         return value | ||||
|  | ||||
|     def _from_db_value(self, value, expression, connection): | ||||
|         if value is None: | ||||
|             return value | ||||
|         return [ | ||||
|             self.base_field.from_db_value(item, expression, connection) | ||||
|             for item in value | ||||
|         ] | ||||
|  | ||||
|     def value_to_string(self, obj): | ||||
|         values = [] | ||||
|         vals = self.value_from_object(obj) | ||||
|         base_field = self.base_field | ||||
|  | ||||
|         for val in vals: | ||||
|             if val is None: | ||||
|                 values.append(None) | ||||
|             else: | ||||
|                 obj = AttributeSetter(base_field.attname, val) | ||||
|                 values.append(base_field.value_to_string(obj)) | ||||
|         return json.dumps(values) | ||||
|  | ||||
|     def get_transform(self, name): | ||||
|         transform = super().get_transform(name) | ||||
|         if transform: | ||||
|             return transform | ||||
|         if "_" not in name: | ||||
|             try: | ||||
|                 index = int(name) | ||||
|             except ValueError: | ||||
|                 pass | ||||
|             else: | ||||
|                 index += 1  # postgres uses 1-indexing | ||||
|                 return IndexTransformFactory(index, self.base_field) | ||||
|         try: | ||||
|             start, end = name.split("_") | ||||
|             start = int(start) + 1 | ||||
|             end = int(end)  # don't add one here because postgres slices are weird | ||||
|         except ValueError: | ||||
|             pass | ||||
|         else: | ||||
|             return SliceTransformFactory(start, end) | ||||
|  | ||||
|     def validate(self, value, model_instance): | ||||
|         super().validate(value, model_instance) | ||||
|         for index, part in enumerate(value): | ||||
|             try: | ||||
|                 self.base_field.validate(part, model_instance) | ||||
|             except exceptions.ValidationError as error: | ||||
|                 raise prefix_validation_error( | ||||
|                     error, | ||||
|                     prefix=self.error_messages["item_invalid"], | ||||
|                     code="item_invalid", | ||||
|                     params={"nth": index + 1}, | ||||
|                 ) | ||||
|         if isinstance(self.base_field, ArrayField): | ||||
|             if len({len(i) for i in value}) > 1: | ||||
|                 raise exceptions.ValidationError( | ||||
|                     self.error_messages["nested_array_mismatch"], | ||||
|                     code="nested_array_mismatch", | ||||
|                 ) | ||||
|  | ||||
|     def run_validators(self, value): | ||||
|         super().run_validators(value) | ||||
|         for index, part in enumerate(value): | ||||
|             try: | ||||
|                 self.base_field.run_validators(part) | ||||
|             except exceptions.ValidationError as error: | ||||
|                 raise prefix_validation_error( | ||||
|                     error, | ||||
|                     prefix=self.error_messages["item_invalid"], | ||||
|                     code="item_invalid", | ||||
|                     params={"nth": index + 1}, | ||||
|                 ) | ||||
|  | ||||
|     def formfield(self, **kwargs): | ||||
|         return super().formfield( | ||||
|             **{ | ||||
|                 "form_class": SimpleArrayField, | ||||
|                 "base_field": self.base_field.formfield(), | ||||
|                 "max_length": self.size, | ||||
|                 **kwargs, | ||||
|             } | ||||
|         ) | ||||
|  | ||||
|  | ||||
| class ArrayRHSMixin: | ||||
|     def __init__(self, lhs, rhs): | ||||
|         # Don't wrap arrays that contains only None values, psycopg doesn't | ||||
|         # allow this. | ||||
|         if isinstance(rhs, (tuple, list)) and any(self._rhs_not_none_values(rhs)): | ||||
|             expressions = [] | ||||
|             for value in rhs: | ||||
|                 if not hasattr(value, "resolve_expression"): | ||||
|                     field = lhs.output_field | ||||
|                     value = Value(field.base_field.get_prep_value(value)) | ||||
|                 expressions.append(value) | ||||
|             rhs = Func( | ||||
|                 *expressions, | ||||
|                 function="ARRAY", | ||||
|                 template="%(function)s[%(expressions)s]", | ||||
|             ) | ||||
|         super().__init__(lhs, rhs) | ||||
|  | ||||
|     def process_rhs(self, compiler, connection): | ||||
|         rhs, rhs_params = super().process_rhs(compiler, connection) | ||||
|         cast_type = self.lhs.output_field.cast_db_type(connection) | ||||
|         return "%s::%s" % (rhs, cast_type), rhs_params | ||||
|  | ||||
|     def _rhs_not_none_values(self, rhs): | ||||
|         for x in rhs: | ||||
|             if isinstance(x, (list, tuple)): | ||||
|                 yield from self._rhs_not_none_values(x) | ||||
|             elif x is not None: | ||||
|                 yield True | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayContains(ArrayRHSMixin, lookups.DataContains): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayContainedBy(ArrayRHSMixin, lookups.ContainedBy): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayExact(ArrayRHSMixin, Exact): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayOverlap(ArrayRHSMixin, lookups.Overlap): | ||||
|     pass | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayLenTransform(Transform): | ||||
|     lookup_name = "len" | ||||
|     output_field = IntegerField() | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         lhs, params = compiler.compile(self.lhs) | ||||
|         # Distinguish NULL and empty arrays | ||||
|         return ( | ||||
|             "CASE WHEN %(lhs)s IS NULL THEN NULL ELSE " | ||||
|             "coalesce(array_length(%(lhs)s, 1), 0) END" | ||||
|         ) % {"lhs": lhs}, params * 2 | ||||
|  | ||||
|  | ||||
| @ArrayField.register_lookup | ||||
| class ArrayInLookup(In): | ||||
|     def get_prep_lookup(self): | ||||
|         values = super().get_prep_lookup() | ||||
|         if hasattr(values, "resolve_expression"): | ||||
|             return values | ||||
|         # In.process_rhs() expects values to be hashable, so convert lists | ||||
|         # to tuples. | ||||
|         prepared_values = [] | ||||
|         for value in values: | ||||
|             if hasattr(value, "resolve_expression"): | ||||
|                 prepared_values.append(value) | ||||
|             else: | ||||
|                 prepared_values.append(tuple(value)) | ||||
|         return prepared_values | ||||
|  | ||||
|  | ||||
| class IndexTransform(Transform): | ||||
|     def __init__(self, index, base_field, *args, **kwargs): | ||||
|         super().__init__(*args, **kwargs) | ||||
|         self.index = index | ||||
|         self.base_field = base_field | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         lhs, params = compiler.compile(self.lhs) | ||||
|         if not lhs.endswith("]"): | ||||
|             lhs = "(%s)" % lhs | ||||
|         return "%s[%%s]" % lhs, (*params, self.index) | ||||
|  | ||||
|     @property | ||||
|     def output_field(self): | ||||
|         return self.base_field | ||||
|  | ||||
|  | ||||
| class IndexTransformFactory: | ||||
|     def __init__(self, index, base_field): | ||||
|         self.index = index | ||||
|         self.base_field = base_field | ||||
|  | ||||
|     def __call__(self, *args, **kwargs): | ||||
|         return IndexTransform(self.index, self.base_field, *args, **kwargs) | ||||
|  | ||||
|  | ||||
| class SliceTransform(Transform): | ||||
|     def __init__(self, start, end, *args, **kwargs): | ||||
|         super().__init__(*args, **kwargs) | ||||
|         self.start = start | ||||
|         self.end = end | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         lhs, params = compiler.compile(self.lhs) | ||||
|         if not lhs.endswith("]"): | ||||
|             lhs = "(%s)" % lhs | ||||
|         return "%s[%%s:%%s]" % lhs, (*params, self.start, self.end) | ||||
|  | ||||
|  | ||||
| class SliceTransformFactory: | ||||
|     def __init__(self, start, end): | ||||
|         self.start = start | ||||
|         self.end = end | ||||
|  | ||||
|     def __call__(self, *args, **kwargs): | ||||
|         return SliceTransform(self.start, self.end, *args, **kwargs) | ||||
| @ -0,0 +1,78 @@ | ||||
| import warnings | ||||
|  | ||||
| from django.db.models import CharField, EmailField, TextField | ||||
| from django.test.utils import ignore_warnings | ||||
| from django.utils.deprecation import RemovedInDjango51Warning | ||||
|  | ||||
| __all__ = ["CICharField", "CIEmailField", "CIText", "CITextField"] | ||||
|  | ||||
|  | ||||
| # RemovedInDjango51Warning. | ||||
| class CIText: | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         warnings.warn( | ||||
|             "django.contrib.postgres.fields.CIText mixin is deprecated.", | ||||
|             RemovedInDjango51Warning, | ||||
|             stacklevel=2, | ||||
|         ) | ||||
|         super().__init__(*args, **kwargs) | ||||
|  | ||||
|     def get_internal_type(self): | ||||
|         return "CI" + super().get_internal_type() | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "citext" | ||||
|  | ||||
|  | ||||
| class CICharField(CIText, CharField): | ||||
|     system_check_deprecated_details = { | ||||
|         "msg": ( | ||||
|             "django.contrib.postgres.fields.CICharField is deprecated. Support for it " | ||||
|             "(except in historical migrations) will be removed in Django 5.1." | ||||
|         ), | ||||
|         "hint": ( | ||||
|             'Use CharField(db_collation="…") with a case-insensitive non-deterministic ' | ||||
|             "collation instead." | ||||
|         ), | ||||
|         "id": "fields.W905", | ||||
|     } | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         with ignore_warnings(category=RemovedInDjango51Warning): | ||||
|             super().__init__(*args, **kwargs) | ||||
|  | ||||
|  | ||||
| class CIEmailField(CIText, EmailField): | ||||
|     system_check_deprecated_details = { | ||||
|         "msg": ( | ||||
|             "django.contrib.postgres.fields.CIEmailField is deprecated. Support for it " | ||||
|             "(except in historical migrations) will be removed in Django 5.1." | ||||
|         ), | ||||
|         "hint": ( | ||||
|             'Use EmailField(db_collation="…") with a case-insensitive ' | ||||
|             "non-deterministic collation instead." | ||||
|         ), | ||||
|         "id": "fields.W906", | ||||
|     } | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         with ignore_warnings(category=RemovedInDjango51Warning): | ||||
|             super().__init__(*args, **kwargs) | ||||
|  | ||||
|  | ||||
| class CITextField(CIText, TextField): | ||||
|     system_check_deprecated_details = { | ||||
|         "msg": ( | ||||
|             "django.contrib.postgres.fields.CITextField is deprecated. Support for it " | ||||
|             "(except in historical migrations) will be removed in Django 5.1." | ||||
|         ), | ||||
|         "hint": ( | ||||
|             'Use TextField(db_collation="…") with a case-insensitive non-deterministic ' | ||||
|             "collation instead." | ||||
|         ), | ||||
|         "id": "fields.W907", | ||||
|     } | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         with ignore_warnings(category=RemovedInDjango51Warning): | ||||
|             super().__init__(*args, **kwargs) | ||||
| @ -0,0 +1,112 @@ | ||||
| import json | ||||
|  | ||||
| from django.contrib.postgres import forms, lookups | ||||
| from django.contrib.postgres.fields.array import ArrayField | ||||
| from django.core import exceptions | ||||
| from django.db.models import Field, TextField, Transform | ||||
| from django.db.models.fields.mixins import CheckFieldDefaultMixin | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| __all__ = ["HStoreField"] | ||||
|  | ||||
|  | ||||
| class HStoreField(CheckFieldDefaultMixin, Field): | ||||
|     empty_strings_allowed = False | ||||
|     description = _("Map of strings to strings/nulls") | ||||
|     default_error_messages = { | ||||
|         "not_a_string": _("The value of “%(key)s” is not a string or null."), | ||||
|     } | ||||
|     _default_hint = ("dict", "{}") | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "hstore" | ||||
|  | ||||
|     def get_transform(self, name): | ||||
|         transform = super().get_transform(name) | ||||
|         if transform: | ||||
|             return transform | ||||
|         return KeyTransformFactory(name) | ||||
|  | ||||
|     def validate(self, value, model_instance): | ||||
|         super().validate(value, model_instance) | ||||
|         for key, val in value.items(): | ||||
|             if not isinstance(val, str) and val is not None: | ||||
|                 raise exceptions.ValidationError( | ||||
|                     self.error_messages["not_a_string"], | ||||
|                     code="not_a_string", | ||||
|                     params={"key": key}, | ||||
|                 ) | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         if isinstance(value, str): | ||||
|             value = json.loads(value) | ||||
|         return value | ||||
|  | ||||
|     def value_to_string(self, obj): | ||||
|         return json.dumps(self.value_from_object(obj)) | ||||
|  | ||||
|     def formfield(self, **kwargs): | ||||
|         return super().formfield( | ||||
|             **{ | ||||
|                 "form_class": forms.HStoreField, | ||||
|                 **kwargs, | ||||
|             } | ||||
|         ) | ||||
|  | ||||
|     def get_prep_value(self, value): | ||||
|         value = super().get_prep_value(value) | ||||
|  | ||||
|         if isinstance(value, dict): | ||||
|             prep_value = {} | ||||
|             for key, val in value.items(): | ||||
|                 key = str(key) | ||||
|                 if val is not None: | ||||
|                     val = str(val) | ||||
|                 prep_value[key] = val | ||||
|             value = prep_value | ||||
|  | ||||
|         if isinstance(value, list): | ||||
|             value = [str(item) for item in value] | ||||
|  | ||||
|         return value | ||||
|  | ||||
|  | ||||
| HStoreField.register_lookup(lookups.DataContains) | ||||
| HStoreField.register_lookup(lookups.ContainedBy) | ||||
| HStoreField.register_lookup(lookups.HasKey) | ||||
| HStoreField.register_lookup(lookups.HasKeys) | ||||
| HStoreField.register_lookup(lookups.HasAnyKeys) | ||||
|  | ||||
|  | ||||
| class KeyTransform(Transform): | ||||
|     output_field = TextField() | ||||
|  | ||||
|     def __init__(self, key_name, *args, **kwargs): | ||||
|         super().__init__(*args, **kwargs) | ||||
|         self.key_name = key_name | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         lhs, params = compiler.compile(self.lhs) | ||||
|         return "(%s -> %%s)" % lhs, tuple(params) + (self.key_name,) | ||||
|  | ||||
|  | ||||
| class KeyTransformFactory: | ||||
|     def __init__(self, key_name): | ||||
|         self.key_name = key_name | ||||
|  | ||||
|     def __call__(self, *args, **kwargs): | ||||
|         return KeyTransform(self.key_name, *args, **kwargs) | ||||
|  | ||||
|  | ||||
| @HStoreField.register_lookup | ||||
| class KeysTransform(Transform): | ||||
|     lookup_name = "keys" | ||||
|     function = "akeys" | ||||
|     output_field = ArrayField(TextField()) | ||||
|  | ||||
|  | ||||
| @HStoreField.register_lookup | ||||
| class ValuesTransform(Transform): | ||||
|     lookup_name = "values" | ||||
|     function = "avals" | ||||
|     output_field = ArrayField(TextField()) | ||||
| @ -0,0 +1,14 @@ | ||||
| from django.db.models import JSONField as BuiltinJSONField | ||||
|  | ||||
| __all__ = ["JSONField"] | ||||
|  | ||||
|  | ||||
| class JSONField(BuiltinJSONField): | ||||
|     system_check_removed_details = { | ||||
|         "msg": ( | ||||
|             "django.contrib.postgres.fields.JSONField is removed except for " | ||||
|             "support in historical migrations." | ||||
|         ), | ||||
|         "hint": "Use django.db.models.JSONField instead.", | ||||
|         "id": "fields.E904", | ||||
|     } | ||||
| @ -0,0 +1,383 @@ | ||||
| import datetime | ||||
| import json | ||||
|  | ||||
| from django.contrib.postgres import forms, lookups | ||||
| from django.db import models | ||||
| from django.db.backends.postgresql.psycopg_any import ( | ||||
|     DateRange, | ||||
|     DateTimeTZRange, | ||||
|     NumericRange, | ||||
|     Range, | ||||
| ) | ||||
| from django.db.models.functions import Cast | ||||
| from django.db.models.lookups import PostgresOperatorLookup | ||||
|  | ||||
| from .utils import AttributeSetter | ||||
|  | ||||
| __all__ = [ | ||||
|     "RangeField", | ||||
|     "IntegerRangeField", | ||||
|     "BigIntegerRangeField", | ||||
|     "DecimalRangeField", | ||||
|     "DateTimeRangeField", | ||||
|     "DateRangeField", | ||||
|     "RangeBoundary", | ||||
|     "RangeOperators", | ||||
| ] | ||||
|  | ||||
|  | ||||
| class RangeBoundary(models.Expression): | ||||
|     """A class that represents range boundaries.""" | ||||
|  | ||||
|     def __init__(self, inclusive_lower=True, inclusive_upper=False): | ||||
|         self.lower = "[" if inclusive_lower else "(" | ||||
|         self.upper = "]" if inclusive_upper else ")" | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         return "'%s%s'" % (self.lower, self.upper), [] | ||||
|  | ||||
|  | ||||
| class RangeOperators: | ||||
|     # https://www.postgresql.org/docs/current/functions-range.html#RANGE-OPERATORS-TABLE | ||||
|     EQUAL = "=" | ||||
|     NOT_EQUAL = "<>" | ||||
|     CONTAINS = "@>" | ||||
|     CONTAINED_BY = "<@" | ||||
|     OVERLAPS = "&&" | ||||
|     FULLY_LT = "<<" | ||||
|     FULLY_GT = ">>" | ||||
|     NOT_LT = "&>" | ||||
|     NOT_GT = "&<" | ||||
|     ADJACENT_TO = "-|-" | ||||
|  | ||||
|  | ||||
| class RangeField(models.Field): | ||||
|     empty_strings_allowed = False | ||||
|  | ||||
|     def __init__(self, *args, **kwargs): | ||||
|         if "default_bounds" in kwargs: | ||||
|             raise TypeError( | ||||
|                 f"Cannot use 'default_bounds' with {self.__class__.__name__}." | ||||
|             ) | ||||
|         # Initializing base_field here ensures that its model matches the model | ||||
|         # for self. | ||||
|         if hasattr(self, "base_field"): | ||||
|             self.base_field = self.base_field() | ||||
|         super().__init__(*args, **kwargs) | ||||
|  | ||||
|     @property | ||||
|     def model(self): | ||||
|         try: | ||||
|             return self.__dict__["model"] | ||||
|         except KeyError: | ||||
|             raise AttributeError( | ||||
|                 "'%s' object has no attribute 'model'" % self.__class__.__name__ | ||||
|             ) | ||||
|  | ||||
|     @model.setter | ||||
|     def model(self, model): | ||||
|         self.__dict__["model"] = model | ||||
|         self.base_field.model = model | ||||
|  | ||||
|     @classmethod | ||||
|     def _choices_is_value(cls, value): | ||||
|         return isinstance(value, (list, tuple)) or super()._choices_is_value(value) | ||||
|  | ||||
|     def get_placeholder(self, value, compiler, connection): | ||||
|         return "%s::{}".format(self.db_type(connection)) | ||||
|  | ||||
|     def get_prep_value(self, value): | ||||
|         if value is None: | ||||
|             return None | ||||
|         elif isinstance(value, Range): | ||||
|             return value | ||||
|         elif isinstance(value, (list, tuple)): | ||||
|             return self.range_type(value[0], value[1]) | ||||
|         return value | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         if isinstance(value, str): | ||||
|             # Assume we're deserializing | ||||
|             vals = json.loads(value) | ||||
|             for end in ("lower", "upper"): | ||||
|                 if end in vals: | ||||
|                     vals[end] = self.base_field.to_python(vals[end]) | ||||
|             value = self.range_type(**vals) | ||||
|         elif isinstance(value, (list, tuple)): | ||||
|             value = self.range_type(value[0], value[1]) | ||||
|         return value | ||||
|  | ||||
|     def set_attributes_from_name(self, name): | ||||
|         super().set_attributes_from_name(name) | ||||
|         self.base_field.set_attributes_from_name(name) | ||||
|  | ||||
|     def value_to_string(self, obj): | ||||
|         value = self.value_from_object(obj) | ||||
|         if value is None: | ||||
|             return None | ||||
|         if value.isempty: | ||||
|             return json.dumps({"empty": True}) | ||||
|         base_field = self.base_field | ||||
|         result = {"bounds": value._bounds} | ||||
|         for end in ("lower", "upper"): | ||||
|             val = getattr(value, end) | ||||
|             if val is None: | ||||
|                 result[end] = None | ||||
|             else: | ||||
|                 obj = AttributeSetter(base_field.attname, val) | ||||
|                 result[end] = base_field.value_to_string(obj) | ||||
|         return json.dumps(result) | ||||
|  | ||||
|     def formfield(self, **kwargs): | ||||
|         kwargs.setdefault("form_class", self.form_field) | ||||
|         return super().formfield(**kwargs) | ||||
|  | ||||
|  | ||||
| CANONICAL_RANGE_BOUNDS = "[)" | ||||
|  | ||||
|  | ||||
| class ContinuousRangeField(RangeField): | ||||
|     """ | ||||
|     Continuous range field. It allows specifying default bounds for list and | ||||
|     tuple inputs. | ||||
|     """ | ||||
|  | ||||
|     def __init__(self, *args, default_bounds=CANONICAL_RANGE_BOUNDS, **kwargs): | ||||
|         if default_bounds not in ("[)", "(]", "()", "[]"): | ||||
|             raise ValueError("default_bounds must be one of '[)', '(]', '()', or '[]'.") | ||||
|         self.default_bounds = default_bounds | ||||
|         super().__init__(*args, **kwargs) | ||||
|  | ||||
|     def get_prep_value(self, value): | ||||
|         if isinstance(value, (list, tuple)): | ||||
|             return self.range_type(value[0], value[1], self.default_bounds) | ||||
|         return super().get_prep_value(value) | ||||
|  | ||||
|     def formfield(self, **kwargs): | ||||
|         kwargs.setdefault("default_bounds", self.default_bounds) | ||||
|         return super().formfield(**kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         name, path, args, kwargs = super().deconstruct() | ||||
|         if self.default_bounds and self.default_bounds != CANONICAL_RANGE_BOUNDS: | ||||
|             kwargs["default_bounds"] = self.default_bounds | ||||
|         return name, path, args, kwargs | ||||
|  | ||||
|  | ||||
| class IntegerRangeField(RangeField): | ||||
|     base_field = models.IntegerField | ||||
|     range_type = NumericRange | ||||
|     form_field = forms.IntegerRangeField | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "int4range" | ||||
|  | ||||
|  | ||||
| class BigIntegerRangeField(RangeField): | ||||
|     base_field = models.BigIntegerField | ||||
|     range_type = NumericRange | ||||
|     form_field = forms.IntegerRangeField | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "int8range" | ||||
|  | ||||
|  | ||||
| class DecimalRangeField(ContinuousRangeField): | ||||
|     base_field = models.DecimalField | ||||
|     range_type = NumericRange | ||||
|     form_field = forms.DecimalRangeField | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "numrange" | ||||
|  | ||||
|  | ||||
| class DateTimeRangeField(ContinuousRangeField): | ||||
|     base_field = models.DateTimeField | ||||
|     range_type = DateTimeTZRange | ||||
|     form_field = forms.DateTimeRangeField | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "tstzrange" | ||||
|  | ||||
|  | ||||
| class DateRangeField(RangeField): | ||||
|     base_field = models.DateField | ||||
|     range_type = DateRange | ||||
|     form_field = forms.DateRangeField | ||||
|  | ||||
|     def db_type(self, connection): | ||||
|         return "daterange" | ||||
|  | ||||
|  | ||||
| class RangeContains(lookups.DataContains): | ||||
|     def get_prep_lookup(self): | ||||
|         if not isinstance(self.rhs, (list, tuple, Range)): | ||||
|             return Cast(self.rhs, self.lhs.field.base_field) | ||||
|         return super().get_prep_lookup() | ||||
|  | ||||
|  | ||||
| RangeField.register_lookup(RangeContains) | ||||
| RangeField.register_lookup(lookups.ContainedBy) | ||||
| RangeField.register_lookup(lookups.Overlap) | ||||
|  | ||||
|  | ||||
| class DateTimeRangeContains(PostgresOperatorLookup): | ||||
|     """ | ||||
|     Lookup for Date/DateTimeRange containment to cast the rhs to the correct | ||||
|     type. | ||||
|     """ | ||||
|  | ||||
|     lookup_name = "contains" | ||||
|     postgres_operator = RangeOperators.CONTAINS | ||||
|  | ||||
|     def process_rhs(self, compiler, connection): | ||||
|         # Transform rhs value for db lookup. | ||||
|         if isinstance(self.rhs, datetime.date): | ||||
|             value = models.Value(self.rhs) | ||||
|             self.rhs = value.resolve_expression(compiler.query) | ||||
|         return super().process_rhs(compiler, connection) | ||||
|  | ||||
|     def as_postgresql(self, compiler, connection): | ||||
|         sql, params = super().as_postgresql(compiler, connection) | ||||
|         # Cast the rhs if needed. | ||||
|         cast_sql = "" | ||||
|         if ( | ||||
|             isinstance(self.rhs, models.Expression) | ||||
|             and self.rhs._output_field_or_none | ||||
|             and | ||||
|             # Skip cast if rhs has a matching range type. | ||||
|             not isinstance( | ||||
|                 self.rhs._output_field_or_none, self.lhs.output_field.__class__ | ||||
|             ) | ||||
|         ): | ||||
|             cast_internal_type = self.lhs.output_field.base_field.get_internal_type() | ||||
|             cast_sql = "::{}".format(connection.data_types.get(cast_internal_type)) | ||||
|         return "%s%s" % (sql, cast_sql), params | ||||
|  | ||||
|  | ||||
| DateRangeField.register_lookup(DateTimeRangeContains) | ||||
| DateTimeRangeField.register_lookup(DateTimeRangeContains) | ||||
|  | ||||
|  | ||||
| class RangeContainedBy(PostgresOperatorLookup): | ||||
|     lookup_name = "contained_by" | ||||
|     type_mapping = { | ||||
|         "smallint": "int4range", | ||||
|         "integer": "int4range", | ||||
|         "bigint": "int8range", | ||||
|         "double precision": "numrange", | ||||
|         "numeric": "numrange", | ||||
|         "date": "daterange", | ||||
|         "timestamp with time zone": "tstzrange", | ||||
|     } | ||||
|     postgres_operator = RangeOperators.CONTAINED_BY | ||||
|  | ||||
|     def process_rhs(self, compiler, connection): | ||||
|         rhs, rhs_params = super().process_rhs(compiler, connection) | ||||
|         # Ignore precision for DecimalFields. | ||||
|         db_type = self.lhs.output_field.cast_db_type(connection).split("(")[0] | ||||
|         cast_type = self.type_mapping[db_type] | ||||
|         return "%s::%s" % (rhs, cast_type), rhs_params | ||||
|  | ||||
|     def process_lhs(self, compiler, connection): | ||||
|         lhs, lhs_params = super().process_lhs(compiler, connection) | ||||
|         if isinstance(self.lhs.output_field, models.FloatField): | ||||
|             lhs = "%s::numeric" % lhs | ||||
|         elif isinstance(self.lhs.output_field, models.SmallIntegerField): | ||||
|             lhs = "%s::integer" % lhs | ||||
|         return lhs, lhs_params | ||||
|  | ||||
|     def get_prep_lookup(self): | ||||
|         return RangeField().get_prep_value(self.rhs) | ||||
|  | ||||
|  | ||||
| models.DateField.register_lookup(RangeContainedBy) | ||||
| models.DateTimeField.register_lookup(RangeContainedBy) | ||||
| models.IntegerField.register_lookup(RangeContainedBy) | ||||
| models.FloatField.register_lookup(RangeContainedBy) | ||||
| models.DecimalField.register_lookup(RangeContainedBy) | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class FullyLessThan(PostgresOperatorLookup): | ||||
|     lookup_name = "fully_lt" | ||||
|     postgres_operator = RangeOperators.FULLY_LT | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class FullGreaterThan(PostgresOperatorLookup): | ||||
|     lookup_name = "fully_gt" | ||||
|     postgres_operator = RangeOperators.FULLY_GT | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class NotLessThan(PostgresOperatorLookup): | ||||
|     lookup_name = "not_lt" | ||||
|     postgres_operator = RangeOperators.NOT_LT | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class NotGreaterThan(PostgresOperatorLookup): | ||||
|     lookup_name = "not_gt" | ||||
|     postgres_operator = RangeOperators.NOT_GT | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class AdjacentToLookup(PostgresOperatorLookup): | ||||
|     lookup_name = "adjacent_to" | ||||
|     postgres_operator = RangeOperators.ADJACENT_TO | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class RangeStartsWith(models.Transform): | ||||
|     lookup_name = "startswith" | ||||
|     function = "lower" | ||||
|  | ||||
|     @property | ||||
|     def output_field(self): | ||||
|         return self.lhs.output_field.base_field | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class RangeEndsWith(models.Transform): | ||||
|     lookup_name = "endswith" | ||||
|     function = "upper" | ||||
|  | ||||
|     @property | ||||
|     def output_field(self): | ||||
|         return self.lhs.output_field.base_field | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class IsEmpty(models.Transform): | ||||
|     lookup_name = "isempty" | ||||
|     function = "isempty" | ||||
|     output_field = models.BooleanField() | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class LowerInclusive(models.Transform): | ||||
|     lookup_name = "lower_inc" | ||||
|     function = "LOWER_INC" | ||||
|     output_field = models.BooleanField() | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class LowerInfinite(models.Transform): | ||||
|     lookup_name = "lower_inf" | ||||
|     function = "LOWER_INF" | ||||
|     output_field = models.BooleanField() | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class UpperInclusive(models.Transform): | ||||
|     lookup_name = "upper_inc" | ||||
|     function = "UPPER_INC" | ||||
|     output_field = models.BooleanField() | ||||
|  | ||||
|  | ||||
| @RangeField.register_lookup | ||||
| class UpperInfinite(models.Transform): | ||||
|     lookup_name = "upper_inf" | ||||
|     function = "UPPER_INF" | ||||
|     output_field = models.BooleanField() | ||||
| @ -0,0 +1,3 @@ | ||||
| class AttributeSetter: | ||||
|     def __init__(self, name, value): | ||||
|         setattr(self, name, value) | ||||
| @ -0,0 +1,3 @@ | ||||
| from .array import *  # NOQA | ||||
| from .hstore import *  # NOQA | ||||
| from .ranges import *  # NOQA | ||||
| @ -0,0 +1,251 @@ | ||||
| import copy | ||||
| from itertools import chain | ||||
|  | ||||
| from django import forms | ||||
| from django.contrib.postgres.validators import ( | ||||
|     ArrayMaxLengthValidator, | ||||
|     ArrayMinLengthValidator, | ||||
| ) | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| from ..utils import prefix_validation_error | ||||
|  | ||||
|  | ||||
| class SimpleArrayField(forms.CharField): | ||||
|     default_error_messages = { | ||||
|         "item_invalid": _("Item %(nth)s in the array did not validate:"), | ||||
|     } | ||||
|  | ||||
|     def __init__( | ||||
|         self, base_field, *, delimiter=",", max_length=None, min_length=None, **kwargs | ||||
|     ): | ||||
|         self.base_field = base_field | ||||
|         self.delimiter = delimiter | ||||
|         super().__init__(**kwargs) | ||||
|         if min_length is not None: | ||||
|             self.min_length = min_length | ||||
|             self.validators.append(ArrayMinLengthValidator(int(min_length))) | ||||
|         if max_length is not None: | ||||
|             self.max_length = max_length | ||||
|             self.validators.append(ArrayMaxLengthValidator(int(max_length))) | ||||
|  | ||||
|     def clean(self, value): | ||||
|         value = super().clean(value) | ||||
|         return [self.base_field.clean(val) for val in value] | ||||
|  | ||||
|     def prepare_value(self, value): | ||||
|         if isinstance(value, list): | ||||
|             return self.delimiter.join( | ||||
|                 str(self.base_field.prepare_value(v)) for v in value | ||||
|             ) | ||||
|         return value | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         if isinstance(value, list): | ||||
|             items = value | ||||
|         elif value: | ||||
|             items = value.split(self.delimiter) | ||||
|         else: | ||||
|             items = [] | ||||
|         errors = [] | ||||
|         values = [] | ||||
|         for index, item in enumerate(items): | ||||
|             try: | ||||
|                 values.append(self.base_field.to_python(item)) | ||||
|             except ValidationError as error: | ||||
|                 errors.append( | ||||
|                     prefix_validation_error( | ||||
|                         error, | ||||
|                         prefix=self.error_messages["item_invalid"], | ||||
|                         code="item_invalid", | ||||
|                         params={"nth": index + 1}, | ||||
|                     ) | ||||
|                 ) | ||||
|         if errors: | ||||
|             raise ValidationError(errors) | ||||
|         return values | ||||
|  | ||||
|     def validate(self, value): | ||||
|         super().validate(value) | ||||
|         errors = [] | ||||
|         for index, item in enumerate(value): | ||||
|             try: | ||||
|                 self.base_field.validate(item) | ||||
|             except ValidationError as error: | ||||
|                 errors.append( | ||||
|                     prefix_validation_error( | ||||
|                         error, | ||||
|                         prefix=self.error_messages["item_invalid"], | ||||
|                         code="item_invalid", | ||||
|                         params={"nth": index + 1}, | ||||
|                     ) | ||||
|                 ) | ||||
|         if errors: | ||||
|             raise ValidationError(errors) | ||||
|  | ||||
|     def run_validators(self, value): | ||||
|         super().run_validators(value) | ||||
|         errors = [] | ||||
|         for index, item in enumerate(value): | ||||
|             try: | ||||
|                 self.base_field.run_validators(item) | ||||
|             except ValidationError as error: | ||||
|                 errors.append( | ||||
|                     prefix_validation_error( | ||||
|                         error, | ||||
|                         prefix=self.error_messages["item_invalid"], | ||||
|                         code="item_invalid", | ||||
|                         params={"nth": index + 1}, | ||||
|                     ) | ||||
|                 ) | ||||
|         if errors: | ||||
|             raise ValidationError(errors) | ||||
|  | ||||
|     def has_changed(self, initial, data): | ||||
|         try: | ||||
|             value = self.to_python(data) | ||||
|         except ValidationError: | ||||
|             pass | ||||
|         else: | ||||
|             if initial in self.empty_values and value in self.empty_values: | ||||
|                 return False | ||||
|         return super().has_changed(initial, data) | ||||
|  | ||||
|  | ||||
| class SplitArrayWidget(forms.Widget): | ||||
|     template_name = "postgres/widgets/split_array.html" | ||||
|  | ||||
|     def __init__(self, widget, size, **kwargs): | ||||
|         self.widget = widget() if isinstance(widget, type) else widget | ||||
|         self.size = size | ||||
|         super().__init__(**kwargs) | ||||
|  | ||||
|     @property | ||||
|     def is_hidden(self): | ||||
|         return self.widget.is_hidden | ||||
|  | ||||
|     def value_from_datadict(self, data, files, name): | ||||
|         return [ | ||||
|             self.widget.value_from_datadict(data, files, "%s_%s" % (name, index)) | ||||
|             for index in range(self.size) | ||||
|         ] | ||||
|  | ||||
|     def value_omitted_from_data(self, data, files, name): | ||||
|         return all( | ||||
|             self.widget.value_omitted_from_data(data, files, "%s_%s" % (name, index)) | ||||
|             for index in range(self.size) | ||||
|         ) | ||||
|  | ||||
|     def id_for_label(self, id_): | ||||
|         # See the comment for RadioSelect.id_for_label() | ||||
|         if id_: | ||||
|             id_ += "_0" | ||||
|         return id_ | ||||
|  | ||||
|     def get_context(self, name, value, attrs=None): | ||||
|         attrs = {} if attrs is None else attrs | ||||
|         context = super().get_context(name, value, attrs) | ||||
|         if self.is_localized: | ||||
|             self.widget.is_localized = self.is_localized | ||||
|         value = value or [] | ||||
|         context["widget"]["subwidgets"] = [] | ||||
|         final_attrs = self.build_attrs(attrs) | ||||
|         id_ = final_attrs.get("id") | ||||
|         for i in range(max(len(value), self.size)): | ||||
|             try: | ||||
|                 widget_value = value[i] | ||||
|             except IndexError: | ||||
|                 widget_value = None | ||||
|             if id_: | ||||
|                 final_attrs = {**final_attrs, "id": "%s_%s" % (id_, i)} | ||||
|             context["widget"]["subwidgets"].append( | ||||
|                 self.widget.get_context(name + "_%s" % i, widget_value, final_attrs)[ | ||||
|                     "widget" | ||||
|                 ] | ||||
|             ) | ||||
|         return context | ||||
|  | ||||
|     @property | ||||
|     def media(self): | ||||
|         return self.widget.media | ||||
|  | ||||
|     def __deepcopy__(self, memo): | ||||
|         obj = super().__deepcopy__(memo) | ||||
|         obj.widget = copy.deepcopy(self.widget) | ||||
|         return obj | ||||
|  | ||||
|     @property | ||||
|     def needs_multipart_form(self): | ||||
|         return self.widget.needs_multipart_form | ||||
|  | ||||
|  | ||||
| class SplitArrayField(forms.Field): | ||||
|     default_error_messages = { | ||||
|         "item_invalid": _("Item %(nth)s in the array did not validate:"), | ||||
|     } | ||||
|  | ||||
|     def __init__(self, base_field, size, *, remove_trailing_nulls=False, **kwargs): | ||||
|         self.base_field = base_field | ||||
|         self.size = size | ||||
|         self.remove_trailing_nulls = remove_trailing_nulls | ||||
|         widget = SplitArrayWidget(widget=base_field.widget, size=size) | ||||
|         kwargs.setdefault("widget", widget) | ||||
|         super().__init__(**kwargs) | ||||
|  | ||||
|     def _remove_trailing_nulls(self, values): | ||||
|         index = None | ||||
|         if self.remove_trailing_nulls: | ||||
|             for i, value in reversed(list(enumerate(values))): | ||||
|                 if value in self.base_field.empty_values: | ||||
|                     index = i | ||||
|                 else: | ||||
|                     break | ||||
|             if index is not None: | ||||
|                 values = values[:index] | ||||
|         return values, index | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         value = super().to_python(value) | ||||
|         return [self.base_field.to_python(item) for item in value] | ||||
|  | ||||
|     def clean(self, value): | ||||
|         cleaned_data = [] | ||||
|         errors = [] | ||||
|         if not any(value) and self.required: | ||||
|             raise ValidationError(self.error_messages["required"]) | ||||
|         max_size = max(self.size, len(value)) | ||||
|         for index in range(max_size): | ||||
|             item = value[index] | ||||
|             try: | ||||
|                 cleaned_data.append(self.base_field.clean(item)) | ||||
|             except ValidationError as error: | ||||
|                 errors.append( | ||||
|                     prefix_validation_error( | ||||
|                         error, | ||||
|                         self.error_messages["item_invalid"], | ||||
|                         code="item_invalid", | ||||
|                         params={"nth": index + 1}, | ||||
|                     ) | ||||
|                 ) | ||||
|                 cleaned_data.append(None) | ||||
|             else: | ||||
|                 errors.append(None) | ||||
|         cleaned_data, null_index = self._remove_trailing_nulls(cleaned_data) | ||||
|         if null_index is not None: | ||||
|             errors = errors[:null_index] | ||||
|         errors = list(filter(None, errors)) | ||||
|         if errors: | ||||
|             raise ValidationError(list(chain.from_iterable(errors))) | ||||
|         return cleaned_data | ||||
|  | ||||
|     def has_changed(self, initial, data): | ||||
|         try: | ||||
|             data = self.to_python(data) | ||||
|         except ValidationError: | ||||
|             pass | ||||
|         else: | ||||
|             data, _ = self._remove_trailing_nulls(data) | ||||
|             if initial in self.empty_values and data in self.empty_values: | ||||
|                 return False | ||||
|         return super().has_changed(initial, data) | ||||
| @ -0,0 +1,59 @@ | ||||
| import json | ||||
|  | ||||
| from django import forms | ||||
| from django.core.exceptions import ValidationError | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| __all__ = ["HStoreField"] | ||||
|  | ||||
|  | ||||
| class HStoreField(forms.CharField): | ||||
|     """ | ||||
|     A field for HStore data which accepts dictionary JSON input. | ||||
|     """ | ||||
|  | ||||
|     widget = forms.Textarea | ||||
|     default_error_messages = { | ||||
|         "invalid_json": _("Could not load JSON data."), | ||||
|         "invalid_format": _("Input must be a JSON dictionary."), | ||||
|     } | ||||
|  | ||||
|     def prepare_value(self, value): | ||||
|         if isinstance(value, dict): | ||||
|             return json.dumps(value) | ||||
|         return value | ||||
|  | ||||
|     def to_python(self, value): | ||||
|         if not value: | ||||
|             return {} | ||||
|         if not isinstance(value, dict): | ||||
|             try: | ||||
|                 value = json.loads(value) | ||||
|             except json.JSONDecodeError: | ||||
|                 raise ValidationError( | ||||
|                     self.error_messages["invalid_json"], | ||||
|                     code="invalid_json", | ||||
|                 ) | ||||
|  | ||||
|         if not isinstance(value, dict): | ||||
|             raise ValidationError( | ||||
|                 self.error_messages["invalid_format"], | ||||
|                 code="invalid_format", | ||||
|             ) | ||||
|  | ||||
|         # Cast everything to strings for ease. | ||||
|         for key, val in value.items(): | ||||
|             if val is not None: | ||||
|                 val = str(val) | ||||
|             value[key] = val | ||||
|         return value | ||||
|  | ||||
|     def has_changed(self, initial, data): | ||||
|         """ | ||||
|         Return True if data differs from initial. | ||||
|         """ | ||||
|         # For purposes of seeing whether something has changed, None is | ||||
|         # the same as an empty dict, if the data or initial value we get | ||||
|         # is None, replace it w/ {}. | ||||
|         initial_value = self.to_python(initial) | ||||
|         return super().has_changed(initial_value, data) | ||||
| @ -0,0 +1,119 @@ | ||||
| from django import forms | ||||
| from django.core import exceptions | ||||
| from django.db.backends.postgresql.psycopg_any import ( | ||||
|     DateRange, | ||||
|     DateTimeTZRange, | ||||
|     NumericRange, | ||||
| ) | ||||
| from django.forms.widgets import HiddenInput, MultiWidget | ||||
| from django.utils.translation import gettext_lazy as _ | ||||
|  | ||||
| __all__ = [ | ||||
|     "BaseRangeField", | ||||
|     "IntegerRangeField", | ||||
|     "DecimalRangeField", | ||||
|     "DateTimeRangeField", | ||||
|     "DateRangeField", | ||||
|     "HiddenRangeWidget", | ||||
|     "RangeWidget", | ||||
| ] | ||||
|  | ||||
|  | ||||
| class RangeWidget(MultiWidget): | ||||
|     def __init__(self, base_widget, attrs=None): | ||||
|         widgets = (base_widget, base_widget) | ||||
|         super().__init__(widgets, attrs) | ||||
|  | ||||
|     def decompress(self, value): | ||||
|         if value: | ||||
|             return (value.lower, value.upper) | ||||
|         return (None, None) | ||||
|  | ||||
|  | ||||
| class HiddenRangeWidget(RangeWidget): | ||||
|     """A widget that splits input into two <input type="hidden"> inputs.""" | ||||
|  | ||||
|     def __init__(self, attrs=None): | ||||
|         super().__init__(HiddenInput, attrs) | ||||
|  | ||||
|  | ||||
| class BaseRangeField(forms.MultiValueField): | ||||
|     default_error_messages = { | ||||
|         "invalid": _("Enter two valid values."), | ||||
|         "bound_ordering": _( | ||||
|             "The start of the range must not exceed the end of the range." | ||||
|         ), | ||||
|     } | ||||
|     hidden_widget = HiddenRangeWidget | ||||
|  | ||||
|     def __init__(self, **kwargs): | ||||
|         if "widget" not in kwargs: | ||||
|             kwargs["widget"] = RangeWidget(self.base_field.widget) | ||||
|         if "fields" not in kwargs: | ||||
|             kwargs["fields"] = [ | ||||
|                 self.base_field(required=False), | ||||
|                 self.base_field(required=False), | ||||
|             ] | ||||
|         kwargs.setdefault("required", False) | ||||
|         kwargs.setdefault("require_all_fields", False) | ||||
|         self.range_kwargs = {} | ||||
|         if default_bounds := kwargs.pop("default_bounds", None): | ||||
|             self.range_kwargs = {"bounds": default_bounds} | ||||
|         super().__init__(**kwargs) | ||||
|  | ||||
|     def prepare_value(self, value): | ||||
|         lower_base, upper_base = self.fields | ||||
|         if isinstance(value, self.range_type): | ||||
|             return [ | ||||
|                 lower_base.prepare_value(value.lower), | ||||
|                 upper_base.prepare_value(value.upper), | ||||
|             ] | ||||
|         if value is None: | ||||
|             return [ | ||||
|                 lower_base.prepare_value(None), | ||||
|                 upper_base.prepare_value(None), | ||||
|             ] | ||||
|         return value | ||||
|  | ||||
|     def compress(self, values): | ||||
|         if not values: | ||||
|             return None | ||||
|         lower, upper = values | ||||
|         if lower is not None and upper is not None and lower > upper: | ||||
|             raise exceptions.ValidationError( | ||||
|                 self.error_messages["bound_ordering"], | ||||
|                 code="bound_ordering", | ||||
|             ) | ||||
|         try: | ||||
|             range_value = self.range_type(lower, upper, **self.range_kwargs) | ||||
|         except TypeError: | ||||
|             raise exceptions.ValidationError( | ||||
|                 self.error_messages["invalid"], | ||||
|                 code="invalid", | ||||
|             ) | ||||
|         else: | ||||
|             return range_value | ||||
|  | ||||
|  | ||||
| class IntegerRangeField(BaseRangeField): | ||||
|     default_error_messages = {"invalid": _("Enter two whole numbers.")} | ||||
|     base_field = forms.IntegerField | ||||
|     range_type = NumericRange | ||||
|  | ||||
|  | ||||
| class DecimalRangeField(BaseRangeField): | ||||
|     default_error_messages = {"invalid": _("Enter two numbers.")} | ||||
|     base_field = forms.DecimalField | ||||
|     range_type = NumericRange | ||||
|  | ||||
|  | ||||
| class DateTimeRangeField(BaseRangeField): | ||||
|     default_error_messages = {"invalid": _("Enter two valid date/times.")} | ||||
|     base_field = forms.DateTimeField | ||||
|     range_type = DateTimeTZRange | ||||
|  | ||||
|  | ||||
| class DateRangeField(BaseRangeField): | ||||
|     default_error_messages = {"invalid": _("Enter two valid dates.")} | ||||
|     base_field = forms.DateField | ||||
|     range_type = DateRange | ||||
| @ -0,0 +1,11 @@ | ||||
| from django.db.models import DateTimeField, Func, UUIDField | ||||
|  | ||||
|  | ||||
| class RandomUUID(Func): | ||||
|     template = "GEN_RANDOM_UUID()" | ||||
|     output_field = UUIDField() | ||||
|  | ||||
|  | ||||
| class TransactionNow(Func): | ||||
|     template = "CURRENT_TIMESTAMP" | ||||
|     output_field = DateTimeField() | ||||
| @ -0,0 +1,242 @@ | ||||
| from django.db import NotSupportedError | ||||
| from django.db.models import Func, Index | ||||
| from django.utils.functional import cached_property | ||||
|  | ||||
| __all__ = [ | ||||
|     "BloomIndex", | ||||
|     "BrinIndex", | ||||
|     "BTreeIndex", | ||||
|     "GinIndex", | ||||
|     "GistIndex", | ||||
|     "HashIndex", | ||||
|     "SpGistIndex", | ||||
| ] | ||||
|  | ||||
|  | ||||
| class PostgresIndex(Index): | ||||
|     @cached_property | ||||
|     def max_name_length(self): | ||||
|         # Allow an index name longer than 30 characters when the suffix is | ||||
|         # longer than the usual 3 character limit. The 30 character limit for | ||||
|         # cross-database compatibility isn't applicable to PostgreSQL-specific | ||||
|         # indexes. | ||||
|         return Index.max_name_length - len(Index.suffix) + len(self.suffix) | ||||
|  | ||||
|     def create_sql(self, model, schema_editor, using="", **kwargs): | ||||
|         self.check_supported(schema_editor) | ||||
|         statement = super().create_sql( | ||||
|             model, schema_editor, using=" USING %s" % (using or self.suffix), **kwargs | ||||
|         ) | ||||
|         with_params = self.get_with_params() | ||||
|         if with_params: | ||||
|             statement.parts["extra"] = " WITH (%s)%s" % ( | ||||
|                 ", ".join(with_params), | ||||
|                 statement.parts["extra"], | ||||
|             ) | ||||
|         return statement | ||||
|  | ||||
|     def check_supported(self, schema_editor): | ||||
|         pass | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         return [] | ||||
|  | ||||
|  | ||||
| class BloomIndex(PostgresIndex): | ||||
|     suffix = "bloom" | ||||
|  | ||||
|     def __init__(self, *expressions, length=None, columns=(), **kwargs): | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|         if len(self.fields) > 32: | ||||
|             raise ValueError("Bloom indexes support a maximum of 32 fields.") | ||||
|         if not isinstance(columns, (list, tuple)): | ||||
|             raise ValueError("BloomIndex.columns must be a list or tuple.") | ||||
|         if len(columns) > len(self.fields): | ||||
|             raise ValueError("BloomIndex.columns cannot have more values than fields.") | ||||
|         if not all(0 < col <= 4095 for col in columns): | ||||
|             raise ValueError( | ||||
|                 "BloomIndex.columns must contain integers from 1 to 4095.", | ||||
|             ) | ||||
|         if length is not None and not 0 < length <= 4096: | ||||
|             raise ValueError( | ||||
|                 "BloomIndex.length must be None or an integer from 1 to 4096.", | ||||
|             ) | ||||
|         self.length = length | ||||
|         self.columns = columns | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.length is not None: | ||||
|             kwargs["length"] = self.length | ||||
|         if self.columns: | ||||
|             kwargs["columns"] = self.columns | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.length is not None: | ||||
|             with_params.append("length = %d" % self.length) | ||||
|         if self.columns: | ||||
|             with_params.extend( | ||||
|                 "col%d = %d" % (i, v) for i, v in enumerate(self.columns, start=1) | ||||
|             ) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class BrinIndex(PostgresIndex): | ||||
|     suffix = "brin" | ||||
|  | ||||
|     def __init__( | ||||
|         self, *expressions, autosummarize=None, pages_per_range=None, **kwargs | ||||
|     ): | ||||
|         if pages_per_range is not None and pages_per_range <= 0: | ||||
|             raise ValueError("pages_per_range must be None or a positive integer") | ||||
|         self.autosummarize = autosummarize | ||||
|         self.pages_per_range = pages_per_range | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.autosummarize is not None: | ||||
|             kwargs["autosummarize"] = self.autosummarize | ||||
|         if self.pages_per_range is not None: | ||||
|             kwargs["pages_per_range"] = self.pages_per_range | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.autosummarize is not None: | ||||
|             with_params.append( | ||||
|                 "autosummarize = %s" % ("on" if self.autosummarize else "off") | ||||
|             ) | ||||
|         if self.pages_per_range is not None: | ||||
|             with_params.append("pages_per_range = %d" % self.pages_per_range) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class BTreeIndex(PostgresIndex): | ||||
|     suffix = "btree" | ||||
|  | ||||
|     def __init__(self, *expressions, fillfactor=None, **kwargs): | ||||
|         self.fillfactor = fillfactor | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.fillfactor is not None: | ||||
|             kwargs["fillfactor"] = self.fillfactor | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.fillfactor is not None: | ||||
|             with_params.append("fillfactor = %d" % self.fillfactor) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class GinIndex(PostgresIndex): | ||||
|     suffix = "gin" | ||||
|  | ||||
|     def __init__( | ||||
|         self, *expressions, fastupdate=None, gin_pending_list_limit=None, **kwargs | ||||
|     ): | ||||
|         self.fastupdate = fastupdate | ||||
|         self.gin_pending_list_limit = gin_pending_list_limit | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.fastupdate is not None: | ||||
|             kwargs["fastupdate"] = self.fastupdate | ||||
|         if self.gin_pending_list_limit is not None: | ||||
|             kwargs["gin_pending_list_limit"] = self.gin_pending_list_limit | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.gin_pending_list_limit is not None: | ||||
|             with_params.append( | ||||
|                 "gin_pending_list_limit = %d" % self.gin_pending_list_limit | ||||
|             ) | ||||
|         if self.fastupdate is not None: | ||||
|             with_params.append("fastupdate = %s" % ("on" if self.fastupdate else "off")) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class GistIndex(PostgresIndex): | ||||
|     suffix = "gist" | ||||
|  | ||||
|     def __init__(self, *expressions, buffering=None, fillfactor=None, **kwargs): | ||||
|         self.buffering = buffering | ||||
|         self.fillfactor = fillfactor | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.buffering is not None: | ||||
|             kwargs["buffering"] = self.buffering | ||||
|         if self.fillfactor is not None: | ||||
|             kwargs["fillfactor"] = self.fillfactor | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.buffering is not None: | ||||
|             with_params.append("buffering = %s" % ("on" if self.buffering else "off")) | ||||
|         if self.fillfactor is not None: | ||||
|             with_params.append("fillfactor = %d" % self.fillfactor) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class HashIndex(PostgresIndex): | ||||
|     suffix = "hash" | ||||
|  | ||||
|     def __init__(self, *expressions, fillfactor=None, **kwargs): | ||||
|         self.fillfactor = fillfactor | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.fillfactor is not None: | ||||
|             kwargs["fillfactor"] = self.fillfactor | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.fillfactor is not None: | ||||
|             with_params.append("fillfactor = %d" % self.fillfactor) | ||||
|         return with_params | ||||
|  | ||||
|  | ||||
| class SpGistIndex(PostgresIndex): | ||||
|     suffix = "spgist" | ||||
|  | ||||
|     def __init__(self, *expressions, fillfactor=None, **kwargs): | ||||
|         self.fillfactor = fillfactor | ||||
|         super().__init__(*expressions, **kwargs) | ||||
|  | ||||
|     def deconstruct(self): | ||||
|         path, args, kwargs = super().deconstruct() | ||||
|         if self.fillfactor is not None: | ||||
|             kwargs["fillfactor"] = self.fillfactor | ||||
|         return path, args, kwargs | ||||
|  | ||||
|     def get_with_params(self): | ||||
|         with_params = [] | ||||
|         if self.fillfactor is not None: | ||||
|             with_params.append("fillfactor = %d" % self.fillfactor) | ||||
|         return with_params | ||||
|  | ||||
|     def check_supported(self, schema_editor): | ||||
|         if ( | ||||
|             self.include | ||||
|             and not schema_editor.connection.features.supports_covering_spgist_indexes | ||||
|         ): | ||||
|             raise NotSupportedError("Covering SP-GiST indexes require PostgreSQL 14+.") | ||||
|  | ||||
|  | ||||
| class OpClass(Func): | ||||
|     template = "%(expressions)s %(name)s" | ||||
|  | ||||
|     def __init__(self, expression, name): | ||||
|         super().__init__(expression, name=name) | ||||
| @ -0,0 +1 @@ | ||||
| {% include 'django/forms/widgets/multiwidget.html' %} | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,104 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # F Wolff <friedel@translate.org.za>, 2019-2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Afrikaans (http://www.transifex.com/django/django/language/" | ||||
| "af/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: af\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL-uitbreidings" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Item %(nth)s in die skikking kon nie valideer nie:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Geneste skikkings moet dieselfde lengte hê." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Woordeboek van stringe na stringe/nulls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Die waarde “%(key)s” is nie 'n string of null nie." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Kon nie JSON-data laai nie." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Toevoer moet 'n JSON-woordeboek wees." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Gee twee geldige waardes." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Die begin van die omvang mag nie die einde van die omvang oorskry nie." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Tik twee heelgetalle in." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Tik twee getalle in." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Tik twee geldige datum/tydwaardes in." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Tik twee geldige datums in." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lys bevat %(show_value)d item, maar moet hoogstens %(limit_value)d bevat." | ||||
| msgstr[1] "" | ||||
| "Lys bevat %(show_value)d items, maar moet hoogstens %(limit_value)d bevat." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lys bevat %(show_value)d item, maar moet minstens %(limit_value)d bevat." | ||||
| msgstr[1] "" | ||||
| "Lys bevat %(show_value)d items, maar moet minstens %(limit_value)d bevat." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Sommige sleutels het ontbreek: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Sommige onbekende sleutels is voorsien: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Maak seker dat dié omvang heeltemal kleiner of gelyk is aan %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Maak seker dat dié omvang heeltemal groter of gelyk is aan %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,131 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Bashar Al-Abdulhadi, 2015-2017 | ||||
| # Muaaz Alsaied, 2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Arabic (http://www.transifex.com/django/django/language/ar/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\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" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "ملحقات PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "العنصر %(nth)s في المتسلسلة لم يحقق التالي: " | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "يجب أن تكون المجموعات المتداخلة بنفس الطول." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "ترابط strings بـ strings/nulls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "قيمة \"%(key)s\" ليست string أو null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "لا يمكن عرض بيانات JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "المُدخل يجب أن يكون بصيغة بصيغة قاموس JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "إدخال قيمتين صالحتين." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "بداية المدى يجب ألا تتجاوز نهاية المدى." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "أدخل رقمين كاملين." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "أدخل رقمين." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "أدخل تاريخين/وقتين صحيحين." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "أدخل تاريخين صحيحين." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[4] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[5] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[4] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[5] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "بعض المفاتيح مفقودة: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "بعض المفاتيح المزوّدة غير معرّفه: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "تأكد من أن هذا المدى أقل من أو يساوي %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "تأكد من أن هذا المدى أكثر من أو يساوي %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,131 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Riterix <infosrabah@gmail.com>, 2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Arabic (Algeria) (http://www.transifex.com/django/django/" | ||||
| "language/ar_DZ/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ar_DZ\n" | ||||
| "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " | ||||
| "&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "ملحقات PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "العنصر %(nth)s في المجموعة لم يتم التحقق منه: " | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "يجب أن تكون المجموعات المتداخلة بنفس الطول." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "خريطة السلاسل إلى سلاسل / بلا قيم" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "قيمة \\\"%(key)s\\\" ليست سلسلة أو بلا قيمة." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "لا يمكن عرض بيانات JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "المُدخل يجب أن يكون بصيغة بصيغة قاموس JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "إدخال قيمتين صالحتين." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "بداية المدى يجب ألا تتجاوز نهاية المدى." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "أدخل رقمين كاملين." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "أدخل رقمين." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "أدخل تاريخين/وقتين صحيحين." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "أدخل تاريخين صحيحين." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[4] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
| msgstr[5] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أكثر من " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصرين, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "القائمة تحتوي على %(show_value)d عناصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[4] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
| msgstr[5] "" | ||||
| "القائمة تحتوي على %(show_value)d عنصر, يجب أن لا تحتوي على أقل من " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "بعض المفاتيح مفقودة: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "بعض المفاتيح المزوّدة غير معرّفه: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "تأكد من أن هذا المدى أقل من أو يساوي %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "تأكد من أن هذا المدى أكثر من أو يساوي %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,102 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Emin Mastizada <emin@linux.com>, 2018,2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Azerbaijani (http://www.transifex.com/django/django/language/" | ||||
| "az/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: az\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL uzantıları" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Array-dəki %(nth)s element təsdiqlənə bilmir:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "İç-içə array-lərin uzunluğu eyni olmalıdır." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "String-lərin string/null-lara xəritələnmə cədvəli" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "“%(key)s” dəyəri string və ya null deyil." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON məlumat yüklənə bilmir." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Giriş JSON lüğət olmalıdır." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "İki düzgün dəyər daxil edin." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Aralığın başlanğıcı bitişindən böyük ola bilməz." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "İki tam rəqəm daxil edin." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "İki rəqəm daxil edin." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "İki düzgün tarix/vaxt daxil edin." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "İki düzgün tarix daxil edin." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." | ||||
| msgstr[1] "" | ||||
| "Siyahıda %(show_value)d element var, ən çox %(limit_value)d ola bilər." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." | ||||
| msgstr[1] "" | ||||
| "Siyahıda %(show_value)d element var, ən az %(limit_value)d ola bilər." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Bəzi açarlar əksikdir: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Bəzi bilinməyən açarlar təchiz edilib: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "Bu aralığın %(limit_value)s və ya daha az olduğuna əmin olun." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "Bu aralığın %(limit_value)s və ya daha böyük olduğuna əmin olun." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,120 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Viktar Palstsiuk <vipals@gmail.com>, 2015 | ||||
| # znotdead <zhirafchik@gmail.com>, 2016-2017,2019,2023 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: znotdead <zhirafchik@gmail.com>, 2016-2017,2019,2023\n" | ||||
| "Language-Team: Belarusian (http://www.transifex.com/django/django/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" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Пашырэнні PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Элемент масіву нумар %(nth)s не прайшоў праверкі:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Укладзенныя масівы павінны мець аднолькавую даўжыню." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Адпаведнасць радкоў у радкі/нулі" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Значэнне “%(key)s” не з'яўляецца радком ці null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Не атрымалася загрузіць дадзеныя JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Значэнне павінна быць JSON слоўнікам. " | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Увядзіце два сапраўдных значэнні." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Пачатак дыяпазону не павінен перавышаць канец дыяпазону." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Увядзіце два цэлых лікі." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Увядзіце два лікі." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Увядзіце дзве/два сапраўдных даты/часу." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Увядзіце дзве сапраўдных даты." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Спіс мае %(show_value)d элемент, ён павінен мець не болей чым " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Спіс мае %(show_value)d элемента, ён павінен мець не болей чым " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "Спіс мае %(show_value)d элементаў, ён павінен мець не болей чым " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Спіс мае %(show_value)d элемент, ён павінен мець не менш чым %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Спіс мае %(show_value)d элемента, ён павінен мець не менш чым " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "Спіс мае %(show_value)d элементаў, ён павінен мець не менш чым " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Не хапае нейкіх ключоў: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Дадзены нейкія невядомыя ключы: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Пераканайцеся, што верхняя мяжа дыяпазону не перавышае %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "Пераканайцеся, што ніжняя мяжа дыяпазону не менш за %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,110 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # arneatec <arneatec@gmail.com>, 2022 | ||||
| # Todor Lubenov <tlubenov@gmail.com>, 2015 | ||||
| # Venelin Stoykov <vkstoykov@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2022-01-14 11:54+0000\n" | ||||
| "Last-Translator: arneatec <arneatec@gmail.com>\n" | ||||
| "Language-Team: Bulgarian (http://www.transifex.com/django/django/language/" | ||||
| "bg/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: bg\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL разширения" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Елемент %(nth)s в масива не се валидира:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Вложените масиви трябва да имат еднаква дължина." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Мап от стрингове към стрингове/null-ове" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Стойността на “%(key)s” не е стринг или null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Не можа да зареди JSON данни." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Входните данни трябва да са JSON речник." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Въведете две валидни стойности." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Началото на обхвата не трябва да превишава края му." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Въведете две цели числа." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Въведете две числа." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Въведете две валидни дати/времена." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Въведете две коректни дати." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Списъкът съдържа %(show_value)d елемент, а трябва да има не повече от " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Списъкът съдържа %(show_value)d елемента, а трябва да има не повече от " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Списъкът съдържа %(show_value)d елемент, а трябва да има поне " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Списъкът съдържа %(show_value)d елемента, а трябва да има поне " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Някои ключове липсват: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Бяха предоставени някои неизвестни ключове: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Уверете се, че този обхват е изцяло по-малък от или равен на %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Уверете се, че интервалът е изцяло по-голям от или равен на %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,112 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Antoni Aloy <aaloy@apsl.net>, 2015,2017 | ||||
| # duub qnnp, 2015 | ||||
| # Gil Obradors Via <gil.obradors@gmail.com>, 2019 | ||||
| # Manel Clos <manelclos@gmail.com>, 2020 | ||||
| # Roger Pons <rogerpons@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Catalan (http://www.transifex.com/django/django/language/" | ||||
| "ca/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ca\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensions de PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "L'element %(nth)s de la matriu no s'ha pogut validar:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Les matrius niades han de tenir la mateixa longitud." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapa de cadenes a cadenes/nuls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "El valor de \"%(key)s\" no és ni una cadena ni un nul." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "No es poden carregar les dades JSON" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "L'entrada ha de ser un diccionari JSON" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Introdueixi dos valors vàlids." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "L'inici del rang no pot excedir el seu final." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Introduïu dos números enters positius." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Introduïu dos números." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Introduïu dues data/hora vàlides." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Introduïu dos dates vàlides." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La llista conté %(show_value)d element, no n'hauria de tenir més de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La llista conté %(show_value)d elements, no n'hauria de tenir més de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La llista conté %(show_value)d element, no n'hauria de contenir menys de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La llista conté %(show_value)d elements, no n'hauria de contenir menys de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Algunes claus no hi són: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "S'han facilitat claus desconegudes: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asseguri's que aquest rang és completament menor o igual a %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Asseguri's que aquest rang és completament major o igual a %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,101 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Swara <swara09@gmail.com>, 2022 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Swara <swara09@gmail.com>, 2022\n" | ||||
| "Language-Team: Central Kurdish (http://www.transifex.com/django/django/" | ||||
| "language/ckb/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ckb\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "پێوەکراوەکانی PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "بڕگەی%(nth)s لەناو ڕیزەکەدا پشتڕاست نەکراوەتەوە:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "ڕیزی هێلانەکراو دەبێت هەمان درێژی هەبێت." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "نەخشەی دهقهڕیزبهندەکان بۆ دەقەڕیزبەندەکان/بەتاڵەکان" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "بەهای “%(key)s” نە دەقەڕیزبەندە نە بەتاڵ." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "نەتوانرا داتاکانی JSON باربکرێت." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "دەرخواردە دەبێت فەرهەنگی JSON بێت." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "دوو بەهای دروست بنوسە." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "نابێت سەرەتای ڕێژەکە لە کۆتایی ڕێژەکە زیاتر بێت." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "دوو ژمارەی تەواو بنوسە." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "دوو ژمارە بنوسە." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "دوو بەروار/کاتی دروست بنوسە." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "دوو بەرواری دروست بنوسە." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "لیست پێکدێت لە %(show_value)d بڕگە، دەبێت زیاتر نەبێت لە %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "لیست پێکدێت لە %(show_value)d بڕگە، دەبێت زیاتر نەبێت لە %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "لیست پێکدێت لە %(show_value)d بڕگە، دەبێت کەمتر نەبێت لە %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "لیست پێکدێت لە %(show_value)d بڕگە، دەبێت کەمتر نەبێت لە %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "هەندێک کلیل نەمابوون: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "هەندێک کلیلی نەناسراو دابین کران: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,119 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Tomáš Ehrlich <tomas.ehrlich@gmail.com>, 2015 | ||||
| # Vláďa Macek <macek@sandbox.cz>, 2015-2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Czech (http://www.transifex.com/django/django/language/cs/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: cs\n" | ||||
| "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n " | ||||
| "<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Rozšíření pro PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Položka č. %(nth)s v seznamu je neplatná:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Vnořená pole musejí mít stejnou délku." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapování řetězců na řetězce či hodnoty NULL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Hodnota s klíčem \"%(key)s\" není řetězec ani NULL." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Data typu JSON nelze načíst." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Vstup musí být slovník formátu JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Zadejte dvě platné hodnoty." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Počáteční hodnota rozsahu nemůže být vyšší než koncová hodnota." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Zadejte dvě celá čísla." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Zadejte dvě čísla." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Zadejte dvě platné hodnoty data nebo času." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Zadejte dvě platná data." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat více než " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat více než " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat více než " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Seznam obsahuje %(show_value)d položku, ale neměl by obsahovat méně než " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Seznam obsahuje %(show_value)d položky, ale neměl by obsahovat méně než " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " | ||||
| "%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "Seznam obsahuje %(show_value)d položek, ale neměl by obsahovat méně než " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Některé klíče chybí: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Byly zadány neznámé klíče: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "Nejvyšší hodnota rozsahu musí být menší nebo rovna %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "Nejnižší hodnota rozsahu musí být větší nebo rovna %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,106 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Erik Ramsgaard Wognsen <r4mses@gmail.com>, 2023 | ||||
| # Erik Ramsgaard Wognsen <r4mses@gmail.com>, 2015-2020 | ||||
| # valberg <valberg@orn.li>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Erik Ramsgaard Wognsen <r4mses@gmail.com>, 2023\n" | ||||
| "Language-Team: Danish (http://www.transifex.com/django/django/language/da/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: da\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL-udvidelser" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Element %(nth)s i array'et blev ikke valideret:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Indlejrede arrays skal have den samme længde." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Afbildning fra strenge til strenge/nulls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Værdien af “%(key)s” er ikke en streng eller null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Kunne ikke indlæse JSON-data." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Input skal være et JSON-dictionary." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Indtast to gyldige værdier." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Starten af intervallet kan ikke overstige slutningen af intervallet." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Indtast to heltal." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Indtast to tal." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Indtast to gyldige dato/tider." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Indtast to gyldige datoer." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listen indeholder %(show_value)d element, en bør ikke indeholde mere end " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Listen indeholder %(show_value)d elementer, den bør ikke indeholde mere end " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listen indeholder %(show_value)d element, den bør ikke indeholde mindre end " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Listen indeholder %(show_value)d elementer, den bør ikke indeholde mindre " | ||||
| "end %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Nøgler mangler: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Ukendte nøgler angivet: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "Intervallets øvre grænse må ikke være større end %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "Intervallets nedre grænse må ikke være mindre end %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,111 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Florian Apolloner <florian@apolloner.eu>, 2023 | ||||
| # Jannis Leidel <jannis@leidel.info>, 2015-2018,2020 | ||||
| # Jens Neuhaus <kontakt@jensneuhaus.de>, 2016 | ||||
| # Markus Holtermann <info@markusholtermann.eu>, 2017 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Florian Apolloner <florian@apolloner.eu>, 2023\n" | ||||
| "Language-Team: German (http://www.transifex.com/django/django/language/de/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: de\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL-Erweiterungen" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Element %(nth)s im Array konnte nicht validiert werden:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Verschachtelte Arrays müssen die gleiche Länge haben." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Zuordnung von Zeichenketten zu Zeichenketten/NULLs" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Der Wert für „%(key)s“ ist keine Zeichenkette oder NULL." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Konnte JSON-Daten nicht laden." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Eingabe muss ein JSON-Dictionary sein." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Bitte zwei gültige Werte eingeben." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Der Anfang des Wertbereichs darf nicht das Ende überschreiten." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Bitte zwei ganze Zahlen eingeben." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Bitte zwei Zahlen eingeben." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Bitte zwei gültige Datum/Uhrzeit-Werte eingeben." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Bitte zwei gültige Kalenderdaten eingeben." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Liste enthält %(show_value)d Element, es sollte aber nicht mehr als " | ||||
| "%(limit_value)d enthalten." | ||||
| msgstr[1] "" | ||||
| "Liste enthält %(show_value)d Elemente, es sollte aber nicht mehr als " | ||||
| "%(limit_value)d enthalten." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Liste enthält %(show_value)d Element, es sollte aber nicht weniger als " | ||||
| "%(limit_value)d enthalten." | ||||
| msgstr[1] "" | ||||
| "Liste enthält %(show_value)d Elemente, es sollte aber nicht weniger als " | ||||
| "%(limit_value)d enthalten." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Einige Werte fehlen: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Einige unbekannte Werte wurden eingegeben: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Bitte sicherstellen, dass die obere Grenze des Bereichs nicht größer als " | ||||
| "%(limit_value)s ist." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Bitte sicherstellen, dass die untere Grenze des Bereichs nicht kleiner als " | ||||
| "%(limit_value)s ist." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,118 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Michael Wolf <milupo@sorbzilla.de>, 2016-2018,2020,2023 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Michael Wolf <milupo@sorbzilla.de>, 2016-2018,2020,2023\n" | ||||
| "Language-Team: Lower Sorbian (http://www.transifex.com/django/django/" | ||||
| "language/dsb/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: dsb\n" | ||||
| "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " | ||||
| "n%100==4 ? 2 : 3);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Rozšyrjenja PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Zapisk %(nth)sw pólnej wariabli njejo se wobkšuśił:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Zakašćikowane pólne wariable muse tu samsku dłujkosć měś." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Konwertěrowanje znamuškowych rjeśazkow do znamuškowych rjeśazkow/nulow" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Gódnota „%(key)s“ njejo znamuškowy rjeśazk abo null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON-daty njejsu se zacytowaś dali." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Zapódaśe musy JSON-słownik byś." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Zapódajśo dwě płaśiwej gódnośe." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Zachopjeńk wobcerka njesmějo kóńc wobcerka pśekšocyś." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Zapódajśo dwě cełej licbje." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Zapódajśo dwě licbje." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Zapódajśo dwě płaśiwej datowej/casowej pódaśi." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Zapódajśo dwě płaśiwej datowej pódaśi." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lisćina wopśimujo %(show_value)d element, wóna njeby dejała wěcej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[1] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała wěcej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[2] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała wěcej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[3] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała wěcej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lisćina wopśimujo %(show_value)d element, wóna njeby dejała mjenjej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[1] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementa, wóna njeby dejała mjenjej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[2] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementy, wóna njeby dejała mjenjej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
| msgstr[3] "" | ||||
| "Lisćina wopśimujo %(show_value)d elementow, wóna njeby dejała mjenjej ako " | ||||
| "%(limit_value)d wopśimowaś." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Někotare kluce feluju: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Někotare njeznate kluce su se pódali: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "Zawěsććo, až górna granica wobceŕka njejo wětša ako %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "Zawěsććo, až dolna granica wobceŕka njejo mjeńša ako %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,111 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Fotis Athineos <fotis@transifex.com>, 2021 | ||||
| # Giannis Meletakis <meletakis@gmail.com>, 2015 | ||||
| # Nick Mavrakis <mavrakis.n@gmail.com>, 2017-2018 | ||||
| # Nick Mavrakis <mavrakis.n@gmail.com>, 2016 | ||||
| # Pãnoș <panos.laganakos@gmail.com>, 2016 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2021-08-04 06:26+0000\n" | ||||
| "Last-Translator: Fotis Athineos <fotis@transifex.com>\n" | ||||
| "Language-Team: Greek (http://www.transifex.com/django/django/language/el/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: el\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Επεκτάσεις της PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "To στοιχείο %(nth)s στον πίνακα δεν είναι έγκυρο:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Οι ένθετοι πίνακες πρέπει να έχουν το ίδιο μήκος." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Αντιστοίχιση strings σε strings/nulls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Η τιμή του “%(key)s“ δεν είναι string ή null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Αδύνατη η φόρτωση των δεδομένων JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Το input πρέπει να είναι ένα έγκυρο JSON dictionary." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Εισάγετε δύο έγκυρες τιμές." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Η αρχή του range δεν πρέπει να ξεπερνά το τέλος του range." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Εισάγετε δυο ολόκληρους αριθμούς." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Εισάγετε δυο αριθμούς." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Εισάγετε δύο έγκυρες ημερομηνίες/ώρες." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Εισάγετε δυο έγκυρες ημερομηνίες." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Η λίστα περιέχει %(show_value)d στοιχείο και δεν πρέπει να περιέχει πάνω από " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " | ||||
| "από %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Η λίστα περιέχει %(show_value)d στοιχεία και δεν πρέπει να περιέχει λιγότερα " | ||||
| "από %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Έλειπαν μερικά κλειδιά: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Δόθηκαν μέρικά άγνωστα κλειδιά: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Βεβαιωθείτε ότι το range είναι αυστηρά μικρότερο ή ίσο από %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Βεβαιωθείτε ότι το range είναι αυστηρά μεγαλύτερο ή ίσο από %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,114 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: Django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2015-01-18 20:56+0100\n" | ||||
| "Last-Translator: Django team\n" | ||||
| "Language-Team: English <en@li.org>\n" | ||||
| "Language: en\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| #: contrib/postgres/apps.py:54 | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/fields/array.py:21 contrib/postgres/forms/array.py:17 | ||||
| #: contrib/postgres/forms/array.py:185 | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/fields/array.py:22 | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/fields/hstore.py:15 | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/fields/hstore.py:17 | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/hstore.py:17 | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/hstore.py:18 | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:42 | ||||
| msgid "Enter two valid values." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:44 | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:99 | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:105 | ||||
| msgid "Enter two numbers." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:111 | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/forms/ranges.py:117 | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:15 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:25 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:38 | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:39 | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:81 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #: contrib/postgres/validators.py:90 | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,109 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Tom Fifield <tom@tomfifield.net>, 2021 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2021-04-11 13:16+0000\n" | ||||
| "Last-Translator: Tom Fifield <tom@tomfifield.net>\n" | ||||
| "Language-Team: English (Australia) (http://www.transifex.com/django/django/" | ||||
| "language/en_AU/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: en_AU\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL extensions" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Item %(nth)s in the array did not validate:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Nested arrays must have the same length." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Map of strings to strings/nulls" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "The value of “%(key)s” is not a string or null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Could not load JSON data." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Input must be a JSON dictionary." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Enter two valid values." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "The start of the range must not exceed the end of the range." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Enter two whole numbers." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Enter two numbers." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Enter two valid date/times." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Enter two valid dates." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Some keys were missing: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Some unknown keys were provided: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,109 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Baptiste Darthenay <baptiste+transifex@darthenay.fr>, 2015-2017,2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Esperanto (http://www.transifex.com/django/django/language/" | ||||
| "eo/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: eo\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL kromaĵoj" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Elemento %(nth)s en la tabelo ne estas valida:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Ingitaj tabeloj devas havi la saman grandon." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Kongruo de signoĉenoj al signoĉenoj/nulvaloroj" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Malsukcesis ŝarĝi la JSON datumojn." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "La enigo devas esti JSON vortaro." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Enigu du validajn valorojn." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "La komenco de la intervalo ne devas superi la finon de la intervalo." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Enigu du entjeroj." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Enigu du nombroj." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Enigu du validajn dato/horojn." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Enigu du validajn datojn." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La listo enhavas %(show_value)d eron, kaj ne devas enhavi pli ol " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La listo enhavas %(show_value)d erojn, kaj ne devas enhavi pli ol " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La listo enhavas %(show_value)d erojn, kaj devas enhavi pli ol " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Kelkaj ŝlosiloj mankas: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Kelkaj nekonataj ŝlosiloj estis provizitaj: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Bv kontroli, ke la tuta intervalo estas malpli alta aŭ egala al " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Bv kontroli, ke la tuta intervalo estas pli alta aŭ egala al %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,121 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Antoni Aloy <aaloy@apsl.net>, 2015,2017 | ||||
| # e4db27214f7e7544f2022c647b585925_bb0e321, 2015 | ||||
| # Ignacio José Lizarán Rus <ilizaran@gmail.com>, 2019 | ||||
| # Igor Támara <igor@tamarapatino.org>, 2015 | ||||
| # Pablo, 2015 | ||||
| # Uriel Medina <urimeba511@gmail.com>, 2020,2023 | ||||
| # Veronicabh <vero.blazher@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Uriel Medina <urimeba511@gmail.com>, 2020,2023\n" | ||||
| "Language-Team: Spanish (http://www.transifex.com/django/django/language/" | ||||
| "es/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: es\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensiones de PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "El elemento %(nth)s del arreglo no se pudo validar:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Los arreglos anidados deben tener la misma longitud." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapa de cadenas a cadenas/nulos" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "El valor de “%(key)s” no es una cadena ni es nulo." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "No se pududieron cargar los datos JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "La entrada debe ser un diccionario JSON" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Introduzca dos valores válidos." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "El comienzo del rango no puede exceder su final." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Ingrese dos números enteros." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Ingrese dos números." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Ingrese dos fechas/horas válidas." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Ingrese dos fechas válidas." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d elemento, no debería contener más de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener más de " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener más de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d elemento, no debería contener menos de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener menos de " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener menos de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Faltan algunas claves: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que el límite superior del rango no sea mayor que " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que el límite inferior del rango no sea inferior a " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,108 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Ramiro Morales, 2015-2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Spanish (Argentina) (http://www.transifex.com/django/django/" | ||||
| "language/es_AR/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: es_AR\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensiones PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "La validación del ítem %(nth)s del arreglo falló:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Los arreglos anidados deben ser de la misma longitud." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapa de cadenas a cadenas/nulos" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "El valor de \"%(key)s” no es una cadena o nulo." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "No se han podido cargar los datos JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "debe ser un diccionario JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Introduzca dos valores válidos." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "El inicio del rango no debe ser mayor que el fin del rango." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Introduzca dos números enteros." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Introduzca dos números." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Introduzca dos fechas/horas válidas." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Introduzca dos fechas válidas." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d ítem, debe contener no mas de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d ítems, debe contener no mas de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d ítem, debe contener no mas de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d ítems, debe contener no menos de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "No se encontraron algunas llaves: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Algunas de las llaves provistas son desconocidas: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que este rango es completamente menor o igual a %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que este rango es completamente mayor o igual a %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,112 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Antoni Aloy <aaloy@apsl.net>, 2015 | ||||
| # Ernesto Avilés, 2015 | ||||
| # Igor Támara <igor@tamarapatino.org>, 2015 | ||||
| # Pablo, 2015 | ||||
| # Veronicabh <vero.blazher@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Spanish (Colombia) (http://www.transifex.com/django/django/" | ||||
| "language/es_CO/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: es_CO\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensiones de PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Los arreglos anidados deben tener la misma longitud." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "No se pududieron cargar los datos JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Ingrese dos valores válidos." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "El comienzo del rango no puede exceder su final." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Ingrese dos números enteros." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Ingrese dos números." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Ingrese dos fechas/horas válidas." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Ingrese dos fechas válidas." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d elemento, no debería contener más de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener más de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d elemento, no debería contener menos de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d elementos, no debería contener menos de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Faltan algunas claves: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Se facilitaron algunas claves desconocidas: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "Asegúrese de que este rango es menor o igual que %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que este rango es efectivamente mayor o igual que " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,98 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Alex Dzul <alexexc2@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Spanish (Mexico) (http://www.transifex.com/django/django/" | ||||
| "language/es_MX/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: es_MX\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensiones PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Ingrese dos valores válidos" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Ingrese dos números" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Ingrese dos fechas válidas" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,111 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Martin Pajuste <martinpajuste@gmail.com>, 2015 | ||||
| # Martin Pajuste <martinpajuste@gmail.com>, 2017 | ||||
| # Marti Raudsepp <marti@juffo.org>, 2015-2016 | ||||
| # Ragnar Rebase <rrebase@gmail.com>, 2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Estonian (http://www.transifex.com/django/django/language/" | ||||
| "et/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: et\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL laiendused" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Element %(nth)s massiivis pole korrektne:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Mitmemõõtmelised massiivid peavad olema sama pikad." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Teisendus sõnedest sõnedeks/tühjadeks" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Võtme “%(key)s” väärtus ei ole sõne ega tühi." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Ei saanud laadida JSON andmeid." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Sisend peab olema JSON sõnastik." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Sisesta kaks korrektset väärtust." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Vahemiku algus ei või olla suurem kui vahemiku lõpp." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Sisesta kaks täisarvu." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Sisesta kaks arvu." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Sisesta kaks korrektset kuupäeva ja kellaaega." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Sisesta kaks korrektset kuupäeva." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla rohkem kui " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Nimekiri sisaldab %(show_value)d elementi, ei tohiks olla vähem kui " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Puuduvad võtmeväärtused: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Tundmatud võtmeväärtused: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Veendu, et see vahemik on täielikult väiksem või võrdne kui %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Veendu, et see vahemik on täielikult suurem või võrdne kui %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,108 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Eneko Illarramendi <eneko@illarra.com>, 2017-2018 | ||||
| # Urtzi Odriozola <urtzi.odriozola@gmail.com>, 2017,2021 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2021-03-18 15:48+0000\n" | ||||
| "Last-Translator: Urtzi Odriozola <urtzi.odriozola@gmail.com>\n" | ||||
| "Language-Team: Basque (http://www.transifex.com/django/django/language/eu/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: eu\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL hedapenak" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Array-ko %(nth)s elementua ez da balekoa:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Array habiaratuek luzera bera izan behar dute." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "String-etik string/null-era mapa" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "”%(key)s”-ren balioa ez da string bat, edo null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Ezin izan dira JSON datuak kargatu." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Sarrera JSON hiztegi bat izan behar da." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Idatzi bi baleko balio." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Tartearen hasierak ezin du amaierako tartearen balioa gainditu." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Idatzi bi zenbaki oso." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Idatzi bi zenbaki." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Idatzi bi baleko data/ordu." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Idatzi bi baleko data." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)dbaino " | ||||
| "gehiago izan behar." | ||||
| msgstr[1] "" | ||||
| "Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " | ||||
| "gehiago izan behar." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Zerrendak elementu %(show_value)d du, ez lituzke %(limit_value)d baino " | ||||
| "gutxiago izan behar." | ||||
| msgstr[1] "" | ||||
| "Zerrendak %(show_value)d elementu ditu, ez lituzke %(limit_value)d baino " | ||||
| "gutxiago izan behar." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Gako batzuk falta dira: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Gako ezezagun batzuk eman dira: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Ziurtatu guztiz tarte hau %(limit_value)s baino txikiagoa edo berdina dela." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Ziurtatu guztiz tarte hau %(limit_value)s baino handiagoa edo berdina dela." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,108 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Ali Nikneshan <ali@nikneshan.com>, 2015 | ||||
| # MJafar Mashhadi <raindigital2007@gmail.com>, 2018 | ||||
| # Mohammad Hossein Mojtahedi <Mhm5000@gmail.com>, 2016 | ||||
| # Pouya Abbassi, 2016 | ||||
| # rahim agh <rahim.aghareb@gmail.com>, 2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-27 09:32+0000\n" | ||||
| "Last-Translator: rahim agh <rahim.aghareb@gmail.com>\n" | ||||
| "Language-Team: Persian (http://www.transifex.com/django/django/language/" | ||||
| "fa/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: fa\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "ملحقات Postgres" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "عضو %(nth)sم آرایه معتبر نیست:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "آرایه های تو در تو باید هم سایز باشند" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "نگاشتی از رشته به رشته/هیچمقدار" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "مقدار \"%(key)s\" یک رشته حرفی یا null نیست." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "امکان بارگزاری  داده های JSON  نیست." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "مقدار ورودی باید یک دیکشنری JSON باشد." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "دو مقدار معتبر وارد کنید" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "مقدار شروع بازه باید از پایان کوچکتر باشد" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "دو عدد کامل وارد کنید" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "دو عدد وارد کنید" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "دو تاریخ/ساعت معتبر وارد کنید" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "دو تاریخ معتبر وارد کنید" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " | ||||
| "باشد." | ||||
| msgstr[1] "" | ||||
| "لیست شامل %(show_value)d مورد است. ولی باید حداکثر شامل %(limit_value)d مورد " | ||||
| "باشد." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." | ||||
| msgstr[1] "" | ||||
| "لیست شامل %(show_value)d است، نباید کمتر از %(limit_value)d را شامل شود." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "برخی کلیدها یافت نشدند: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "برخی کلیدهای ارائه شده ناشناختهاند: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "اطمیمنان حاصل کنید که این رنج، کوچکتر یا برابر با %(limit_value)s است." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "اطمینان حاصل کنید که رنج، بزرگتر یا برابر با %(limit_value)s است." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,110 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Aarni Koskela, 2015,2017,2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-12-09 06:30+0000\n" | ||||
| "Last-Translator: Aarni Koskela\n" | ||||
| "Language-Team: Finnish (http://www.transifex.com/django/django/language/" | ||||
| "fi/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: fi\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL-laajennukset" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Taulukon %(nth)s alkio ei ole kelvollinen:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Sisäkkäisillä taulukoilla tulee olla sama pituus." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Kartta merkkijonoista merkkijonoihin tai tyhjiin (null)" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Avaimen \"%(key)s\" arvo ei ole merkkijono tai tyhjä (null)." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON-dataa ei voitu ladata." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Syötteen tulee olla JSON-sanakirja." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Anna kaksi oikeaa arvoa." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Alueen alku pitää olla pienempi kuin alueen loppu." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Anna kaksi kokonaislukua." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Anna kaksi lukua." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Anna kaksi oikeaa päivämäärää/kellonaikaa." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Anna kaksi oikeaa päivämäärää." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listassa on %(show_value)d arvo, mutta siinä ei saa olla enempää kuin " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Listassa on %(show_value)d arvoa, mutta siinä ei saa olla enempää kuin " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listassa on %(show_value)d arvo, mutta siinä ei saa olla vähempää kuin " | ||||
| "%(limit_value)d arvoa." | ||||
| msgstr[1] "" | ||||
| "Listassa on %(show_value)d arvoa, mutta siinä ei saa olla vähempää kuin " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Joitain avaimia puuttuu: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Tuntemattomia avaimia annettiin: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Tämän alueen tulee olla kokonaisuudessaan yhtäsuuri tai pienempi kuin " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Tämän alueen tulee olla kokonaisuudessaan yhtäsuuri tai suurempi kuin " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,114 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Claude Paroz <claude@2xlibre.net>, 2015-2019,2023 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Claude Paroz <claude@2xlibre.net>, 2015-2019,2023\n" | ||||
| "Language-Team: French (http://www.transifex.com/django/django/language/fr/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: fr\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n > 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensions PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "L'élément n°%(nth)s du tableau n’est pas valide :" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Les tableaux imbriqués doivent être de même longueur." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Correspondances clé/valeur (chaînes ou valeurs nulles)" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "La valeur de « %(key)s » n’est pas une chaîne, ni une valeur nulle." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Impossible de charger les données JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Le contenu saisi doit être un dictionnaire JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Saisissez deux valeurs valides." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Le début de l’intervalle ne peut pas dépasser la fin de l'intervalle." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Saisissez deux nombres entiers." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Saisissez deux nombres." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Saisissez deux dates/heures valides." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Saisissez deux dates valides." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La liste contient %(show_value)d élément, mais elle ne devrait pas en " | ||||
| "contenir plus de %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La liste contient %(show_value)d éléments, mais elle ne devrait pas en " | ||||
| "contenir plus de %(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La liste contient %(show_value)d éléments, mais elle ne devrait pas en " | ||||
| "contenir plus de %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La liste contient %(show_value)d élément, mais elle doit en contenir au " | ||||
| "moins %(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La liste contient %(show_value)d éléments, mais elle doit en contenir au " | ||||
| "moins %(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La liste contient %(show_value)d éléments, mais elle doit en contenir au " | ||||
| "moins %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Certaines clés sont manquantes : %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Certaines clés inconnues ont été fournies : %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "S’assure que la limite supérieure de l’intervalle n’est pas plus grande que " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
| "S’assure que la limite inférieure de l’intervalle n’est pas plus petite que " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,125 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # GunChleoc, 2016-2017 | ||||
| # GunChleoc, 2015 | ||||
| # GunChleoc, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Gaelic, Scottish (http://www.transifex.com/django/django/" | ||||
| "language/gd/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: gd\n" | ||||
| "Plural-Forms: nplurals=4; plural=(n==1 || n==11) ? 0 : (n==2 || n==12) ? 1 : " | ||||
| "(n > 2 && n < 20) ? 2 : 3;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Leudachain PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Cha deach le dearbhadh an nì %(nth)s san arraigh:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Feumaidh an aon fhaid a bhith aig a h-uile arraigh neadaichte." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapaichean de shreangan gu sreangan/luachan null" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Chan eil an luach air %(key)s ’na shreang no null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Cha deach leinn dàta JSON a luchdadh." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Feumaidh an t-ion-chur a bhith 'na fhaclair JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Cuir a-steach dà luach dligheach." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Chan fhaod toiseach na rainse a bith nas motha na deireadh na rainse." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Cuir a-steach dà àireamh shlàn." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Cuir a-steach dà àireamh." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Cuir a-steach dà cheann-là ’s àm dligheach." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Cuir a-steach dà cheann-là dligheach." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " | ||||
| "a bhith oirre." | ||||
| msgstr[1] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " | ||||
| "a bhith oirre." | ||||
| msgstr[2] "" | ||||
| "Tha %(show_value)d nithean air an liosta ach cha bu chòir corr is " | ||||
| "%(limit_value)d a bhith oirre." | ||||
| msgstr[3] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir corr is %(limit_value)d " | ||||
| "a bhith oirre." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " | ||||
| "%(limit_value)d a bhith oirre." | ||||
| msgstr[1] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " | ||||
| "%(limit_value)d a bhith oirre." | ||||
| msgstr[2] "" | ||||
| "Tha %(show_value)d nithean air an liosta ach cha bu chòir nas lugha na " | ||||
| "%(limit_value)d a bhith oirre." | ||||
| msgstr[3] "" | ||||
| "Tha %(show_value)d nì air an liosta ach cha bu chòir nas lugha na " | ||||
| "%(limit_value)d a bhith oirre." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Bha cuid a dh’iuchraichean a dhìth: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Chaidh iuchraichean nach aithne dhuinn a shònrachadh: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Dèan cinnteach gu bheil an rainse seo nas lugha na no co-ionnan ri " | ||||
| "%(limit_value)s air fad." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Dèan cinnteach gu bheil an rainse seo nas motha na no co-ionnan ri " | ||||
| "%(limit_value)s air fad." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,108 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # fasouto <fsoutomoure@gmail.com>, 2017 | ||||
| # X Bello <xbello@gmail.com>, 2023 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: X Bello <xbello@gmail.com>, 2023\n" | ||||
| "Language-Team: Galician (http://www.transifex.com/django/django/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" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensión de PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "O %(nth)s elemento do array non validóu:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Os arrais aniñados teñen que ter a mesma lonxitude." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mapeo de strings a strings/nulos" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "O valor de “%(key)s” non é un string ou nulo." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Non se puderon cargar os datos JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "A entrada ten que ser un diccionario JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Introduza dous valores válidos." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "O comezo do rango non pode superar o fin do rango." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Introduza dous números completos." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Insira dous números." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Insira dúas datas/horas válidas." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Insira dúas datas válidas." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "A lista contén %(show_value)d elemento, non debería conter máis de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "A lista contén %(show_value)d elementos, non debería conter máis de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "A lista contén %(show_value)d elemento, non debería conter menos de " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "A lista contén %(show_value)d elementos, non debería conter menos de " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Faltan algunhas chaves: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Facilitáronse algunhas chaves descoñecidas: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que o límite superior do rango non é maior que %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Asegúrese de que o límite inferior do rango non é menor que %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,111 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Meir Kriheli <mkriheli@gmail.com>, 2015,2017,2019 | ||||
| # אורי רודברג <uri@speedy.net>, 2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Hebrew (http://www.transifex.com/django/django/language/he/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: he\n" | ||||
| "Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n == 2 && n % " | ||||
| "1 == 0) ? 1: (n % 10 == 0 && n % 1 == 0 && n > 10) ? 2 : 3;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "הרחבות PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "פריט %(nth)s במערך לא עבר בדיקת חוקיות: " | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "מערכים מקוננים חייבים להיות באותו האורך." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "מיפוי מחרוזות אל מחרוזות/nulls." | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "הערך של \"%(key)s\" אינו מחרוזת או null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "לא ניתן לטעון מידע JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "הקלט חייב להיות מילון JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "נא להזין שני ערכים חוקיים." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "התחלת טווח אינה יכולה גדולה יותר מסופו." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "נא להזין שני מספרים שלמים." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "נא להזין שני מספרים." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "נא להזין שני תאריך/שעה חוקיים." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "נא להזין שני תאריכים חוקיים." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "הרשימה מכילה פריט %(show_value)d, עליה להכיל לא יותר מ-%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא יותר מ-%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "הרשימה מכילה פריט %(show_value)d, עליה להכיל לא פחות מ-%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." | ||||
| msgstr[3] "" | ||||
| "הרשימה מכילה %(show_value)d פריטים, עליה להכיל לא פחות מ-%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "חלק מהמפתחות חסרים: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "סופקו מספר מפתחות לא ידועים: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "יש לוודא שטווח זה קטן מ או שווה ל-%(limit_value)s בשלמותו." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "יש לוודא שטווח זה גדול מ או שווה ל-%(limit_value)s בשלמותו." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,102 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Filip Cuk <filipcuk2@gmail.com>, 2016 | ||||
| # Mislav Cimperšak <mislav.cimpersak@gmail.com>, 2016 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Croatian (http://www.transifex.com/django/django/language/" | ||||
| "hr/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: hr\n" | ||||
| "Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||||
| "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON podatci neuspješno učitani." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Unesite 2 ispravne vrijednosti." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Unesite dva cijela broja." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Unesite dva broja." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Unesite dva ispravna datuma/vremena." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Unesite dva ispravna datuma." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
| msgstr[2] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
| msgstr[2] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,118 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Michael Wolf <milupo@sorbzilla.de>, 2016-2019,2023 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Michael Wolf <milupo@sorbzilla.de>, 2016-2019,2023\n" | ||||
| "Language-Team: Upper Sorbian (http://www.transifex.com/django/django/" | ||||
| "language/hsb/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: hsb\n" | ||||
| "Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || " | ||||
| "n%100==4 ? 2 : 3);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Rozšěrjenja PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Zapisk %(nth)s w pólnym wariabli njeje so wokrućił:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Zakašćikowane pólne wariable maja samsnu dołhosć." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Konwertowanje znamješkowych rjećazkow do znamješkowych rjećazkow/nulow" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Hódnota \" %(key)s\" znamješkowy rjećazk abo null njeje." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON-daty njedachu so začitać." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Zapodaće dyrbi JSON-słownik być." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Zapodajće dwě płaćiwej hódnoće." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Spočatk wobłuka njesmě kónc wobłuka překročić." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Zapodajće dwě cyłej ličbje." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Zapodajće dwě ličbje." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Zapódajće dwě płaćiwej datowej/časowej podaći." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Zapodajće dwě płaćiwej datowej podaći." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lisćina %(show_value)d element wobsahuje, wona njeměła wjace hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[1] "" | ||||
| "Lisćina %(show_value)d elementaj wobsahuje, wona njeměła wjace hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[2] "" | ||||
| "Lisćina %(show_value)d elementy wobsahuje, wona njeměła wjace hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[3] "" | ||||
| "Lisćina %(show_value)d elementow wobsahuje, wona njeměła wjace hač " | ||||
| "%(limit_value)d wobsahować." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Lisćina %(show_value)d element wobsahuje, wona njeměła mjenje hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[1] "" | ||||
| "Lisćina %(show_value)d elementaj wobsahuje, wona njeměła mjenje hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[2] "" | ||||
| "Lisćina %(show_value)d elementy wobsahuje, wona njeměła mjenje hač " | ||||
| "%(limit_value)d wobsahować." | ||||
| msgstr[3] "" | ||||
| "Lisćina %(show_value)d elementow wobsahuje, wona njeměła mjenje hač " | ||||
| "%(limit_value)d wobsahować." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Někotre kluče faluje: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Někotre njeznate kluče su so podali: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "Zawěsćće, zo hornja hranica wobłuka njeje wjetša hač %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "Zawěsćće, zo delnja hranica wobłuka njeje mjeńša hač %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,109 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Akos Zsolt Hochrein <hoch.akos@gmail.com>, 2018 | ||||
| # András Veres-Szentkirályi, 2016 | ||||
| # Dóra Szendrei <szendrgigi@gmail.com>, 2017 | ||||
| # Istvan Farkas <istvan.farkas@gmail.com>, 2019 | ||||
| # János R, 2017 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Hungarian (http://www.transifex.com/django/django/language/" | ||||
| "hu/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: hu\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL kiterjesztések" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "A tömb %(nth)s-ik eleme érvénytelen:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "A belső tömböknek egyforma hosszúaknak kell lenniük." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "String-string/null leképezés" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "A(z) \"%(key)s\" nem karakterlánc, vagy null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSON adat betöltése sikertelen." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "A bemenetnek JSON szótárnak kell lennie." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Adjon meg két érvényes értéket." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "A tartomány eleje nem lehet nagyobb a tartomány végénél." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Adjon meg két egész számot." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Adjon meg két számot." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Adjon meg két érvényes dátumot/időt." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Adjon meg két érvényes dátumot." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." | ||||
| msgstr[1] "" | ||||
| "A lista %(show_value)d elemet tartalmaz, legfeljebb %(limit_value)d lehetne." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." | ||||
| msgstr[1] "" | ||||
| "A lista %(show_value)d elemet tartalmaz, legalább %(limit_value)d kellene." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Néhány kulcs hiányzik: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Néhány ismeretlen kulcs érkezett: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Bizonyosodjon meg róla, hogy a tartomány egésze kevesebb mint " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Bizonyosodjon meg róla, hogy a tartomány egésze nagyobb mint %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,109 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Armenian (http://www.transifex.com/django/django/language/" | ||||
| "hy/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: hy\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL հավելվածներ" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Ներդրված մասսիվները պետք է ունենան նույն երկարությունը" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Չհաջողվեց բեռնել JSON տվյալները" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Մուտքագրեք երկու վավերական արժեք" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Ինտերվալի սկիզբը չպետք է գերազանցի նրա ավարտը" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Մուտքագրեք երկու ամբողջ թիվ" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Մուտքագրեք երկու թիվ" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Մուտքագրեք երկու ճիշտ ամսաթվեր/ժամանակ" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Մուտքագրեք երկու ճիշտ ամսաթվեր" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " | ||||
| "%(limit_value)d֊ից ոչ ավելի էլեմենտ" | ||||
| msgstr[1] "" | ||||
| "Ցուցակը պարունակում է %(show_value)d էլեմենտները, բայց այն պետք է պարունակի " | ||||
| "%(limit_value)d֊ից ոչ ավելի էլեմենտ" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " | ||||
| "%(limit_value)d֊ից ոչ պակաս էլեմենտ" | ||||
| msgstr[1] "" | ||||
| "Ցուցակը պարունակում է %(show_value)d էլեմենտը, բայց այն պետք է պարունակի " | ||||
| "%(limit_value)d֊ից ոչ պակաս էլեմենտ" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Որոշ բանալիներ պակասում են՝  %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Տրամադրվել են որոշ անհայտ բանալիներ՝  %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Համոզվեք, որ տիրույթին պատկանող արժեքները փոքր են, կամ հավասար " | ||||
| "%(limit_value)s֊ի" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Համոզվեք, որ տիրույթին պատկանող արժեքները մեծ են, կամ հավասար " | ||||
| "%(limit_value)s֊ի" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,98 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Martijn Dekker <mcdutchie@hotmail.com>, 2016 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Interlingua (http://www.transifex.com/django/django/language/" | ||||
| "ia/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ia\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Extensiones PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Arrays annidate debe haber le mesme longitude." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,109 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Fery Setiawan <gembelweb@gmail.com>, 2015-2018 | ||||
| # M Asep Indrayana <me@drayanaindra.com>, 2015 | ||||
| # oon arfiandwi <oon.arfiandwi@gmail.com>, 2016 | ||||
| # rodin <romihardiyanto@gmail.com>, 2016 | ||||
| # sage <laymonage@gmail.com>, 2019 | ||||
| # Sutrisno Efendi <kangfend@gmail.com>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Indonesian (http://www.transifex.com/django/django/language/" | ||||
| "id/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: id\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Ekstensi PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Butir %(nth)s dalam larik tidak tervalidasi:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Array bersaran harus mempunyai panjang yang sama." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Pemetaan dari string ke string/null" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Nilai dari “%(key)s” bukan sebuah string atau null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Tidak dapat memuat data JSON." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Masukan harus kamus JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Masukkan dua nilai yang valid." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Awal jangkauan harus tidak melebihi akhir jangkauan." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Masukkan dua buah bilangan bulat." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Masukkan dua buah bilangan." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Masukan dua buah tanggal/waktu." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Masukan dua buah tanggal yang benar." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Daftar mengandung %(show_value)d butir, seharusnya mengandung tidak lebih " | ||||
| "dari %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Daftar mengandung%(show_value)d butir, seharusnya mengandung tidak kurang " | ||||
| "dari %(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Beberapa kunci hilang: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Beberapa kunci yang tidak dikenali diberikan: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Pastikan bahwa jangkauan ini sepenuhnya kurang dari atau sama dengan " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Pastikan bahwa jangkauan ini sepenuhnya lebih dari atau sama dengan " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,108 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Thordur Sigurdsson <thordur@ja.is>, 2016-2019 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Icelandic (http://www.transifex.com/django/django/language/" | ||||
| "is/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: is\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n % 10 != 1 || n % 100 == 11);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL viðbætur" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "Hlutur %(nth)s í listanum er ógildur:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Faldaðir (nested) listar verða að vera af sömu lengd." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Möppun strengja í strengi/null" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Gildið á \"%(key)s\" er ekki strengur eða null." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Gat ekki hlaðið inn JSON gögnum." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "Inntak verður að vera JSON hlutur (dictionary)." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Sláðu inn tvö gild gildi." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "Upphaf bils má ekki ná yfir endalok bils." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Sláðu inn tvær heilar tölur." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Sláðu inn tvær tölur." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Sláðu inn tvær gildar dagsetningar ásamt tíma." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Sláðu inn tvær gildar dagsetningar." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listinn inniheldur %(show_value)d hlut, en má ekki innihalda fleiri en " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Listinn inniheldur %(show_value)d hluti, en má ekki innihalda fleiri en " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "Listinn inniheldur %(show_value)d hlut, en má ekki innihalda færri en " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "Listinn inniheldur %(show_value)d hluti, en má ekki innihalda færri en " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Þessa lykla vantar: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Þessir óþekktu lyklar fundust: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
| "Gakktu úr skugga um að þetta bil sé minna eða jafnt og %(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
| "Gakktu úr skugga um að þetta bil sé stærra eða jafnt og %(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,122 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # 0d21a39e384d88c2313b89b5042c04cb, 2017 | ||||
| # Flavio Curella <flavio.curella@gmail.com>, 2016 | ||||
| # Mirco Grillo <mirco.grillomg@gmail.com>, 2018,2020 | ||||
| # palmux <palmux@gmail.com>, 2015 | ||||
| # Paolo Melchiorre <paolo@melchiorre.org>, 2023 | ||||
| # Mattia Procopio <promat85@gmail.com>, 2015 | ||||
| # Stefano Brentegani <sbrentegani@gmail.com>, 2015-2016 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Paolo Melchiorre <paolo@melchiorre.org>, 2023\n" | ||||
| "Language-Team: Italian (http://www.transifex.com/django/django/language/" | ||||
| "it/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: it\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n != 1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "Estensioni per PostgreSQL" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "L'elemento %(nth)s dell'array non è stato convalidato:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Gli array annidati devono avere la stessa lunghezza." | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "Mappa di stringhe a stringhe/null" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "Il valore di \"%(key)s\" non è una stringa o nullo." | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "Caricamento dati JSON fallito." | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "L'input deve essere un dizionario JSON." | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "Inserisci due valori validi." | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
| "Il valore iniziale dell'intervallo non può essere superiore al valore finale." | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "Inserisci due numeri interi." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "Inserisci due numeri." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "Inserisci due valori data/ora validi." | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "Inserisci due date valide." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d oggetto, non dovrebbe contenerne più di " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d elementi, e dovrebbe contenerne al massimo " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La lista contiene %(show_value)d elementi, e dovrebbe contenerne al massimo " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "La lista contiene %(show_value)d oggetto, non dovrebbe contenerne meno di " | ||||
| "%(limit_value)d." | ||||
| msgstr[1] "" | ||||
| "La lista contiene %(show_value)d oggetti, e dovrebbe contenerne almeno " | ||||
| "%(limit_value)d." | ||||
| msgstr[2] "" | ||||
| "La lista contiene %(show_value)d oggetti, e dovrebbe contenerne almeno " | ||||
| "%(limit_value)d." | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "Alcune chiavi risultano mancanti: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "Sono state fornite alcune chiavi sconosciute: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Assicurarsi che il limite superiore dell'intervallo non sia maggiore di " | ||||
| "%(limit_value)s." | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "" | ||||
| "Assicurarsi che il limite inferiore dell'intervallo non sia inferiore a " | ||||
| "%(limit_value)s." | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,100 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Shinya Okano <tokibito@gmail.com>, 2015-2018,2023 | ||||
| # Takuya N <takninnovationresearch@gmail.com>, 2020 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2023-01-17 02:13-0600\n" | ||||
| "PO-Revision-Date: 2023-04-19 09:22+0000\n" | ||||
| "Last-Translator: Shinya Okano <tokibito@gmail.com>, 2015-2018,2023\n" | ||||
| "Language-Team: Japanese (http://www.transifex.com/django/django/language/" | ||||
| "ja/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ja\n" | ||||
| "Plural-Forms: nplurals=1; plural=0;\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL拡張" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "配列内のアイテム %(nth)s は検証できませんでした:" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "ネストした配列は同じ長さにしなければなりません。" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "文字列と文字列/NULLのマップ" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "“%(key)s” の値は文字列または NULL ではありません。" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "JSONデータを読み込めませんでした。" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "JSON辞書を入力しなければなりません。" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "2つの値を正しく入力してください。" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "範囲の開始は、範囲の終わりを超えてはなりません。" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "2つの整数を入力してください。" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "2つの数値を入力してください。" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "2つの日付/時間を入力してください。" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "2つの日付を入力してください。" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" | ||||
| "含められません。" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| "リストには%(show_value)d個のアイテムが含まれますが、%(limit_value)d個までしか" | ||||
| "含められません。" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "いくつかのキーが欠落しています: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "いくつかの不明なキーがあります: %(keys)s" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the upper bound of the range is not greater than %(limit_value)s." | ||||
| msgstr "範囲の上限が%(limit_value)sを超えないようにしてください。" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that the lower bound of the range is not less than %(limit_value)s." | ||||
| msgstr "範囲の下限が%(limit_value)sより小さくならないようにしてください。" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,98 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # André Bouatchidzé <a@anbz.net>, 2015 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Georgian (http://www.transifex.com/django/django/language/" | ||||
| "ka/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: ka\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL-ის გაფართოებები" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "შეიყვანეთ ორი მთელი რიცხვი." | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "შეიყვანეთ ორი რიცხვი." | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
										
											Binary file not shown.
										
									
								
							| @ -0,0 +1,97 @@ | ||||
| # This file is distributed under the same license as the Django package. | ||||
| # | ||||
| # Translators: | ||||
| # Leo Trubach <leotrubach@gmail.com>, 2017 | ||||
| msgid "" | ||||
| msgstr "" | ||||
| "Project-Id-Version: django\n" | ||||
| "Report-Msgid-Bugs-To: \n" | ||||
| "POT-Creation-Date: 2020-05-11 20:56+0200\n" | ||||
| "PO-Revision-Date: 2020-05-12 20:01+0000\n" | ||||
| "Last-Translator: Transifex Bot <>\n" | ||||
| "Language-Team: Kazakh (http://www.transifex.com/django/django/language/kk/)\n" | ||||
| "MIME-Version: 1.0\n" | ||||
| "Content-Type: text/plain; charset=UTF-8\n" | ||||
| "Content-Transfer-Encoding: 8bit\n" | ||||
| "Language: kk\n" | ||||
| "Plural-Forms: nplurals=2; plural=(n!=1);\n" | ||||
|  | ||||
| msgid "PostgreSQL extensions" | ||||
| msgstr "PostgreSQL  кеңейтулері" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Item %(nth)s in the array did not validate:" | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Nested arrays must have the same length." | ||||
| msgstr "Бір-бірін ішіне салынған ауқымдардың ұзындықтары бірдей болу керек" | ||||
|  | ||||
| msgid "Map of strings to strings/nulls" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "The value of “%(key)s” is not a string or null." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Could not load JSON data." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Input must be a JSON dictionary." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid values." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "The start of the range must not exceed the end of the range." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two whole numbers." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two numbers." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid date/times." | ||||
| msgstr "" | ||||
|  | ||||
| msgid "Enter two valid dates." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no more than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "List contains %(show_value)d item, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgid_plural "" | ||||
| "List contains %(show_value)d items, it should contain no fewer than " | ||||
| "%(limit_value)d." | ||||
| msgstr[0] "" | ||||
| msgstr[1] "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some keys were missing: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "Some unknown keys were provided: %(keys)s" | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely less than or equal to %(limit_value)s." | ||||
| msgstr "" | ||||
|  | ||||
| #, python-format | ||||
| msgid "" | ||||
| "Ensure that this range is completely greater than or equal to " | ||||
| "%(limit_value)s." | ||||
| msgstr "" | ||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user