fix(i18n): die Zwei-Fenster-Warnung nennt die zuletzt gespeicherte Änderung, nicht den letzten Tastendruck
Nutzer-Rückfrage: „Was für ein letzter Tastendruck?" — die Formulierung liest sich, als zähle nur Tippen. Tut es nicht: Umklappen im Diagramm schreibt die Faltmarke in den Text (D38-Nachtrag 2) und damit in den Speicher, nimmt also am selben Wettlauf teil. Nachgemessen mit zwei Fenstern: A klappt zu, im Speicher steht `- > Ast A (M)`, B's Editor und Diagramm bleiben unverändert — und B's nächster Tastendruck überschreibt den Speicher, A's Faltung ist weg. Beide Texte in allen neun Sprachen umformuliert (tabConflictWarn, docLockText); der Dialogtext nennt das Falten ausdrücklich. SPEC §9 sagt jetzt dazu, dass das andere Fenster nichts nachzieht und dass ein Dokumentwechsel dort nicht mitwandert — `werkbaum-active` entscheidet erst wieder, was ein Neustart öffnet (auch das eine Nutzer-Rückfrage, nachgemessen). D94-Nachtrag 2 und CHANGELOG nachgezogen. Benannt, nicht behoben: Wer „trotzdem hier bearbeiten" gewählt hat, behält die Warnung, auch wenn das andere Fenster das Dokument längst verlassen hat — dieser Ausweg fordert die Sperre bewusst nicht mehr an. 666 Tests grün; die neuen Texte im laufenden Editor nachgesehen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
7f4c2a3e6a
commit
2a58951138
@@ -24,6 +24,7 @@ reverse.
|
|||||||
- The modal "open more than once" dialog is gone; the one remaining loss case — the same non-shared document open in two windows — is found by a per-document lock, and the second window chooses: open another document, view only until the other window lets go, or edit anyway
|
- The modal "open more than once" dialog is gone; the one remaining loss case — the same non-shared document open in two windows — is found by a per-document lock, and the second window chooses: open another document, view only until the other window lets go, or edit anyway
|
||||||
- The other-window warning now names the document and says whether it is open in the app or in the browser — and stays silent when nothing collides
|
- The other-window warning now names the document and says whether it is open in the app or in the browser — and stays silent when nothing collides
|
||||||
- Fix: in the "open in another window" dialog the list of other documents squeezed its buttons until the names ran into each other — picking one is a dropdown now, one line tall however many documents you have
|
- Fix: in the "open in another window" dialog the list of other documents squeezed its buttons until the names ran into each other — picking one is a dropdown now, one line tall however many documents you have
|
||||||
|
- The two-window warning says "whichever change is saved last wins" now instead of "the last keystroke" — folding a branch in the diagram writes to the text too, so it joins the same race
|
||||||
- An MCP server for AI agents recorded as planned: it lives in the backend, runs the one JS parser through GraalJS, hands plans to Claude Code and other agents as resources and tools over streamable HTTP, and writes changes as conflict-safe line diffs — no new runtime, spelled out in an RFC before it is built
|
- An MCP server for AI agents recorded as planned: it lives in the backend, runs the one JS parser through GraalJS, hands plans to Claude Code and other agents as resources and tools over streamable HTTP, and writes changes as conflict-safe line diffs — no new runtime, spelled out in an RFC before it is built
|
||||||
|
|
||||||
## 2026-08-28
|
## 2026-08-28
|
||||||
|
|||||||
@@ -9006,6 +9006,40 @@ Diagramm die Höhe hat), ist die Karte immer noch höher als der getönte
|
|||||||
Grund, in dem sie steckt, und malt darüber hinaus. Lesbar bleibt sie; wen
|
Grund, in dem sie steckt, und malt darüber hinaus. Lesbar bleibt sie; wen
|
||||||
es stört, deckelt `.lockdlg` mit `max-height`.
|
es stört, deckelt `.lockdlg` mit `max-height`.
|
||||||
|
|
||||||
|
**Nachtrag 2 — „der letzte Tastendruck gewinnt" war zu eng gefasst
|
||||||
|
(2026-09-02).** Nutzer-Rückfrage beim Ausprobieren: „Man kann im Diagramm
|
||||||
|
auf- und zusammenklappen — das beeinflusst das andere Fenster nicht,
|
||||||
|
richtig? Und was für ein letzter Tastendruck?" Beides trifft einen
|
||||||
|
Formulierungsfehler, nicht einen Baufehler:
|
||||||
|
|
||||||
|
- **Falten IST eine Änderung.** Umklappen schreibt die Faltmarke in den
|
||||||
|
Text (D38-Nachtrag 2) und damit in den Speicher — es nimmt am selben
|
||||||
|
Wettlauf teil wie das Tippen. Nachgemessen: A klappt „Ast A" zu, im
|
||||||
|
Speicher steht `- > Ast A (M)`; B's Editor und Diagramm bleiben
|
||||||
|
unverändert (6 Knoten, keine Marke), und B's nächster Tastendruck
|
||||||
|
überschreibt den Speicher — **A's Faltung ist damit weg**. „Beeinflusst
|
||||||
|
das andere Fenster nicht" stimmt also für die Anzeige und nicht für den
|
||||||
|
gespeicherten Text.
|
||||||
|
- **Die Warnung sagte deshalb das Falsche.** „Der letzte Tastendruck
|
||||||
|
gewinnt" liest sich, als zähle nur Tippen. Sie heißt jetzt „die zuletzt
|
||||||
|
**gespeicherte Änderung** gewinnt" (englisch „whichever change is saved
|
||||||
|
last wins"), in allen neun Sprachen; der Dialogtext nennt das Falten
|
||||||
|
ausdrücklich mit. SPEC §9 nachgezogen.
|
||||||
|
- **Der Dokumentwechsel wandert nicht mit** (dieselbe Rückfrage): Ein
|
||||||
|
anderes Dokument zu wählen ändert nur das eigene Fenster. Der geteilte
|
||||||
|
Schlüssel `werkbaum-active` wird zwar überschrieben, aber kein Fenster
|
||||||
|
reagiert darauf — er entscheidet erst wieder, was ein **Neustart**
|
||||||
|
öffnet (§3, „letzter Schreiber gewinnt, harmlos"). Nachgemessen: A
|
||||||
|
wechselt auf „Zweites", B bleibt auf „Falt-Probe".
|
||||||
|
|
||||||
|
**Dabei aufgefallen, benannt und noch nicht behoben:** Wer „trotzdem hier
|
||||||
|
bearbeiten" gewählt hat, behält die Warnung, auch wenn das andere Fenster
|
||||||
|
das Dokument längst verlassen hat — dieser Ausweg fordert die Sperre
|
||||||
|
bewusst nicht mehr an (`lockGen++`), also erfährt er vom Loslassen nichts.
|
||||||
|
Sauber wäre, auch dort im Hintergrund zu warten (`waitInBackground`) und
|
||||||
|
die Warnung zu räumen, sobald die Sperre ankommt — dieselbe Mechanik wie
|
||||||
|
bei „nur ansehen", nur ohne den Schreibschutz.
|
||||||
|
|
||||||
**Offen bleibt die Handarbeit** (RFC §10): installierte PWA neben einem Tab,
|
**Offen bleibt die Handarbeit** (RFC §10): installierte PWA neben einem Tab,
|
||||||
Firefox, Safari, ein Browser ohne Locks-API. Werkzeuggrenzen wie gehabt —
|
Firefox, Safari, ein Browser ohne Locks-API. Werkzeuggrenzen wie gehabt —
|
||||||
die Browser-Fläche war verborgen, getippt wurde per `value` + `input`
|
die Browser-Fläche war verborgen, getippt wurde per `value` + `input`
|
||||||
|
|||||||
+6
-1
@@ -965,7 +965,12 @@ selbst, wenn das Fenster schließt. Bekommt das zweite Fenster sie nicht,
|
|||||||
zeigt es einen Dialog mit drei Auswegen: anderes Dokument öffnen, hier nur
|
zeigt es einen Dialog mit drei Auswegen: anderes Dokument öffnen, hier nur
|
||||||
ansehen (Textfeld schreibgeschützt, wird von selbst beschreibbar, sobald
|
ansehen (Textfeld schreibgeschützt, wird von selbst beschreibbar, sobald
|
||||||
das andere Fenster loslässt) oder trotzdem hier bearbeiten — dann gewinnt
|
das andere Fenster loslässt) oder trotzdem hier bearbeiten — dann gewinnt
|
||||||
der letzte Tastendruck, und die Warnung nennt das Dokument.
|
die **zuletzt gespeicherte Änderung**, und die Warnung nennt das Dokument.
|
||||||
|
Änderung heißt dabei nicht nur Tippen: Auch das Falten im Diagramm schreibt
|
||||||
|
in den Text (§9, `>`/`<`) und nimmt an diesem Wettlauf teil. Das andere
|
||||||
|
Fenster zieht dabei nichts nach — es zeigt weiter seine eigene Fassung —,
|
||||||
|
und auch das aktive Dokument wechselt dort nicht mit; der gemerkte
|
||||||
|
Dokumentwähler entscheidet erst wieder, was ein **Neustart** öffnet.
|
||||||
`live:`-Dokumente werden nie gesperrt: Zwei Fenster sind zwei Live-Clients,
|
`live:`-Dokumente werden nie gesperrt: Zwei Fenster sind zwei Live-Clients,
|
||||||
der Server führt zusammen. Ohne Web Locks (file://, alte Browser) bleibt
|
der Server führt zusammen. Ohne Web Locks (file://, alte Browser) bleibt
|
||||||
der storage-Rückfall: ein fremder Schreibzugriff am eigenen aktiven
|
der storage-Rückfall: ein fremder Schreibzugriff am eigenen aktiven
|
||||||
|
|||||||
+18
-18
@@ -3550,11 +3550,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"„{url}“ konnte nicht geladen werden ({error}). Die Datei muss per http(s) erreichbar sein und CORS erlauben (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"„{url}“ konnte nicht geladen werden ({error}). Die Datei muss per http(s) erreichbar sein und CORS erlauben (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"Dieser Link zeigt auf ein Etherpad-Pad. Die Etherpad-Anbindung gibt es nicht mehr — gemeinsames Arbeiten läuft jetzt über ein Werkbaum-Backend (?live=…). Der Text des Pads lässt sich dort einmal einfügen und dann zu zweit bearbeiten.",
|
padGoneWarn:"Dieser Link zeigt auf ein Etherpad-Pad. Die Etherpad-Anbindung gibt es nicht mehr — gemeinsames Arbeiten läuft jetzt über ein Werkbaum-Backend (?live=…). Der Text des Pads lässt sich dort einmal einfügen und dann zu zweit bearbeiten.",
|
||||||
storeFailedWarn:"Speichern im Browser fehlgeschlagen — vermutlich ist der Speicher voll. Änderungen können beim Neuladen verloren gehen; Platz schaffen: nicht mehr gebrauchte Dokumente oder frühere Stände löschen.",
|
storeFailedWarn:"Speichern im Browser fehlgeschlagen — vermutlich ist der Speicher voll. Änderungen können beim Neuladen verloren gehen; Platz schaffen: nicht mehr gebrauchte Dokumente oder frühere Stände löschen.",
|
||||||
tabConflictWarn:"„{name}“ wird in einem anderen Fenster ({where}) bearbeitet — der letzte Tastendruck gewinnt.",
|
tabConflictWarn:"„{name}“ wird in einem anderen Fenster ({where}) bearbeitet — die zuletzt gespeicherte Änderung gewinnt.",
|
||||||
liveUnsentWarn:"Deine Änderungen sind seit {min} Minuten NICHT auf dem Server angekommen — sie existieren nur in diesem Fenster. Vor dem Schließen sichern (Strg+S oder Kamera-Knopf).",
|
liveUnsentWarn:"Deine Änderungen sind seit {min} Minuten NICHT auf dem Server angekommen — sie existieren nur in diesem Fenster. Vor dem Schließen sichern (Strg+S oder Kamera-Knopf).",
|
||||||
liveEndedWarn:"Die Live-Verbindung zu diesem Server-Dokument ist getrennt — Werkbaum verbindet automatisch neu. Bis dahin bleiben Änderungen nur in diesem Fenster.",
|
liveEndedWarn:"Die Live-Verbindung zu diesem Server-Dokument ist getrennt — Werkbaum verbindet automatisch neu. Bis dahin bleiben Änderungen nur in diesem Fenster.",
|
||||||
docLockTitle:"„{name}“ ist in einem anderen Fenster geöffnet",
|
docLockTitle:"„{name}“ ist in einem anderen Fenster geöffnet",
|
||||||
docLockText:"Ein anderes Fenster bearbeitet dieses Dokument gerade — der letzte Tastendruck gewinnt. Was willst du tun?",
|
docLockText:"Ein anderes Fenster bearbeitet dieses Dokument gerade — die zuletzt gespeicherte Änderung gewinnt, auch das Falten im Diagramm. Was willst du tun?",
|
||||||
docLockOpenOther:"Anderes Dokument öffnen:",
|
docLockOpenOther:"Anderes Dokument öffnen:",
|
||||||
docLockViewOnly:"Hier nur ansehen",
|
docLockViewOnly:"Hier nur ansehen",
|
||||||
docLockEditAnyway:"Trotzdem hier bearbeiten",
|
docLockEditAnyway:"Trotzdem hier bearbeiten",
|
||||||
@@ -3692,11 +3692,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"Could not load “{url}” ({error}). The file must be reachable via http(s) and allow CORS (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"Could not load “{url}” ({error}). The file must be reachable via http(s) and allow CORS (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"This link points at an Etherpad pad. The Etherpad connection is gone — collaboration now runs through a Werkbaum backend (?live=…). Paste the pad’s text there once, then edit it together.",
|
padGoneWarn:"This link points at an Etherpad pad. The Etherpad connection is gone — collaboration now runs through a Werkbaum backend (?live=…). Paste the pad’s text there once, then edit it together.",
|
||||||
storeFailedWarn:"Saving in the browser failed — its storage is probably full. Changes may be lost on reload; free space by deleting unused documents or earlier states.",
|
storeFailedWarn:"Saving in the browser failed — its storage is probably full. Changes may be lost on reload; free space by deleting unused documents or earlier states.",
|
||||||
tabConflictWarn:"“{name}” is being edited in another window ({where}) — the last keystroke wins.",
|
tabConflictWarn:"“{name}” is being edited in another window ({where}) — whichever change is saved last wins.",
|
||||||
liveUnsentWarn:"Your changes have NOT reached the server for {min} minutes — they exist only in this window. Save before closing (Ctrl+S or the camera button).",
|
liveUnsentWarn:"Your changes have NOT reached the server for {min} minutes — they exist only in this window. Save before closing (Ctrl+S or the camera button).",
|
||||||
liveEndedWarn:"The live connection to this server document is down — Werkbaum reconnects automatically. Until then, changes stay in this window only.",
|
liveEndedWarn:"The live connection to this server document is down — Werkbaum reconnects automatically. Until then, changes stay in this window only.",
|
||||||
docLockTitle:"“{name}” is open in another window",
|
docLockTitle:"“{name}” is open in another window",
|
||||||
docLockText:"Another window is editing this document right now — the last keystroke wins. What would you like to do?",
|
docLockText:"Another window is editing this document right now — whichever change is saved last wins, folding in the diagram included. What would you like to do?",
|
||||||
docLockOpenOther:"Open another document:",
|
docLockOpenOther:"Open another document:",
|
||||||
docLockViewOnly:"View only here",
|
docLockViewOnly:"View only here",
|
||||||
docLockEditAnyway:"Edit here anyway",
|
docLockEditAnyway:"Edit here anyway",
|
||||||
@@ -3834,11 +3834,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"No se pudo cargar «{url}» ({error}). El archivo debe ser accesible por http(s) y permitir CORS (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"No se pudo cargar «{url}» ({error}). El archivo debe ser accesible por http(s) y permitir CORS (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"Este enlace apunta a un pad de Etherpad. La conexión con Etherpad ya no existe: ahora se colabora a través de un backend de Werkbaum (?live=…). Pega allí el texto del pad una vez y editadlo juntos.",
|
padGoneWarn:"Este enlace apunta a un pad de Etherpad. La conexión con Etherpad ya no existe: ahora se colabora a través de un backend de Werkbaum (?live=…). Pega allí el texto del pad una vez y editadlo juntos.",
|
||||||
storeFailedWarn:"No se pudo guardar en el navegador: su almacenamiento probablemente está lleno. Los cambios pueden perderse al recargar; libera espacio borrando documentos sin uso o estados anteriores.",
|
storeFailedWarn:"No se pudo guardar en el navegador: su almacenamiento probablemente está lleno. Los cambios pueden perderse al recargar; libera espacio borrando documentos sin uso o estados anteriores.",
|
||||||
tabConflictWarn:"«{name}» se está editando en otra ventana ({where}) — gana la última tecla.",
|
tabConflictWarn:"«{name}» se está editando en otra ventana ({where}) — gana el último cambio guardado.",
|
||||||
liveUnsentWarn:"Tus cambios NO han llegado al servidor desde hace {min} minutos — solo existen en esta ventana. Guarda antes de cerrar (Ctrl+S o el botón de cámara).",
|
liveUnsentWarn:"Tus cambios NO han llegado al servidor desde hace {min} minutos — solo existen en esta ventana. Guarda antes de cerrar (Ctrl+S o el botón de cámara).",
|
||||||
liveEndedWarn:"La conexión en vivo con este documento del servidor se ha perdido — Werkbaum se reconecta automáticamente. Hasta entonces, los cambios quedan solo en esta ventana.",
|
liveEndedWarn:"La conexión en vivo con este documento del servidor se ha perdido — Werkbaum se reconecta automáticamente. Hasta entonces, los cambios quedan solo en esta ventana.",
|
||||||
docLockTitle:"«{name}» está abierto en otra ventana",
|
docLockTitle:"«{name}» está abierto en otra ventana",
|
||||||
docLockText:"Otra ventana está editando este documento ahora mismo — la última tecla gana. ¿Qué quieres hacer?",
|
docLockText:"Otra ventana está editando este documento ahora mismo — gana el último cambio guardado, incluido el plegado en el diagrama. ¿Qué quieres hacer?",
|
||||||
docLockOpenOther:"Abrir otro documento:",
|
docLockOpenOther:"Abrir otro documento:",
|
||||||
docLockViewOnly:"Solo ver aquí",
|
docLockViewOnly:"Solo ver aquí",
|
||||||
docLockEditAnyway:"Editar aquí de todos modos",
|
docLockEditAnyway:"Editar aquí de todos modos",
|
||||||
@@ -3976,11 +3976,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"Impossible de charger « {url} » ({error}). Le fichier doit être accessible en http(s) et autoriser CORS (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"Impossible de charger « {url} » ({error}). Le fichier doit être accessible en http(s) et autoriser CORS (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"Ce lien pointe vers un pad Etherpad. La connexion Etherpad n’existe plus — la collaboration passe désormais par un backend Werkbaum (?live=…). Collez-y une fois le texte du pad, puis modifiez-le à plusieurs.",
|
padGoneWarn:"Ce lien pointe vers un pad Etherpad. La connexion Etherpad n’existe plus — la collaboration passe désormais par un backend Werkbaum (?live=…). Collez-y une fois le texte du pad, puis modifiez-le à plusieurs.",
|
||||||
storeFailedWarn:"L'enregistrement dans le navigateur a échoué — son stockage est probablement plein. Les modifications peuvent être perdues au rechargement ; libérez de l'espace en supprimant des documents inutilisés ou des états antérieurs.",
|
storeFailedWarn:"L'enregistrement dans le navigateur a échoué — son stockage est probablement plein. Les modifications peuvent être perdues au rechargement ; libérez de l'espace en supprimant des documents inutilisés ou des états antérieurs.",
|
||||||
tabConflictWarn:"« {name} » est modifié dans une autre fenêtre ({where}) — le dernier à taper gagne.",
|
tabConflictWarn:"« {name} » est modifié dans une autre fenêtre ({where}) — la dernière modification enregistrée gagne.",
|
||||||
liveUnsentWarn:"Tes modifications ne sont PAS arrivées au serveur depuis {min} minutes — elles n'existent que dans cette fenêtre. Enregistre avant de fermer (Ctrl+S ou le bouton appareil photo).",
|
liveUnsentWarn:"Tes modifications ne sont PAS arrivées au serveur depuis {min} minutes — elles n'existent que dans cette fenêtre. Enregistre avant de fermer (Ctrl+S ou le bouton appareil photo).",
|
||||||
liveEndedWarn:"La connexion en direct à ce document serveur est interrompue — Werkbaum se reconnecte automatiquement. D'ici là, les modifications restent dans cette fenêtre.",
|
liveEndedWarn:"La connexion en direct à ce document serveur est interrompue — Werkbaum se reconnecte automatiquement. D'ici là, les modifications restent dans cette fenêtre.",
|
||||||
docLockTitle:"« {name} » est ouvert dans une autre fenêtre",
|
docLockTitle:"« {name} » est ouvert dans une autre fenêtre",
|
||||||
docLockText:"Une autre fenêtre modifie ce document en ce moment — le dernier à taper gagne. Que veux-tu faire ?",
|
docLockText:"Une autre fenêtre modifie ce document en ce moment — la dernière modification enregistrée gagne, y compris le pliage dans le diagramme. Que veux-tu faire ?",
|
||||||
docLockOpenOther:"Ouvrir un autre document :",
|
docLockOpenOther:"Ouvrir un autre document :",
|
||||||
docLockViewOnly:"Consulter seulement ici",
|
docLockViewOnly:"Consulter seulement ici",
|
||||||
docLockEditAnyway:"Modifier quand même ici",
|
docLockEditAnyway:"Modifier quand même ici",
|
||||||
@@ -4118,11 +4118,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"Nie udało się wczytać „{url}” ({error}). Plik musi być dostępny przez http(s) i zezwalać na CORS (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"Nie udało się wczytać „{url}” ({error}). Plik musi być dostępny przez http(s) i zezwalać na CORS (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"Ten link prowadzi do pada Etherpad. Połączenia z Etherpadem już nie ma — wspólna praca odbywa się teraz przez backend Werkbaum (?live=…). Wklej tam raz tekst pada i edytujcie go razem.",
|
padGoneWarn:"Ten link prowadzi do pada Etherpad. Połączenia z Etherpadem już nie ma — wspólna praca odbywa się teraz przez backend Werkbaum (?live=…). Wklej tam raz tekst pada i edytujcie go razem.",
|
||||||
storeFailedWarn:"Zapis w przeglądarce nie powiódł się — jego pamięć jest zapewne pełna. Zmiany mogą przepaść przy przeładowaniu; zwolnij miejsce, usuwając nieużywane dokumenty lub wcześniejsze stany.",
|
storeFailedWarn:"Zapis w przeglądarce nie powiódł się — jego pamięć jest zapewne pełna. Zmiany mogą przepaść przy przeładowaniu; zwolnij miejsce, usuwając nieużywane dokumenty lub wcześniejsze stany.",
|
||||||
tabConflictWarn:"„{name}” jest edytowany w innym oknie ({where}) — wygrywa ostatni klawisz.",
|
tabConflictWarn:"„{name}” jest edytowany w innym oknie ({where}) — wygrywa ostatnia zapisana zmiana.",
|
||||||
liveUnsentWarn:"Twoje zmiany NIE dotarły na serwer od {min} minut — istnieją tylko w tym oknie. Zapisz przed zamknięciem (Ctrl+S lub przycisk aparatu).",
|
liveUnsentWarn:"Twoje zmiany NIE dotarły na serwer od {min} minut — istnieją tylko w tym oknie. Zapisz przed zamknięciem (Ctrl+S lub przycisk aparatu).",
|
||||||
liveEndedWarn:"Połączenie na żywo z tym dokumentem serwera zostało przerwane — Werkbaum łączy się ponownie automatycznie. Do tego czasu zmiany pozostają tylko w tym oknie.",
|
liveEndedWarn:"Połączenie na żywo z tym dokumentem serwera zostało przerwane — Werkbaum łączy się ponownie automatycznie. Do tego czasu zmiany pozostają tylko w tym oknie.",
|
||||||
docLockTitle:"„{name}” jest otwarte w innym oknie",
|
docLockTitle:"„{name}” jest otwarte w innym oknie",
|
||||||
docLockText:"Inne okno właśnie edytuje ten dokument — wygrywa ostatni klawisz. Co chcesz zrobić?",
|
docLockText:"Inne okno właśnie edytuje ten dokument — wygrywa ostatnia zapisana zmiana, także zwijanie w diagramie. Co chcesz zrobić?",
|
||||||
docLockOpenOther:"Otwórz inny dokument:",
|
docLockOpenOther:"Otwórz inny dokument:",
|
||||||
docLockViewOnly:"Tylko podgląd",
|
docLockViewOnly:"Tylko podgląd",
|
||||||
docLockEditAnyway:"Edytuj mimo to",
|
docLockEditAnyway:"Edytuj mimo to",
|
||||||
@@ -4260,11 +4260,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"Не удалось загрузить «{url}» ({error}). Файл должен быть доступен по http(s) и разрешать CORS (Access-Control-Allow-Origin).",
|
sourceLoadWarn:"Не удалось загрузить «{url}» ({error}). Файл должен быть доступен по http(s) и разрешать CORS (Access-Control-Allow-Origin).",
|
||||||
padGoneWarn:"Эта ссылка ведёт на пад Etherpad. Подключения к Etherpad больше нет — совместная работа теперь идёт через бэкенд Werkbaum (?live=…). Вставьте туда текст пада один раз и редактируйте вместе.",
|
padGoneWarn:"Эта ссылка ведёт на пад Etherpad. Подключения к Etherpad больше нет — совместная работа теперь идёт через бэкенд Werkbaum (?live=…). Вставьте туда текст пада один раз и редактируйте вместе.",
|
||||||
storeFailedWarn:"Не удалось сохранить в браузере — его хранилище, вероятно, заполнено. Изменения могут потеряться при перезагрузке; освободите место, удалив ненужные документы или прежние состояния.",
|
storeFailedWarn:"Не удалось сохранить в браузере — его хранилище, вероятно, заполнено. Изменения могут потеряться при перезагрузке; освободите место, удалив ненужные документы или прежние состояния.",
|
||||||
tabConflictWarn:"«{name}» редактируется в другом окне ({where}) — побеждает последнее нажатие.",
|
tabConflictWarn:"«{name}» редактируется в другом окне ({where}) — побеждает последнее сохранённое изменение.",
|
||||||
liveUnsentWarn:"Ваши изменения НЕ доходят до сервера уже {min} мин — они существуют только в этом окне. Сохраните перед закрытием (Ctrl+S или кнопка камеры).",
|
liveUnsentWarn:"Ваши изменения НЕ доходят до сервера уже {min} мин — они существуют только в этом окне. Сохраните перед закрытием (Ctrl+S или кнопка камеры).",
|
||||||
liveEndedWarn:"Живое соединение с этим серверным документом прервано — Werkbaum переподключается автоматически. До тех пор изменения остаются только в этом окне.",
|
liveEndedWarn:"Живое соединение с этим серверным документом прервано — Werkbaum переподключается автоматически. До тех пор изменения остаются только в этом окне.",
|
||||||
docLockTitle:"«{name}» открыт в другом окне",
|
docLockTitle:"«{name}» открыт в другом окне",
|
||||||
docLockText:"Другое окно сейчас редактирует этот документ — побеждает последнее нажатие. Что вы хотите сделать?",
|
docLockText:"Другое окно сейчас редактирует этот документ — побеждает последнее сохранённое изменение, включая сворачивание в диаграмме. Что вы хотите сделать?",
|
||||||
docLockOpenOther:"Открыть другой документ:",
|
docLockOpenOther:"Открыть другой документ:",
|
||||||
docLockViewOnly:"Только просмотр",
|
docLockViewOnly:"Только просмотр",
|
||||||
docLockEditAnyway:"Всё равно редактировать здесь",
|
docLockEditAnyway:"Всё равно редактировать здесь",
|
||||||
@@ -4402,11 +4402,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"„{url}“ लोड नहीं हो सका ({error})। फ़ाइल http(s) से उपलब्ध होनी चाहिए और CORS की अनुमति देनी चाहिए (Access-Control-Allow-Origin)।",
|
sourceLoadWarn:"„{url}“ लोड नहीं हो सका ({error})। फ़ाइल http(s) से उपलब्ध होनी चाहिए और CORS की अनुमति देनी चाहिए (Access-Control-Allow-Origin)।",
|
||||||
padGoneWarn:"यह लिंक एक Etherpad पैड की ओर इशारा करता है। Etherpad कनेक्शन अब नहीं है — साझा काम अब Werkbaum बैकएंड (?live=…) से होता है। पैड का टेक्स्ट वहाँ एक बार चिपकाएँ और मिलकर संपादित करें।",
|
padGoneWarn:"यह लिंक एक Etherpad पैड की ओर इशारा करता है। Etherpad कनेक्शन अब नहीं है — साझा काम अब Werkbaum बैकएंड (?live=…) से होता है। पैड का टेक्स्ट वहाँ एक बार चिपकाएँ और मिलकर संपादित करें।",
|
||||||
storeFailedWarn:"ब्राउज़र में सहेजना विफल रहा — संभवतः उसका संग्रहण भर गया है। पुनः लोड करने पर बदलाव खो सकते हैं; अनुपयोगी दस्तावेज़ या पिछली स्थितियाँ हटाकर जगह बनाएँ।",
|
storeFailedWarn:"ब्राउज़र में सहेजना विफल रहा — संभवतः उसका संग्रहण भर गया है। पुनः लोड करने पर बदलाव खो सकते हैं; अनुपयोगी दस्तावेज़ या पिछली स्थितियाँ हटाकर जगह बनाएँ।",
|
||||||
tabConflictWarn:"„{name}“ दूसरी विंडो में संपादित हो रहा है ({where}) — अंतिम कीस्ट्रोक जीतता है।",
|
tabConflictWarn:"„{name}“ दूसरी विंडो में संपादित हो रहा है ({where}) — अंत में सहेजा गया बदलाव जीतता है।",
|
||||||
liveUnsentWarn:"आपके बदलाव {min} मिनट से सर्वर तक नहीं पहुँचे — वे केवल इस विंडो में मौजूद हैं। बंद करने से पहले सहेजें (Ctrl+S या कैमरा बटन)।",
|
liveUnsentWarn:"आपके बदलाव {min} मिनट से सर्वर तक नहीं पहुँचे — वे केवल इस विंडो में मौजूद हैं। बंद करने से पहले सहेजें (Ctrl+S या कैमरा बटन)।",
|
||||||
liveEndedWarn:"इस सर्वर दस्तावेज़ से लाइव कनेक्शन टूट गया है — Werkbaum अपने आप फिर जुड़ता है। तब तक बदलाव केवल इसी विंडो में रहते हैं।",
|
liveEndedWarn:"इस सर्वर दस्तावेज़ से लाइव कनेक्शन टूट गया है — Werkbaum अपने आप फिर जुड़ता है। तब तक बदलाव केवल इसी विंडो में रहते हैं।",
|
||||||
docLockTitle:"„{name}“ दूसरी विंडो में खुला है",
|
docLockTitle:"„{name}“ दूसरी विंडो में खुला है",
|
||||||
docLockText:"दूसरी विंडो इस दस्तावेज़ को अभी संपादित कर रही है — अंतिम कीस्ट्रोक जीतता है। आप क्या करना चाहेंगे?",
|
docLockText:"दूसरी विंडो इस दस्तावेज़ को अभी संपादित कर रही है — अंत में सहेजा गया बदलाव जीतता है, आरेख में मोड़ना भी। आप क्या करना चाहेंगे?",
|
||||||
docLockOpenOther:"दूसरा दस्तावेज़ खोलें:",
|
docLockOpenOther:"दूसरा दस्तावेज़ खोलें:",
|
||||||
docLockViewOnly:"यहाँ केवल देखें",
|
docLockViewOnly:"यहाँ केवल देखें",
|
||||||
docLockEditAnyway:"फिर भी यहाँ संपादित करें",
|
docLockEditAnyway:"फिर भी यहाँ संपादित करें",
|
||||||
@@ -4544,11 +4544,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"无法加载“{url}”({error})。该文件必须可通过 http(s) 访问并允许 CORS(Access-Control-Allow-Origin)。",
|
sourceLoadWarn:"无法加载“{url}”({error})。该文件必须可通过 http(s) 访问并允许 CORS(Access-Control-Allow-Origin)。",
|
||||||
padGoneWarn:"此链接指向一个 Etherpad pad。Etherpad 连接已移除——协作现在通过 Werkbaum 后端(?live=…)进行。把 pad 的文本粘贴过去一次,然后一起编辑。",
|
padGoneWarn:"此链接指向一个 Etherpad pad。Etherpad 连接已移除——协作现在通过 Werkbaum 后端(?live=…)进行。把 pad 的文本粘贴过去一次,然后一起编辑。",
|
||||||
storeFailedWarn:"无法保存到浏览器——其存储空间可能已满。重新加载时更改可能丢失;请删除不再使用的文档或以前的状态以腾出空间。",
|
storeFailedWarn:"无法保存到浏览器——其存储空间可能已满。重新加载时更改可能丢失;请删除不再使用的文档或以前的状态以腾出空间。",
|
||||||
tabConflictWarn:"“{name}”正在另一个窗口中编辑({where})——最后按键者生效。",
|
tabConflictWarn:"“{name}”正在另一个窗口中编辑({where})——最后保存的更改生效。",
|
||||||
liveUnsentWarn:"你的更改已有 {min} 分钟未到达服务器——它们只存在于此窗口中。关闭前请先保存(Ctrl+S 或相机按钮)。",
|
liveUnsentWarn:"你的更改已有 {min} 分钟未到达服务器——它们只存在于此窗口中。关闭前请先保存(Ctrl+S 或相机按钮)。",
|
||||||
liveEndedWarn:"与此服务器文档的实时连接已断开——Werkbaum 会自动重连。在此之前,更改只保留在此窗口中。",
|
liveEndedWarn:"与此服务器文档的实时连接已断开——Werkbaum 会自动重连。在此之前,更改只保留在此窗口中。",
|
||||||
docLockTitle:"“{name}”已在另一个窗口中打开",
|
docLockTitle:"“{name}”已在另一个窗口中打开",
|
||||||
docLockText:"另一个窗口正在编辑此文档——最后按键者生效。您想怎么做?",
|
docLockText:"另一个窗口正在编辑此文档——最后保存的更改生效,包括在图中折叠节点。您想怎么做?",
|
||||||
docLockOpenOther:"打开其他文档:",
|
docLockOpenOther:"打开其他文档:",
|
||||||
docLockViewOnly:"仅在此查看",
|
docLockViewOnly:"仅在此查看",
|
||||||
docLockEditAnyway:"仍要在此编辑",
|
docLockEditAnyway:"仍要在此编辑",
|
||||||
@@ -4686,11 +4686,11 @@ const I18N = {
|
|||||||
sourceLoadWarn:"「{url}」を読み込めませんでした({error})。ファイルは http(s) でアクセス可能で、CORS(Access-Control-Allow-Origin)を許可する必要があります。",
|
sourceLoadWarn:"「{url}」を読み込めませんでした({error})。ファイルは http(s) でアクセス可能で、CORS(Access-Control-Allow-Origin)を許可する必要があります。",
|
||||||
padGoneWarn:"このリンクは Etherpad のパッドを指しています。Etherpad 連携は廃止されました。共同編集は Werkbaum バックエンド(?live=…)で行います。パッドの本文を一度貼り付ければ、複数人で編集できます。",
|
padGoneWarn:"このリンクは Etherpad のパッドを指しています。Etherpad 連携は廃止されました。共同編集は Werkbaum バックエンド(?live=…)で行います。パッドの本文を一度貼り付ければ、複数人で編集できます。",
|
||||||
storeFailedWarn:"ブラウザーへの保存に失敗しました — ストレージが満杯の可能性があります。再読み込みで変更が失われることがあります。不要なドキュメントや以前の状態を削除して空きを作ってください。",
|
storeFailedWarn:"ブラウザーへの保存に失敗しました — ストレージが満杯の可能性があります。再読み込みで変更が失われることがあります。不要なドキュメントや以前の状態を削除して空きを作ってください。",
|
||||||
tabConflictWarn:"「{name}」は別のウィンドウで編集中です({where})— 最後のキー操作が優先されます。",
|
tabConflictWarn:"「{name}」は別のウィンドウで編集中です({where})— 最後に保存された変更が優先されます。",
|
||||||
liveUnsentWarn:"変更が {min} 分間サーバーに届いていません — この変更はこのウィンドウにしか存在しません。閉じる前に保存してください(Ctrl+S またはカメラボタン)。",
|
liveUnsentWarn:"変更が {min} 分間サーバーに届いていません — この変更はこのウィンドウにしか存在しません。閉じる前に保存してください(Ctrl+S またはカメラボタン)。",
|
||||||
liveEndedWarn:"このサーバー文書とのライブ接続が切れています — Werkbaum は自動的に再接続します。それまで変更はこのウィンドウにのみ残ります。",
|
liveEndedWarn:"このサーバー文書とのライブ接続が切れています — Werkbaum は自動的に再接続します。それまで変更はこのウィンドウにのみ残ります。",
|
||||||
docLockTitle:"「{name}」は別のウィンドウで開かれています",
|
docLockTitle:"「{name}」は別のウィンドウで開かれています",
|
||||||
docLockText:"別のウィンドウがこのドキュメントを編集中です — 最後のキー操作が優先されます。どうしますか?",
|
docLockText:"別のウィンドウがこのドキュメントを編集中です — 最後に保存された変更が優先されます(図の折りたたみも含む)。どうしますか?",
|
||||||
docLockOpenOther:"別のドキュメントを開く:",
|
docLockOpenOther:"別のドキュメントを開く:",
|
||||||
docLockViewOnly:"ここでは閲覧のみ",
|
docLockViewOnly:"ここでは閲覧のみ",
|
||||||
docLockEditAnyway:"それでもここで編集する",
|
docLockEditAnyway:"それでもここで編集する",
|
||||||
|
|||||||
Reference in New Issue
Block a user