@rebasepro/app 0.25.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/RlsSimulatorPanel-DOfmVgM3.js +403 -0
- package/dist/RlsSimulatorPanel-DOfmVgM3.js.map +1 -0
- package/dist/collections/form-layout.d.ts +30 -27
- package/dist/components/LanguageToggle.d.ts +9 -0
- package/dist/components/LoginView/index.d.ts +7 -0
- package/dist/components/index.d.ts +1 -0
- package/dist/components/studio/RlsSimulatorBar.d.ts +39 -0
- package/dist/components/studio/RlsSimulatorPanel.d.ts +29 -0
- package/dist/contexts/RlsSimulationContext.d.ts +47 -0
- package/dist/contexts/index.d.ts +1 -0
- package/dist/core/effective_role_state.d.ts +9 -0
- package/dist/{de-BMgOgwue.js → de-3yzzpuZj.js} +175 -1
- package/dist/de-3yzzpuZj.js.map +1 -0
- package/dist/debug.js +96 -46
- package/dist/{es-DSOOSgPW.js → es-mnyTaRkK.js} +175 -1
- package/dist/es-mnyTaRkK.js.map +1 -0
- package/dist/{fr-CnXidmZf.js → fr-nJHADzlI.js} +175 -1
- package/dist/fr-nJHADzlI.js.map +1 -0
- package/dist/{hi-lTvNsFMr.js → hi-B9_iunnL.js} +175 -1
- package/dist/hi-B9_iunnL.js.map +1 -0
- package/dist/hooks/useBuildEffectiveRoleController.d.ts +9 -3
- package/dist/hooks/usePermissions.d.ts +4 -0
- package/dist/hooks/useUnsavedChangesDialog.d.ts +7 -1
- package/dist/i18n/RebaseI18nProvider.d.ts +11 -0
- package/dist/index.es.js +2814 -2555
- package/dist/index.es.js.map +1 -1
- package/dist/{it-BoT_vBlx.js → it-DoEtz-OK.js} +175 -1
- package/dist/it-DoEtz-OK.js.map +1 -0
- package/dist/{pt-D9mSchbY.js → pt-DT26AmBU.js} +175 -1
- package/dist/pt-DT26AmBU.js.map +1 -0
- package/package.json +7 -7
- package/dist/de-BMgOgwue.js.map +0 -1
- package/dist/es-DSOOSgPW.js.map +0 -1
- package/dist/fr-CnXidmZf.js.map +0 -1
- package/dist/hi-lTvNsFMr.js.map +0 -1
- package/dist/it-BoT_vBlx.js.map +0 -1
- package/dist/pt-D9mSchbY.js.map +0 -1
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The "Simulate access" pill and banner themselves. Loaded on demand by the
|
|
3
|
+
* wrappers in `RlsSimulatorBar.tsx`: only an administrator ever sees them, so
|
|
4
|
+
* nobody else downloads them before the login screen paints.
|
|
5
|
+
*/
|
|
6
|
+
import React from "react";
|
|
7
|
+
import { type RlsSimulatorBarProps } from "./RlsSimulatorBar.js";
|
|
8
|
+
/**
|
|
9
|
+
* "Simulate access": the app bar pill that runs every data view as a role, a
|
|
10
|
+
* user or a service key, so an administrator sees exactly the rows and fields
|
|
11
|
+
* that identity's row-level security lets it read.
|
|
12
|
+
*
|
|
13
|
+
* Shown only to an administrator, and only when the data views ride a client
|
|
14
|
+
* that can derive a simulated one. The server checks the first again on every
|
|
15
|
+
* request: anyone else sending the simulation headers gets a 403.
|
|
16
|
+
*
|
|
17
|
+
* @group Components
|
|
18
|
+
*/
|
|
19
|
+
export declare function RlsSimulatorBarPanel({ className, compact, side, align, portalContainer }: RlsSimulatorBarProps): React.JSX.Element | null;
|
|
20
|
+
/**
|
|
21
|
+
* The banner every screen shows while access is simulated: who the data views
|
|
22
|
+
* run as, how many collections show that identity nothing, how many fields its
|
|
23
|
+
* roles cannot read — and the way out.
|
|
24
|
+
*
|
|
25
|
+
* @group Components
|
|
26
|
+
*/
|
|
27
|
+
export declare function RlsSimulationBannerPanel({ className }: {
|
|
28
|
+
className?: string;
|
|
29
|
+
}): React.JSX.Element | null;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import type { AccessSimulation } from "@rebasepro/types";
|
|
3
|
+
/**
|
|
4
|
+
* How the banner names what is simulated — a key's name, a user's email —
|
|
5
|
+
* which the headers alone do not carry.
|
|
6
|
+
*
|
|
7
|
+
* @group Models
|
|
8
|
+
*/
|
|
9
|
+
export type RlsSimulationLabel = {
|
|
10
|
+
kind: "role";
|
|
11
|
+
role: string;
|
|
12
|
+
userId?: string;
|
|
13
|
+
} | {
|
|
14
|
+
kind: "user";
|
|
15
|
+
user: string;
|
|
16
|
+
} | {
|
|
17
|
+
kind: "apiKey";
|
|
18
|
+
name: string;
|
|
19
|
+
keyPrefix: string;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* The RLS simulator's state: what the admin panel's data views run as.
|
|
23
|
+
*
|
|
24
|
+
* While `simulation` is set, every data view reads through a client derived
|
|
25
|
+
* with `client.simulate()`, so a grid shows exactly the rows and fields that
|
|
26
|
+
* role, user or key can read. `null` is the signed-in administrator.
|
|
27
|
+
*
|
|
28
|
+
* @group Models
|
|
29
|
+
*/
|
|
30
|
+
export interface RlsSimulationController {
|
|
31
|
+
/**
|
|
32
|
+
* Whether simulation is possible here: the client can derive a simulated
|
|
33
|
+
* one, and the default data source is that client (not a direct driver).
|
|
34
|
+
*/
|
|
35
|
+
available: boolean;
|
|
36
|
+
simulation: AccessSimulation | null;
|
|
37
|
+
label: RlsSimulationLabel | null;
|
|
38
|
+
setSimulation(simulation: AccessSimulation | null, label?: RlsSimulationLabel | null): void;
|
|
39
|
+
}
|
|
40
|
+
export declare const RlsSimulationContext: React.Context<RlsSimulationController>;
|
|
41
|
+
/**
|
|
42
|
+
* The RLS simulator's state, for the bar that sets it and the banner that
|
|
43
|
+
* shows it.
|
|
44
|
+
*
|
|
45
|
+
* @group Hooks and utilities
|
|
46
|
+
*/
|
|
47
|
+
export declare function useRlsSimulation(): RlsSimulationController;
|
package/dist/contexts/index.d.ts
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { EffectiveRoleController } from "@rebasepro/types";
|
|
2
|
+
/**
|
|
3
|
+
* The effective role controller `<Rebase>` falls back to when the host passes
|
|
4
|
+
* none. Kept apart from the deprecated public hook
|
|
5
|
+
* (`useBuildEffectiveRoleController`) so building it does not report a
|
|
6
|
+
* deprecation the app never used, and out of the hooks barrel so it is not a
|
|
7
|
+
* public export.
|
|
8
|
+
*/
|
|
9
|
+
export declare function useEffectiveRoleState(): EffectiveRoleController;
|
|
@@ -196,6 +196,30 @@ var de = {
|
|
|
196
196
|
error_firestore_index: "Für diese Abfrage ist ein Firestore-Index erforderlich.",
|
|
197
197
|
realtime_connection_lost_title: "Live-Aktualisierungen pausiert",
|
|
198
198
|
realtime_connection_lost_body: "Die Verbindung zum Server ist unterbrochen, daher ist das Angezeigte möglicherweise nicht mehr aktuell. Es wird aktualisiert, sobald die Verbindung wieder besteht.",
|
|
199
|
+
rls_simulate_access: "Zugriff simulieren",
|
|
200
|
+
rls_simulate_access_description: "Jede Sammlung so sehen, wie eine Rolle, ein Benutzer oder ein Dienstschlüssel sie sähe: Zeilen und Felder, die ihre Sicherheit auf Zeilenebene verbirgt, fehlen.",
|
|
201
|
+
rls_simulate_tab_role: "Rolle",
|
|
202
|
+
rls_simulate_tab_user: "Benutzer",
|
|
203
|
+
rls_simulate_tab_api_key: "API-Schlüssel",
|
|
204
|
+
rls_simulate_user_id_optional: "Als Benutzer-ID (optional)",
|
|
205
|
+
rls_simulate_apply: "Simulieren",
|
|
206
|
+
rls_simulate_stop: "Simulation beenden",
|
|
207
|
+
rls_simulate_search_users: "Benutzer suchen",
|
|
208
|
+
rls_simulate_no_users: "Keine Benutzer gefunden.",
|
|
209
|
+
rls_simulate_no_api_keys: "Keine aktiven Dienstschlüssel.",
|
|
210
|
+
rls_simulate_options_error: "Was simuliert werden kann, ließ sich nicht laden: {{message}}",
|
|
211
|
+
rls_simulate_users_error: "Benutzer ließen sich nicht laden: {{message}}",
|
|
212
|
+
rls_simulation_viewing_as_role: "Ansicht als Rolle {{role}}",
|
|
213
|
+
rls_simulation_viewing_as_role_user: "Ansicht als {{user}} mit der Rolle {{role}}",
|
|
214
|
+
rls_simulation_viewing_as_user: "Ansicht als Benutzer {{user}}",
|
|
215
|
+
rls_simulation_viewing_as_api_key: "Ansicht als API-Schlüssel {{name}} ({{prefix}}…)",
|
|
216
|
+
rls_simulation_hidden_collections: "{{count}} Sammlungen verborgen",
|
|
217
|
+
rls_simulation_hidden_collections_one: "1 Sammlung verborgen",
|
|
218
|
+
rls_simulation_masked_columns: "{{count}} Spalten durch RLS maskiert",
|
|
219
|
+
rls_simulation_masked_columns_one: "1 Spalte durch RLS maskiert",
|
|
220
|
+
rls_simulation_counting: "Es wird gezählt, was diese Identität lesen kann…",
|
|
221
|
+
rls_simulation_count_failed: "Was diese Identität lesen kann, ließ sich nicht zählen: {{message}}",
|
|
222
|
+
rls_simulation_note: "Datenansichten zeigen nur die Zeilen und Felder, die diese Identität lesen kann. Bearbeiten ist während der Simulation ausgeschaltet: Beenden Sie die Simulation, um Änderungen vorzunehmen. Live-Aktualisierungen pausieren.",
|
|
199
223
|
create_index: "Index erstellen",
|
|
200
224
|
value_is_not_reference: "Wert ist keine Referenz.",
|
|
201
225
|
click_to_edit: "Klicken zum Bearbeiten",
|
|
@@ -957,6 +981,7 @@ var de = {
|
|
|
957
981
|
studio_policy_help_step4_title: "4. WITH CHECK-Ausdruck",
|
|
958
982
|
studio_policy_help_step4_desc: "Eine SQL-Bedingung, die wahr sein muss, damit neue oder geänderte Zeilen gespeichert werden (INSERT, UPDATE).",
|
|
959
983
|
studio_policy_help_step4_example: "Meist identisch mit dem USING-Ausdruck, wenn Benutzer nur ihre eigenen Daten anlegen oder bearbeiten dürfen.",
|
|
984
|
+
studio_policy_help_example: "Beispiel:",
|
|
960
985
|
studio_policy_help_auth_vars_title: "Rebase-Auth-Variablen",
|
|
961
986
|
studio_policy_help_auth_vars_desc: "Rebase stellt native Hilfsfunktionen bereit, die Sie in Ihren Ausdrücken verwenden können:",
|
|
962
987
|
studio_policy_help_auth_uid: "Gibt die ID des aktuellen Benutzers als Text zurück. Beispiel:",
|
|
@@ -1019,12 +1044,69 @@ var de = {
|
|
|
1019
1044
|
studio_collections_editor_pick: "Wähle eine Sammlung aus oder lege eine neue an, um mit dem Bearbeiten zu beginnen.",
|
|
1020
1045
|
studio_collections_editor_read_only: "Sammlungen können auf diesem Server nicht bearbeitet werden.",
|
|
1021
1046
|
studio_collections_editor_unsaved: "Diese Sammlung hat ungespeicherte Änderungen.",
|
|
1047
|
+
schema_change_title_review: "Schemaänderung prüfen",
|
|
1048
|
+
schema_change_title_applied: "Schemaänderung angewendet",
|
|
1049
|
+
schema_change_title_committed: "Schemaänderung committet",
|
|
1050
|
+
schema_change_verdict_safe_title: "Bereit zum Anwenden",
|
|
1051
|
+
schema_change_verdict_safe_body: "Jede Änderung hier lässt sich an der laufenden Datenbank vornehmen.",
|
|
1052
|
+
schema_change_verdict_diverges_title: "Damit wäre die Datenbank nicht mehr auf demselben Stand",
|
|
1053
|
+
schema_change_verdict_diverges_body: "Die Änderung kann geschrieben werden, aber die Datenbank wird ihr am Ende nicht entsprechen. Die Details unten sagen, welcher Teil, und was sie anwendbar machen würde.",
|
|
1054
|
+
schema_change_verdict_migration_title: "Dafür ist eine Migration nötig",
|
|
1055
|
+
schema_change_verdict_migration_body: "Ein Teil davon lässt sich an einer laufenden Datenbank gar nicht vornehmen — er löscht oder schreibt etwas um, und das gehört in eine Migration, die jemand gelesen hat.",
|
|
1056
|
+
schema_change_commit_only_title: "Bereit zum Committen",
|
|
1057
|
+
schema_change_commit_only_body: "Jetzt wird nichts an der Datenbank ausgeführt. Jede Änderung unten sagt, was sie bewirkt und wann sie wirksam wird.",
|
|
1058
|
+
schema_change_commit_only_body_no_changes: "Das ändert, was Ihr Projekt deklariert. An der Datenbank wird nichts ausgeführt — es gibt keine Schemaänderung vorzunehmen.",
|
|
1059
|
+
schema_change_chip_safe: "sicher",
|
|
1060
|
+
schema_change_chip_diverges: "weicht ab",
|
|
1061
|
+
schema_change_chip_migration: "Migration nötig",
|
|
1062
|
+
schema_change_follow_up_one: "Danach ist noch eine Sache zu tun",
|
|
1063
|
+
schema_change_follow_up: "Danach zu tun",
|
|
1064
|
+
schema_change_withheld_one: "Eine Einschränkung wird nicht durchgesetzt",
|
|
1065
|
+
schema_change_withheld_many: "{{count}} Einschränkungen werden nicht durchgesetzt",
|
|
1066
|
+
schema_change_db_not_changed: "Die Datenbank wurde nicht geändert",
|
|
1067
|
+
schema_change_db_maybe_changed: "Die Datenbank wurde möglicherweise teilweise geändert",
|
|
1068
|
+
schema_change_statements_partial: "{{ran}} von {{total}} Anweisungen liefen, dann schlug eine fehl",
|
|
1069
|
+
schema_change_commit_holds: "Der Commit ist in jedem Fall auf {{branch}}, also wird alles, was nicht lief, beim nächsten Start angewendet.",
|
|
1070
|
+
schema_change_committed: "Committet",
|
|
1071
|
+
schema_change_committed_on: "{{sha}} auf {{branch}}",
|
|
1072
|
+
schema_change_plan_failed: "Die Änderung konnte nicht geplant werden",
|
|
1073
|
+
schema_change_planning: "Es wird ermittelt, was diese Änderung bewirken würde…",
|
|
1074
|
+
schema_change_source_only_changes: "Nichts hiervon ändert die Struktur Ihrer Daten. Nur der Quellcode der Sammlung ändert sich, und er wird committet.",
|
|
1075
|
+
schema_change_source_only_title: "Nur Quellcode bearbeiten: die Sammlung committen, die Datenbank unverändert lassen",
|
|
1076
|
+
schema_change_preview_only: "Sie können diese Änderung in der Vorschau sehen, aber nicht anwenden",
|
|
1077
|
+
schema_change_statements: "Anweisungen, die ausgeführt werden",
|
|
1078
|
+
schema_change_files: "Dateien, die committet werden",
|
|
1079
|
+
schema_change_message: "Commit-Nachricht",
|
|
1080
|
+
schema_change_edit_source_only: "Nur Quellcode bearbeiten",
|
|
1081
|
+
schema_change_committing: "Wird committet…",
|
|
1082
|
+
schema_change_applying: "Wird angewendet…",
|
|
1083
|
+
schema_change_commit: "Committen",
|
|
1084
|
+
schema_change_commit_and_apply: "Committen und anwenden",
|
|
1085
|
+
studio_api_explorer_spec_refused_title: "Diese Sitzung kann die API-Spezifikation nicht lesen",
|
|
1086
|
+
studio_api_explorer_spec_failed_title: "Die API-Spezifikation konnte nicht geladen werden",
|
|
1087
|
+
studio_api_explorer_spec_refused_body: "Der Zugriff der Konsole auf die API dieses Projekts wurde verweigert. Meist ist die Sitzung abgelaufen — melden Sie sich erneut an — oder der Konsolenzugriff wurde für dieses Projekt in den Einstellungen deaktiviert.",
|
|
1088
|
+
studio_api_explorer_spec_failed_body: "Das Projekt hat geantwortet, aber nicht mit einer Spezifikation, die dieser Explorer lesen kann. Seine API ist nicht betroffen, nur diese Seite.",
|
|
1022
1089
|
db_column_type: "Datenbank-Spaltentyp",
|
|
1023
1090
|
primary_key_unique_id: "Primärschlüssel / Eindeutige ID",
|
|
1024
1091
|
spread_children_as_columns: "Kinder als Spalten aufteilen",
|
|
1025
1092
|
mode: "Modus",
|
|
1026
1093
|
timezone: "Zeitzone",
|
|
1027
1094
|
target_collection: "Zielsammlung",
|
|
1095
|
+
column_type_default: "Standard ({{type}})",
|
|
1096
|
+
column_type_uuid_forced: "uuid (durch den Primärschlüssel vorgegeben)",
|
|
1097
|
+
column_type_varchar: "varchar (variable Länge)",
|
|
1098
|
+
column_type_text: "text (unbegrenzt)",
|
|
1099
|
+
column_type_char: "char (feste Länge)",
|
|
1100
|
+
column_type_timestamp: "timestamp (mit Zeitzone)",
|
|
1101
|
+
column_type_caption_string: "Optional: abweichender Datenbank-Spaltentyp für dieses Textfeld.",
|
|
1102
|
+
column_type_caption_number: "Optional: abweichender Datenbank-Spaltentyp für dieses Zahlenfeld.",
|
|
1103
|
+
column_type_caption_date: "Optional: abweichender Datenbank-Spaltentyp für dieses Datumsfeld.",
|
|
1104
|
+
primary_key_manual: "Ja (manuelle Eingabe)",
|
|
1105
|
+
primary_key_generated_string: "Ja (automatisch erzeugte UUID/Zeichenkette)",
|
|
1106
|
+
primary_key_identity: "Ja (Auto-Inkrement/Identity)",
|
|
1107
|
+
primary_key_increment: "Ja (Inkrement)",
|
|
1108
|
+
primary_key_strategy: "Ja ({{strategy}})",
|
|
1109
|
+
primary_key_caption: "Als Primärschlüssel festlegen und die Strategie zur ID-Erzeugung einstellen.",
|
|
1028
1110
|
storage_file_name: "Dateiname",
|
|
1029
1111
|
storage_path: "Speicherpfad",
|
|
1030
1112
|
storage_max_size: "Maximale Größe (in Bytes)",
|
|
@@ -1040,6 +1122,14 @@ var de = {
|
|
|
1040
1122
|
storage_include_bucket_url: "Bucket-URL (s3://...) im gespeicherten Wert einschließen",
|
|
1041
1123
|
storage_save_url: "URL anstelle des Speicherpfads speichern",
|
|
1042
1124
|
datetime_automatic_value: "Automatischer Wert",
|
|
1125
|
+
datetime_mode_date_time: "Datum/Uhrzeit",
|
|
1126
|
+
datetime_mode_date: "Datum",
|
|
1127
|
+
datetime_auto_value_none: "Keiner",
|
|
1128
|
+
datetime_auto_value_on_create: "Beim Erstellen",
|
|
1129
|
+
datetime_auto_value_on_update: "Bei jeder Aktualisierung",
|
|
1130
|
+
datetime_auto_value_caption: "Dieses Feld beim Erstellen oder Aktualisieren des Datensatzes automatisch setzen",
|
|
1131
|
+
datetime_timezone_local: "Lokale Zeitzone",
|
|
1132
|
+
datetime_timezone_caption: "Zeitzone für die Anzeige und Eingabe von Datumswerten. Gespeichert wird immer in UTC.",
|
|
1043
1133
|
markdown_paste_behavior: "Einfügeverhalten",
|
|
1044
1134
|
entity_saved: "Gespeichert",
|
|
1045
1135
|
more_actions: "Weitere Aktionen",
|
|
@@ -1315,6 +1405,61 @@ var de = {
|
|
|
1315
1405
|
studio_rls_nothing_changed: "Nichts geändert, daher wurde nichts gespeichert.",
|
|
1316
1406
|
studio_branches_unavailable_title: "Datenbank-Branching ist nicht verfügbar",
|
|
1317
1407
|
studio_branches_unavailable_body: "Branching benötigt ein Postgres-Backend mit einer Admin-Verbindung. Setze ADMIN_CONNECTION_STRING in der Umgebung des Backends.",
|
|
1408
|
+
studio_branch_diff_tab_schema: "Schema und RLS-Richtlinien",
|
|
1409
|
+
studio_branch_diff_tab_data: "Datenänderungen",
|
|
1410
|
+
studio_branch_diff_tab_details: "Einzelheiten",
|
|
1411
|
+
studio_branch_diff_merge: "In {{target}} zusammenführen",
|
|
1412
|
+
studio_branch_diff_failed: "Dieser Branch konnte nicht verglichen werden",
|
|
1413
|
+
studio_branch_diff_denied_title: "Du kannst diesen Branch nicht prüfen",
|
|
1414
|
+
studio_branch_diff_denied_hint: "Einen Branch zu prüfen erfordert den Scope database:write: Sein Diff zeigt Zeilen beider Datenbanken, gelesen außerhalb der Row-Level-Security.",
|
|
1415
|
+
studio_branch_diff_unreadable: "Der Server antwortete mit etwas, das kein Branch-Diff ist.",
|
|
1416
|
+
studio_branch_diff_no_api: "Dieses Panel hat keine Backend-Adresse, von der es den Diff des Branches lesen könnte.",
|
|
1417
|
+
studio_branch_diff_fork_unknown: "Der Zeitpunkt, zu dem dieser Branch erstellt wurde, ließ sich nicht lesen. Jede abweichende Zeile zählt daher als Änderung des Branches, und ein Zusammenführen würde auch rückgängig machen, was {{target}} seitdem geändert hat.",
|
|
1418
|
+
studio_branch_diff_schema_empty: "Keine Schema- oder Richtlinienänderungen gegenüber {{target}}.",
|
|
1419
|
+
studio_branch_diff_schema_not_merged: "Schema- und Richtlinienänderungen werden zur Prüfung gezeigt. Ein Zusammenführen wendet sie nie an: Sie gehören zu deinen Collections und deren Migrationen.",
|
|
1420
|
+
studio_branch_diff_object_table: "Tabelle",
|
|
1421
|
+
studio_branch_diff_object_column: "Spalte",
|
|
1422
|
+
studio_branch_diff_object_policy: "Richtlinie",
|
|
1423
|
+
studio_branch_diff_object_rls: "Sicherheit auf Zeilenebene",
|
|
1424
|
+
studio_branch_diff_object_constraint: "Constraint",
|
|
1425
|
+
studio_branch_diff_object_index: "Index",
|
|
1426
|
+
studio_branch_diff_object_trigger: "Trigger",
|
|
1427
|
+
studio_branch_diff_object_enum: "Enum-Typ",
|
|
1428
|
+
studio_branch_diff_object_view: "View",
|
|
1429
|
+
studio_branch_diff_object_function: "Funktion",
|
|
1430
|
+
studio_branch_diff_change_added: "Hinzugefügt",
|
|
1431
|
+
studio_branch_diff_change_dropped: "Entfernt",
|
|
1432
|
+
studio_branch_diff_change_altered: "Geändert",
|
|
1433
|
+
studio_branch_diff_data_empty: "Der Branch hat gegenüber {{target}} keine Zeilen geändert.",
|
|
1434
|
+
studio_branch_diff_row_inserted: "Eingefügt",
|
|
1435
|
+
studio_branch_diff_row_updated: "Aktualisiert",
|
|
1436
|
+
studio_branch_diff_row_deleted: "Gelöscht",
|
|
1437
|
+
studio_branch_diff_row_conflict: "Konflikt",
|
|
1438
|
+
studio_branch_diff_conflicts: "{{count}} Konflikte",
|
|
1439
|
+
studio_branch_diff_target_changes: "{{count}} Zeilen wurden seit dem Erstellen des Branches nur in {{target}} geändert. Ein Zusammenführen behält sie.",
|
|
1440
|
+
studio_branch_diff_target_changes_referencing: "{{count}} Zeilen wurden seit dem Erstellen des Branches nur in {{target}} geändert. {{reached}} davon verweisen auf Zeilen, die der Branch gelöscht hat: Ein Merge behält sie, außer der Branch gewinnt diesen Konflikt.",
|
|
1441
|
+
studio_branch_diff_referenced_by: "Auf Zeilen, die der Branch hier gelöscht hat, verweisen noch Zeilen, die {{target}} seit dem Erstellen des Branches geschrieben hat: {{tables}}. Jede zählt als Konflikt.",
|
|
1442
|
+
studio_branch_diff_row_counts: "Zeilen: {{targetCount}} in {{target}}, {{branchCount}} im Branch.",
|
|
1443
|
+
studio_branch_diff_column_change: "Änderung",
|
|
1444
|
+
studio_branch_diff_column_key: "Primärschlüssel",
|
|
1445
|
+
studio_branch_diff_column_values: "Werte",
|
|
1446
|
+
studio_branch_diff_samples_shown: "{{shown}} von {{total}} geänderten Zeilen werden angezeigt.",
|
|
1447
|
+
studio_branch_diff_merge_title: "{{branch}} in {{target}} zusammenführen",
|
|
1448
|
+
studio_branch_diff_merge_writes: "Damit werden die Zeilen des Branches in {{target}} geschrieben: {{inserted}} eingefügt, {{updated}} aktualisiert und {{deleted}} gelöscht.",
|
|
1449
|
+
studio_branch_diff_merge_target_kept: "Nichts, was {{target}} seit dem Erstellen des Branches geändert hat, wird angefasst.",
|
|
1450
|
+
studio_branch_diff_merge_target_kept_count: "Die {{count}} Zeilen, die {{target}} seit dem Erstellen des Branches geändert hat, bleiben unverändert.",
|
|
1451
|
+
studio_branch_diff_merge_schema_skipped: "Die {{count}} Schema- und Richtlinienänderungen werden nicht zusammengeführt. Wende sie mit deinen Migrationen an (rebase db push).",
|
|
1452
|
+
studio_branch_diff_merge_conflicts: "{{count}} Zeilen wurden auf beiden Seiten geändert. Welche Version gewinnt?",
|
|
1453
|
+
studio_branch_diff_merge_referenced_conflicts: "Einige davon sind Zeilen, die der Branch gelöscht hat und auf die noch {{count}} Zeilen verweisen, die {{target}} seitdem geschrieben hat: {{tables}}. Die Version von {{target}} zu behalten, behält diese Zeilen und die Zeilen, die auf sie verweisen.",
|
|
1454
|
+
studio_branch_diff_merge_referenced_reached: "Gewinnt der Branch, werden Zeilen gelöscht, auf die noch {{count}} Zeilen verweisen, die {{target}} seitdem geschrieben hat, und die Fremdschlüssel erreichen diese Zeilen: {{tables}}. Die übrigen Zeilen, die {{target}} seitdem geändert hat, bleiben unverändert.",
|
|
1455
|
+
studio_branch_diff_conflict_abort: "Keine: nichts zusammenführen",
|
|
1456
|
+
studio_branch_diff_conflict_branch: "Die des Branches ({{branch}})",
|
|
1457
|
+
studio_branch_diff_conflict_target: "Die von {{target}}: so lassen, wie sie ist",
|
|
1458
|
+
studio_branch_diff_merge_blocked: "{{count}} Tabellen mit geänderten Zeilen können nicht zusammengeführt werden:",
|
|
1459
|
+
studio_branch_diff_merge_skip_blocked: "Die übrigen Tabellen zusammenführen und diese so lassen",
|
|
1460
|
+
studio_branch_diff_merge_atomic: "Alles wird in einer Transaktion geschrieben oder gar nichts. Hat sich eine der beiden Datenbanken seit dem Lesen dieses Diffs geändert, wird nichts geschrieben und der Diff neu geladen.",
|
|
1461
|
+
studio_branch_diff_merge_confirm: "Zusammenführen",
|
|
1462
|
+
studio_branch_diff_merged: "{{count}} Zeilen in {{target}} zusammengeführt",
|
|
1318
1463
|
studio_backups_not_configured_title: "Sicherungen sind nicht konfiguriert",
|
|
1319
1464
|
studio_backups_not_configured_body: "Setze BACKUP_DESTINATION auf einen lokalen Pfad oder eine s3:// bzw. gs://-URL und erstelle dann eine Sicherung mit `rebase db backup` oder einem geplanten Cron-Job.",
|
|
1320
1465
|
studio_cron_empty_title: "Keine Cron-Jobs registriert",
|
|
@@ -1406,6 +1551,34 @@ var de = {
|
|
|
1406
1551
|
studio_storage_folder_exists: "Der Ordner „{{name}}“ existiert bereits",
|
|
1407
1552
|
studio_storage_folder_created: "Ordner „{{name}}“ erstellt",
|
|
1408
1553
|
studio_storage_create_folder_failed: "Ordner konnte nicht erstellt werden",
|
|
1554
|
+
studio_branches_empty: "Noch keine Branches. Erstelle einen, um mit einer isolierten Kopie der Datenbank zu arbeiten.",
|
|
1555
|
+
studio_branches_create_action: "Branch erstellen",
|
|
1556
|
+
studio_branches_empty_detail: "Erstelle einen Branch, um loszulegen",
|
|
1557
|
+
studio_branches_select_prompt: "Wähle einen Branch aus, um die Details zu sehen",
|
|
1558
|
+
studio_branches_list_from: "von {{parent}} · {{when}}",
|
|
1559
|
+
studio_branches_created_from: "Erstellt aus",
|
|
1560
|
+
studio_branches_branch_name: "Branch-Name",
|
|
1561
|
+
studio_branches_source_database: "Quelldatenbank",
|
|
1562
|
+
studio_branches_created: "Erstellt",
|
|
1563
|
+
studio_branches_size: "Größe",
|
|
1564
|
+
studio_branches_usage_title: "So verwendest du diesen Branch",
|
|
1565
|
+
studio_branches_usage_switch: "Richte diesen Checkout darauf aus. Jeder spätere Befehl verwendet ihn:",
|
|
1566
|
+
studio_branches_usage_off: "Zurück zur Hauptdatenbank geht es mit:",
|
|
1567
|
+
studio_branches_usage_isolated: "Änderungen in diesem Branch wirken sich nicht auf die Hauptdatenbank aus.",
|
|
1568
|
+
studio_branches_connection_details: "Verbindungsdetails",
|
|
1569
|
+
studio_branches_row_database: "Datenbank:",
|
|
1570
|
+
studio_branches_row_connect: "Verbinden mit:",
|
|
1571
|
+
studio_branches_row_branched_from: "Abgezweigt von:",
|
|
1572
|
+
studio_branches_row_created_at: "Erstellt am:",
|
|
1573
|
+
studio_branches_create_title: "Neuen Branch erstellen",
|
|
1574
|
+
studio_branches_create_body: "Erstelle eine isolierte Kopie der Datenbank. Der Branch ist ein vollständiger Klon der Quelldatenbank zum jetzigen Zeitpunkt.",
|
|
1575
|
+
studio_branches_name_placeholder: "z. B. feature-auth, staging, preview-pr-42",
|
|
1576
|
+
studio_branches_source_main: "Standard (Hauptdatenbank)",
|
|
1577
|
+
studio_branches_creating: "Wird erstellt…",
|
|
1578
|
+
studio_branches_delete_title: "Branch löschen",
|
|
1579
|
+
studio_branches_delete_body: "Möchtest du den Branch „{{name}}“ wirklich endgültig löschen? Diese Aktion kann nicht rückgängig gemacht werden, und alle Daten in diesem Branch gehen verloren.",
|
|
1580
|
+
studio_branches_created_snackbar: "Branch „{{name}}“ erfolgreich erstellt",
|
|
1581
|
+
studio_branches_deleted_snackbar: "Branch „{{name}}“ gelöscht",
|
|
1409
1582
|
insights_period_last_days: "Letzte {{count}} Tage",
|
|
1410
1583
|
insights_period_last_days_one: "Letzter Tag",
|
|
1411
1584
|
insights_previous_period_value: "Vorherige {{count}} Tage: {{value}}",
|
|
@@ -1425,10 +1598,11 @@ var de = {
|
|
|
1425
1598
|
copy_column_name: "Spaltennamen kopieren",
|
|
1426
1599
|
generate_sql_templates: "SQL-Vorlagen erzeugen",
|
|
1427
1600
|
select_row: "{{id}} auswählen",
|
|
1601
|
+
relation_open_record: "{{label}} öffnen",
|
|
1428
1602
|
select: "Auswählen",
|
|
1429
1603
|
open_view: "Ansicht öffnen"
|
|
1430
1604
|
};
|
|
1431
1605
|
//#endregion
|
|
1432
1606
|
export { de };
|
|
1433
1607
|
|
|
1434
|
-
//# sourceMappingURL=de-
|
|
1608
|
+
//# sourceMappingURL=de-3yzzpuZj.js.map
|