mirror of
https://gitlab.com/bramw/baserow.git
synced 2025-04-11 07:51:20 +00:00
Resolve "Audit log"
This commit is contained in:
parent
0379894d1d
commit
bab7cc44a1
192 changed files with 13407 additions and 737 deletions
.env.example
backend/src/baserow
api
config/settings
contrib/database
action
api/views
fields
file_import
locale
cs/LC_MESSAGES
de/LC_MESSAGES
en/LC_MESSAGES
es/LC_MESSAGES
fr/LC_MESSAGES
it/LC_MESSAGES
mr/LC_MESSAGES
nb_NO/LC_MESSAGES
nl/LC_MESSAGES
pl/LC_MESSAGES
pt_BR/LC_MESSAGES
ru/LC_MESSAGES
zh_Hans/LC_MESSAGES
migrations
rows
table
views
core
action
actions.pyapps.pyjobs
locale
cs/LC_MESSAGES
de/LC_MESSAGES
en/LC_MESSAGES
es/LC_MESSAGES
fr/LC_MESSAGES
it/LC_MESSAGES
mr/LC_MESSAGES
nb_NO/LC_MESSAGES
nl/LC_MESSAGES
pl/LC_MESSAGES
pt_BR/LC_MESSAGES
ru/LC_MESSAGES
zh_Hans/LC_MESSAGES
migrations
models.pyregistry.pysnapshots
user
locale
|
@ -116,3 +116,6 @@ DATABASE_NAME=baserow
|
|||
|
||||
# BASEROW_ACCESS_TOKEN_LIFETIME_MINUTES=
|
||||
# BASEROW_REFRESH_TOKEN_LIFETIME_HOURS=
|
||||
|
||||
# BASEROW_ENTERPRISE_AUDIT_LOG_CLEANUP_INTERVAL_MINUTES=
|
||||
# BASEROW_ENTERPRISE_AUDIT_LOG_RETENTION_DAYS=
|
||||
|
|
|
@ -29,3 +29,8 @@ ERROR_INVALID_SORT_ATTRIBUTE = (
|
|||
HTTP_400_BAD_REQUEST,
|
||||
"Invalid attribute name provided to sort by.",
|
||||
)
|
||||
ERROR_INVALID_FILTER_ATTRIBUTE = (
|
||||
"ERROR_INVALID_FILTER_ATTRIBUTE",
|
||||
HTTP_400_BAD_REQUEST,
|
||||
"Invalid attribute name provided to filter by.",
|
||||
)
|
||||
|
|
|
@ -55,3 +55,9 @@ class InvalidSortAttributeException(Exception):
|
|||
"""
|
||||
Raised when a sort is requested for an invalid or non-existent field.
|
||||
"""
|
||||
|
||||
|
||||
class InvalidFilterAttributeException(Exception):
|
||||
"""
|
||||
Raised when a filter is requested for an invalid or non-existent field.
|
||||
"""
|
||||
|
|
55
backend/src/baserow/api/mixins.py
Normal file → Executable file
55
backend/src/baserow/api/mixins.py
Normal file → Executable file
|
@ -1,8 +1,10 @@
|
|||
import json
|
||||
from typing import Dict, List, Union
|
||||
|
||||
from django.db.models import Q, QuerySet
|
||||
from django.db.models import Q, QuerySet, Value
|
||||
|
||||
from baserow.api.exceptions import (
|
||||
InvalidFilterAttributeException,
|
||||
InvalidSortAttributeException,
|
||||
InvalidSortDirectionException,
|
||||
UnknownFieldProvided,
|
||||
|
@ -92,7 +94,7 @@ class SearchableViewMixin:
|
|||
q = Q()
|
||||
|
||||
for search_field in self.search_fields:
|
||||
q.add(Q(**{f"{search_field}__icontains": search}), Q.OR)
|
||||
q.add(Q(**{f"{search_field}__icontains": Value(search)}), Q.OR)
|
||||
|
||||
return queryset.filter(q)
|
||||
|
||||
|
@ -102,6 +104,7 @@ class SortableViewMixin:
|
|||
# It's a mapping from the field name in the request to teh field name in the
|
||||
# database.
|
||||
sort_field_mapping: Dict[str, str] = {}
|
||||
default_order_by: str = "id"
|
||||
|
||||
def apply_sorts_or_default_sort(
|
||||
self, sorts: Union[str, None], queryset: QuerySet
|
||||
|
@ -121,7 +124,7 @@ class SortableViewMixin:
|
|||
"""
|
||||
|
||||
if sorts is None:
|
||||
return queryset.order_by("id")
|
||||
return queryset.order_by(self.default_order_by)
|
||||
|
||||
parsed_django_order_bys = []
|
||||
already_seen_sorts = set()
|
||||
|
@ -151,3 +154,49 @@ class SortableViewMixin:
|
|||
parsed_django_order_bys.append(f"{direction}{attribute}")
|
||||
|
||||
return queryset.order_by(*parsed_django_order_bys)
|
||||
|
||||
|
||||
class FilterableViewMixin:
|
||||
filters_field_mapping: Dict[str, str] = {}
|
||||
|
||||
def parse_filters(self, unparsed_filters: str) -> Dict[str, str]:
|
||||
"""
|
||||
Parses the filters query string into a dictionary. The filters query string
|
||||
is JSON encoded dictionary. The key is the field name and
|
||||
the value is the field value that the field should have.
|
||||
|
||||
:param unparsed_filters: The filters query string.
|
||||
:return: The filters query string parsed into a dictionary.
|
||||
"""
|
||||
|
||||
if unparsed_filters:
|
||||
try:
|
||||
return json.loads(unparsed_filters)
|
||||
except json.JSONDecodeError:
|
||||
raise InvalidFilterAttributeException()
|
||||
else:
|
||||
return {}
|
||||
|
||||
def apply_filters(self, filters: Dict[str, str], queryset: QuerySet) -> QuerySet:
|
||||
"""
|
||||
Applies the provided filters to the provided query. If the filters are
|
||||
provided then an `exact` lookup will be done for each field in the
|
||||
filters_fields property. One of the fields has to match the query.
|
||||
|
||||
:param filters: The filters query.
|
||||
:param queryset: The queryset where the filters query must be applied to.
|
||||
:return: The queryset filtering the results by the filters query.
|
||||
"""
|
||||
|
||||
if not filters:
|
||||
return queryset
|
||||
|
||||
q = Q()
|
||||
|
||||
for key, value in filters.items():
|
||||
if key in self.filters_field_mapping:
|
||||
q.add(Q(**{f"{self.filters_field_mapping[key]}": Value(value)}), Q.AND)
|
||||
else:
|
||||
raise InvalidFilterAttributeException()
|
||||
|
||||
return queryset.filter(q)
|
||||
|
|
|
@ -91,6 +91,18 @@ def set_user_websocket_id(user, request):
|
|||
user.web_socket_id = request.headers.get(settings.WEBSOCKET_ID_HEADER)
|
||||
|
||||
|
||||
def set_user_remote_addr_ip_from_request(user, request):
|
||||
set_user_remote_addr_ip(user, request.META.get("REMOTE_ADDR"))
|
||||
|
||||
|
||||
def set_user_remote_addr_ip(user, ip_address):
|
||||
user.remote_addr_ip = ip_address
|
||||
|
||||
|
||||
def get_user_remote_addr_ip(user):
|
||||
return getattr(user, "remote_addr_ip", None)
|
||||
|
||||
|
||||
def set_user_session_data_from_request(user, request):
|
||||
"""
|
||||
Sets the user data from the request. This includes the websocket id, the
|
||||
|
@ -103,3 +115,4 @@ def set_user_session_data_from_request(user, request):
|
|||
set_user_websocket_id(user, request)
|
||||
set_untrusted_client_session_id_from_request_or_raise_if_invalid(user, request)
|
||||
set_client_undo_redo_action_group_id_from_request_or_raise_if_invalid(user, request)
|
||||
set_user_remote_addr_ip_from_request(user, request)
|
||||
|
|
|
@ -14,7 +14,7 @@ urlpatterns = [
|
|||
re_path(
|
||||
r"(?P<snapshot_id>[0-9]+)/$",
|
||||
SnapshotView.as_view(),
|
||||
name="detail",
|
||||
name="item",
|
||||
),
|
||||
re_path(
|
||||
r"(?P<snapshot_id>[0-9]+)/restore/$",
|
||||
|
|
|
@ -4,6 +4,7 @@ from drf_spectacular.openapi import OpenApiParameter, OpenApiTypes
|
|||
from drf_spectacular.utils import extend_schema
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.status import HTTP_202_ACCEPTED
|
||||
from rest_framework.views import APIView
|
||||
|
||||
from baserow.api.applications.errors import (
|
||||
|
@ -23,12 +24,14 @@ from baserow.api.snapshots.errors import (
|
|||
ERROR_SNAPSHOT_NAME_NOT_UNIQUE,
|
||||
ERROR_SNAPSHOT_OPERATION_LIMIT_EXCEEDED,
|
||||
)
|
||||
from baserow.core.action.registries import action_type_registry
|
||||
from baserow.core.exceptions import (
|
||||
ApplicationDoesNotExist,
|
||||
ApplicationOperationNotSupported,
|
||||
UserNotInGroup,
|
||||
)
|
||||
from baserow.core.jobs.exceptions import MaxJobCountExceeded
|
||||
from baserow.core.snapshots.actions import DeleteSnapshotActionType
|
||||
from baserow.core.snapshots.exceptions import (
|
||||
MaximumSnapshotsReached,
|
||||
SnapshotDoesNotExist,
|
||||
|
@ -99,7 +102,7 @@ class SnapshotsView(APIView):
|
|||
),
|
||||
request=SnapshotSerializer,
|
||||
responses={
|
||||
200: JobSerializer,
|
||||
202: JobSerializer,
|
||||
400: get_error_schema(
|
||||
[
|
||||
"ERROR_USER_NOT_IN_GROUP",
|
||||
|
@ -134,7 +137,7 @@ class SnapshotsView(APIView):
|
|||
handler = SnapshotHandler()
|
||||
snapshot_created = handler.create(application_id, request.user, data["name"])
|
||||
serializer = JobSerializer(snapshot_created["job"])
|
||||
return Response(serializer.data)
|
||||
return Response(serializer.data, status=HTTP_202_ACCEPTED)
|
||||
|
||||
|
||||
class RestoreSnapshotView(APIView):
|
||||
|
@ -248,6 +251,7 @@ class SnapshotView(APIView):
|
|||
Deletes a given application snapshot.
|
||||
"""
|
||||
|
||||
handler = SnapshotHandler()
|
||||
handler.delete(snapshot_id, request.user)
|
||||
action_type_registry.get(DeleteSnapshotActionType.type).do(
|
||||
request.user, snapshot_id
|
||||
)
|
||||
return Response(status=204)
|
||||
|
|
|
@ -35,7 +35,7 @@ from baserow.api.schemas import get_error_schema
|
|||
from baserow.api.sessions import get_untrusted_client_session_id
|
||||
from baserow.api.user.registries import user_data_registry
|
||||
from baserow.core.action.handler import ActionHandler
|
||||
from baserow.core.action.registries import ActionScopeStr
|
||||
from baserow.core.action.registries import ActionScopeStr, action_type_registry
|
||||
from baserow.core.auth_provider.exceptions import AuthProviderDisabled
|
||||
from baserow.core.auth_provider.handler import PasswordProviderHandler
|
||||
from baserow.core.exceptions import (
|
||||
|
@ -45,6 +45,11 @@ from baserow.core.exceptions import (
|
|||
LockConflict,
|
||||
)
|
||||
from baserow.core.models import GroupInvitation, Template
|
||||
from baserow.core.user.actions import (
|
||||
CreateUserActionType,
|
||||
ScheduleUserDeletionActionType,
|
||||
UpdateUserActionType,
|
||||
)
|
||||
from baserow.core.user.exceptions import (
|
||||
DeactivatedUserException,
|
||||
DisabledSignupError,
|
||||
|
@ -222,7 +227,7 @@ class UserView(APIView):
|
|||
else None
|
||||
)
|
||||
|
||||
user = UserHandler().create_user(
|
||||
user = action_type_registry.get(CreateUserActionType.type).do(
|
||||
name=data["name"],
|
||||
email=data["email"],
|
||||
password=data["password"],
|
||||
|
@ -407,9 +412,8 @@ class AccountView(APIView):
|
|||
def patch(self, request, data):
|
||||
"""Updates editable user account information."""
|
||||
|
||||
user = UserHandler().update_user(
|
||||
request.user,
|
||||
**data,
|
||||
user = action_type_registry.get(UpdateUserActionType.type).do(
|
||||
request.user, **data
|
||||
)
|
||||
return Response(AccountSerializer(user).data)
|
||||
|
||||
|
@ -443,7 +447,7 @@ class ScheduleAccountDeletionView(APIView):
|
|||
def post(self, request):
|
||||
"""Schedules user account deletion."""
|
||||
|
||||
UserHandler().schedule_user_deletion(request.user)
|
||||
action_type_registry.get(ScheduleUserDeletionActionType.type).do(request.user)
|
||||
return Response(status=204)
|
||||
|
||||
|
||||
|
|
|
@ -285,6 +285,7 @@ def get_serializer_class(
|
|||
base_class=None,
|
||||
meta_ref_name=None,
|
||||
required_fields=None,
|
||||
base_mixins=None,
|
||||
):
|
||||
"""
|
||||
Generates a model serializer based on the provided field names and field overrides.
|
||||
|
@ -304,6 +305,8 @@ def get_serializer_class(
|
|||
:param required_fields: List of field names that should be present even when
|
||||
performing partial validation.
|
||||
:type required_fields: list[str]
|
||||
:param mixins: An optional list of mixins that must be added to the serializer.
|
||||
:type base_mixins: list[serializers.Serializer]
|
||||
:return: The generated model serializer containing the provided fields.
|
||||
:rtype: ModelSerializer
|
||||
"""
|
||||
|
@ -349,7 +352,15 @@ def get_serializer_class(
|
|||
return value
|
||||
|
||||
attrs["validate"] = validate
|
||||
return type(str(model_.__name__ + "Serializer"), (base_class,), attrs)
|
||||
mixins = base_mixins or []
|
||||
return type(
|
||||
str(model_.__name__ + "Serializer"),
|
||||
(
|
||||
*mixins,
|
||||
base_class,
|
||||
),
|
||||
attrs,
|
||||
)
|
||||
|
||||
|
||||
class MappingSerializer:
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
import datetime
|
||||
import importlib
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
from decimal import Decimal
|
||||
|
@ -27,6 +28,7 @@ else:
|
|||
BASEROW_PLUGIN_FOLDERS = []
|
||||
|
||||
BASEROW_BACKEND_PLUGIN_NAMES = [d.name for d in BASEROW_PLUGIN_FOLDERS]
|
||||
BASEROW_BUILT_IN_PLUGINS = ["baserow_premium", "baserow_enterprise"]
|
||||
|
||||
# SECURITY WARNING: keep the secret key used in production secret!
|
||||
if "SECRET_KEY" in os.environ:
|
||||
|
@ -59,8 +61,7 @@ INSTALLED_APPS = [
|
|||
"baserow.api",
|
||||
"baserow.ws",
|
||||
"baserow.contrib.database",
|
||||
"baserow_premium",
|
||||
"baserow_enterprise",
|
||||
*BASEROW_BUILT_IN_PLUGINS,
|
||||
]
|
||||
|
||||
BASEROW_FULL_HEALTHCHECKS = os.getenv("BASEROW_FULL_HEALTHCHECKS", None)
|
||||
|
@ -763,10 +764,10 @@ class AttrDict(dict):
|
|||
return super().__getitem__(item)
|
||||
|
||||
def __setattr__(self, item, value):
|
||||
return super().__setitem__(item, value)
|
||||
globals()[item] = value
|
||||
|
||||
|
||||
for plugin in BASEROW_BACKEND_PLUGIN_NAMES:
|
||||
for plugin in [*BASEROW_BUILT_IN_PLUGINS, *BASEROW_BACKEND_PLUGIN_NAMES]:
|
||||
try:
|
||||
mod = importlib.import_module(plugin + ".config.settings.settings")
|
||||
# The plugin should have a setup function which accepts a 'settings' object.
|
||||
|
@ -774,4 +775,5 @@ for plugin in BASEROW_BACKEND_PLUGIN_NAMES:
|
|||
# plugin can access the Django settings and modify them prior to startup.
|
||||
result = mod.setup(AttrDict(vars()))
|
||||
except ImportError:
|
||||
pass
|
||||
logger = logging.getLogger(__name__)
|
||||
logger.warning("Could not import %s", plugin)
|
||||
|
|
17
backend/src/baserow/contrib/database/action/scopes.py
Normal file → Executable file
17
backend/src/baserow/contrib/database/action/scopes.py
Normal file → Executable file
|
@ -1,9 +1,26 @@
|
|||
from typing import Optional, cast
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionScopeType
|
||||
|
||||
DATABASE_ACTION_CONTEXT = _('in database "%(database_name)s" (%(database_id)s).')
|
||||
|
||||
|
||||
TABLE_ACTION_CONTEXT = _(
|
||||
'in table "%(table_name)s" (%(table_id)s) '
|
||||
'of database "%(database_name)s" (%(database_id)s).'
|
||||
)
|
||||
|
||||
|
||||
VIEW_ACTION_CONTEXT = _(
|
||||
'in view "%(view_name)s" (%(view_id)s) '
|
||||
'of table "%(table_name)s" (%(table_id)s) '
|
||||
'in database "%(database_name)s" (%(database_id)s).'
|
||||
)
|
||||
|
||||
|
||||
class TableActionScopeType(ActionScopeType):
|
||||
type = "table"
|
||||
|
|
|
@ -329,25 +329,26 @@ class CreateViewSerializer(serializers.ModelSerializer):
|
|||
|
||||
|
||||
class UpdateViewSerializer(serializers.ModelSerializer):
|
||||
def _update_public_view_password(self, new_public_view_password):
|
||||
def _make_password(self, plain_password: str):
|
||||
"""
|
||||
An empty string disables password protection.
|
||||
A non-empty string will be encrypted and used to check user authorization.
|
||||
|
||||
:param plain_password: The password to encrypt.
|
||||
:return: The encrypted password or "" if disabled.
|
||||
"""
|
||||
|
||||
if new_public_view_password:
|
||||
return View.make_password(new_public_view_password)
|
||||
else:
|
||||
return ""
|
||||
return View.make_password(plain_password) if plain_password else ""
|
||||
|
||||
def to_internal_value(self, data):
|
||||
public_view_password = data.pop("public_view_password", None)
|
||||
updated_view = super().to_internal_value(data)
|
||||
if public_view_password is not None:
|
||||
updated_view["public_view_password"] = self._update_public_view_password(
|
||||
public_view_password
|
||||
)
|
||||
return updated_view
|
||||
plain_password = data.get("public_view_password")
|
||||
if plain_password is not None:
|
||||
data = {
|
||||
**data,
|
||||
"public_view_password": self._make_password(plain_password),
|
||||
}
|
||||
|
||||
return super().to_internal_value(data)
|
||||
|
||||
class Meta:
|
||||
ref_name = "view_update"
|
||||
|
|
|
@ -608,11 +608,7 @@ class DuplicateViewView(APIView):
|
|||
200: DiscriminatorCustomFieldsMappingSerializer(
|
||||
view_type_registry, ViewSerializer
|
||||
),
|
||||
400: get_error_schema(
|
||||
[
|
||||
"ERROR_USER_NOT_IN_GROUP",
|
||||
]
|
||||
),
|
||||
400: get_error_schema(["ERROR_USER_NOT_IN_GROUP"]),
|
||||
404: get_error_schema(["ERROR_VIEW_DOES_NOT_EXIST"]),
|
||||
},
|
||||
)
|
||||
|
|
180
backend/src/baserow/contrib/database/fields/actions.py
Normal file → Executable file
180
backend/src/baserow/contrib/database/fields/actions.py
Normal file → Executable file
|
@ -1,9 +1,15 @@
|
|||
import dataclasses
|
||||
from copy import deepcopy
|
||||
from typing import Any, Dict, List, Optional, Set, Tuple, Union
|
||||
from uuid import uuid4
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.contrib.database.action.scopes import (
|
||||
TABLE_ACTION_CONTEXT,
|
||||
TableActionScopeType,
|
||||
)
|
||||
from baserow.contrib.database.fields.backup_handler import (
|
||||
BackupData,
|
||||
FieldDataBackupHandler,
|
||||
|
@ -12,28 +18,45 @@ from baserow.contrib.database.fields.handler import FieldHandler
|
|||
from baserow.contrib.database.fields.models import Field, SpecificFieldForUpdate
|
||||
from baserow.contrib.database.fields.registries import field_type_registry
|
||||
from baserow.contrib.database.table.models import Table
|
||||
from baserow.contrib.database.table.scopes import TableActionScopeType
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionType
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionTypeDescription,
|
||||
UndoableActionCustomCleanupMixin,
|
||||
UndoableActionType,
|
||||
)
|
||||
from baserow.core.trash.handler import TrashHandler
|
||||
from baserow.core.utils import ChildProgressBuilder
|
||||
|
||||
|
||||
class UpdateFieldActionType(ActionType):
|
||||
class UpdateFieldActionType(UndoableActionCustomCleanupMixin, UndoableActionType):
|
||||
type = "update_field"
|
||||
description = ActionTypeDescription(
|
||||
_("Update field"),
|
||||
_('Field "%(field_name)s" (%(field_id)s) updated'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
field_id: int
|
||||
field_name: str
|
||||
field_type: str
|
||||
|
||||
# We also need to persist the actual name of the database table in-case the
|
||||
# field itself is perm deleted by the time we clean up we can still find the
|
||||
# table and delete the column if need be.
|
||||
database_table_name: str
|
||||
|
||||
previous_field_type: str
|
||||
previous_field_params: Dict[str, Any]
|
||||
original_field_type: str
|
||||
original_field_params: Dict[str, Any]
|
||||
|
||||
backup_data: Optional[Dict[str, Any]]
|
||||
backup_uid: Optional[str] = None
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -62,34 +85,36 @@ class UpdateFieldActionType(ActionType):
|
|||
from_field_type_name = from_field_type.type
|
||||
to_field_type_name = new_type_name or from_field_type_name
|
||||
|
||||
backup_uuid = str(uuid4()).replace("-", "")
|
||||
original_exported_values = cls._get_prepared_field_attrs(
|
||||
field, kwargs, to_field_type_name
|
||||
)
|
||||
|
||||
# We initially create the action with blank params so we have an action id
|
||||
# to use when naming a possible backup field/table.
|
||||
action = cls.register_action(user, {}, cls.scope(field.table_id))
|
||||
|
||||
optional_backup_data = cls._backup_field_if_required(
|
||||
field, kwargs, action, to_field_type_name, False
|
||||
field, kwargs, to_field_type_name, backup_uuid
|
||||
)
|
||||
|
||||
field, updated_fields = FieldHandler().update_field(
|
||||
user,
|
||||
field,
|
||||
new_type_name,
|
||||
return_updated_fields=True,
|
||||
**kwargs,
|
||||
user, field, new_type_name, return_updated_fields=True, **kwargs
|
||||
)
|
||||
|
||||
action.params = cls.Params(
|
||||
field_id=field.id,
|
||||
table = field.table
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
field.id,
|
||||
field.name,
|
||||
to_field_type_name,
|
||||
database_table_name=field.table.get_database_table_name(),
|
||||
previous_field_type=from_field_type_name,
|
||||
previous_field_params=original_exported_values,
|
||||
original_field_type=from_field_type_name,
|
||||
original_field_params=original_exported_values,
|
||||
backup_data=optional_backup_data,
|
||||
backup_uid=backup_uuid,
|
||||
)
|
||||
action.save()
|
||||
group = table.database.group
|
||||
cls.register_action(user, params, cls.scope(table.id), group)
|
||||
|
||||
return field, updated_fields
|
||||
|
||||
|
@ -122,18 +147,18 @@ class UpdateFieldActionType(ActionType):
|
|||
|
||||
@classmethod
|
||||
def clean_up_any_extra_action_data(cls, action_being_cleaned_up: Action):
|
||||
params = cls.Params(**action_being_cleaned_up.params)
|
||||
if params.backup_data is not None:
|
||||
FieldDataBackupHandler.clean_up_backup_data(params.backup_data)
|
||||
backup_data = action_being_cleaned_up.params.get("backup_data")
|
||||
if backup_data is not None:
|
||||
FieldDataBackupHandler.clean_up_backup_data(backup_data)
|
||||
|
||||
@classmethod
|
||||
def _backup_field_if_required(
|
||||
cls,
|
||||
original_field: Field,
|
||||
allowed_new_field_attrs: Dict[str, Any],
|
||||
action: Action,
|
||||
to_field_type_name: str,
|
||||
for_undo: bool,
|
||||
backup_uuid: str,
|
||||
for_undo: bool = False,
|
||||
) -> Optional[BackupData]:
|
||||
"""
|
||||
Performs a backup if needed and returns a dictionary of backup data which can
|
||||
|
@ -147,7 +172,7 @@ class UpdateFieldActionType(ActionType):
|
|||
backup_data = FieldDataBackupHandler.backup_field_data(
|
||||
original_field,
|
||||
identifier_to_backup_into=cls._get_backup_identifier(
|
||||
action, original_field.id, for_undo=for_undo
|
||||
original_field.id, backup_uuid, for_undo=for_undo
|
||||
),
|
||||
)
|
||||
else:
|
||||
|
@ -218,14 +243,14 @@ class UpdateFieldActionType(ActionType):
|
|||
|
||||
@classmethod
|
||||
def _get_backup_identifier(
|
||||
cls, action: Action, field_id: int, for_undo: bool
|
||||
cls, field_id: int, backup_uuid: str, for_undo: bool
|
||||
) -> str:
|
||||
"""
|
||||
Returns a column/table name unique to this action and field which can be
|
||||
used to safely store backup data in the database.
|
||||
"""
|
||||
|
||||
base_name = f"field_{field_id}_backup_{action.id}"
|
||||
base_name = f"field_{field_id}_backup_{backup_uuid}"
|
||||
if for_undo:
|
||||
# When undoing we need to backup into a different column/table so we
|
||||
# don't accidentally overwrite the data we are about to restore using.
|
||||
|
@ -241,21 +266,22 @@ class UpdateFieldActionType(ActionType):
|
|||
params: Params,
|
||||
for_undo: bool,
|
||||
):
|
||||
new_field_attributes = deepcopy(params.previous_field_params)
|
||||
to_field_type_name = params.previous_field_type
|
||||
new_field_attributes = deepcopy(params.original_field_params)
|
||||
to_field_type_name = params.original_field_type
|
||||
|
||||
handler = FieldHandler()
|
||||
field = handler.get_specific_field_for_update(params.field_id)
|
||||
|
||||
updated_field_attrs = set(new_field_attributes.keys())
|
||||
previous_field_params = cls._get_prepared_field_attrs(
|
||||
original_field_params = cls._get_prepared_field_attrs(
|
||||
field, updated_field_attrs, to_field_type_name
|
||||
)
|
||||
from_field_type = field_type_registry.get_by_model(field)
|
||||
from_field_type_name = from_field_type.type
|
||||
|
||||
backup_uid = params.backup_uid or action.id
|
||||
optional_backup_data = cls._backup_field_if_required(
|
||||
field, new_field_attributes, action, to_field_type_name, for_undo
|
||||
field, new_field_attributes, to_field_type_name, backup_uid, for_undo
|
||||
)
|
||||
|
||||
def after_field_schema_change_callback(
|
||||
|
@ -288,17 +314,28 @@ class UpdateFieldActionType(ActionType):
|
|||
)
|
||||
|
||||
params.backup_data = optional_backup_data
|
||||
params.previous_field_type = from_field_type_name
|
||||
params.previous_field_params = previous_field_params
|
||||
params.original_field_type = from_field_type_name
|
||||
params.original_field_params = original_field_params
|
||||
action.params = params
|
||||
|
||||
|
||||
class CreateFieldActionType(ActionType):
|
||||
class CreateFieldActionType(UndoableActionType):
|
||||
type = "create_field"
|
||||
description = ActionTypeDescription(
|
||||
_("Create field"),
|
||||
_('Field "%(field_name)s" (%(field_id)s) created'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
field_id: int
|
||||
field_name: str
|
||||
field_type: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -347,9 +384,17 @@ class CreateFieldActionType(ActionType):
|
|||
field = result
|
||||
updated_fields = None
|
||||
|
||||
cls.register_action(
|
||||
user=user, params=cls.Params(field_id=field.id), scope=cls.scope(table.id)
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
field.id,
|
||||
field.name,
|
||||
type_name,
|
||||
)
|
||||
group = table.database.group
|
||||
cls.register_action(user, params, cls.scope(table.id), group)
|
||||
|
||||
return (field, updated_fields) if return_updated_fields else field
|
||||
|
||||
|
@ -367,12 +412,22 @@ class CreateFieldActionType(ActionType):
|
|||
TrashHandler().restore_item(user, "field", params.field_id)
|
||||
|
||||
|
||||
class DeleteFieldActionType(ActionType):
|
||||
class DeleteFieldActionType(UndoableActionType):
|
||||
type = "delete_field"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete field"),
|
||||
_('Field "%(field_name)s" (%(field_id)s) deleted'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
field_id: int
|
||||
field_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -394,13 +449,17 @@ class DeleteFieldActionType(ActionType):
|
|||
|
||||
result = FieldHandler().delete_field(user, field)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
field.id,
|
||||
),
|
||||
scope=cls.scope(field.table_id),
|
||||
table = field.table
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
field.id,
|
||||
field.name,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(table.id), group)
|
||||
|
||||
return result
|
||||
|
||||
|
@ -421,12 +480,28 @@ class DeleteFieldActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DuplicateFieldActionType(ActionType):
|
||||
class DuplicateFieldActionType(UndoableActionType):
|
||||
type = "duplicate_field"
|
||||
description = ActionTypeDescription(
|
||||
_("Duplicate field"),
|
||||
_(
|
||||
'Field "%(field_name)s" (%(field_id)s) duplicated (with_data=%(with_data)s) '
|
||||
'from field "%(original_field_name)s" (%(original_field_id)s)'
|
||||
),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
field_id: int
|
||||
field_name: str
|
||||
with_data: bool
|
||||
original_field_id: int
|
||||
original_field_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -452,9 +527,20 @@ class DuplicateFieldActionType(ActionType):
|
|||
new_field_clone, updated_fields = FieldHandler().duplicate_field(
|
||||
user, field, duplicate_data, progress_builder=progress_builder
|
||||
)
|
||||
cls.register_action(
|
||||
user, cls.Params(new_field_clone.id), cls.scope(field.table_id)
|
||||
table = field.table
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
new_field_clone.id,
|
||||
new_field_clone.name,
|
||||
duplicate_data,
|
||||
field.id,
|
||||
field.name,
|
||||
)
|
||||
group = table.database.group
|
||||
cls.register_action(user, params, cls.scope(field.table_id), group)
|
||||
return new_field_clone, updated_fields
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -19,7 +19,11 @@ from baserow.contrib.database.formula import (
|
|||
)
|
||||
from baserow.contrib.database.mixins import ParentFieldTrashableModelMixin
|
||||
from baserow.contrib.database.table.cache import invalidate_table_in_model_cache
|
||||
from baserow.core.jobs.mixins import JobWithUndoRedoIds, JobWithWebsocketId
|
||||
from baserow.core.jobs.mixins import (
|
||||
JobWithUndoRedoIds,
|
||||
JobWithUserIpAddress,
|
||||
JobWithWebsocketId,
|
||||
)
|
||||
from baserow.core.jobs.models import Job
|
||||
from baserow.core.mixins import (
|
||||
CreatedAndUpdatedOnMixin,
|
||||
|
@ -535,7 +539,9 @@ class MultipleCollaboratorsField(Field):
|
|||
return f"{self.THROUGH_DATABASE_TABLE_PREFIX}{self.id}"
|
||||
|
||||
|
||||
class DuplicateFieldJob(JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
class DuplicateFieldJob(
|
||||
JobWithUserIpAddress, JobWithWebsocketId, JobWithUndoRedoIds, Job
|
||||
):
|
||||
|
||||
original_field = models.ForeignKey(
|
||||
Field,
|
||||
|
|
8
backend/src/baserow/contrib/database/file_import/models.py
Normal file → Executable file
8
backend/src/baserow/contrib/database/file_import/models.py
Normal file → Executable file
|
@ -2,7 +2,11 @@ from django.db import models
|
|||
|
||||
from baserow.contrib.database.models import Database
|
||||
from baserow.contrib.database.table.models import Table
|
||||
from baserow.core.jobs.mixins import JobWithUndoRedoIds, JobWithWebsocketId
|
||||
from baserow.core.jobs.mixins import (
|
||||
JobWithUndoRedoIds,
|
||||
JobWithUserIpAddress,
|
||||
JobWithWebsocketId,
|
||||
)
|
||||
from baserow.core.jobs.models import Job
|
||||
|
||||
|
||||
|
@ -20,7 +24,7 @@ def default_report():
|
|||
return {"failing_rows": {}}
|
||||
|
||||
|
||||
class FileImportJob(JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
class FileImportJob(JobWithUserIpAddress, JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
|
||||
database = models.ForeignKey(
|
||||
Database,
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/cs/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/cs/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-03-26 23:23+0000\n"
|
||||
"Last-Translator: Petr S. <petr@stribny.name>\n"
|
||||
"Language-Team: Czech <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Zákazníci"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Zákazníci"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Mřížka"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Projekty"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projekty"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Mřížka"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/de/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/de/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:45+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-02-02 19:53+0000\n"
|
||||
"Last-Translator: Natthapon <natthapon@wagner-international.com>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.11-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "%(first_name)s's Firma"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Kunden"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Kunden"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Gitter"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Projekte"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projekte"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Gitter"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/contrib/database/locale/en/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/contrib/database/locale/en/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:05+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -18,66 +18,390 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:41
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/table/handler.py:409
|
||||
#: src/baserow/contrib/database/table/handler.py:422
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:51
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:52
|
||||
#: src/baserow/contrib/database/table/handler.py:410
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:53
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:411
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:79
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:80
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:81
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:82
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:251
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:313
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/es/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/es/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,11 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:45+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-05-05 23:14+0000\n"
|
||||
"Last-Translator: Zuhair Rayyes <zuhair@baserow.io>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-database/es/>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"database/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.12.1\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "Compañía de %(first_name)s"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Clientes"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Clientes"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Cuadrícula"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Proyectos"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Proyectos"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Cuadrícula"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/contrib/database/locale/fr/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/contrib/database/locale/fr/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:06+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -18,66 +18,390 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:41
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "Entreprise de %(first_name)s"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Clients"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/table/handler.py:409
|
||||
#: src/baserow/contrib/database/table/handler.py:422
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr "Nom"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:51
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr "Nom de famille"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:52
|
||||
#: src/baserow/contrib/database/table/handler.py:410
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr "Notes"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:53
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:411
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr "Actif"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projets"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr "Début"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:79
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr "Calculatrice"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:80
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr "Machine de Turing"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:81
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr "Architecture des ordinateur"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:82
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr "Automate cellulaire"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:251
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Grille"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:313
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr "Colonne %d"
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/it/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/it/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-03-17 14:56+0000\n"
|
||||
"Last-Translator: Sara Cinacchi <sara.cinacchi@gmail.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "Azienda di %(first_name)s"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Clienti"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Clienti"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Griglia"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Progetti"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Progetti"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Griglia"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/mr/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/contrib/database/locale/mr/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
|
@ -7,11 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:06+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-11-28 18:47+0000\n"
|
||||
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
|
||||
"Language-Team: Marathi <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-database/mr/>\n"
|
||||
"Language-Team: Marathi <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"database/mr/>\n"
|
||||
"Language: mr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -19,66 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:41
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "%(first_name)s ची कंपनी"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "ग्राहक"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/table/handler.py:409
|
||||
#: src/baserow/contrib/database/table/handler.py:422
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr "नाव"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:51
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr "आडनाव"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:52
|
||||
#: src/baserow/contrib/database/table/handler.py:410
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr "टीपा"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:53
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:411
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr "सक्रिय"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "प्रकल्प"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr "सुरु झाले"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:79
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr "कॅल्क्युलेटर"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:80
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr "ट्युरिंग मशीन"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:81
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr "संगणक आर्किटेक्चर"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:82
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr "सेल्युलर ऑटोमेटा"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:251
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "ग्रिड"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:313
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr "फील्ड %d"
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/nb_NO/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/nb_NO/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-01-30 00:54+0000\n"
|
||||
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/baserow/"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.11-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "%(first_name)s sitt selskap"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Kunder"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Kunder"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Rutenett"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Prosjekter"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Prosjekter"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Rutenett"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/nl/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/nl/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:46+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-02-04 10:29+0000\n"
|
||||
"Last-Translator: Cornelia Dieleman <financialswift@gmail.com>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.11-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "Het bedrijf van %(first_name)s"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "Klanten"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Klanten"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "Rooster"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "Projecten"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projecten"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Rooster"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/contrib/database/locale/pl/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/contrib/database/locale/pl/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -7,11 +7,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:06+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-08-11 12:21+0000\n"
|
||||
"Last-Translator: PiotrEsse <piotr.esse@spero.click>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-database/pl/>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"database/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -20,66 +20,390 @@ msgstr ""
|
|||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.14-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:41
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "Firma %(first_name)s"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Klienci"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/table/handler.py:409
|
||||
#: src/baserow/contrib/database/table/handler.py:422
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr "Nazwa"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:51
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr "Nazwisko"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:52
|
||||
#: src/baserow/contrib/database/table/handler.py:410
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr "Notatki"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:53
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:411
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr "Aktywny"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projekty"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr "Rozpoczęto"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:79
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr "Kalkulator"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:80
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr "Maszyna Turinga"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:81
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr "Architektura komputerów"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:82
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr "Automaty komórkowe"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:251
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Siatka"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:313
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr "Pole %d"
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/contrib/database/locale/pt_BR/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/contrib/database/locale/pt_BR/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-10-28 20:39+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-21 19:14+0000\n"
|
||||
"Last-Translator: James Braves <dubavy@zetmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
|
||||
|
@ -19,20 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:44
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "%(first_name)s's companhia"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "Clientes"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:85
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "Projetos"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "Grade"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:83
|
||||
msgid "Projects"
|
||||
msgstr "Projetos"
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/ru/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/contrib/database/locale/ru/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:06+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -18,66 +18,390 @@ msgstr ""
|
|||
"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"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:41
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:48
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:50
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/table/handler.py:409
|
||||
#: src/baserow/contrib/database/table/handler.py:422
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:51
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:52
|
||||
#: src/baserow/contrib/database/table/handler.py:410
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:53
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:411
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:79
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:80
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:81
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:82
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:251
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:313
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/contrib/database/locale/zh_Hans/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/contrib/database/locale/zh_Hans/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -7,7 +7,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-01-28 09:54+0000\n"
|
||||
"Last-Translator: Joey Li <joeyli16@icloud.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||
|
@ -19,16 +19,390 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Weblate 4.11-dev\n"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:45
|
||||
#: src/baserow/contrib/database/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:13
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in table \"%(table_name)s\" (%(table_id)s) of database \"%(database_name)s"
|
||||
"\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/action/scopes.py:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
"in view \"%(view_name)s\" (%(view_id)s) of table \"%(table_name)s"
|
||||
"\" (%(table_id)s) in database \"%(database_name)s\" (%(database_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/application_types.py:190
|
||||
msgid "Table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:35
|
||||
msgid "Update field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:36
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:325
|
||||
msgid "Create field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:326
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:418
|
||||
msgid "Delete field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:419
|
||||
#, python-format
|
||||
msgid "Field \"%(field_name)s\" (%(field_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:486
|
||||
msgid "Duplicate field"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/fields/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Field \"%(field_name)s\" (%(field_id)s) duplicated (with_data=%(with_data)s) "
|
||||
"from field \"%(original_field_name)s\" (%(original_field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:63
|
||||
#, python-format
|
||||
msgid "%(first_name)s's company"
|
||||
msgstr "%(first_name)s 的公司"
|
||||
|
||||
#~ msgid "Customers"
|
||||
#~ msgstr "客户"
|
||||
#: src/baserow/contrib/database/plugins.py:70
|
||||
msgid "Customers"
|
||||
msgstr "客户"
|
||||
|
||||
#~ msgid "Grid"
|
||||
#~ msgstr "表格"
|
||||
#: src/baserow/contrib/database/plugins.py:72
|
||||
#: src/baserow/contrib/database/plugins.py:94
|
||||
#: src/baserow/contrib/database/table/handler.py:333
|
||||
#: src/baserow/contrib/database/table/handler.py:346
|
||||
msgid "Name"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Projects"
|
||||
#~ msgstr "项目"
|
||||
#: src/baserow/contrib/database/plugins.py:73
|
||||
msgid "Last name"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:74
|
||||
#: src/baserow/contrib/database/table/handler.py:334
|
||||
msgid "Notes"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:75
|
||||
#: src/baserow/contrib/database/plugins.py:96
|
||||
#: src/baserow/contrib/database/table/handler.py:335
|
||||
msgid "Active"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:92
|
||||
msgid "Projects"
|
||||
msgstr "项目"
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:95
|
||||
msgid "Started"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:101
|
||||
msgid "Calculator"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:102
|
||||
msgid "Turing machine"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:103
|
||||
msgid "Computer architecture"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/plugins.py:104
|
||||
msgid "Cellular Automata"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
msgid "Create row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:33
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
msgid "Create rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:111
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
msgid "Import rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:190
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) imported"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
msgid "Delete row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:272
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
msgid "Delete rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:333
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
msgid "Move row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:473
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) moved"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
msgid "Update row"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:581
|
||||
#, python-format
|
||||
msgid "Row (%(row_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
msgid "Update rows"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/rows/actions.py:681
|
||||
#, python-format
|
||||
msgid "Rows (%(row_ids)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:26
|
||||
msgid "Create table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:27
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:100
|
||||
msgid "Delete table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:101
|
||||
#, python-format
|
||||
msgid "Table \"%(table_name)s\" (%(table_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:150
|
||||
msgid "Order tables"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:151
|
||||
msgid "Tables order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:210
|
||||
msgid "Update table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:212
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table (%(table_id)s) name changed from \"%(original_table_name)s\" to "
|
||||
"\"%(table_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:276
|
||||
msgid "Duplicate table"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/actions.py:278
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Table \"%(table_name)s\" (%(table_id)s) duplicated from "
|
||||
"\"%(original_table_name)s\" (%(original_table_id)s) "
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:237
|
||||
msgid "Grid"
|
||||
msgstr "表格"
|
||||
|
||||
#: src/baserow/contrib/database/table/handler.py:295
|
||||
#, python-format
|
||||
msgid "Field %d"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:39
|
||||
msgid "Create a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:40
|
||||
#, python-format
|
||||
msgid "View filter created on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:133
|
||||
msgid "Update a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:134
|
||||
#, python-format
|
||||
msgid "View filter updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:255
|
||||
msgid "Delete a view filter"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:256
|
||||
#, python-format
|
||||
msgid "View filter deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:352
|
||||
msgid "Create a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:353
|
||||
#, python-format
|
||||
msgid "View sorted on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:429
|
||||
msgid "Update a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:430
|
||||
#, python-format
|
||||
msgid "View sort updated on field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:528
|
||||
msgid "Delete a view sort"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:529
|
||||
#, python-format
|
||||
msgid "View sort deleted from field \"%(field_name)s\" (%(field_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Order views"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:606
|
||||
msgid "Views order changed"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:669
|
||||
msgid "Update view field options"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:670
|
||||
msgid "ViewFieldOptions updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:765
|
||||
msgid "View slug URL updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:766
|
||||
msgid "View changed public slug URL"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:834
|
||||
msgid "Update view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:835
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:919
|
||||
msgid "Create view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:920
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:988
|
||||
msgid "Duplicate view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:990
|
||||
#, python-format
|
||||
msgid ""
|
||||
"View \"%(view_name)s\" (%(view_id)s) duplicated from view "
|
||||
"\"%(original_view_name)s\" (%(original_view_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1058
|
||||
msgid "Delete view"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1059
|
||||
#, python-format
|
||||
msgid "View \"%(view_name)s\" (%(view_id)s) deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1116
|
||||
msgid "Create decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1117
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1212
|
||||
msgid "Update decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1213
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1337
|
||||
msgid "Delete decoration"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/contrib/database/views/actions.py:1338
|
||||
#, python-format
|
||||
msgid "View decoration %(decorator_id)s deleted"
|
||||
msgstr ""
|
||||
|
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-12 15:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("database", "0095_update_exportjob_data"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="duplicatefieldjob",
|
||||
name="user_ip_address",
|
||||
field=models.CharField(
|
||||
help_text="The user IP address.", max_length=45, null=True
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="duplicatetablejob",
|
||||
name="user_ip_address",
|
||||
field=models.CharField(
|
||||
help_text="The user IP address.", max_length=45, null=True
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="fileimportjob",
|
||||
name="user_ip_address",
|
||||
field=models.CharField(
|
||||
help_text="The user IP address.", max_length=45, null=True
|
||||
),
|
||||
),
|
||||
]
|
|
@ -0,0 +1,34 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-13 14:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("database", "0096_add_user_ip_address_to_jobs"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name="duplicatefieldjob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="duplicatetablejob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name="fileimportjob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
]
|
175
backend/src/baserow/contrib/database/rows/actions.py
Normal file → Executable file
175
backend/src/baserow/contrib/database/rows/actions.py
Normal file → Executable file
|
@ -4,8 +4,12 @@ from decimal import Decimal
|
|||
from typing import Any, Dict, List, Optional, Tuple, Type
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.contrib.database.action.scopes import TableActionScopeType
|
||||
from baserow.contrib.database.action.scopes import (
|
||||
TABLE_ACTION_CONTEXT,
|
||||
TableActionScopeType,
|
||||
)
|
||||
from baserow.contrib.database.rows.handler import (
|
||||
GeneratedTableModelForUpdate,
|
||||
RowHandler,
|
||||
|
@ -14,17 +18,27 @@ from baserow.contrib.database.table.handler import TableHandler
|
|||
from baserow.contrib.database.table.models import GeneratedTableModel, Table
|
||||
from baserow.contrib.database.table.signals import table_updated
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionType
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionTypeDescription,
|
||||
UndoableActionType,
|
||||
)
|
||||
from baserow.core.trash.handler import TrashHandler
|
||||
from baserow.core.utils import Progress
|
||||
|
||||
|
||||
class CreateRowActionType(ActionType):
|
||||
class CreateRowActionType(UndoableActionType):
|
||||
type = "create_row"
|
||||
description = ActionTypeDescription(
|
||||
_("Create row"), _("Row (%(row_id)s) created"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_id: int
|
||||
|
||||
@classmethod
|
||||
|
@ -66,8 +80,11 @@ class CreateRowActionType(ActionType):
|
|||
user_field_names=user_field_names,
|
||||
)
|
||||
|
||||
params = cls.Params(table.id, row.id)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id, table.name, table.database.id, table.database.name, row.id
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(table.id), group=group)
|
||||
|
||||
return row
|
||||
|
||||
|
@ -88,12 +105,18 @@ class CreateRowActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class CreateRowsActionType(ActionType):
|
||||
class CreateRowsActionType(UndoableActionType):
|
||||
type = "create_rows"
|
||||
description = ActionTypeDescription(
|
||||
_("Create rows"), _("Rows (%(row_ids)s) created"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_ids: List[int]
|
||||
trashed_rows_entry_id: Optional[int] = None
|
||||
|
||||
|
@ -127,8 +150,15 @@ class CreateRowsActionType(ActionType):
|
|||
user, table, rows_values, before_row=before_row, model=model
|
||||
)
|
||||
|
||||
params = cls.Params(table.id, [row.id for row in rows])
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
[row.id for row in rows],
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(table.id), group=group)
|
||||
|
||||
return rows
|
||||
|
||||
|
@ -154,12 +184,18 @@ class CreateRowsActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class ImportRowsActionType(ActionType):
|
||||
class ImportRowsActionType(UndoableActionType):
|
||||
type = "import_rows"
|
||||
description = ActionTypeDescription(
|
||||
_("Import rows"), _("Rows (%(row_ids)s) imported"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_ids: List[int]
|
||||
trashed_rows_entry_id: Optional[int] = None
|
||||
|
||||
|
@ -196,8 +232,15 @@ class ImportRowsActionType(ActionType):
|
|||
# big amount of data.
|
||||
table_updated.send(cls, table=table, user=user, force_table_refresh=True)
|
||||
|
||||
params = cls.Params(table.id, [row.id for row in created_rows])
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
[row.id for row in created_rows],
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(table.id), group=group)
|
||||
|
||||
return created_rows, error_report
|
||||
|
||||
|
@ -223,12 +266,18 @@ class ImportRowsActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DeleteRowActionType(ActionType):
|
||||
class DeleteRowActionType(UndoableActionType):
|
||||
type = "delete_row"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete row"), _("Row (%(row_id)s) deleted"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_id: int
|
||||
|
||||
@classmethod
|
||||
|
@ -255,8 +304,11 @@ class DeleteRowActionType(ActionType):
|
|||
|
||||
RowHandler().delete_row_by_id(user, table, row_id, model=model)
|
||||
|
||||
params = cls.Params(table.id, row_id)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
database = table.database
|
||||
params = cls.Params(table.id, table.name, database.id, database.name, row_id)
|
||||
cls.register_action(
|
||||
user, params, scope=cls.scope(table.id), group=database.group
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, table_id) -> ActionScopeStr:
|
||||
|
@ -275,12 +327,18 @@ class DeleteRowActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DeleteRowsActionType(ActionType):
|
||||
class DeleteRowsActionType(UndoableActionType):
|
||||
type = "delete_rows"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete rows"), _("Rows (%(row_ids)s) deleted"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_ids: List[int]
|
||||
trashed_rows_entry_id: int
|
||||
|
||||
|
@ -308,8 +366,16 @@ class DeleteRowsActionType(ActionType):
|
|||
|
||||
trashed_rows_entry = RowHandler().delete_rows(user, table, row_ids, model=model)
|
||||
|
||||
params = cls.Params(table.id, row_ids, trashed_rows_entry.id)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
row_ids,
|
||||
trashed_rows_entry.id,
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(table.id), group=group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, table_id) -> ActionScopeStr:
|
||||
|
@ -401,12 +467,18 @@ def get_before_row_from_displacement(
|
|||
return queryset.last()
|
||||
|
||||
|
||||
class MoveRowActionType(ActionType):
|
||||
class MoveRowActionType(UndoableActionType):
|
||||
type = "move_row"
|
||||
description = ActionTypeDescription(
|
||||
_("Move row"), _("Row (%(row_id)s) moved"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_id: int
|
||||
rows_displacement: int
|
||||
|
||||
|
@ -458,9 +530,16 @@ class MoveRowActionType(ActionType):
|
|||
if rows_displacement == 0:
|
||||
return updated_row
|
||||
|
||||
params = cls.Params(table.id, row.id, rows_displacement)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
row.id,
|
||||
rows_displacement,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(table.id), group=group)
|
||||
return updated_row
|
||||
|
||||
@classmethod
|
||||
|
@ -496,15 +575,21 @@ class MoveRowActionType(ActionType):
|
|||
row_handler.move_row(user, table, row, before_row=before_row, model=model)
|
||||
|
||||
|
||||
class UpdateRowActionType(ActionType):
|
||||
class UpdateRowActionType(UndoableActionType):
|
||||
type = "update_row"
|
||||
description = ActionTypeDescription(
|
||||
_("Update row"), _("Row (%(row_id)s) updated"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_id: int
|
||||
row_values: Dict[str, Any]
|
||||
original_row_values: Dict[str, Any]
|
||||
new_row_values: Dict[str, Any]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -555,16 +640,19 @@ class UpdateRowActionType(ActionType):
|
|||
)
|
||||
|
||||
updated_row = row_handler.update_row(user, table, row, values, model=model)
|
||||
row_values = row_handler.get_internal_values_for_fields(row, field_keys)
|
||||
|
||||
new_row_values = row_handler.get_internal_values_for_fields(row, field_keys)
|
||||
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
row.id,
|
||||
row_values,
|
||||
original_row_values,
|
||||
new_row_values,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
cls.register_action(user, params, scope=cls.scope(table.id), group=group)
|
||||
|
||||
return updated_row
|
||||
|
||||
|
@ -583,25 +671,32 @@ class UpdateRowActionType(ActionType):
|
|||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
table = TableHandler().get_table(params.table_id)
|
||||
RowHandler().update_row_by_id(
|
||||
user, table, row_id=params.row_id, values=params.new_row_values
|
||||
user, table, row_id=params.row_id, values=params.row_values
|
||||
)
|
||||
|
||||
|
||||
class UpdateRowsActionType(ActionType):
|
||||
class UpdateRowsActionType(UndoableActionType):
|
||||
type = "update_rows"
|
||||
description = ActionTypeDescription(
|
||||
_("Update rows"), _("Rows (%(row_ids)s) updated"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
original_rows_values: List
|
||||
new_rows: List
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
row_ids: List[int]
|
||||
row_values: List[Dict[str, Any]]
|
||||
original_rows_values: List[Dict[str, Any]]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
cls,
|
||||
user: AbstractUser,
|
||||
table: Table,
|
||||
rows: List,
|
||||
rows: List[Dict[str, Any]],
|
||||
model: Optional[Type[GeneratedTableModel]] = None,
|
||||
) -> List[GeneratedTableModelForUpdate]:
|
||||
"""
|
||||
|
@ -643,9 +738,17 @@ class UpdateRowsActionType(ActionType):
|
|||
user, table, rows, model=model, rows_to_update=original_rows
|
||||
)
|
||||
|
||||
params = cls.Params(table.id, original_rows_values, new_rows)
|
||||
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
group = table.database.group
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
[row.id for row in updated_rows],
|
||||
new_rows,
|
||||
original_rows_values,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(table.id), group=group)
|
||||
|
||||
return updated_rows
|
||||
|
||||
|
@ -661,4 +764,4 @@ class UpdateRowsActionType(ActionType):
|
|||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
table = TableHandler().get_table(params.table_id)
|
||||
RowHandler().update_rows(user, table, params.new_rows)
|
||||
RowHandler().update_rows(user, table, params.row_values)
|
||||
|
|
|
@ -115,19 +115,24 @@ class RowHandler:
|
|||
if field_id in values or field["name"] in values
|
||||
}
|
||||
|
||||
def prepare_rows_in_bulk(self, fields, rows, generate_error_report=False):
|
||||
def prepare_rows_in_bulk(
|
||||
self,
|
||||
fields: Dict[int, Dict[str, Any]],
|
||||
rows: List[Dict[str, Any]],
|
||||
generate_error_report: bool = False,
|
||||
) -> Tuple[List[Dict[str, Any]], Dict[int, Dict[str, Any]]]:
|
||||
"""
|
||||
Prepares a set of values in bulk for all rows so that they can be created or
|
||||
updated in the database. It will check if the values can actually be set and
|
||||
prepares them based on their field type.
|
||||
|
||||
:param fields: The returned fields object from the get_model method.
|
||||
:type fields: dict
|
||||
:param values: The rows and their values that need to be prepared.
|
||||
:type values: dict
|
||||
:param rows: The rows and their values that need to be prepared.
|
||||
:param generate_error_report: If set to True, the method will return an
|
||||
object that contains information about the errors that
|
||||
occurred during the rows preparation.
|
||||
:return: The prepared values for all rows in the same structure as it was
|
||||
passed in.
|
||||
:rtype: dict
|
||||
"""
|
||||
|
||||
field_ids = {}
|
||||
|
@ -1268,7 +1273,7 @@ class RowHandler:
|
|||
self,
|
||||
user: AbstractUser,
|
||||
table: Table,
|
||||
rows: List,
|
||||
rows: List[Dict[str, Any]],
|
||||
model: Optional[Type[GeneratedTableModel]] = None,
|
||||
rows_to_update: Optional[RowsForUpdate] = None,
|
||||
) -> List[GeneratedTableModelForUpdate]:
|
||||
|
|
108
backend/src/baserow/contrib/database/table/actions.py
Normal file → Executable file
108
backend/src/baserow/contrib/database/table/actions.py
Normal file → Executable file
|
@ -2,24 +2,38 @@ import dataclasses
|
|||
from typing import Any, List, Optional
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.contrib.database.action.scopes import DATABASE_ACTION_CONTEXT
|
||||
from baserow.contrib.database.handler import DatabaseHandler
|
||||
from baserow.contrib.database.models import Database
|
||||
from baserow.contrib.database.table.handler import TableHandler
|
||||
from baserow.contrib.database.table.models import Table
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionType
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionTypeDescription,
|
||||
UndoableActionType,
|
||||
)
|
||||
from baserow.core.action.scopes import ApplicationActionScopeType
|
||||
from baserow.core.trash.handler import TrashHandler
|
||||
from baserow.core.utils import ChildProgressBuilder, Progress
|
||||
|
||||
|
||||
class CreateTableActionType(ActionType):
|
||||
class CreateTableActionType(UndoableActionType):
|
||||
type = "create_table"
|
||||
description = ActionTypeDescription(
|
||||
_("Create table"),
|
||||
_('Table "%(table_name)s" (%(table_id)s) created'),
|
||||
DATABASE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
database_id: int
|
||||
database_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -58,8 +72,9 @@ class CreateTableActionType(ActionType):
|
|||
progress=progress,
|
||||
)
|
||||
|
||||
params = cls.Params(table.id)
|
||||
cls.register_action(user, params, cls.scope(database.id))
|
||||
group = database.group
|
||||
params = cls.Params(database.id, database.name, table.id, table.name)
|
||||
cls.register_action(user, params, cls.scope(database.id), group=group)
|
||||
|
||||
return table, error_report
|
||||
|
||||
|
@ -79,12 +94,20 @@ class CreateTableActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DeleteTableActionType(ActionType):
|
||||
class DeleteTableActionType(UndoableActionType):
|
||||
type = "delete_table"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete table"),
|
||||
_('Table "%(table_name)s" (%(table_id)s) deleted'),
|
||||
DATABASE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
database_id: int
|
||||
database_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, table: Table):
|
||||
|
@ -99,12 +122,12 @@ class DeleteTableActionType(ActionType):
|
|||
:raises ValueError: When the provided table is not an instance of Table.
|
||||
"""
|
||||
|
||||
params = cls.Params(table.id)
|
||||
database_id = table.database_id
|
||||
database = table.database
|
||||
params = cls.Params(database.id, database.name, table.id, table.name)
|
||||
|
||||
TableHandler().delete_table(user, table)
|
||||
|
||||
cls.register_action(user, params, cls.scope(database_id))
|
||||
cls.register_action(user, params, cls.scope(database.id), group=database.group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, database_id) -> ActionScopeStr:
|
||||
|
@ -121,14 +144,20 @@ class DeleteTableActionType(ActionType):
|
|||
TableHandler().delete_table_by_id(user, params.table_id)
|
||||
|
||||
|
||||
class OrderTableActionType(ActionType):
|
||||
type = "order_table"
|
||||
class OrderTableActionType(UndoableActionType):
|
||||
type = "order_tables"
|
||||
description = ActionTypeDescription(
|
||||
_("Order tables"),
|
||||
_("Tables order changed"),
|
||||
DATABASE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
database_id: int
|
||||
database_name: str
|
||||
tables_order: List[int]
|
||||
original_tables_order: List[int]
|
||||
new_tables_order: List[int]
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, database: Database, order: List[int]):
|
||||
|
@ -147,11 +176,11 @@ class OrderTableActionType(ActionType):
|
|||
|
||||
table_handler = TableHandler()
|
||||
original_table_order = table_handler.get_tables_order(database)
|
||||
params = cls.Params(database.id, original_table_order, new_tables_order=order)
|
||||
params = cls.Params(database.id, database.name, order, original_table_order)
|
||||
|
||||
table_handler.order_tables(user, database, order=order)
|
||||
|
||||
cls.register_action(user, params, cls.scope(database.id))
|
||||
cls.register_action(user, params, cls.scope(database.id), group=database.group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, database_id) -> ActionScopeStr:
|
||||
|
@ -171,18 +200,28 @@ class OrderTableActionType(ActionType):
|
|||
TableHandler().order_tables(
|
||||
user,
|
||||
DatabaseHandler().get_database(params.database_id),
|
||||
order=params.new_tables_order,
|
||||
order=params.tables_order,
|
||||
)
|
||||
|
||||
|
||||
class UpdateTableActionType(ActionType):
|
||||
class UpdateTableActionType(UndoableActionType):
|
||||
type = "update_table"
|
||||
description = ActionTypeDescription(
|
||||
_("Update table"),
|
||||
_(
|
||||
"Table (%(table_id)s) name changed from "
|
||||
'"%(original_table_name)s" to "%(table_name)s"'
|
||||
),
|
||||
DATABASE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
database_id: int
|
||||
database_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
original_table_name: str
|
||||
new_table_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, table: Table, name: str) -> Table:
|
||||
|
@ -204,13 +243,16 @@ class UpdateTableActionType(ActionType):
|
|||
|
||||
TableHandler().update_table(user, table, name=name)
|
||||
|
||||
database = table.database
|
||||
params = cls.Params(
|
||||
database.id,
|
||||
database.name,
|
||||
table.id,
|
||||
name,
|
||||
original_table_name,
|
||||
new_table_name=name,
|
||||
)
|
||||
|
||||
cls.register_action(user, params, cls.scope(table.database_id))
|
||||
cls.register_action(user, params, cls.scope(database.id), group=database.group)
|
||||
return table
|
||||
|
||||
@classmethod
|
||||
|
@ -225,17 +267,28 @@ class UpdateTableActionType(ActionType):
|
|||
|
||||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
TableHandler().update_table_by_id(
|
||||
user, params.table_id, name=params.new_table_name
|
||||
)
|
||||
TableHandler().update_table_by_id(user, params.table_id, name=params.table_name)
|
||||
|
||||
|
||||
class DuplicateTableActionType(ActionType):
|
||||
class DuplicateTableActionType(UndoableActionType):
|
||||
type = "duplicate_table"
|
||||
description = ActionTypeDescription(
|
||||
_("Duplicate table"),
|
||||
_(
|
||||
'Table "%(table_name)s" (%(table_id)s) duplicated from '
|
||||
'"%(original_table_name)s" (%(original_table_id)s) '
|
||||
),
|
||||
DATABASE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
database_id: int
|
||||
database_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
original_table_id: int
|
||||
original_table_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -258,9 +311,16 @@ class DuplicateTableActionType(ActionType):
|
|||
new_table_clone = TableHandler().duplicate_table(
|
||||
user, table, progress_builder=progress_builder
|
||||
)
|
||||
cls.register_action(
|
||||
user, cls.Params(new_table_clone.id), cls.scope(table.database_id)
|
||||
database = table.database
|
||||
params = cls.Params(
|
||||
database.id,
|
||||
database.name,
|
||||
new_table_clone.id,
|
||||
new_table_clone.name,
|
||||
table.id,
|
||||
table.name,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(database.id), group=database.group)
|
||||
return new_table_clone
|
||||
|
||||
@classmethod
|
||||
|
|
|
@ -26,7 +26,11 @@ from baserow.contrib.database.table.cache import (
|
|||
from baserow.contrib.database.views.exceptions import ViewFilterTypeNotAllowedForField
|
||||
from baserow.contrib.database.views.registries import view_filter_type_registry
|
||||
from baserow.core.db import specific_iterator
|
||||
from baserow.core.jobs.mixins import JobWithUndoRedoIds, JobWithWebsocketId
|
||||
from baserow.core.jobs.mixins import (
|
||||
JobWithUndoRedoIds,
|
||||
JobWithUserIpAddress,
|
||||
JobWithWebsocketId,
|
||||
)
|
||||
from baserow.core.jobs.models import Job
|
||||
from baserow.core.mixins import (
|
||||
CreatedAndUpdatedOnMixin,
|
||||
|
@ -723,7 +727,9 @@ class Table(
|
|||
return f"tbl_order_id_{self.id}_idx"
|
||||
|
||||
|
||||
class DuplicateTableJob(JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
class DuplicateTableJob(
|
||||
JobWithUserIpAddress, JobWithWebsocketId, JobWithUndoRedoIds, Job
|
||||
):
|
||||
|
||||
original_table = models.ForeignKey(
|
||||
Table,
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
from typing import Optional, cast
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionScopeType
|
||||
|
||||
|
||||
class TableActionScopeType(ActionScopeType):
|
||||
type = "table"
|
||||
|
||||
@classmethod
|
||||
def value(cls, table_id: int) -> ActionScopeStr:
|
||||
return cast(ActionScopeStr, cls.type + str(table_id))
|
||||
|
||||
def get_request_serializer_field(self) -> serializers.Field:
|
||||
return serializers.IntegerField(
|
||||
min_value=0,
|
||||
allow_null=True,
|
||||
required=False,
|
||||
help_text="If set to a tables id then any actions directly related to that "
|
||||
"table will be be included when undoing or redoing.",
|
||||
)
|
||||
|
||||
def valid_serializer_value_to_scope_str(
|
||||
self, value: int
|
||||
) -> Optional[ActionScopeStr]:
|
||||
return self.value(value)
|
517
backend/src/baserow/contrib/database/views/actions.py
Normal file → Executable file
517
backend/src/baserow/contrib/database/views/actions.py
Normal file → Executable file
|
@ -4,8 +4,11 @@ from copy import deepcopy
|
|||
from typing import Any, Dict, List, Optional
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.contrib.database.action.scopes import (
|
||||
TABLE_ACTION_CONTEXT,
|
||||
VIEW_ACTION_CONTEXT,
|
||||
TableActionScopeType,
|
||||
ViewActionScopeType,
|
||||
)
|
||||
|
@ -22,18 +25,33 @@ from baserow.contrib.database.views.models import (
|
|||
)
|
||||
from baserow.contrib.database.views.registries import view_type_registry
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionType
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionTypeDescription,
|
||||
UndoableActionType,
|
||||
)
|
||||
from baserow.core.trash.handler import TrashHandler
|
||||
|
||||
|
||||
class CreateViewFilterActionType(ActionType):
|
||||
class CreateViewFilterActionType(UndoableActionType):
|
||||
type = "create_view_filter"
|
||||
description = ActionTypeDescription(
|
||||
_("Create a view filter"),
|
||||
_('View filter created on field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_filter_id: int
|
||||
view_id: int
|
||||
view_name: str
|
||||
field_id: int
|
||||
field_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_filter_id: int
|
||||
filter_type: str
|
||||
filter_value: str
|
||||
|
||||
|
@ -65,13 +83,21 @@ class CreateViewFilterActionType(ActionType):
|
|||
user, view, field, filter_type, filter_value
|
||||
)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view_filter.id, view.id, field.id, filter_type, filter_value
|
||||
),
|
||||
scope=cls.scope(view.id),
|
||||
group = view.table.database.group
|
||||
params = cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
field.id,
|
||||
field.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view_filter.id,
|
||||
filter_type,
|
||||
filter_value,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(view.id), group)
|
||||
return view_filter
|
||||
|
||||
@classmethod
|
||||
|
@ -100,18 +126,32 @@ class CreateViewFilterActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class UpdateViewFilterActionType(ActionType):
|
||||
# TODO: What to do here with fast UI updates?
|
||||
class UpdateViewFilterActionType(UndoableActionType):
|
||||
type = "update_view_filter"
|
||||
description = ActionTypeDescription(
|
||||
_("Update a view filter"),
|
||||
_('View filter updated on field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
field_id: int
|
||||
field_name: str
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_filter_id: int
|
||||
filter_type: str
|
||||
filter_value: str
|
||||
original_field_id: int
|
||||
original_field_name: str
|
||||
original_filter_type: str
|
||||
original_filter_value: str
|
||||
new_field_id: int
|
||||
new_filter_type: str
|
||||
new_filter_value: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -138,6 +178,7 @@ class UpdateViewFilterActionType(ActionType):
|
|||
"""
|
||||
|
||||
original_view_filter_field_id = view_filter.field_id
|
||||
original_view_filter_field_name = view_filter.field.name
|
||||
original_view_filter_type = view_filter.type
|
||||
original_view_filter_value = view_filter.value
|
||||
|
||||
|
@ -145,18 +186,30 @@ class UpdateViewFilterActionType(ActionType):
|
|||
updated_view_filter = view_handler.update_filter(
|
||||
user, view_filter, field, filter_type, filter_value
|
||||
)
|
||||
view = view_filter.view
|
||||
params = cls.Params(
|
||||
updated_view_filter.field.id,
|
||||
updated_view_filter.field.name,
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view_filter.id,
|
||||
updated_view_filter.type,
|
||||
updated_view_filter.value,
|
||||
original_view_filter_field_id,
|
||||
original_view_filter_field_name,
|
||||
original_view_filter_type,
|
||||
original_view_filter_value,
|
||||
)
|
||||
group = updated_view_filter.field.table.database.group
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view_filter.id,
|
||||
original_view_filter_field_id,
|
||||
original_view_filter_type,
|
||||
original_view_filter_value,
|
||||
updated_view_filter.field_id,
|
||||
updated_view_filter.type,
|
||||
updated_view_filter.value,
|
||||
),
|
||||
scope=cls.scope(view_filter.view_id),
|
||||
user,
|
||||
params,
|
||||
cls.scope(view_filter.view_id),
|
||||
group,
|
||||
)
|
||||
|
||||
return updated_view_filter
|
||||
|
@ -182,7 +235,7 @@ class UpdateViewFilterActionType(ActionType):
|
|||
|
||||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_to_redo: Action):
|
||||
field = FieldHandler().get_field(params.new_field_id)
|
||||
field = FieldHandler().get_field(params.field_id)
|
||||
|
||||
view_handler = ViewHandler()
|
||||
view_filter = view_handler.get_filter(user, params.view_filter_id)
|
||||
|
@ -191,19 +244,30 @@ class UpdateViewFilterActionType(ActionType):
|
|||
user,
|
||||
view_filter,
|
||||
field,
|
||||
params.new_filter_type,
|
||||
params.new_filter_value,
|
||||
params.filter_type,
|
||||
params.filter_value,
|
||||
)
|
||||
|
||||
|
||||
class DeleteViewFilterActionType(ActionType):
|
||||
class DeleteViewFilterActionType(UndoableActionType):
|
||||
type = "delete_view_filter"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete a view filter"),
|
||||
_('View filter deleted from field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_filter_id: int
|
||||
view_id: int
|
||||
field_id: int
|
||||
field_name: str
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_filter_id: int
|
||||
filter_type: str
|
||||
filter_value: str
|
||||
|
||||
|
@ -225,22 +289,35 @@ class DeleteViewFilterActionType(ActionType):
|
|||
|
||||
view_filter_id = view_filter.id
|
||||
view_id = view_filter.view_id
|
||||
view_name = view_filter.view.name
|
||||
field_id = view_filter.field_id
|
||||
filter_type = view_filter.type
|
||||
filter_value = view_filter.value
|
||||
field_name = view_filter.field.name
|
||||
view_filter_type = view_filter.type
|
||||
view_filter_value = view_filter.value
|
||||
|
||||
ViewHandler().delete_filter(user, view_filter)
|
||||
|
||||
params = cls.Params(
|
||||
field_id,
|
||||
field_name,
|
||||
view_id,
|
||||
view_name,
|
||||
view_filter.view.table.id,
|
||||
view_filter.view.table.name,
|
||||
view_filter.view.table.database.id,
|
||||
view_filter.view.table.database.name,
|
||||
view_filter_id,
|
||||
view_filter_type,
|
||||
view_filter_value,
|
||||
)
|
||||
group = view_filter.view.table.database.group
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view_filter_id,
|
||||
view_id,
|
||||
field_id,
|
||||
filter_type,
|
||||
filter_value,
|
||||
user,
|
||||
params,
|
||||
cls.scope(
|
||||
view_filter.view_id,
|
||||
),
|
||||
scope=cls.scope(view_filter.view.id),
|
||||
group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
@ -269,14 +346,25 @@ class DeleteViewFilterActionType(ActionType):
|
|||
ViewHandler().delete_filter(user, view_filter)
|
||||
|
||||
|
||||
class CreateViewSortActionType(ActionType):
|
||||
class CreateViewSortActionType(UndoableActionType):
|
||||
type = "create_view_sort"
|
||||
description = ActionTypeDescription(
|
||||
_("Create a view sort"),
|
||||
_('View sorted on field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_sort_id: int
|
||||
view_id: int
|
||||
field_id: int
|
||||
field_name: str
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_sort_id: int
|
||||
sort_order: str
|
||||
|
||||
@classmethod
|
||||
|
@ -298,11 +386,20 @@ class CreateViewSortActionType(ActionType):
|
|||
|
||||
view_sort = ViewHandler().create_sort(user, view, field, sort_order)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view_sort.id, view.id, field.id, sort_order),
|
||||
scope=cls.scope(view.id),
|
||||
params = cls.Params(
|
||||
field.id,
|
||||
field.name,
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view_sort.id,
|
||||
sort_order,
|
||||
)
|
||||
group = view.table.database.group
|
||||
cls.register_action(user, params, cls.scope(view.id), group)
|
||||
return view_sort
|
||||
|
||||
@classmethod
|
||||
|
@ -326,16 +423,29 @@ class CreateViewSortActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class UpdateViewSortActionType(ActionType):
|
||||
class UpdateViewSortActionType(UndoableActionType):
|
||||
type = "update_view_sort"
|
||||
description = ActionTypeDescription(
|
||||
_("Update a view sort"),
|
||||
_('View sort updated on field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
field_id: int
|
||||
field_name: str
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_sort_id: int
|
||||
sort_order: str
|
||||
original_field_id: int
|
||||
original_field_name: str
|
||||
original_sort_order: str
|
||||
new_field_id: int
|
||||
new_sort_order: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -357,8 +467,11 @@ class UpdateViewSortActionType(ActionType):
|
|||
:param order: Indicates the sort order direction.
|
||||
"""
|
||||
|
||||
original_view_sort_field_id = view_sort.field.id
|
||||
original_view_sort_sort_order = view_sort.order
|
||||
original_field_id = view_sort.field.id
|
||||
original_field_name = view_sort.field.name
|
||||
view_id = view_sort.view.id
|
||||
view_name = view_sort.view.name
|
||||
original_sort_order = view_sort.order
|
||||
|
||||
handler = ViewHandler()
|
||||
updated_view_sort = handler.update_sort(user, view_sort, field, order)
|
||||
|
@ -366,13 +479,22 @@ class UpdateViewSortActionType(ActionType):
|
|||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view_sort.id,
|
||||
original_view_sort_field_id,
|
||||
original_view_sort_sort_order,
|
||||
updated_view_sort.field.id,
|
||||
updated_view_sort.field.name,
|
||||
view_id,
|
||||
view_name,
|
||||
updated_view_sort.view.table.id,
|
||||
updated_view_sort.view.table.name,
|
||||
updated_view_sort.view.table.database.id,
|
||||
updated_view_sort.view.table.database.name,
|
||||
updated_view_sort.id,
|
||||
updated_view_sort.order,
|
||||
original_field_id,
|
||||
original_field_name,
|
||||
original_sort_order,
|
||||
),
|
||||
scope=cls.scope(view_sort.view.id),
|
||||
group=view_sort.view.table.database.group,
|
||||
)
|
||||
|
||||
return updated_view_sort
|
||||
|
@ -392,22 +514,33 @@ class UpdateViewSortActionType(ActionType):
|
|||
|
||||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_to_redo: Action):
|
||||
field = FieldHandler().get_field(params.new_field_id)
|
||||
field = FieldHandler().get_field(params.field_id)
|
||||
|
||||
view_handler = ViewHandler()
|
||||
view_sort = view_handler.get_sort(user, params.view_sort_id)
|
||||
|
||||
view_handler.update_sort(user, view_sort, field, params.new_sort_order)
|
||||
view_handler.update_sort(user, view_sort, field, params.sort_order)
|
||||
|
||||
|
||||
class DeleteViewSortActionType(ActionType):
|
||||
class DeleteViewSortActionType(UndoableActionType):
|
||||
type = "delete_view_sort"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete a view sort"),
|
||||
_('View sort deleted from field "%(field_name)s" (%(field_id)s)'),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_sort_id: int
|
||||
view_id: int
|
||||
field_id: int
|
||||
field_name: str
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
view_sort_id: int
|
||||
sort_order: str
|
||||
|
||||
@classmethod
|
||||
|
@ -425,21 +558,27 @@ class DeleteViewSortActionType(ActionType):
|
|||
|
||||
view_sort_id = view_sort.id
|
||||
view_id = view_sort.view.id
|
||||
view_name = view_sort.view.name
|
||||
field_id = view_sort.field.id
|
||||
field_name = view_sort.field.name
|
||||
sort_order = view_sort.order
|
||||
|
||||
ViewHandler().delete_sort(user, view_sort)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view_sort_id,
|
||||
view_id,
|
||||
field_id,
|
||||
sort_order,
|
||||
),
|
||||
scope=cls.scope(view_sort.view.id),
|
||||
params = cls.Params(
|
||||
field_id,
|
||||
field_name,
|
||||
view_id,
|
||||
view_name,
|
||||
view_sort.view.table.id,
|
||||
view_sort.view.table.name,
|
||||
view_sort.view.table.database.id,
|
||||
view_sort.view.table.database.name,
|
||||
view_sort_id,
|
||||
sort_order,
|
||||
)
|
||||
group = view_sort.view.table.database.group
|
||||
cls.register_action(user, params, cls.scope(view_sort.view.id), group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, view_id: int) -> ActionScopeStr:
|
||||
|
@ -461,14 +600,20 @@ class DeleteViewSortActionType(ActionType):
|
|||
ViewHandler().delete_sort(user, view_sort)
|
||||
|
||||
|
||||
class OrderViewsActionType(ActionType):
|
||||
class OrderViewsActionType(UndoableActionType):
|
||||
type = "order_views"
|
||||
description = ActionTypeDescription(
|
||||
_("Order views"), _("Views order changed"), TABLE_ACTION_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
order: List[int]
|
||||
original_order: List[int]
|
||||
new_order: List[int]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -493,8 +638,15 @@ class OrderViewsActionType(ActionType):
|
|||
|
||||
ViewHandler().order_views(user, table, order)
|
||||
|
||||
params = cls.Params(table.id, original_order, order)
|
||||
cls.register_action(user, params, cls.scope(table.id))
|
||||
params = cls.Params(
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
order,
|
||||
original_order,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(table.id), table.database.group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, table_id: int) -> ActionScopeStr:
|
||||
|
@ -508,17 +660,27 @@ class OrderViewsActionType(ActionType):
|
|||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_to_redo: Action):
|
||||
table = TableHandler().get_table(params.table_id)
|
||||
ViewHandler().order_views(user, table, params.new_order)
|
||||
ViewHandler().order_views(user, table, params.order)
|
||||
|
||||
|
||||
class UpdateViewFieldOptionsActionType(ActionType):
|
||||
class UpdateViewFieldOptionsActionType(UndoableActionType):
|
||||
type = "update_view_field_options"
|
||||
description = ActionTypeDescription(
|
||||
_("Update view field options"),
|
||||
_("ViewFieldOptions updated"),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
field_options: FieldOptionsDict
|
||||
original_field_options: FieldOptionsDict
|
||||
new_field_options: FieldOptionsDict
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -564,10 +726,16 @@ class UpdateViewFieldOptionsActionType(ActionType):
|
|||
user=user,
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
dict(original_field_options_to_save),
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
dict(new_field_options_to_save),
|
||||
dict(original_field_options_to_save),
|
||||
),
|
||||
scope=cls.scope(view.id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
@ -587,18 +755,28 @@ class UpdateViewFieldOptionsActionType(ActionType):
|
|||
view_handler = ViewHandler()
|
||||
view = view_handler.get_view(params.view_id).specific
|
||||
view_handler.update_field_options(
|
||||
user=user, view=view, field_options=params.new_field_options
|
||||
user=user, view=view, field_options=params.field_options
|
||||
)
|
||||
|
||||
|
||||
class RotateViewSlugActionType(ActionType):
|
||||
class RotateViewSlugActionType(UndoableActionType):
|
||||
type = "rotate_view_slug"
|
||||
description = ActionTypeDescription(
|
||||
_("View slug URL updated"),
|
||||
_("View changed public slug URL"),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
slug: str
|
||||
original_slug: str
|
||||
new_slug: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, view: View) -> View:
|
||||
|
@ -618,8 +796,18 @@ class RotateViewSlugActionType(ActionType):
|
|||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view.id, original_slug, view.slug),
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view.slug,
|
||||
original_slug,
|
||||
),
|
||||
scope=cls.scope(view.id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
return view
|
||||
|
||||
|
@ -637,17 +825,27 @@ class RotateViewSlugActionType(ActionType):
|
|||
def redo(cls, user: AbstractUser, params: Params, action_to_redo: Action):
|
||||
view_handler = ViewHandler()
|
||||
view = view_handler.get_view_for_update(params.view_id)
|
||||
view_handler.update_view_slug(user, view, params.new_slug)
|
||||
view_handler.update_view_slug(user, view, params.slug)
|
||||
|
||||
|
||||
class UpdateViewActionType(ActionType):
|
||||
class UpdateViewActionType(UndoableActionType):
|
||||
type = "update_view"
|
||||
description = ActionTypeDescription(
|
||||
_("Update view"),
|
||||
_('View "%(view_name)s" (%(view_id)s) updated'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
data: Dict[str, Any]
|
||||
original_data: Dict[str, Any]
|
||||
new_data: Dict[str, Any]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -683,8 +881,18 @@ class UpdateViewActionType(ActionType):
|
|||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view.id, original_data, new_data),
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
new_data,
|
||||
original_data,
|
||||
),
|
||||
scope=cls.scope(view.id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
return view
|
||||
|
||||
|
@ -702,15 +910,26 @@ class UpdateViewActionType(ActionType):
|
|||
def redo(cls, user: AbstractUser, params: Params, action_to_redo: Action):
|
||||
view_handler = ViewHandler()
|
||||
view = view_handler.get_view_for_update(params.view_id).specific
|
||||
view_handler.update_view(user, view, **params.new_data)
|
||||
view_handler.update_view(user, view, **params.data)
|
||||
|
||||
|
||||
class CreateViewActionType(ActionType):
|
||||
class CreateViewActionType(UndoableActionType):
|
||||
type = "create_view"
|
||||
description = ActionTypeDescription(
|
||||
_("Create view"),
|
||||
_('View "%(view_name)s" (%(view_id)s) created'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
view_type: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, table: Table, type_name: str, **kwargs) -> View:
|
||||
|
@ -735,8 +954,17 @@ class CreateViewActionType(ActionType):
|
|||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view.id),
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
type_name,
|
||||
table.id,
|
||||
table.name,
|
||||
table.database.id,
|
||||
table.database.name,
|
||||
),
|
||||
scope=cls.scope(table.id),
|
||||
group=table.database.group,
|
||||
)
|
||||
|
||||
return view
|
||||
|
@ -754,12 +982,27 @@ class CreateViewActionType(ActionType):
|
|||
TrashHandler.restore_item(user, "view", params.view_id)
|
||||
|
||||
|
||||
class DuplicateViewActionType(ActionType):
|
||||
class DuplicateViewActionType(UndoableActionType):
|
||||
type = "duplicate_view"
|
||||
description = ActionTypeDescription(
|
||||
_("Duplicate view"),
|
||||
_(
|
||||
'View "%(view_name)s" (%(view_id)s) duplicated from '
|
||||
'view "%(original_view_name)s" (%(original_view_id)s)'
|
||||
),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
original_view_id: int
|
||||
original_view_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, original_view: View) -> View:
|
||||
|
@ -780,8 +1023,18 @@ class DuplicateViewActionType(ActionType):
|
|||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view.id),
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
original_view.table.id,
|
||||
original_view.table.name,
|
||||
original_view.table.database.id,
|
||||
original_view.table.database.name,
|
||||
original_view.id,
|
||||
original_view.name,
|
||||
),
|
||||
scope=cls.scope(original_view.table.id),
|
||||
group=original_view.table.database.group,
|
||||
)
|
||||
|
||||
return view
|
||||
|
@ -799,12 +1052,22 @@ class DuplicateViewActionType(ActionType):
|
|||
TrashHandler.restore_item(user, "view", params.view_id)
|
||||
|
||||
|
||||
class DeleteViewActionType(ActionType):
|
||||
class DeleteViewActionType(UndoableActionType):
|
||||
type = "delete_view"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete view"),
|
||||
_('View "%(view_name)s" (%(view_id)s) deleted'),
|
||||
TABLE_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, view: View):
|
||||
|
@ -822,8 +1085,16 @@ class DeleteViewActionType(ActionType):
|
|||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(view.id),
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
),
|
||||
scope=cls.scope(view.table_id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
@ -839,12 +1110,22 @@ class DeleteViewActionType(ActionType):
|
|||
ViewHandler().delete_view_by_id(user, params.view_id)
|
||||
|
||||
|
||||
class CreateDecorationActionType(ActionType):
|
||||
class CreateDecorationActionType(UndoableActionType):
|
||||
type = "create_decoration"
|
||||
description = ActionTypeDescription(
|
||||
_("Create decoration"),
|
||||
_("View decoration %(decorator_id)s created"),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
decorator_id: int
|
||||
decorator_type_name: str
|
||||
value_provider_type_name: str
|
||||
|
@ -887,12 +1168,18 @@ class CreateDecorationActionType(ActionType):
|
|||
user=user,
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
decoration.id,
|
||||
decorator_type_name,
|
||||
value_provider_type_name,
|
||||
value_provider_conf,
|
||||
),
|
||||
scope=cls.scope(view.id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
|
||||
return decoration
|
||||
|
@ -919,11 +1206,22 @@ class CreateDecorationActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class UpdateDecorationActionType(ActionType):
|
||||
class UpdateDecorationActionType(UndoableActionType):
|
||||
type = "update_decoration"
|
||||
description = ActionTypeDescription(
|
||||
_("Update decoration"),
|
||||
_("View decoration %(decorator_id)s updated"),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
decorator_id: int
|
||||
original_decoration_type_name: str
|
||||
original_value_provider_type_name: str
|
||||
|
@ -968,6 +1266,7 @@ class UpdateDecorationActionType(ActionType):
|
|||
original_value_provider_type_name = original_view_decoration.value_provider_type
|
||||
original_value_provider_conf = original_view_decoration.value_provider_conf
|
||||
original_order = original_view_decoration.order
|
||||
view = view_decoration.view
|
||||
|
||||
view_decoration_updated = ViewHandler().update_decoration(
|
||||
view_decoration,
|
||||
|
@ -981,6 +1280,12 @@ class UpdateDecorationActionType(ActionType):
|
|||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view_decoration.id,
|
||||
original_decoration_type_name,
|
||||
original_value_provider_type_name,
|
||||
|
@ -992,6 +1297,7 @@ class UpdateDecorationActionType(ActionType):
|
|||
order,
|
||||
),
|
||||
scope=cls.scope(view_decoration.view_id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
|
||||
return view_decoration_updated
|
||||
|
@ -1025,12 +1331,23 @@ class UpdateDecorationActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DeleteDecorationActionType(ActionType):
|
||||
class DeleteDecorationActionType(UndoableActionType):
|
||||
type = "delete_decoration"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete decoration"),
|
||||
_("View decoration %(decorator_id)s deleted"),
|
||||
VIEW_ACTION_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
view_id: int
|
||||
view_name: str
|
||||
table_id: int
|
||||
table_name: str
|
||||
database_id: int
|
||||
database_name: str
|
||||
decorator_id: int
|
||||
original_decorator_id: int
|
||||
original_decorator_type_name: str
|
||||
original_value_provider_type_name: str
|
||||
|
@ -1054,10 +1371,17 @@ class DeleteDecorationActionType(ActionType):
|
|||
|
||||
ViewHandler().delete_decoration(view_decoration, user=user)
|
||||
|
||||
view = view_decoration.view
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
original_view_decoration.view_id,
|
||||
view.id,
|
||||
view.name,
|
||||
view.table.id,
|
||||
view.table.name,
|
||||
view.table.database.id,
|
||||
view.table.database.name,
|
||||
view_decoration.id,
|
||||
original_view_decoration.id,
|
||||
original_view_decoration.type,
|
||||
original_view_decoration.value_provider_type,
|
||||
|
@ -1065,6 +1389,7 @@ class DeleteDecorationActionType(ActionType):
|
|||
original_view_decoration.order,
|
||||
),
|
||||
scope=cls.scope(view_decoration.view_id),
|
||||
group=view.table.database.group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
|
41
backend/src/baserow/core/action/handler.py
Normal file → Executable file
41
backend/src/baserow/core/action/handler.py
Normal file → Executable file
|
@ -10,10 +10,16 @@ from django.db import transaction
|
|||
from django.db.models import Q
|
||||
from django.utils import timezone
|
||||
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, action_type_registry
|
||||
from baserow.core.exceptions import LockConflict
|
||||
|
||||
from .models import Action
|
||||
from .registries import (
|
||||
ActionScopeStr,
|
||||
UndoableActionCustomCleanupMixin,
|
||||
action_type_registry,
|
||||
)
|
||||
from .signals import ActionCommandType
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
|
@ -41,6 +47,25 @@ class ActionHandler:
|
|||
redoing them.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def send_action_done_signal_for_actions(
|
||||
cls,
|
||||
user: AbstractUser,
|
||||
actions: List[Action],
|
||||
action_command_type: ActionCommandType,
|
||||
**kwargs,
|
||||
) -> None:
|
||||
for action in actions:
|
||||
action_type = action_type_registry.get(action.type)
|
||||
action_type.send_action_done_signal(
|
||||
user,
|
||||
action.params,
|
||||
action.scope,
|
||||
action.group,
|
||||
action.updated_on,
|
||||
action_command_type,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def _undo_action(
|
||||
cls, user: AbstractUser, action: Action, undone_at: datetime
|
||||
|
@ -114,7 +139,9 @@ class ActionHandler:
|
|||
)
|
||||
|
||||
# refresh actions from db to ensure everything is updated
|
||||
return list(Action.objects.filter(pk__in=action_being_undone_ids))
|
||||
actions = list(Action.objects.filter(pk__in=action_being_undone_ids))
|
||||
cls.send_action_done_signal_for_actions(user, actions, ActionCommandType.UNDO)
|
||||
return actions
|
||||
|
||||
@classmethod
|
||||
def _redo_action(cls, user: AbstractUser, action: Action) -> None:
|
||||
|
@ -220,14 +247,16 @@ class ActionHandler:
|
|||
)
|
||||
|
||||
# refresh actions from db to ensure everything is updated
|
||||
return list(
|
||||
actions = list(
|
||||
Action.objects.filter(pk__in=actions_being_redone_ids).order_by(
|
||||
"created_on", "id"
|
||||
)
|
||||
)
|
||||
cls.send_action_done_signal_for_actions(user, actions, ActionCommandType.REDO)
|
||||
return actions
|
||||
|
||||
@classmethod
|
||||
def clean_up_old_actions(cls):
|
||||
def clean_up_old_undoable_actions(cls):
|
||||
"""
|
||||
Any actions which haven't been updated in
|
||||
settings.MINUTES_UNTIL_ACTION_CLEANED_UP will be deleted any have an extra
|
||||
|
@ -240,7 +269,7 @@ class ActionHandler:
|
|||
|
||||
types_with_custom_clean_up = set()
|
||||
for action_type in action_type_registry.get_all():
|
||||
if action_type.has_custom_cleanup():
|
||||
if isinstance(action_type, UndoableActionCustomCleanupMixin):
|
||||
types_with_custom_clean_up.add(action_type.type)
|
||||
|
||||
# Delete in a separate atomic block so if we crash later we don't roll back
|
||||
|
|
|
@ -22,10 +22,11 @@ class JSONEncoderSupportingDataClasses(json.JSONEncoder):
|
|||
|
||||
class Action(CreatedAndUpdatedOnMixin, models.Model):
|
||||
"""
|
||||
An action represents a user performed change to Baserow.
|
||||
An undoable-action represents a user performed change that can be undone.
|
||||
"""
|
||||
|
||||
user = models.ForeignKey(User, blank=True, null=True, on_delete=models.SET_NULL)
|
||||
group = models.ForeignKey("core.Group", null=True, on_delete=models.SET_NULL)
|
||||
session = models.TextField(null=True, blank=True, db_index=True)
|
||||
type = models.TextField(db_index=True)
|
||||
params = models.JSONField(encoder=JSONEncoderSupportingDataClasses)
|
||||
|
|
153
backend/src/baserow/core/action/registries.py
Normal file → Executable file
153
backend/src/baserow/core/action/registries.py
Normal file → Executable file
|
@ -1,8 +1,11 @@
|
|||
import abc
|
||||
import dataclasses
|
||||
from typing import Any, NewType, Optional
|
||||
from datetime import datetime
|
||||
from typing import Any, Dict, NewType, Optional
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils import timezone
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
|
@ -10,9 +13,12 @@ from baserow.api.sessions import (
|
|||
get_client_undo_redo_action_group_id,
|
||||
get_untrusted_client_session_id,
|
||||
)
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.models import Group
|
||||
from baserow.core.registry import Instance, Registry
|
||||
|
||||
from .models import Action
|
||||
from .signals import ActionCommandType, action_done
|
||||
|
||||
# An alias type of a str (its exactly a str, just with a different name in the type
|
||||
# system). We use this instead of a normal str for type safety ensuring
|
||||
# only str's returned by ActionScopeType.value and
|
||||
|
@ -87,9 +93,46 @@ class ActionScopeRegistry(Registry[ActionScopeType]):
|
|||
name = "action_scope"
|
||||
|
||||
|
||||
@dataclasses.dataclass
|
||||
class ActionTypeDescription:
|
||||
"""
|
||||
The human readable and translatable description of the action type. The
|
||||
short string is used when rendering the action type in a list, the long
|
||||
string + the context will be used when rendering the action detailed
|
||||
description.
|
||||
"""
|
||||
|
||||
short: str = ""
|
||||
long: str = ""
|
||||
context: str = ""
|
||||
|
||||
|
||||
def render_action_type_description(
|
||||
description: ActionTypeDescription, params_dict: Dict[str, Any]
|
||||
) -> str:
|
||||
"""
|
||||
Renders the action type description using the params dict. The params dict
|
||||
contains the parameters that are required to the action. The
|
||||
description can contain placeholders that will be replaced by the params
|
||||
dict values. For example, if the description is "Created table %table_name%"
|
||||
and the params dict is {"table_name": "My table"} then the result will be
|
||||
"Created table My table".
|
||||
"""
|
||||
|
||||
if not description.long:
|
||||
return f"{description.short}: {params_dict}"
|
||||
|
||||
if description.context:
|
||||
return f"{description.long % params_dict} {description.context % params_dict}"
|
||||
|
||||
return f"{description.long % params_dict}"
|
||||
|
||||
|
||||
class ActionType(Instance, abc.ABC):
|
||||
type: str = NotImplemented
|
||||
|
||||
description: ActionTypeDescription = ActionTypeDescription()
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
"""
|
||||
|
@ -125,6 +168,80 @@ class ActionType(Instance, abc.ABC):
|
|||
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def get_long_description(cls, params_dict: Dict[str, Any], *args, **kwargs) -> str:
|
||||
"""
|
||||
Should return a human readable description of the action being performed.
|
||||
"""
|
||||
|
||||
return render_action_type_description(cls.description, params_dict)
|
||||
|
||||
@classmethod
|
||||
def get_short_description(cls, *args, **kwargs) -> str:
|
||||
"""
|
||||
Should return a human readable description of the action type being performed.
|
||||
The `str` here forces the lazy translation to be evaluated.
|
||||
"""
|
||||
|
||||
return str(cls.description.short) or _(cls.type.replace("_", " ").capitalize())
|
||||
|
||||
@classmethod
|
||||
def send_action_done_signal(
|
||||
cls,
|
||||
user: AbstractUser,
|
||||
params: Dict[str, Any],
|
||||
scope: ActionScopeStr,
|
||||
group: Optional[Group] = None,
|
||||
timestamp: Optional[datetime] = None,
|
||||
action_command_type: ActionCommandType = ActionCommandType.DO,
|
||||
):
|
||||
"""
|
||||
Sends the action done signal. This is called by the do method of the action
|
||||
type. This is a separate method so that it can be called from other places
|
||||
where the action is performed but not registered.
|
||||
"""
|
||||
|
||||
session = get_untrusted_client_session_id(user)
|
||||
action_group = get_client_undo_redo_action_group_id(user)
|
||||
action_timestamp = timestamp if timestamp else timezone.now()
|
||||
|
||||
action_done.send(
|
||||
sender=cls,
|
||||
user=user,
|
||||
action_type=cls,
|
||||
action_params=params,
|
||||
action_command_type=action_command_type,
|
||||
action_timestamp=action_timestamp,
|
||||
group=group,
|
||||
session=session,
|
||||
scope=scope,
|
||||
action_group=action_group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def register_action(
|
||||
cls,
|
||||
user: AbstractUser,
|
||||
params: Any,
|
||||
scope: ActionScopeStr,
|
||||
group: Optional[Group] = None,
|
||||
) -> Optional[Action]:
|
||||
"""
|
||||
Registers a new action in the database using the untrusted client session id
|
||||
if set in the request headers.
|
||||
|
||||
:param user: The user who performed the action.
|
||||
:param params: A dataclass to serialize and store with the action which will be
|
||||
provided when undoing and redoing it.
|
||||
:param scope: The scope in which this action occurred.
|
||||
:param group: The group this action is associated with.
|
||||
:return: The created action if any.
|
||||
"""
|
||||
|
||||
cls.send_action_done_signal(user, dataclasses.asdict(params), scope, group)
|
||||
|
||||
|
||||
class UndoableActionTypeMixin(abc.ABC):
|
||||
@classmethod
|
||||
@abc.abstractmethod
|
||||
def undo(cls, user: AbstractUser, params: Any, action_being_undone: Action):
|
||||
|
@ -161,7 +278,8 @@ class ActionType(Instance, abc.ABC):
|
|||
user: AbstractUser,
|
||||
params: Any,
|
||||
scope: ActionScopeStr,
|
||||
) -> Action:
|
||||
group: Optional[Group] = None,
|
||||
) -> Optional[Action]:
|
||||
"""
|
||||
Registers a new action in the database using the untrusted client session id
|
||||
if set in the request headers.
|
||||
|
@ -170,6 +288,8 @@ class ActionType(Instance, abc.ABC):
|
|||
:param params: A dataclass to serialize and store with the action which will be
|
||||
provided when undoing and redoing it.
|
||||
:param scope: The scope in which this action occurred.
|
||||
:param group: The group this action is associated with.
|
||||
:return: The created action.
|
||||
"""
|
||||
|
||||
session = get_untrusted_client_session_id(user)
|
||||
|
@ -177,31 +297,40 @@ class ActionType(Instance, abc.ABC):
|
|||
|
||||
action = Action.objects.create(
|
||||
user=user,
|
||||
group=group,
|
||||
type=cls.type,
|
||||
params=params,
|
||||
scope=scope,
|
||||
session=session,
|
||||
action_group=action_group,
|
||||
)
|
||||
|
||||
cls.send_action_done_signal(
|
||||
user, dataclasses.asdict(params), scope, group, action.created_on
|
||||
)
|
||||
|
||||
return action
|
||||
|
||||
|
||||
class UndoableActionCustomCleanupMixin(abc.ABC):
|
||||
@classmethod
|
||||
@abc.abstractmethod
|
||||
def clean_up_any_extra_action_data(cls, action_being_cleaned_up: Action):
|
||||
"""
|
||||
Should cleanup any extra data associated with the action as it has expired.
|
||||
This method is called when an action is undone or redone. This is useful for
|
||||
cleaning up any data that is no longer required after the action has been
|
||||
undone or redone. This method is called after the undo or redo method has
|
||||
been called.
|
||||
|
||||
:param action_being_cleaned_up: The action that is old and being cleaned up.
|
||||
:param user: The user performing the undo or redo.
|
||||
:param action: The action that is being undone or redone.
|
||||
"""
|
||||
|
||||
pass
|
||||
|
||||
@classmethod
|
||||
def has_custom_cleanup(cls) -> bool:
|
||||
# noinspection PyUnresolvedReferences
|
||||
return (
|
||||
cls.clean_up_any_extra_action_data.__func__
|
||||
!= ActionType.clean_up_any_extra_action_data.__func__
|
||||
)
|
||||
|
||||
class UndoableActionType(UndoableActionTypeMixin, ActionType):
|
||||
pass
|
||||
|
||||
|
||||
class ActionTypeRegistry(Registry[ActionType]):
|
||||
|
|
4
backend/src/baserow/core/action/scopes.py
Normal file → Executable file
4
backend/src/baserow/core/action/scopes.py
Normal file → Executable file
|
@ -1,9 +1,13 @@
|
|||
from typing import Optional, cast
|
||||
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from rest_framework import serializers
|
||||
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionScopeType
|
||||
|
||||
GROUP_CONTEXT = _('in group "%(group_name)s" (%(group_id)s).')
|
||||
|
||||
|
||||
class RootActionScopeType(ActionScopeType):
|
||||
type = "root"
|
||||
|
|
12
backend/src/baserow/core/action/signals.py
Executable file
12
backend/src/baserow/core/action/signals.py
Executable file
|
@ -0,0 +1,12 @@
|
|||
from enum import Enum
|
||||
|
||||
from django.dispatch import Signal
|
||||
|
||||
|
||||
class ActionCommandType(Enum):
|
||||
DO = "DO"
|
||||
UNDO = "UNDO"
|
||||
REDO = "REDO"
|
||||
|
||||
|
||||
action_done = Signal()
|
|
@ -10,7 +10,7 @@ from baserow.core.action.handler import ActionHandler
|
|||
|
||||
@app.task(bind=True, queue="export")
|
||||
def cleanup_old_actions(self):
|
||||
ActionHandler().clean_up_old_actions()
|
||||
ActionHandler().clean_up_old_undoable_actions()
|
||||
|
||||
|
||||
# noinspection PyUnusedLocal
|
||||
|
|
275
backend/src/baserow/core/actions.py
Normal file → Executable file
275
backend/src/baserow/core/actions.py
Normal file → Executable file
|
@ -2,24 +2,41 @@ import dataclasses
|
|||
from typing import Any, List, Optional
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.core.action.models import Action
|
||||
from baserow.core.action.registries import ActionScopeStr, ActionType
|
||||
from baserow.core.action.scopes import GroupActionScopeType, RootActionScopeType
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionTypeDescription,
|
||||
UndoableActionType,
|
||||
)
|
||||
from baserow.core.action.scopes import (
|
||||
GROUP_CONTEXT,
|
||||
GroupActionScopeType,
|
||||
RootActionScopeType,
|
||||
)
|
||||
from baserow.core.handler import CoreHandler, GroupForUpdate
|
||||
from baserow.core.models import Application, Group, GroupUser, Template
|
||||
from baserow.core.registries import application_type_registry
|
||||
from baserow.core.trash.handler import TrashHandler
|
||||
from baserow.core.utils import ChildProgressBuilder
|
||||
|
||||
|
||||
class DeleteGroupActionType(ActionType):
|
||||
class DeleteGroupActionType(UndoableActionType):
|
||||
type = "delete_group"
|
||||
|
||||
description = ActionTypeDescription(
|
||||
_("Delete group"),
|
||||
_('Group "%(group_name)s" (%(group_id)s) deleted.'),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
deleted_group_id: int
|
||||
group_id: int
|
||||
group_name: str
|
||||
|
||||
def do(self, user: AbstractUser, group: GroupForUpdate):
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, group: GroupForUpdate):
|
||||
"""
|
||||
Deletes an existing group and related applications if the user has admin
|
||||
permissions for the group. See baserow.core.handler.CoreHandler.delete_group
|
||||
|
@ -33,7 +50,12 @@ class DeleteGroupActionType(ActionType):
|
|||
|
||||
CoreHandler().delete_group(user, group)
|
||||
|
||||
self.register_action(user, self.Params(group.id), scope=self.scope())
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(group.id, group.name),
|
||||
scope=cls.scope(),
|
||||
group=group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def scope(cls) -> ActionScopeStr:
|
||||
|
@ -49,7 +71,7 @@ class DeleteGroupActionType(ActionType):
|
|||
TrashHandler.restore_item(
|
||||
user,
|
||||
"group",
|
||||
params.deleted_group_id,
|
||||
params.group_id,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
|
@ -59,11 +81,15 @@ class DeleteGroupActionType(ActionType):
|
|||
params: Params,
|
||||
action_to_redo: Action,
|
||||
):
|
||||
CoreHandler().delete_group_by_id(user, params.deleted_group_id)
|
||||
CoreHandler().delete_group_by_id(user, params.group_id)
|
||||
|
||||
|
||||
class CreateGroupActionType(ActionType):
|
||||
class CreateGroupActionType(UndoableActionType):
|
||||
type = "create_group"
|
||||
description = ActionTypeDescription(
|
||||
_("Create group"),
|
||||
_('Group "%(group_name)s" (%(group_id)s) created.'),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
|
@ -82,14 +108,13 @@ class CreateGroupActionType(ActionType):
|
|||
"""
|
||||
|
||||
group_user = CoreHandler().create_group(user, name=group_name)
|
||||
|
||||
# noinspection PyTypeChecker
|
||||
group_id: int = group_user.group_id
|
||||
group = group_user.group
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(group_id, group_name),
|
||||
params=cls.Params(group.id, group_name),
|
||||
scope=cls.scope(),
|
||||
group=group,
|
||||
)
|
||||
return group_user
|
||||
|
||||
|
@ -118,14 +143,21 @@ class CreateGroupActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class UpdateGroupActionType(ActionType):
|
||||
class UpdateGroupActionType(UndoableActionType):
|
||||
type = "update_group"
|
||||
description = ActionTypeDescription(
|
||||
_("Update group"),
|
||||
_(
|
||||
"Group (%(group_id)s) name changed from "
|
||||
'"%(original_group_name)s" to "%(group_name)s."'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
original_group_name: str
|
||||
new_group_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -151,10 +183,11 @@ class UpdateGroupActionType(ActionType):
|
|||
user=user,
|
||||
params=cls.Params(
|
||||
group.id,
|
||||
group_name=new_group_name,
|
||||
original_group_name=original_group_name,
|
||||
new_group_name=new_group_name,
|
||||
),
|
||||
scope=cls.scope(),
|
||||
group=group,
|
||||
)
|
||||
return group
|
||||
|
||||
|
@ -187,20 +220,24 @@ class UpdateGroupActionType(ActionType):
|
|||
CoreHandler().update_group(
|
||||
user,
|
||||
group,
|
||||
name=params.new_group_name,
|
||||
name=params.group_name,
|
||||
)
|
||||
|
||||
|
||||
class OrderGroupsActionType(ActionType):
|
||||
class OrderGroupsActionType(UndoableActionType):
|
||||
type = "order_groups"
|
||||
description = ActionTypeDescription(
|
||||
_("Order groups"),
|
||||
_("Groups order changed."),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
original_order: List[int]
|
||||
new_order: List[int]
|
||||
group_ids: List[int]
|
||||
original_group_ids: List[int]
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, group_ids: List[int]) -> None:
|
||||
def do(cls, user: AbstractUser, group_ids_in_order: List[int]) -> None:
|
||||
"""
|
||||
Changes the order of groups for a user.
|
||||
See baserow.core.handler.CoreHandler.order_groups for more details. Undoing
|
||||
|
@ -211,15 +248,15 @@ class OrderGroupsActionType(ActionType):
|
|||
:param group_ids: The ids of the groups to order.
|
||||
"""
|
||||
|
||||
original_order = CoreHandler().get_groups_order(user)
|
||||
original_group_ids_in_order = CoreHandler().get_groups_order(user)
|
||||
|
||||
CoreHandler().order_groups(user, group_ids)
|
||||
CoreHandler().order_groups(user, group_ids_in_order)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
original_order,
|
||||
new_order=group_ids,
|
||||
group_ids_in_order,
|
||||
original_group_ids_in_order,
|
||||
),
|
||||
scope=cls.scope(),
|
||||
)
|
||||
|
@ -235,7 +272,7 @@ class OrderGroupsActionType(ActionType):
|
|||
params: Params,
|
||||
action_to_undo: Action,
|
||||
):
|
||||
CoreHandler().order_groups(user, params.original_order)
|
||||
CoreHandler().order_groups(user, params.original_group_ids)
|
||||
|
||||
@classmethod
|
||||
def redo(
|
||||
|
@ -244,17 +281,21 @@ class OrderGroupsActionType(ActionType):
|
|||
params: Params,
|
||||
action_to_redo: Action,
|
||||
):
|
||||
CoreHandler().order_groups(user, params.new_order)
|
||||
CoreHandler().order_groups(user, params.group_ids)
|
||||
|
||||
|
||||
class OrderApplicationsActionType(ActionType):
|
||||
class OrderApplicationsActionType(UndoableActionType):
|
||||
type = "order_applications"
|
||||
description = ActionTypeDescription(
|
||||
_("Order applications"), _("Applications reordered"), GROUP_CONTEXT
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
application_ids: List[int]
|
||||
original_application_ids: List[int]
|
||||
new_application_ids: List[int]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -272,16 +313,17 @@ class OrderApplicationsActionType(ActionType):
|
|||
:param application_ids_in_order: A list of ids in the new order.
|
||||
"""
|
||||
|
||||
old_ids_in_order = list(
|
||||
original_application_ids_in_order = list(
|
||||
CoreHandler().order_applications(user, group, application_ids_in_order)
|
||||
)
|
||||
|
||||
params = cls.Params(
|
||||
group_id=group.id,
|
||||
original_application_ids=old_ids_in_order,
|
||||
new_application_ids=application_ids_in_order,
|
||||
group.id,
|
||||
group.name,
|
||||
application_ids_in_order,
|
||||
original_application_ids_in_order,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(group.id))
|
||||
cls.register_action(user, params, scope=cls.scope(group.id), group=group)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
|
@ -295,15 +337,25 @@ class OrderApplicationsActionType(ActionType):
|
|||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
group = CoreHandler().get_group_for_update(params.group_id)
|
||||
CoreHandler().order_applications(user, group, params.new_application_ids)
|
||||
CoreHandler().order_applications(user, group, params.application_ids)
|
||||
|
||||
|
||||
class CreateApplicationActionType(ActionType):
|
||||
class CreateApplicationActionType(UndoableActionType):
|
||||
type = "create_application"
|
||||
description = ActionTypeDescription(
|
||||
_("Create application"),
|
||||
_('"%(application_name)s" (%(application_id)s) %(application_type)s created'),
|
||||
GROUP_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
application_type: str
|
||||
application_id: int
|
||||
application_name: str
|
||||
with_data: bool
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -332,8 +384,19 @@ class CreateApplicationActionType(ActionType):
|
|||
user, group, application_type, name=name, init_with_data=init_with_data
|
||||
)
|
||||
|
||||
params = cls.Params(application.id)
|
||||
cls.register_action(user, params, cls.scope(group.id))
|
||||
application_type = application_type_registry.get_by_model(
|
||||
application.specific_class
|
||||
)
|
||||
|
||||
params = cls.Params(
|
||||
group.id,
|
||||
group.name,
|
||||
application_type.type,
|
||||
application.id,
|
||||
application.name,
|
||||
init_with_data,
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(group.id), group=group)
|
||||
|
||||
return application
|
||||
|
||||
|
@ -353,12 +416,24 @@ class CreateApplicationActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class DeleteApplicationActionType(ActionType):
|
||||
class DeleteApplicationActionType(UndoableActionType):
|
||||
type = "delete_application"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete application"),
|
||||
_(
|
||||
'Application "%(application_name)s" (%(application_id)s) of type '
|
||||
"%(application_type)s deleted"
|
||||
),
|
||||
GROUP_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
application_type: str
|
||||
application_id: int
|
||||
application_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, application: Application) -> None:
|
||||
|
@ -374,8 +449,20 @@ class DeleteApplicationActionType(ActionType):
|
|||
|
||||
CoreHandler().delete_application(user, application)
|
||||
|
||||
params = cls.Params(application.id)
|
||||
cls.register_action(user, params, cls.scope(application.group.id))
|
||||
group = application.group
|
||||
application_type = application_type_registry.get_by_model(
|
||||
application.specific_class
|
||||
)
|
||||
params = cls.Params(
|
||||
group.id,
|
||||
group.name,
|
||||
application_type.type,
|
||||
application.id,
|
||||
application.name,
|
||||
)
|
||||
cls.register_action(
|
||||
user, params, scope=cls.scope(application.group.id), group=group
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
|
@ -393,14 +480,25 @@ class DeleteApplicationActionType(ActionType):
|
|||
CoreHandler().delete_application(user, application)
|
||||
|
||||
|
||||
class UpdateApplicationActionType(ActionType):
|
||||
class UpdateApplicationActionType(UndoableActionType):
|
||||
type = "update_application"
|
||||
description = ActionTypeDescription(
|
||||
_("Update application"),
|
||||
_(
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed "
|
||||
'from "%(original_application_name)s" to "%(application_name)s"'
|
||||
),
|
||||
GROUP_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
application_type: str
|
||||
application_id: int
|
||||
original_name: str
|
||||
new_name: str
|
||||
application_name: str
|
||||
original_application_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, application: Application, name: str) -> Application:
|
||||
|
@ -419,9 +517,22 @@ class UpdateApplicationActionType(ActionType):
|
|||
original_name = application.name
|
||||
|
||||
application = CoreHandler().update_application(user, application, name)
|
||||
application_type = application_type_registry.get_by_model(
|
||||
application.specific_class
|
||||
)
|
||||
group = application.group
|
||||
|
||||
params = cls.Params(application.id, original_name, name)
|
||||
cls.register_action(user, params, cls.scope(application.group.id))
|
||||
params = cls.Params(
|
||||
group.id,
|
||||
group.name,
|
||||
application_type.type,
|
||||
application.id,
|
||||
name,
|
||||
original_name,
|
||||
)
|
||||
cls.register_action(
|
||||
user, params, scope=cls.scope(application.group.id), group=group
|
||||
)
|
||||
|
||||
return application
|
||||
|
||||
|
@ -432,20 +543,36 @@ class UpdateApplicationActionType(ActionType):
|
|||
@classmethod
|
||||
def undo(cls, user: AbstractUser, params: Params, action_being_undone: Action):
|
||||
application = CoreHandler().get_application(params.application_id)
|
||||
CoreHandler().update_application(user, application, params.original_name)
|
||||
CoreHandler().update_application(
|
||||
user, application, params.original_application_name
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
application = CoreHandler().get_application(params.application_id)
|
||||
CoreHandler().update_application(user, application, params.new_name)
|
||||
CoreHandler().update_application(user, application, params.application_name)
|
||||
|
||||
|
||||
class DuplicateApplicationActionType(ActionType):
|
||||
class DuplicateApplicationActionType(UndoableActionType):
|
||||
type = "duplicate_application"
|
||||
description = ActionTypeDescription(
|
||||
_("Duplicate application"),
|
||||
_(
|
||||
'Application "%(application_name)s" (%(application_id)s) of type %(application_type)s '
|
||||
'duplicated from "%(original_application_name)s" (%(original_application_id)s)'
|
||||
),
|
||||
GROUP_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
group_id: int
|
||||
group_name: str
|
||||
application_type: str
|
||||
application_id: int
|
||||
application_name: str
|
||||
original_application_id: int
|
||||
original_application_name: str
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -466,16 +593,28 @@ class DuplicateApplicationActionType(ActionType):
|
|||
:return: The new (duplicated) application instance.
|
||||
"""
|
||||
|
||||
new_application_clone = CoreHandler().duplicate_application(
|
||||
new_app_clone = CoreHandler().duplicate_application(
|
||||
user,
|
||||
application,
|
||||
progress_builder,
|
||||
)
|
||||
application_type = application_type_registry.get_by_model(
|
||||
application.specific_class
|
||||
)
|
||||
group = application.group
|
||||
|
||||
params = cls.Params(new_application_clone.id)
|
||||
cls.register_action(user, params, cls.scope(application.group.id))
|
||||
params = cls.Params(
|
||||
group.id,
|
||||
group.name,
|
||||
application_type.type,
|
||||
new_app_clone.id,
|
||||
new_app_clone.name,
|
||||
application.id,
|
||||
application.name,
|
||||
)
|
||||
cls.register_action(user, params, cls.scope(application.group.id), group=group)
|
||||
|
||||
return new_application_clone
|
||||
return new_app_clone
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
|
@ -493,12 +632,24 @@ class DuplicateApplicationActionType(ActionType):
|
|||
)
|
||||
|
||||
|
||||
class InstallTemplateActionType(ActionType):
|
||||
class InstallTemplateActionType(UndoableActionType):
|
||||
type = "install_template"
|
||||
description = ActionTypeDescription(
|
||||
_("Install template"),
|
||||
_(
|
||||
'Template "%(template_name)s" (%(template_id)s) installed '
|
||||
"into application IDs %(installed_application_ids)s"
|
||||
),
|
||||
GROUP_CONTEXT,
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
installed_applications_ids: List[int]
|
||||
group_id: int
|
||||
group_name: str
|
||||
template_id: int
|
||||
template_name: str
|
||||
installed_application_ids: List[int]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
|
@ -529,8 +680,14 @@ class InstallTemplateActionType(ActionType):
|
|||
progress_builder=progress_builder,
|
||||
)
|
||||
|
||||
params = cls.Params([app.id for app in installed_applications])
|
||||
cls.register_action(user, params, cls.scope(group.id))
|
||||
params = cls.Params(
|
||||
group.id,
|
||||
group.name,
|
||||
template.id,
|
||||
template.name,
|
||||
[app.id for app in installed_applications],
|
||||
)
|
||||
cls.register_action(user, params, scope=cls.scope(group.id), group=group)
|
||||
|
||||
return installed_applications
|
||||
|
||||
|
@ -541,13 +698,13 @@ class InstallTemplateActionType(ActionType):
|
|||
@classmethod
|
||||
def undo(cls, user: AbstractUser, params: Params, action_being_undone: Action):
|
||||
handler = CoreHandler()
|
||||
for application_id in params.installed_applications_ids:
|
||||
for application_id in params.installed_application_ids:
|
||||
application = CoreHandler().get_application(application_id)
|
||||
handler.delete_application(user, application)
|
||||
|
||||
@classmethod
|
||||
def redo(cls, user: AbstractUser, params: Params, action_being_redone: Action):
|
||||
for application_id in params.installed_applications_ids:
|
||||
for application_id in params.installed_application_ids:
|
||||
TrashHandler.restore_item(
|
||||
user, "application", application_id, parent_trash_item_id=None
|
||||
)
|
||||
|
|
24
backend/src/baserow/core/apps.py
Normal file → Executable file
24
backend/src/baserow/core/apps.py
Normal file → Executable file
|
@ -159,6 +159,28 @@ class CoreConfig(AppConfig):
|
|||
action_type_registry.register(DuplicateApplicationActionType())
|
||||
action_type_registry.register(InstallTemplateActionType())
|
||||
|
||||
from baserow.core.snapshots.actions import (
|
||||
CreateSnapshotActionType,
|
||||
DeleteSnapshotActionType,
|
||||
RestoreSnapshotActionType,
|
||||
)
|
||||
|
||||
action_type_registry.register(CreateSnapshotActionType())
|
||||
action_type_registry.register(DeleteSnapshotActionType())
|
||||
action_type_registry.register(RestoreSnapshotActionType())
|
||||
|
||||
from baserow.core.user.actions import (
|
||||
CancelUserDeletionActionType,
|
||||
CreateUserActionType,
|
||||
ScheduleUserDeletionActionType,
|
||||
UpdateUserActionType,
|
||||
)
|
||||
|
||||
action_type_registry.register(CreateUserActionType())
|
||||
action_type_registry.register(UpdateUserActionType())
|
||||
action_type_registry.register(ScheduleUserDeletionActionType())
|
||||
action_type_registry.register(CancelUserDeletionActionType())
|
||||
|
||||
from baserow.core.action.scopes import (
|
||||
ApplicationActionScopeType,
|
||||
GroupActionScopeType,
|
||||
|
@ -172,7 +194,7 @@ class CoreConfig(AppConfig):
|
|||
from baserow.core.jobs.registries import job_type_registry
|
||||
|
||||
from .job_types import DuplicateApplicationJobType, InstallTemplateJobType
|
||||
from .snapshots.job_type import CreateSnapshotJobType, RestoreSnapshotJobType
|
||||
from .snapshots.job_types import CreateSnapshotJobType, RestoreSnapshotJobType
|
||||
|
||||
job_type_registry.register(DuplicateApplicationJobType())
|
||||
job_type_registry.register(InstallTemplateJobType())
|
||||
|
|
|
@ -113,7 +113,7 @@ class JobHandler:
|
|||
states_q |= Q(state=state)
|
||||
return states_q
|
||||
|
||||
queryset = Job.objects.filter(user=user)
|
||||
queryset = Job.objects.filter(user=user).order_by("-updated_on")
|
||||
|
||||
if filter_states:
|
||||
queryset = queryset.filter(get_job_states_filter(filter_states))
|
||||
|
|
|
@ -6,8 +6,10 @@ from django.db import models
|
|||
from baserow.api.sessions import (
|
||||
get_client_undo_redo_action_group_id,
|
||||
get_untrusted_client_session_id,
|
||||
get_user_remote_addr_ip,
|
||||
set_client_undo_redo_action_group_id,
|
||||
set_untrusted_client_session_id,
|
||||
set_user_remote_addr_ip,
|
||||
)
|
||||
|
||||
|
||||
|
@ -61,6 +63,37 @@ class JobWithUserDataMixin(models.Model):
|
|||
abstract = True
|
||||
|
||||
|
||||
class JobWithUserIpAddress(JobWithUserDataMixin):
|
||||
|
||||
user_ip_address = models.GenericIPAddressField(
|
||||
null=True, help_text="The user IP address."
|
||||
)
|
||||
|
||||
def _save_user_data_if_not_present(self, user: AbstractUser) -> None:
|
||||
"""
|
||||
Save the user session in the job so to be able to restore.
|
||||
Call this in a request context and not from a celery job or other contexts.
|
||||
|
||||
:param user: The user to save the data for.
|
||||
"""
|
||||
|
||||
if getattr(self, "user_ip_address") is None:
|
||||
self.user_ip_address = get_user_remote_addr_ip(user)
|
||||
|
||||
def _restore_user_data_if_present(self, user: AbstractUser) -> None:
|
||||
"""
|
||||
Restore the user session in the job so to be able to restore.
|
||||
|
||||
:param user: The user to restore the data for.
|
||||
"""
|
||||
|
||||
if getattr(self, "user_ip_address") is not None:
|
||||
set_user_remote_addr_ip(user, self.user_ip_address)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
||||
|
||||
class JobWithWebsocketId(JobWithUserDataMixin):
|
||||
"""
|
||||
This mixin add the websocket id to the job so that actions and handlers can
|
||||
|
|
|
@ -87,3 +87,4 @@ class Job(CreatedAndUpdatedOnMixin, PolymorphicContentTypeMixin, models.Model):
|
|||
|
||||
class Meta:
|
||||
ordering = ("id",)
|
||||
indexes = [models.Index(fields=["-updated_on"])]
|
||||
|
|
0
backend/src/baserow/core/locale/cs/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/cs/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-01-26 16:55+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -13,11 +13,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.11-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr ""
|
||||
|
@ -34,6 +173,9 @@ msgid "Accept invitation"
|
|||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -41,6 +183,46 @@ msgid ""
|
|||
"developer without leaving your browser."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -62,11 +244,65 @@ msgid ""
|
|||
"hours."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/core/locale/de/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/de/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:45+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 09:50+0100\n"
|
||||
"Last-Translator: Natthapon <natthapon@wagner-international.com>\n"
|
||||
"Language-Team: German <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s hat dich zu %(group_name)s eingeladen - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Einladung"
|
||||
|
@ -37,6 +176,9 @@ msgid "Accept invitation"
|
|||
msgstr "Einladung annehmen"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -47,6 +189,67 @@ msgstr ""
|
|||
"Zusammenarbeit mit über Projekte, Kunden und mehr. Es gibt Ihnen die "
|
||||
"Befugnisse eines Entwicklers ohne Ihren Browser zu verlassen."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Ein Passwort-Reset wurde für Ihr Konto ( %(username)s) beantragt am Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Wenn Sie dies nicht autorisiert haben, "
|
||||
"können Sie diese E-Mail einfach ignorieren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"Ein Passwort-Reset wurde für Ihr Konto ( %(username)s) beantragt am Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Wenn Sie dies nicht autorisiert haben, "
|
||||
"können Sie diese E-Mail einfach ignorieren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"Ein Passwort-Reset wurde für Ihr Konto ( %(username)s) beantragt am Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Wenn Sie dies nicht autorisiert haben, "
|
||||
"können Sie diese E-Mail einfach ignorieren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -74,11 +277,65 @@ msgstr ""
|
|||
"auf die untenstehende Schaltfläche, und Sie können Sie Ihr Passwort ändern. "
|
||||
"Dieser Link läuft ab in %(hours)s Stunden."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Passwort zurücksetzen - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s's Gruppe"
|
||||
|
|
0
backend/src/baserow/core/locale/en/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/en/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-07-04 11:05+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
|
@ -18,11 +18,150 @@ msgstr ""
|
|||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr ""
|
||||
|
@ -110,6 +249,48 @@ msgid ""
|
|||
"hours."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr ""
|
||||
|
@ -126,7 +307,7 @@ msgstr ""
|
|||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:173
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr ""
|
||||
|
|
BIN
backend/src/baserow/core/locale/es/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/core/locale/es/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -2,11 +2,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:45+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-11-22 14:48+0000\n"
|
||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-core/es/>\n"
|
||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"core/es/>\n"
|
||||
"Language: es\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s le invitó a %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Invitación"
|
||||
|
@ -29,14 +168,17 @@ msgid ""
|
|||
"<strong>%(first_name)s</strong> has invited you to collaborate on <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
msgstr ""
|
||||
"<strong>%(first_name)s</strong> te ha invitado a colaborar en "
|
||||
"<strong>%(group_name)s</strong>."
|
||||
"<strong>%(first_name)s</strong> te ha invitado a colaborar en <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:165
|
||||
msgid "Accept invitation"
|
||||
msgstr "Aceptar la invitación"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -47,6 +189,67 @@ msgstr ""
|
|||
"le permite colaborar en proyectos, clientes y más. Te da los poderes de un "
|
||||
"desarrollador sin dejando su navegador."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Se solicitó un restablecimiento de contraseña para su cuenta (%(username)s) "
|
||||
"el Baserow (%(public_web_frontend_hostname)s). Si no autorizó esto, "
|
||||
"simplemente puede ignorar este correo electrónico."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"Se solicitó un restablecimiento de contraseña para su cuenta (%(username)s) "
|
||||
"el Baserow (%(public_web_frontend_hostname)s). Si no autorizó esto, "
|
||||
"simplemente puede ignorar este correo electrónico."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"Se solicitó un restablecimiento de contraseña para su cuenta (%(username)s) "
|
||||
"el Baserow (%(public_web_frontend_hostname)s). Si no autorizó esto, "
|
||||
"simplemente puede ignorar este correo electrónico."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -74,11 +277,65 @@ msgstr ""
|
|||
"clic en el botón a continuación y podrá cambiar su contraseña. Este enlace "
|
||||
"caducará en %(hours)s horas."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Restablecer contraseña - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s grupo"
|
||||
|
|
0
backend/src/baserow/core/locale/fr/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/fr/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,11 +2,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-30 13:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-07-05 11:27+0000\n"
|
||||
"Last-Translator: Jérémie Pardou-Piquemal <jrmi@jeremiez.net>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-core/fr/>\n"
|
||||
"Language-Team: French <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"core/fr/>\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.13.1-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s vous a invité à %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Invitation"
|
||||
|
@ -127,6 +266,48 @@ msgstr ""
|
|||
"cliquer sur le bouton ci-dessous, et vous vous pourrez modifier votre mot de "
|
||||
"passe. Ce lien expirera dans %(hours)s heures."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Réinitialiser le mot de passe - Baserow"
|
||||
|
@ -143,7 +324,7 @@ msgstr "Compte supprimé définitivement - Baserow"
|
|||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr "Suppression du compte annulée - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:169
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "Groupe de %(name)s"
|
||||
|
|
0
backend/src/baserow/core/locale/it/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/it/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 09:55+0100\n"
|
||||
"Last-Translator: Sara Cinacchi <sara.cinacchi@gmail.com>\n"
|
||||
"Language-Team: Italian <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s ti ha imvitato su %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Invito"
|
||||
|
@ -37,6 +176,9 @@ msgid "Accept invitation"
|
|||
msgstr "Accetta invito"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -47,6 +189,67 @@ msgstr ""
|
|||
"progetti, clienti ed altro. Ti da i \"poteri\" di uno sviluppatore senza "
|
||||
"lasciare il tuo browser."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Una richiesta di reimpostare la password é stata richiesta per il tuo "
|
||||
"account (%(username)s) su Baserow (%(public_web_frontend_hostname)s). Se non "
|
||||
"hai autorizzato questa richiesta, puoi semplicemente ignorare qiesta email."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"Una richiesta di reimpostare la password é stata richiesta per il tuo "
|
||||
"account (%(username)s) su Baserow (%(public_web_frontend_hostname)s). Se non "
|
||||
"hai autorizzato questa richiesta, puoi semplicemente ignorare qiesta email."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"Una richiesta di reimpostare la password é stata richiesta per il tuo "
|
||||
"account (%(username)s) su Baserow (%(public_web_frontend_hostname)s). Se non "
|
||||
"hai autorizzato questa richiesta, puoi semplicemente ignorare qiesta email."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -74,11 +277,65 @@ msgstr ""
|
|||
"sotto, e potrai cambiare la tua password. Questo link scadrà in %(hours)s "
|
||||
"ore."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Reimposta password -Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s del gruppo"
|
||||
|
|
BIN
backend/src/baserow/core/locale/mr/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/core/locale/mr/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
|
@ -2,11 +2,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-30 13:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-11-28 18:47+0000\n"
|
||||
"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
|
||||
"Language-Team: Marathi <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-core/mr/>\n"
|
||||
"Language-Team: Marathi <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"core/mr/>\n"
|
||||
"Language: mr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Weblate 4.15-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s ने तुम्हाला %(group_name)s - Baserow वर आमंत्रित केले आहे"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "आमंत्रण"
|
||||
|
@ -29,8 +168,8 @@ msgid ""
|
|||
"<strong>%(first_name)s</strong> has invited you to collaborate on <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
msgstr ""
|
||||
"<strong>%(first_name)s</strong> ने तुम्हाला <strong>%(group_name)s</strong> "
|
||||
"वर सहयोग करण्यासाठी आमंत्रित केले आहे."
|
||||
"<strong>%(first_name)s</strong> ने तुम्हाला <strong>%(group_name)s</strong> वर "
|
||||
"सहयोग करण्यासाठी आमंत्रित केले आहे."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:165
|
||||
msgid "Accept invitation"
|
||||
|
@ -46,9 +185,9 @@ msgid ""
|
|||
"collaborate on projects, customers and more. It gives you the powers of a "
|
||||
"developer without leaving your browser."
|
||||
msgstr ""
|
||||
"Baserow हे ओपन सोर्स नो-कोड डेटाबेस टूल आहे जे तुम्हाला प्रकल्प(प्रोजेक्ट), "
|
||||
"ग्राहक आणि इतर बऱ्याच बाबतींत सहयोग करण्यास अनुमती देते. हे तुम्हाला तुमचा "
|
||||
"ब्राउझर न सोडता विकसकाचे अधिकार देते."
|
||||
"Baserow हे ओपन सोर्स नो-कोड डेटाबेस टूल आहे जे तुम्हाला प्रकल्प(प्रोजेक्ट), ग्राहक आणि इतर "
|
||||
"बऱ्याच बाबतींत सहयोग करण्यास अनुमती देते. हे तुम्हाला तुमचा ब्राउझर न सोडता विकसकाचे "
|
||||
"अधिकार देते."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
|
@ -60,8 +199,8 @@ msgid ""
|
|||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Baserow (%(public_web_frontend_hostname)s) वरील तुमचे खाते (%(username)s) "
|
||||
"कायमचे हटवले गेले आहे."
|
||||
"Baserow (%(public_web_frontend_hostname)s) वरील तुमचे खाते (%(username)s) कायमचे "
|
||||
"हटवले गेले आहे."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
|
@ -75,8 +214,7 @@ msgid ""
|
|||
"cancelled."
|
||||
msgstr ""
|
||||
"Baserow (%(public_web_frontend_hostname)s) वरील आपले खाते (%(username)s) "
|
||||
"हटविण्यासाठी प्रलंबित होते, परंतु आपण लॉग इन केले आहे म्हणून हे ऑपरेशन रद्द "
|
||||
"केले गेले आहे."
|
||||
"हटविण्यासाठी प्रलंबित होते, परंतु आपण लॉग इन केले आहे म्हणून हे ऑपरेशन रद्द केले गेले आहे."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
|
@ -96,8 +234,8 @@ msgid ""
|
|||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
"जर तुम्ही तुमचा विचार बदलला असेल आणि तुमचे खाते हटवणे रद्द करायचे असेल, तर "
|
||||
"तुम्हाला फक्त पुन्हा लॉग इन करावे लागेल."
|
||||
"जर तुम्ही तुमचा विचार बदलला असेल आणि तुमचे खाते हटवणे रद्द करायचे असेल, तर तुम्हाला फक्त "
|
||||
"पुन्हा लॉग इन करावे लागेल."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
|
@ -112,8 +250,8 @@ msgid ""
|
|||
"simply ignore this email."
|
||||
msgstr ""
|
||||
"बेसरोवर (%(public_web_frontend_hostname)s) तुमच्या खात्यासाठी (%(username)s) "
|
||||
"पासवर्ड रीसेट करण्याची विनंती केली गेली होती. तुम्ही हे अधिकृत केले नसल्यास, "
|
||||
"तुम्ही या ईमेलकडे दुर्लक्ष करू शकता."
|
||||
"पासवर्ड रीसेट करण्याची विनंती केली गेली होती. तुम्ही हे अधिकृत केले नसल्यास, तुम्ही या "
|
||||
"ईमेलकडे दुर्लक्ष करू शकता."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:156
|
||||
#, python-format
|
||||
|
@ -122,8 +260,50 @@ msgid ""
|
|||
"will be able to change your password. This link will expire in %(hours)s "
|
||||
"hours."
|
||||
msgstr ""
|
||||
"तुमचा पासवर्ड रीसेट सुरू ठेवण्यासाठी, फक्त खालील बटणावर क्लिक करा आणि तुम्ही "
|
||||
"तुमचा पासवर्ड बदलण्यास सक्षम असाल. ही लिंक %(hours)s तासांत कालबाह्य होईल."
|
||||
"तुमचा पासवर्ड रीसेट सुरू ठेवण्यासाठी, फक्त खालील बटणावर क्लिक करा आणि तुम्ही तुमचा "
|
||||
"पासवर्ड बदलण्यास सक्षम असाल. ही लिंक %(hours)s तासांत कालबाह्य होईल."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
|
@ -141,7 +321,7 @@ msgstr "खाते कायमचे हटवले - Baserow"
|
|||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr "खाते हटविणे रद्द केले - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:169
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s चा गट"
|
||||
|
|
0
backend/src/baserow/core/locale/nb_NO/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/nb_NO/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 09:57+0100\n"
|
||||
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
|
||||
"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/baserow/"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s Inviterte deg til %(group_name)s — Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Invitasjon"
|
||||
|
@ -37,6 +176,9 @@ msgid "Accept invitation"
|
|||
msgstr "Godta invitasjon"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -47,6 +189,67 @@ msgstr ""
|
|||
"prosjekter, kunder, med mer. Det gir deg utviklermuligheter uten å forlate "
|
||||
"nettleseren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Passordtilbakestilling forespurt for kontoen din (%(username)s) på Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Hvis du ikke utførte dette, kan du se "
|
||||
"bort fra denne e-posten."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"Passordtilbakestilling forespurt for kontoen din (%(username)s) på Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Hvis du ikke utførte dette, kan du se "
|
||||
"bort fra denne e-posten."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"Passordtilbakestilling forespurt for kontoen din (%(username)s) på Baserow "
|
||||
"(%(public_web_frontend_hostname)s). Hvis du ikke utførte dette, kan du se "
|
||||
"bort fra denne e-posten."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -73,11 +276,65 @@ msgstr ""
|
|||
"For å fortsette tilbakestilling av passord kan du klikke på knappen nedenfor "
|
||||
"for å endre passordet ditt. Lenken vil utløpe om %(hours)s timer."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Tilbakestill passord — Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s sin gruppe"
|
||||
|
|
0
backend/src/baserow/core/locale/nl/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/nl/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:46+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 10:03+0100\n"
|
||||
"Last-Translator: Bram <bram@baserow.io>\n"
|
||||
"Language-Team: Dutch <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s heeft je uitgenodigd voor %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Uitnodiging"
|
||||
|
@ -37,6 +176,9 @@ msgid "Accept invitation"
|
|||
msgstr "Uitnodiging accepteren"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -47,6 +189,67 @@ msgstr ""
|
|||
"samenwerken aan projecten, klanten en nog veel meer. Je hebt de kracht van "
|
||||
"een ontwikkelaar zonder de browser te verlaten."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"Een verzoek voor het aanmaken van een nieuw wachtwoord is ontvangen voor je "
|
||||
"account (%(username)s) op Baserow (%(public_web_frontend_hostname)s). Als "
|
||||
"dit zonder jouw toestemming gebeurde, kun je deze e-mail gewoon negeren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"Een verzoek voor het aanmaken van een nieuw wachtwoord is ontvangen voor je "
|
||||
"account (%(username)s) op Baserow (%(public_web_frontend_hostname)s). Als "
|
||||
"dit zonder jouw toestemming gebeurde, kun je deze e-mail gewoon negeren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"Een verzoek voor het aanmaken van een nieuw wachtwoord is ontvangen voor je "
|
||||
"account (%(username)s) op Baserow (%(public_web_frontend_hostname)s). Als "
|
||||
"dit zonder jouw toestemming gebeurde, kun je deze e-mail gewoon negeren."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -73,11 +276,65 @@ msgstr ""
|
|||
"Maak een nieuw wachtwoord aan door te klikken op de knop hieronder. Dan kun "
|
||||
"je je wachtwoord veranderen. Deze link is %(hours)s uur geldig."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Nieuw wachtwoord aanmaken - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "Groep van %(name)s"
|
||||
|
|
0
backend/src/baserow/core/locale/pl/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/pl/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,11 +2,11 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-30 13:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-08-09 17:15+0000\n"
|
||||
"Last-Translator: PiotrEsse <piotr.esse@spero.click>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/baserow/"
|
||||
"backend-core/pl/>\n"
|
||||
"Language-Team: Polish <https://hosted.weblate.org/projects/baserow/backend-"
|
||||
"core/pl/>\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -15,11 +15,150 @@ msgstr ""
|
|||
"|| n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.14-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s zaprosił Ciebie do %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Zaproszenie"
|
||||
|
@ -30,8 +169,8 @@ msgid ""
|
|||
"<strong>%(first_name)s</strong> has invited you to collaborate on <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
msgstr ""
|
||||
"<strong>%(first_name)s</strong> zaprosił cię do współpracy w "
|
||||
"<strong>%(group_name)s</strong>."
|
||||
"<strong>%(first_name)s</strong> zaprosił cię do współpracy w <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:165
|
||||
msgid "Accept invitation"
|
||||
|
@ -126,6 +265,48 @@ msgstr ""
|
|||
"Aby kontynuować resetowanie hasła, wystarczy kliknąć poniższy przycisk, a "
|
||||
"będziesz mógł zmienić swoje hasło. Ten link wygaśnie za %(hours)s godziy/n."
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Resetowanie hasła - Baserow"
|
||||
|
@ -142,7 +323,7 @@ msgstr "Konto trwale usunięte - Baserow"
|
|||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr "Usunięcie konta anulowane - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:169
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "Grupa %(name)s"
|
||||
|
|
BIN
backend/src/baserow/core/locale/pt_BR/LC_MESSAGES/django.mo
Normal file → Executable file
BIN
backend/src/baserow/core/locale/pt_BR/LC_MESSAGES/django.mo
Normal file → Executable file
Binary file not shown.
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-10-28 20:39+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-21 19:14+0000\n"
|
||||
"Last-Translator: James Braves <dubavy@zetmail.com>\n"
|
||||
"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
|
||||
|
@ -14,22 +14,165 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=2; plural=n > 1;\n"
|
||||
"X-Generator: Weblate 4.12-dev\n"
|
||||
|
||||
#: src/baserow/core/emails.py:88
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s convidou você para o %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:7
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "Convite"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:9
|
||||
#, python-format
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " <strong>%(first_name)s</strong> has invited you to collaborate "
|
||||
#| "on\n"
|
||||
#| " <strong>%(group_name)s</strong>.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"\n"
|
||||
" <strong>%(first_name)s</strong> has invited you to collaborate on\n"
|
||||
" <strong>%(group_name)s</strong>.\n"
|
||||
" "
|
||||
"<strong>%(first_name)s</strong> has invited you to collaborate on <strong>"
|
||||
"%(group_name)s</strong>."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" <strong>%(first_name)s</strong> tem um convite para você colaborar "
|
||||
|
@ -37,20 +180,28 @@ msgstr ""
|
|||
" <strong>%(group_name)s</strong>.\n"
|
||||
" "
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:20
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:165
|
||||
msgid "Accept invitation"
|
||||
msgstr "Aceitar convite"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:26
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:29
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " Baserow is an open source no-code database tool which allows "
|
||||
#| "you to collaborate\n"
|
||||
#| " on projects, customers and more. It gives you the powers of a "
|
||||
#| "developer without\n"
|
||||
#| " leaving your browser.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"\n"
|
||||
" Baserow is an open source no-code database tool which allows you "
|
||||
"to collaborate\n"
|
||||
" on projects, customers and more. It gives you the powers of a "
|
||||
"developer without\n"
|
||||
" leaving your browser.\n"
|
||||
" "
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
"collaborate on projects, customers and more. It gives you the powers of a "
|
||||
"developer without leaving your browser."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Baserow é uma ferramenta de banco de dados de código-aberto e no-"
|
||||
|
@ -60,20 +211,65 @@ msgstr ""
|
|||
" sem sair do seu navegador.\n"
|
||||
" "
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:7
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:23
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
msgstr "Resetar senha"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:9
|
||||
#, python-format
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " A password reset was requested for your account (%(username)s) "
|
||||
#| "on\n"
|
||||
#| " Baserow (%(public_web_frontend_hostname)s). If you did not "
|
||||
#| "authorize this,\n"
|
||||
#| " you may simply ignore this email.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"\n"
|
||||
" A password reset was requested for your account (%(username)s) on\n"
|
||||
" Baserow (%(public_web_frontend_hostname)s). If you did not "
|
||||
"authorize this,\n"
|
||||
" you may simply ignore this email.\n"
|
||||
" "
|
||||
"A password reset was requested for your account (%(username)s) on Baserow "
|
||||
"(%(public_web_frontend_hostname)s). If you did not authorize this, you may "
|
||||
"simply ignore this email."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Uma redefinição de senha foi solicitada para sua conta "
|
||||
|
@ -83,15 +279,19 @@ msgstr ""
|
|||
" você pode simplesmente ignorar este e-mail.\n"
|
||||
" "
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:16
|
||||
#, python-format
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:156
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "\n"
|
||||
#| " To continue with your password reset, simply click the button "
|
||||
#| "below, and you\n"
|
||||
#| " will be able to change your password. This link will expire in\n"
|
||||
#| " %(hours)s hours.\n"
|
||||
#| " "
|
||||
msgid ""
|
||||
"\n"
|
||||
" To continue with your password reset, simply click the button "
|
||||
"below, and you\n"
|
||||
" will be able to change your password. This link will expire in\n"
|
||||
" %(hours)s hours.\n"
|
||||
" "
|
||||
"To continue with your password reset, simply click the button below, and you "
|
||||
"will be able to change your password. This link will expire in %(hours)s "
|
||||
"hours."
|
||||
msgstr ""
|
||||
"\n"
|
||||
" Para continuar com sua redefinição de senha, basta clicar no botão "
|
||||
|
@ -100,11 +300,65 @@ msgstr ""
|
|||
" %(hours)s hours.\n"
|
||||
" "
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "Resetar senha - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:155
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s's grupo"
|
||||
|
|
BIN
backend/src/baserow/core/locale/ru/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/core/locale/ru/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-06-30 13:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-07-05 11:27+0000\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: none\n"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
|
||||
"X-Generator: Weblate 4.13.1-dev\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr ""
|
||||
|
@ -106,6 +245,48 @@ msgid ""
|
|||
"hours."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr ""
|
||||
|
@ -122,7 +303,7 @@ msgstr ""
|
|||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:169
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr ""
|
||||
|
|
0
backend/src/baserow/core/locale/zh_Hans/LC_MESSAGES/django.mo
Normal file → Executable file
0
backend/src/baserow/core/locale/zh_Hans/LC_MESSAGES/django.mo
Normal file → Executable file
|
@ -2,7 +2,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2022-04-22 08:52+0000\n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: 2022-04-22 10:00+0100\n"
|
||||
"Last-Translator: Joey Li <joeyli16@icloud.com>\n"
|
||||
"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
|
||||
|
@ -14,11 +14,150 @@ msgstr ""
|
|||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
"X-Generator: Poedit 3.0.1\n"
|
||||
|
||||
#: src/baserow/core/action/scopes.py:9
|
||||
#, python-format
|
||||
msgid "in group \"%(group_name)s\" (%(group_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:29
|
||||
msgid "Delete group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:30
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) deleted."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:90
|
||||
msgid "Create group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:91
|
||||
#, python-format
|
||||
msgid "Group \"%(group_name)s\" (%(group_id)s) created."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:149
|
||||
msgid "Update group"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:151
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Group (%(group_id)s) name changed from \"%(original_group_name)s\" to "
|
||||
"\"%(group_name)s.\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:230
|
||||
msgid "Order groups"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:231
|
||||
msgid "Groups order changed."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Order applications"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:290
|
||||
msgid "Applications reordered"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:346
|
||||
msgid "Create application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:347
|
||||
#, python-format
|
||||
msgid ""
|
||||
"\"%(application_name)s\" (%(application_id)s) %(application_type)s created"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:422
|
||||
msgid "Delete application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:424
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:486
|
||||
msgid "Update application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:488
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application (%(application_id)s) of type %(application_type)s renamed from "
|
||||
"\"%(original_application_name)s\" to \"%(application_name)s\""
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:559
|
||||
msgid "Duplicate application"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:561
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Application \"%(application_name)s\" (%(application_id)s) of type "
|
||||
"%(application_type)s duplicated from \"%(original_application_name)s"
|
||||
"\" (%(original_application_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:638
|
||||
msgid "Install template"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/actions.py:640
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Template \"%(template_name)s\" (%(template_id)s) installed into application "
|
||||
"IDs %(installed_application_ids)s"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/emails.py:96
|
||||
#, python-format
|
||||
msgid "%(by)s invited you to %(group_name)s - Baserow"
|
||||
msgstr "%(by)s 邀请你加入 %(group_name)s - Baserow"
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:21
|
||||
msgid "Create Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:23
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) created for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:68
|
||||
msgid "Restore Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:70
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) restored from application "
|
||||
"\"%(original_application_name)s\" (%(original_application_id)s) to "
|
||||
"application \"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:124
|
||||
msgid "Delete Snapshot"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/snapshots/actions.py:126
|
||||
#, python-format
|
||||
msgid ""
|
||||
"Snapshot \"%(snapshot_name)s\" (%(snapshot_id)s) deleted for application "
|
||||
"\"%(application_name)s\" (%(application_id)s)."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:146
|
||||
msgid "Invitation"
|
||||
msgstr "邀请"
|
||||
|
@ -36,6 +175,9 @@ msgid "Accept invitation"
|
|||
msgstr "接受邀请"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/group_invitation.html:179
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:156
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:161
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:179
|
||||
msgid ""
|
||||
"Baserow is an open source no-code database tool which allows you to "
|
||||
|
@ -45,6 +187,64 @@ msgstr ""
|
|||
"Baserow 是一个开源的无代码数据库工具,允许你在项目、客户和其他方面进行协作。"
|
||||
"它让你在不离开浏览器的情况下拥有开发者的权力。"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:146
|
||||
msgid "Account permanently deleted"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deleted.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"has been permanently deleted."
|
||||
msgstr ""
|
||||
"你在 Baserow (%(public_web_frontend_hostname)s) 上的 (%(username)s) 账户正在"
|
||||
"请求重置密码。 如果你并未授权本次操作,可以忽略本封邮件。"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:146
|
||||
msgid "Account deletion cancelled"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_cancelled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"was pending deletion, but you've logged in so this operation has been "
|
||||
"cancelled."
|
||||
msgstr ""
|
||||
"你在 Baserow (%(public_web_frontend_hostname)s) 上的 (%(username)s) 账户正在"
|
||||
"请求重置密码。 如果你并未授权本次操作,可以忽略本封邮件。"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:146
|
||||
msgid "Account pending deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:151
|
||||
#, fuzzy, python-format
|
||||
#| msgid ""
|
||||
#| "A password reset was requested for your account (%(username)s) on Baserow "
|
||||
#| "(%(public_web_frontend_hostname)s). If you did not authorize this, you "
|
||||
#| "may simply ignore this email."
|
||||
msgid ""
|
||||
"Your account (%(username)s) on Baserow (%(public_web_frontend_hostname)s) "
|
||||
"will be permanently deleted in %(days_left)s days."
|
||||
msgstr ""
|
||||
"你在 Baserow (%(public_web_frontend_hostname)s) 上的 (%(username)s) 账户正在"
|
||||
"请求重置密码。 如果你并未授权本次操作,可以忽略本封邮件。"
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/account_deletion_scheduled.html:156
|
||||
msgid ""
|
||||
"If you've changed your mind and want to cancel your account deletion, you "
|
||||
"just have to login again."
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:146
|
||||
#: src/baserow/core/templates/baserow/core/user/reset_password.html:165
|
||||
msgid "Reset password"
|
||||
|
@ -70,11 +270,65 @@ msgstr ""
|
|||
"要继续重置密码,只需点击下面的按钮,然后你将能够更改你的密码。此链接将"
|
||||
"在%(hours)s 小时后失效。"
|
||||
|
||||
#: src/baserow/core/user/actions.py:20
|
||||
msgid "Create User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:22
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) created (via invitation: "
|
||||
"%(with_invitation_token)s, from template: %(template_id)s)"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:92
|
||||
msgid "Update User"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:93
|
||||
#, python-format
|
||||
msgid "User \"%(user_email)s\" (%(user_id)s) updated"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:136
|
||||
msgid "Schedule user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:138
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) scheduled to be deleted after grace "
|
||||
"time"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:169
|
||||
msgid "Cancel user deletion"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/actions.py:171
|
||||
#, python-format
|
||||
msgid ""
|
||||
"User \"%(user_email)s\" (%(user_id)s) logged in cancelling the deletion "
|
||||
"process"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:16
|
||||
msgid "Reset password - Baserow"
|
||||
msgstr "重置密码 - Baserow"
|
||||
|
||||
#: src/baserow/core/user/handler.py:162
|
||||
#: src/baserow/core/user/emails.py:37
|
||||
msgid "Account deletion scheduled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:56
|
||||
msgid "Account permanently deleted - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/emails.py:74
|
||||
msgid "Account deletion cancelled - Baserow"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/core/user/handler.py:205
|
||||
#, python-format
|
||||
msgid "%(name)s's group"
|
||||
msgstr "%(name)s 的团队"
|
||||
|
|
21
backend/src/baserow/core/migrations/0041_action_group.py
Executable file
21
backend/src/baserow/core/migrations/0041_action_group.py
Executable file
|
@ -0,0 +1,21 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-13 09:53
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("core", "0040_alter_groupinvitation_message"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="action",
|
||||
name="group",
|
||||
field=models.ForeignKey(
|
||||
null=True, on_delete=django.db.models.deletion.SET_NULL, to="core.group"
|
||||
),
|
||||
),
|
||||
]
|
47
backend/src/baserow/core/migrations/0042_add_ip_address_to_jobs.py
Executable file
47
backend/src/baserow/core/migrations/0042_add_ip_address_to_jobs.py
Executable file
|
@ -0,0 +1,47 @@
|
|||
# Generated by Django 3.2.13 on 2023-01-13 14:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("core", "0041_action_group"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="createsnapshotjob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="duplicateapplicationjob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="installtemplatejob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name="restoresnapshotjob",
|
||||
name="user_ip_address",
|
||||
field=models.GenericIPAddressField(
|
||||
help_text="The user IP address.", null=True
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="job",
|
||||
index=models.Index(
|
||||
fields=["-updated_on"], name="core_job_updated_e7a478_idx"
|
||||
),
|
||||
),
|
||||
]
|
|
@ -9,7 +9,11 @@ from django.db.models import Q, UniqueConstraint
|
|||
|
||||
from rest_framework.exceptions import NotAuthenticated
|
||||
|
||||
from baserow.core.jobs.mixins import JobWithUndoRedoIds, JobWithWebsocketId
|
||||
from baserow.core.jobs.mixins import (
|
||||
JobWithUndoRedoIds,
|
||||
JobWithUserIpAddress,
|
||||
JobWithWebsocketId,
|
||||
)
|
||||
from baserow.core.jobs.models import Job
|
||||
from baserow.core.user_files.models import UserFile
|
||||
|
||||
|
@ -464,7 +468,9 @@ class TrashEntry(models.Model):
|
|||
]
|
||||
|
||||
|
||||
class DuplicateApplicationJob(JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
class DuplicateApplicationJob(
|
||||
JobWithUserIpAddress, JobWithWebsocketId, JobWithUndoRedoIds, Job
|
||||
):
|
||||
|
||||
original_application = models.ForeignKey(
|
||||
Application,
|
||||
|
@ -501,7 +507,9 @@ class Snapshot(HierarchicalModelMixin, models.Model):
|
|||
return self.snapshot_from_application
|
||||
|
||||
|
||||
class InstallTemplateJob(JobWithWebsocketId, JobWithUndoRedoIds, Job):
|
||||
class InstallTemplateJob(
|
||||
JobWithUserIpAddress, JobWithWebsocketId, JobWithUndoRedoIds, Job
|
||||
):
|
||||
group = models.ForeignKey(
|
||||
Group,
|
||||
on_delete=models.CASCADE,
|
||||
|
|
|
@ -73,6 +73,12 @@ class CustomFieldsInstanceMixin:
|
|||
`serializer_field_overrides` property.
|
||||
"""
|
||||
|
||||
serializer_mixins = []
|
||||
"""
|
||||
The serializer mixins that must be added to the serializer. This property is
|
||||
useful if you want to add some custom SerializerMethodField for example.
|
||||
"""
|
||||
|
||||
def __init__(self):
|
||||
"""
|
||||
:raises ValueError: If the object does not have a `model_class` attribute.
|
||||
|
@ -105,10 +111,13 @@ class CustomFieldsInstanceMixin:
|
|||
else:
|
||||
field_names = self.serializer_field_names
|
||||
|
||||
mixins = [] if request_serializer else self.serializer_mixins
|
||||
|
||||
return get_serializer_class(
|
||||
self.model_class,
|
||||
field_names,
|
||||
field_overrides=field_overrides,
|
||||
base_mixins=mixins,
|
||||
*args,
|
||||
**kwargs,
|
||||
)
|
||||
|
|
176
backend/src/baserow/core/snapshots/actions.py
Executable file
176
backend/src/baserow/core/snapshots/actions.py
Executable file
|
@ -0,0 +1,176 @@
|
|||
import dataclasses
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionType,
|
||||
ActionTypeDescription,
|
||||
)
|
||||
from baserow.core.action.scopes import GroupActionScopeType
|
||||
from baserow.core.models import Snapshot
|
||||
from baserow.core.snapshots.exceptions import SnapshotDoesNotExist
|
||||
from baserow.core.snapshots.handler import SnapshotHandler
|
||||
from baserow.core.utils import Progress
|
||||
|
||||
|
||||
class CreateSnapshotActionType(ActionType):
|
||||
type = "create_snapshot"
|
||||
description = ActionTypeDescription(
|
||||
_("Create Snapshot"),
|
||||
_(
|
||||
'Snapshot "%(snapshot_name)s" (%(snapshot_id)s) created for '
|
||||
'application "%(application_name)s" (%(application_id)s).'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
application_id: int
|
||||
application_name: str
|
||||
snapshot_id: int
|
||||
snapshot_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, snapshot: Snapshot, progress: Progress):
|
||||
"""
|
||||
Creates a snapshot for the given application.
|
||||
|
||||
:param application_id: The id of the application for which a snapshot will be
|
||||
created.
|
||||
:param user: The user performing the delete.
|
||||
:param name: The name that will be given to the snapshot.
|
||||
"""
|
||||
|
||||
snapshot_created = SnapshotHandler().perform_create(snapshot, progress)
|
||||
application = snapshot.snapshot_from_application
|
||||
group = application.group
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
application.id, application.name, snapshot.id, snapshot.name
|
||||
),
|
||||
scope=cls.scope(group.id),
|
||||
group=group,
|
||||
)
|
||||
return snapshot_created
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
return GroupActionScopeType.value(group_id)
|
||||
|
||||
|
||||
class RestoreSnapshotActionType(ActionType):
|
||||
type = "restore_snapshot"
|
||||
description = ActionTypeDescription(
|
||||
_("Restore Snapshot"),
|
||||
_(
|
||||
'Snapshot "%(snapshot_name)s" (%(snapshot_id)s) restored from application '
|
||||
'"%(original_application_name)s" (%(original_application_id)s) '
|
||||
'to application "%(application_name)s" (%(application_id)s).'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
application_id: int
|
||||
application_name: str
|
||||
snapshot_id: int
|
||||
snapshot_name: str
|
||||
original_application_id: int
|
||||
original_application_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, snapshot: Snapshot, progress: Progress):
|
||||
"""
|
||||
Creates a snapshot for the given application.
|
||||
|
||||
:param snapshot_id: The id of the snapshot that will be restored.
|
||||
:param user: The user performing the delete.
|
||||
|
||||
:raises SnapshotDoesNotExist: When the snapshot with the provided id
|
||||
does not exist.
|
||||
"""
|
||||
|
||||
original_application = snapshot.snapshot_from_application
|
||||
application = SnapshotHandler().perform_restore(snapshot, progress)
|
||||
|
||||
group = application.group
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
application.id,
|
||||
application.name,
|
||||
snapshot.id,
|
||||
snapshot.name,
|
||||
original_application.id,
|
||||
original_application.name,
|
||||
),
|
||||
scope=cls.scope(group.id),
|
||||
group=group,
|
||||
)
|
||||
return application
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
return GroupActionScopeType.value(group_id)
|
||||
|
||||
|
||||
class DeleteSnapshotActionType(ActionType):
|
||||
type = "delete_snapshot"
|
||||
description = ActionTypeDescription(
|
||||
_("Delete Snapshot"),
|
||||
_(
|
||||
'Snapshot "%(snapshot_name)s" (%(snapshot_id)s) deleted for '
|
||||
'application "%(application_name)s" (%(application_id)s).'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
application_id: int
|
||||
application_name: str
|
||||
snapshot_id: int
|
||||
snapshot_name: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser, snapshot_id: int):
|
||||
"""
|
||||
Creates a snapshot for the given application.
|
||||
|
||||
:param user: The user performing the delete.
|
||||
:param snapshot_id: The id of the snapshot that will be deleted.
|
||||
:raises SnapshotDoesNotExist: When the snapshot with the provided id
|
||||
does not exist.
|
||||
"""
|
||||
|
||||
try:
|
||||
snapshot = (
|
||||
Snapshot.objects.filter(id=snapshot_id)
|
||||
.select_for_update(of=("self",))
|
||||
.select_related("snapshot_from_application__group")
|
||||
.get()
|
||||
)
|
||||
except Snapshot.DoesNotExist:
|
||||
raise SnapshotDoesNotExist()
|
||||
|
||||
application = snapshot.snapshot_from_application
|
||||
group = application.group
|
||||
snapshot_name = snapshot.name
|
||||
|
||||
SnapshotHandler().delete(snapshot.id, performed_by=user)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
application.id, application.name, snapshot_id, snapshot_name
|
||||
),
|
||||
scope=cls.scope(group.id),
|
||||
group=group,
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def scope(cls, group_id: int) -> ActionScopeStr:
|
||||
return GroupActionScopeType.value(group_id)
|
|
@ -26,7 +26,7 @@ from baserow.core.snapshots.exceptions import (
|
|||
)
|
||||
from baserow.core.utils import Progress
|
||||
|
||||
from .job_type import CreateSnapshotJobType, RestoreSnapshotJobType
|
||||
from .job_types import CreateSnapshotJobType, RestoreSnapshotJobType
|
||||
from .operations import (
|
||||
CreateSnapshotApplicationOperationType,
|
||||
DeleteApplicationSnapshotOperationType,
|
||||
|
@ -422,7 +422,7 @@ class SnapshotHandler:
|
|||
application, None, default_storage
|
||||
)
|
||||
progress.increment(by=50)
|
||||
imported_database = application_type.import_serialized(
|
||||
imported_application = application_type.import_serialized(
|
||||
snapshot.snapshot_from_application.group,
|
||||
exported_application,
|
||||
{},
|
||||
|
@ -430,9 +430,9 @@ class SnapshotHandler:
|
|||
default_storage,
|
||||
progress_builder=progress.create_child_builder(represents_progress=50),
|
||||
)
|
||||
imported_database.name = CoreHandler().find_unused_application_name(
|
||||
imported_application.name = CoreHandler().find_unused_application_name(
|
||||
snapshot.snapshot_from_application.group, snapshot.name
|
||||
)
|
||||
imported_database.save()
|
||||
application_created.send(self, application=imported_database, user=None)
|
||||
return imported_database
|
||||
imported_application.save()
|
||||
application_created.send(self, application=imported_application, user=None)
|
||||
return imported_application
|
||||
|
|
13
backend/src/baserow/core/snapshots/job_type.py → backend/src/baserow/core/snapshots/job_types.py
Normal file → Executable file
13
backend/src/baserow/core/snapshots/job_type.py → backend/src/baserow/core/snapshots/job_types.py
Normal file → Executable file
|
@ -1,5 +1,6 @@
|
|||
from baserow.api.errors import ERROR_USER_NOT_IN_GROUP
|
||||
from baserow.api.snapshots.errors import ERROR_SNAPSHOT_DOES_NOT_EXIST
|
||||
from baserow.core.action.registries import action_type_registry
|
||||
from baserow.core.exceptions import UserNotInGroup
|
||||
from baserow.core.handler import CoreHandler
|
||||
from baserow.core.jobs.registries import JobType
|
||||
|
@ -29,9 +30,11 @@ class CreateSnapshotJobType(JobType):
|
|||
return application_type.export_safe_transaction_context(application)
|
||||
|
||||
def run(self, job: CreateSnapshotJob, progress):
|
||||
from baserow.core.snapshots.handler import SnapshotHandler
|
||||
from .actions import CreateSnapshotActionType
|
||||
|
||||
SnapshotHandler().perform_create(job.snapshot, progress)
|
||||
action_type_registry.get(CreateSnapshotActionType.type).do(
|
||||
job.user, job.snapshot, progress
|
||||
)
|
||||
|
||||
|
||||
class RestoreSnapshotJobType(JobType):
|
||||
|
@ -45,6 +48,8 @@ class RestoreSnapshotJobType(JobType):
|
|||
}
|
||||
|
||||
def run(self, job: RestoreSnapshotJob, progress):
|
||||
from baserow.core.snapshots.handler import SnapshotHandler
|
||||
from .actions import RestoreSnapshotActionType
|
||||
|
||||
SnapshotHandler().perform_restore(job.snapshot, progress)
|
||||
action_type_registry.get(RestoreSnapshotActionType.type).do(
|
||||
job.user, job.snapshot, progress
|
||||
)
|
|
@ -1,16 +1,17 @@
|
|||
from django.db import models
|
||||
|
||||
from baserow.core.jobs.mixins import JobWithUserIpAddress
|
||||
from baserow.core.jobs.models import Job
|
||||
from baserow.core.models import Snapshot
|
||||
|
||||
|
||||
class CreateSnapshotJob(Job):
|
||||
class CreateSnapshotJob(JobWithUserIpAddress, Job):
|
||||
snapshot: Snapshot = models.ForeignKey(
|
||||
Snapshot, null=True, on_delete=models.SET_NULL
|
||||
)
|
||||
|
||||
|
||||
class RestoreSnapshotJob(Job):
|
||||
class RestoreSnapshotJob(JobWithUserIpAddress, Job):
|
||||
snapshot: Snapshot = models.ForeignKey(
|
||||
Snapshot, null=True, on_delete=models.SET_NULL
|
||||
)
|
||||
|
|
197
backend/src/baserow/core/user/actions.py
Normal file
197
backend/src/baserow/core/user/actions.py
Normal file
|
@ -0,0 +1,197 @@
|
|||
import dataclasses
|
||||
from typing import Any, Optional
|
||||
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from baserow.core.action.registries import (
|
||||
ActionScopeStr,
|
||||
ActionType,
|
||||
ActionTypeDescription,
|
||||
)
|
||||
from baserow.core.action.scopes import RootActionScopeType
|
||||
from baserow.core.models import Template
|
||||
from baserow.core.user.handler import UserHandler
|
||||
|
||||
|
||||
class CreateUserActionType(ActionType):
|
||||
type = "create_user"
|
||||
description = ActionTypeDescription(
|
||||
_("Create User"),
|
||||
_(
|
||||
'User "%(user_email)s" (%(user_id)s) created '
|
||||
"(via invitation: %(with_invitation_token)s, "
|
||||
"from template: %(template_id)s)"
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
user_id: int
|
||||
user_email: str
|
||||
group_id: Optional[int] = None
|
||||
group_name: Optional[str] = ""
|
||||
with_invitation_token: bool = False
|
||||
template_id: Optional[int] = None
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
cls,
|
||||
name: str,
|
||||
email: str,
|
||||
password: str,
|
||||
language: str,
|
||||
group_invitation_token: Optional[str] = None,
|
||||
template: Optional[Template] = None,
|
||||
) -> AbstractUser:
|
||||
"""
|
||||
Creates a new user.
|
||||
|
||||
:param name: The name of the user.
|
||||
:param email: The email address of the user.
|
||||
:param password: The password of the user.
|
||||
:param language: The language of the user.
|
||||
:param group_invitation_token: The group invitation token that will be used to
|
||||
add the user to a group.
|
||||
:param template: The template that will be used to create the user.
|
||||
:return: The created user.
|
||||
"""
|
||||
|
||||
user = UserHandler().create_user(
|
||||
name, email, password, language, group_invitation_token, template
|
||||
)
|
||||
|
||||
group_id, group_name = None, None
|
||||
if user.default_group:
|
||||
group_id = user.default_group.id
|
||||
group_name = user.default_group.name
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(
|
||||
user.id,
|
||||
user.email,
|
||||
group_id,
|
||||
group_name,
|
||||
group_invitation_token is not None,
|
||||
template.id if template else None,
|
||||
),
|
||||
scope=cls.scope(),
|
||||
group=user.default_group,
|
||||
)
|
||||
return user
|
||||
|
||||
@classmethod
|
||||
def scope(cls) -> ActionScopeStr:
|
||||
return RootActionScopeType.value()
|
||||
|
||||
|
||||
class UpdateUserActionType(ActionType):
|
||||
type = "update_user"
|
||||
description = ActionTypeDescription(
|
||||
_("Update User"),
|
||||
_('User "%(user_email)s" (%(user_id)s) updated'),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
user_id: int
|
||||
user_email: str
|
||||
first_name: Optional[str]
|
||||
language: Optional[str]
|
||||
|
||||
@classmethod
|
||||
def do(
|
||||
cls,
|
||||
user: AbstractUser,
|
||||
first_name: Optional[str] = None,
|
||||
language: Optional[str] = None,
|
||||
**kwargs: Any
|
||||
) -> AbstractUser:
|
||||
"""
|
||||
Updates user's data.
|
||||
|
||||
:param user: The user that will be updated.
|
||||
:param data: The data that will be used to update the user.
|
||||
:return: The updated user.
|
||||
"""
|
||||
|
||||
user = UserHandler().update_user(user, first_name=first_name, language=language)
|
||||
|
||||
cls.register_action(
|
||||
user=user,
|
||||
params=cls.Params(user.id, user.email, first_name, language),
|
||||
scope=cls.scope(),
|
||||
)
|
||||
return user
|
||||
|
||||
@classmethod
|
||||
def scope(cls) -> ActionScopeStr:
|
||||
return RootActionScopeType.value()
|
||||
|
||||
|
||||
class ScheduleUserDeletionActionType(ActionType):
|
||||
type = "schedule_user_deletion"
|
||||
description = ActionTypeDescription(
|
||||
_("Schedule user deletion"),
|
||||
_(
|
||||
'User "%(user_email)s" (%(user_id)s) scheduled to be deleted after grace time'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
user_id: int
|
||||
user_email: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser) -> AbstractUser:
|
||||
"""
|
||||
Schedules the user for deletion.
|
||||
|
||||
:param user: The user that will be updated.
|
||||
"""
|
||||
|
||||
UserHandler().schedule_user_deletion(user)
|
||||
|
||||
cls.register_action(
|
||||
user=user, params=cls.Params(user.id, user.email), scope=cls.scope()
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def scope(cls) -> ActionScopeStr:
|
||||
return RootActionScopeType.value()
|
||||
|
||||
|
||||
class CancelUserDeletionActionType(ActionType):
|
||||
type = "cancel_user_deletion"
|
||||
description = ActionTypeDescription(
|
||||
_("Cancel user deletion"),
|
||||
_(
|
||||
'User "%(user_email)s" (%(user_id)s) logged in cancelling the deletion process'
|
||||
),
|
||||
)
|
||||
|
||||
@dataclasses.dataclass
|
||||
class Params:
|
||||
user_id: int
|
||||
user_email: str
|
||||
|
||||
@classmethod
|
||||
def do(cls, user: AbstractUser) -> AbstractUser:
|
||||
"""
|
||||
Stops the deletion process for the user.
|
||||
|
||||
:param user: The user that will be updated.
|
||||
"""
|
||||
|
||||
user = UserHandler().cancel_user_deletion(user)
|
||||
|
||||
cls.register_action(
|
||||
user=user, params=cls.Params(user.id, user.email), scope=cls.scope()
|
||||
)
|
||||
return user
|
||||
|
||||
@classmethod
|
||||
def scope(cls) -> ActionScopeStr:
|
||||
return RootActionScopeType.value()
|
|
@ -207,6 +207,7 @@ class UserHandler:
|
|||
|
||||
# If we've created a `GroupUser` at some point, pluck out the `Group`.
|
||||
group = getattr(group_user, "group", None)
|
||||
user.default_group = group
|
||||
|
||||
if not group_invitation_token and template and group:
|
||||
core_handler.install_template(user, group, template)
|
||||
|
|
BIN
backend/src/baserow/locale/cs/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/locale/cs/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
28
backend/src/baserow/locale/cs/LC_MESSAGES/django.po
Executable file
28
backend/src/baserow/locale/cs/LC_MESSAGES/django.po
Executable file
|
@ -0,0 +1,28 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-01-16 14:17+0000\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n "
|
||||
"<= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
|
||||
|
||||
#: src/baserow/api/authentication.py:24
|
||||
msgid "Token contained no recognizable user identification"
|
||||
msgstr ""
|
||||
|
||||
#: src/baserow/api/authentication.py:30
|
||||
msgid "User not found"
|
||||
msgstr ""
|
BIN
backend/src/baserow/locale/de/LC_MESSAGES/django.mo
Executable file
BIN
backend/src/baserow/locale/de/LC_MESSAGES/django.mo
Executable file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue