@velor/remote-mouse 6.4.8
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/.artifacts/screenshots/remote-mobile-config.png +0 -0
- package/.artifacts/screenshots/remote-mobile-home.png +0 -0
- package/.artifacts/screenshots/remote-mobile-preferences.png +0 -0
- package/.artifacts/screenshots/remote-mobile-server-info.png +0 -0
- package/.artifacts/screenshots/remote-mobile-vlc.png +0 -0
- package/.env.example +93 -0
- package/README.md +370 -0
- package/bin/remote-mouse.js +19 -0
- package/client/core/dom.js +148 -0
- package/client/core/init-socket-io.js +117 -0
- package/client/core/socket-emit.js +6 -0
- package/client/core/window-events.js +23 -0
- package/client/i18n/apply-page-translations.js +18 -0
- package/client/i18n/constants.js +3 -0
- package/client/i18n/core.js +40 -0
- package/client/i18n/locale-registry.js +77 -0
- package/client/i18n/locales/de.js +227 -0
- package/client/i18n/locales/en.js +389 -0
- package/client/i18n/locales/es.js +228 -0
- package/client/i18n/locales/fr.js +389 -0
- package/client/i18n/locales/it.js +227 -0
- package/client/i18n/locales/ja.js +227 -0
- package/client/i18n/locales/pt.js +227 -0
- package/client/i18n/locales/ru.js +240 -0
- package/client/i18n/locales/zh.js +227 -0
- package/client/preferences/constants.js +15 -0
- package/client/preferences/effects.js +24 -0
- package/client/preferences/load.js +19 -0
- package/client/preferences/render.js +26 -0
- package/client/preferences/rows.js +78 -0
- package/client/preferences/state.js +29 -0
- package/client/preview/create-preview-frame-receiver.js +13 -0
- package/client/preview/draw.js +77 -0
- package/client/preview/parse-preview-frame.js +39 -0
- package/client/preview/preview-stream.js +152 -0
- package/client/services/app-state/appStateKeys.js +30 -0
- package/client/services/app-state/createAppStateService.js +216 -0
- package/client/services/app-state/createPersistStoreService.js +122 -0
- package/client/services/app-state/createStateStoreService.js +64 -0
- package/client/services/app-state/localStorageBinding.js +26 -0
- package/client/services/app-state/normalizers.js +74 -0
- package/client/services/app-state/resolveEffectiveStateValue.js +58 -0
- package/client/services/app-state/stateDefinitions.js +107 -0
- package/client/services/backend/createBackendService.js +55 -0
- package/client/services/config/ConfigView.js +45 -0
- package/client/services/config/createClientConfigService.js +122 -0
- package/client/services/config/defaultClientConfig.js +22 -0
- package/client/services/createServicesContainer.js +48 -0
- package/client/services/createServicesRegistry.js +26 -0
- package/client/services/i18n/createI18nService.js +86 -0
- package/client/services/notifications/createNotificationService.js +56 -0
- package/client/services/pubsub/createPubSubService.js +20 -0
- package/client/services/remotes/createRemotesService.js +20 -0
- package/client/services/transport/createSocketIoTransportService.js +50 -0
- package/client/touch/bindTouchPassthrough.js +94 -0
- package/client/touch/createTouchList.js +18 -0
- package/client/touch/dispatchSyntheticTouch.js +20 -0
- package/client/touch/gesture-zone.js +28 -0
- package/client/touch/throttle.js +46 -0
- package/client/touch/touch-handlers.js +193 -0
- package/client/touch/touchpad.js +231 -0
- package/client/ui/config/page.js +840 -0
- package/client/ui/main/applyRemoteVisibilityState.js +60 -0
- package/client/ui/main/bind-client-notifications.js +3 -0
- package/client/ui/main/bindings/bindAccordion.js +121 -0
- package/client/ui/main/bindings/bindActionButtons.js +13 -0
- package/client/ui/main/bindings/bindAdminDrawer.js +137 -0
- package/client/ui/main/bindings/bindAdminRemoteButtons.js +77 -0
- package/client/ui/main/bindings/bindAdminVersion.js +27 -0
- package/client/ui/main/bindings/bindBrowserRemoteButtons.js +119 -0
- package/client/ui/main/bindings/bindRemoteAccordion.js +23 -0
- package/client/ui/main/bindings/bindSamsungRemoteButtons.js +320 -0
- package/client/ui/main/bindings/bindSystemRemoteButtons.js +41 -0
- package/client/ui/main/bindings/bindVlcRemoteButtons.js +64 -0
- package/client/ui/main/canvas-ui.js +33 -0
- package/client/ui/main/connection-overlay.js +57 -0
- package/client/ui/main/init-ui.js +54 -0
- package/client/ui/main/keyboard-panel.js +271 -0
- package/client/ui/main/mouse-buttons.js +94 -0
- package/client/ui/main/page.js +21 -0
- package/client/ui/notifications/show-toast.js +48 -0
- package/client/ui/preferences/bindPreferenceSwitchers.js +49 -0
- package/client/ui/preferences/page.js +61 -0
- package/client/ui/preferences/switchers.js +200 -0
- package/index.js +9 -0
- package/package.json +41 -0
- package/public/admin-config.css +447 -0
- package/public/admin-config.html +63 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/brave-icon.svg +13 -0
- package/public/favicon.svg +30 -0
- package/public/icon-192.png +0 -0
- package/public/icon-512.png +0 -0
- package/public/index.html +246 -0
- package/public/manifest.webmanifest +45 -0
- package/public/preferences.html +55 -0
- package/public/server-info.html +574 -0
- package/public/styles.css +1042 -0
- package/public/sw.js +103 -0
- package/scripts/codex-commit.sh +112 -0
- package/scripts/generate-mobile-screenshots.mjs +244 -0
- package/scripts/install-linux.sh +633 -0
- package/scripts/install-windows.ps1 +369 -0
- package/server/application/createApplicationLifecycle.js +15 -0
- package/server/application/logger.js +216 -0
- package/server/application/shutdown.js +81 -0
- package/server/application/start.js +95 -0
- package/server/application/state.js +19 -0
- package/server/connection/api/admin-actions.router.js +65 -0
- package/server/connection/api/admin-configs.router.js +165 -0
- package/server/connection/api/admin-remotes.router.js +61 -0
- package/server/connection/api/admin-subs.router.js +49 -0
- package/server/connection/api/client.router.js +15 -0
- package/server/connection/api/configs.js +96 -0
- package/server/connection/api/qr-page.handler.js +17 -0
- package/server/connection/api/remotes.router.js +30 -0
- package/server/connection/api/server-info.router.js +149 -0
- package/server/connection/api/session.middleware.js +93 -0
- package/server/connection/api/unauthorized-response.js +73 -0
- package/server/connection/socket/createConnectionRegistrar.js +23 -0
- package/server/connection/socket/createSocketSessionAuthMiddleware.js +49 -0
- package/server/connection/socket/socket-action-responder.js +12 -0
- package/server/connection/socket/socket.timestamp-middleware.js +51 -0
- package/server/index.js +12 -0
- package/server/init/bootstrapApi.js +87 -0
- package/server/init/bootstrapSocket.js +79 -0
- package/server/init/createAdminApiRouter.js +22 -0
- package/server/init/createAdminUiRouter.js +21 -0
- package/server/init/createSocketActionRegistrars.js +52 -0
- package/server/init/observers/startConfigObserver.js +51 -0
- package/server/init/observers/startDisplaySizeObserver.js +55 -0
- package/server/init/observers/startNotificationObserver.js +49 -0
- package/server/init/observers/startQrOverlayHoverObserver.js +89 -0
- package/server/init/observers/startQrOverlayRefreshObserver.js +53 -0
- package/server/os/darwin/app.js +45 -0
- package/server/os/darwin/applescript.js +51 -0
- package/server/os/darwin/cliSocket.js +53 -0
- package/server/os/darwin/url.js +9 -0
- package/server/os/darwin/window.js +10 -0
- package/server/os/linux/app.js +120 -0
- package/server/os/linux/cliSocket.js +53 -0
- package/server/os/linux/process.js +69 -0
- package/server/os/linux/screen.js +58 -0
- package/server/os/linux/systemd.js +139 -0
- package/server/os/linux/url.js +17 -0
- package/server/os/linux/windows.js +144 -0
- package/server/os/win32/app.js +66 -0
- package/server/os/win32/cliSocket.js +15 -0
- package/server/os/win32/powershell.js +70 -0
- package/server/os/win32/process.js +20 -0
- package/server/os/win32/service.js +95 -0
- package/server/os/win32/url.js +9 -0
- package/server/os/win32/window.js +10 -0
- package/server/remotes/admin/createAdminEventGuardMiddleware.js +29 -0
- package/server/remotes/admin/createForceUpdateCheckAction.js +39 -0
- package/server/remotes/admin/createInstallUpdateAction.js +64 -0
- package/server/remotes/admin/createOpenQrBrowserAction.js +63 -0
- package/server/remotes/admin/createOpenServerInfoBrowserAction.js +58 -0
- package/server/remotes/admin/createRestartServiceAction.js +20 -0
- package/server/remotes/admin/createRotateEntryTokenAction.js +43 -0
- package/server/remotes/admin/createToggleQrOverlayAction.js +38 -0
- package/server/remotes/admin/index.js +32 -0
- package/server/remotes/admin/notifyIfRestarted.js +102 -0
- package/server/remotes/admin/registrar.js +94 -0
- package/server/remotes/browser/actions/createFocusOrLaunchBrowserAction.js +22 -0
- package/server/remotes/browser/actions/openUrlOnHost.js +3 -0
- package/server/remotes/browser/browserCatalog.js +70 -0
- package/server/remotes/browser/index.js +15 -0
- package/server/remotes/browser/listBrowsersOnHost.js +23 -0
- package/server/remotes/browser/registrar.js +29 -0
- package/server/remotes/browser/spec.js +18 -0
- package/server/remotes/browser/state.js +5 -0
- package/server/remotes/input/registrar.js +39 -0
- package/server/remotes/preview/bgraToRgbaBuffer.js +20 -0
- package/server/remotes/preview/captureAroundCursor.js +19 -0
- package/server/remotes/preview/createPreviewStreamer.js +85 -0
- package/server/remotes/preview/registrar.js +34 -0
- package/server/remotes/samsung/createSamsungCommandService.js +203 -0
- package/server/remotes/samsung/createSamsungRemote.js +26 -0
- package/server/remotes/samsung/createSamsungRemoteGetter.js +46 -0
- package/server/remotes/samsung/createSamsungTvGetter.js +102 -0
- package/server/remotes/samsung/device-config.js +122 -0
- package/server/remotes/samsung/registrar.js +59 -0
- package/server/remotes/samsung/utils.js +56 -0
- package/server/remotes/vlc/index.js +39 -0
- package/server/remotes/vlc/registrar.js +94 -0
- package/server/remotes/vlc/spec.js +15 -0
- package/server/remotes/vlc/state.js +5 -0
- package/server/remotes/window/index.js +6 -0
- package/server/remotes/window/registrar.js +28 -0
- package/server/services/application/createApplicationDaemonService.js +144 -0
- package/server/services/application/getDaemonServiceAdapter.js +56 -0
- package/server/services/application/utils.js +29 -0
- package/server/services/config/bootstrapConfig.js +38 -0
- package/server/services/config/configPaths.js +42 -0
- package/server/services/config/configSchema.js +297 -0
- package/server/services/config/configService.js +89 -0
- package/server/services/config/defaultConfig.js +137 -0
- package/server/services/config/envConfig.js +49 -0
- package/server/services/config/index.js +9 -0
- package/server/services/config/logConfig.js +54 -0
- package/server/services/config/system-config.js +44 -0
- package/server/services/createServicesContainer.js +94 -0
- package/server/services/createServicesRegistry.js +48 -0
- package/server/services/input/createInputController.js +17 -0
- package/server/services/input/createKeyboardController.js +146 -0
- package/server/services/input/createMouseController.js +182 -0
- package/server/services/notifier/createClientNotifier.js +23 -0
- package/server/services/notifier/createHostNotifier.js +41 -0
- package/server/services/notifier/createNotifier.js +13 -0
- package/server/services/notifier/createNotifierComposite.js +122 -0
- package/server/services/notifier/handleOpenQrBrowserEvent.js +40 -0
- package/server/services/notifier/handleOpenServerInfoBrowserEvent.js +40 -0
- package/server/services/notifier/handleRestartServiceEvent.js +37 -0
- package/server/services/notifier/handleRotateEntryTokenEvent.js +42 -0
- package/server/services/notifier/handleSessionEvent.js +24 -0
- package/server/services/notifier/handleToggleQrOverlayEvent.js +21 -0
- package/server/services/notifier/host-notifier/createLinuxHostNotifier.js +23 -0
- package/server/services/notifier/host-notifier/createNodeNotifierHostNotifier.js +24 -0
- package/server/services/notifier/host-notifier/index.js +11 -0
- package/server/services/notifier/mapper/handleForceUpdateCheckEvent.js +24 -0
- package/server/services/notifier/mapper/handleInstallUpdateEvent.js +53 -0
- package/server/services/notifier/mapper/handleSocketEvent.js +40 -0
- package/server/services/notifier/mapper/handleUpdateManagerEvent.js +24 -0
- package/server/services/notifier/mapper/notify.js +7 -0
- package/server/services/os/index.js +23 -0
- package/server/services/os/platforms/createFallbackAdapter.js +31 -0
- package/server/services/os/platforms/darwin/app.js +6 -0
- package/server/services/os/platforms/darwin/index.js +21 -0
- package/server/services/os/platforms/darwin/scripts.js +4 -0
- package/server/services/os/platforms/darwin/url.js +1 -0
- package/server/services/os/platforms/darwin/window.js +4 -0
- package/server/services/os/platforms/linux/app.js +6 -0
- package/server/services/os/platforms/linux/index.js +33 -0
- package/server/services/os/platforms/linux/url.js +1 -0
- package/server/services/os/platforms/linux/windows.js +11 -0
- package/server/services/os/platforms/win32/app.js +6 -0
- package/server/services/os/platforms/win32/index.js +21 -0
- package/server/services/os/platforms/win32/overlay.js +6 -0
- package/server/services/os/platforms/win32/powershell.js +4 -0
- package/server/services/os/platforms/win32/url.js +1 -0
- package/server/services/os/platforms/win32/window.js +4 -0
- package/server/services/os/shared.js +2 -0
- package/server/services/overlay/createNoopOverlay.js +13 -0
- package/server/services/overlay/createQrOverlay.js +27 -0
- package/server/services/overlay/createQrOverlayWin32.js +158 -0
- package/server/services/overlay/createQrOverlayYad.js +178 -0
- package/server/services/overlay/renderQrPage.js +82 -0
- package/server/services/persistence/createConfigDao.js +106 -0
- package/server/services/persistence/createDatabaseProvider.js +23 -0
- package/server/services/persistence/createEntryTokenDao.js +140 -0
- package/server/services/persistence/createRestartLogDao.js +210 -0
- package/server/services/persistence/index.js +19 -0
- package/server/services/pubsub/createEventStore.js +54 -0
- package/server/services/pubsub/createPubSub.js +89 -0
- package/server/services/pubsub/createServiceEvents.js +29 -0
- package/server/services/pubsub/serviceEventConstants.js +39 -0
- package/server/services/remotes/createRemotes.js +25 -0
- package/server/services/server/createHttpsServer.js +12 -0
- package/server/services/server/createServer.js +66 -0
- package/server/services/sse/createSseService.js +96 -0
- package/server/services/sse/utils.js +7 -0
- package/server/services/system/createSystemService.js +170 -0
- package/server/services/system/getNetworkInfo.js +18 -0
- package/server/services/system/getScreenInfo.js +32 -0
- package/server/services/system/listNetworkInterfaces.js +27 -0
- package/server/services/task-manager/createTaskManager.js +68 -0
- package/server/services/task-runner/createTaskRunner.js +114 -0
- package/server/services/token-manager/createTokenManager.js +244 -0
- package/server/services/token-manager/token-format.js +7 -0
- package/server/services/token-manager/token-store-utils.js +8 -0
- package/server/services/update-manager/CommandUpdateSource.js +70 -0
- package/server/services/update-manager/NpmUpdateSource.js +34 -0
- package/server/services/update-manager/buildNpmGlobalUpdateCommand.js +15 -0
- package/server/services/update-manager/chooseUpdateCheckSource.js +20 -0
- package/server/services/update-manager/chooseUpdateInstallSource.js +5 -0
- package/server/services/update-manager/createUpdateManager.js +109 -0
- package/server/services/update-manager/resolveInstallUpdateCommand.js +42 -0
- package/server/term/cli/executeLocalServiceCommand.js +42 -0
- package/server/term/cli/getCliSocketPath.js +5 -0
- package/server/term/cli/parseCliArgs.js +110 -0
- package/server/term/cli/printCliResult.js +18 -0
- package/server/term/cli/runCliCmd.js +50 -0
- package/server/term/cli/sendCliCommand.js +76 -0
- package/server/term/cliSocket.js +29 -0
- package/server/term/srv/commands/configCommand.js +84 -0
- package/server/term/srv/commands/helpCommand.js +6 -0
- package/server/term/srv/commands/infoCommand.js +7 -0
- package/server/term/srv/commands/openQrCommand.js +7 -0
- package/server/term/srv/commands/samsungDetectCommand.js +52 -0
- package/server/term/srv/commands/serviceCommand.js +25 -0
- package/server/term/srv/commands/systemConfigCommand.js +7 -0
- package/server/term/srv/commands/tasksCommand.js +24 -0
- package/server/term/srv/commands/tokensCommand.js +15 -0
- package/server/term/srv/executeCliCommand.js +44 -0
- package/server/term/srv/executeCliRequest.js +38 -0
- package/server/term/srv/startCliServer.js +140 -0
- package/server/utils/createRandomToken.js +11 -0
- package/server/utils/env.js +155 -0
- package/server/utils/git.js +13 -0
- package/server/utils/http.js +7 -0
- package/server/utils/network.js +45 -0
- package/server/utils/paths.js +10 -0
- package/server/utils/process.js +57 -0
- package/server/utils/robot.js +11 -0
- package/server/utils/semver.js +33 -0
- package/server/utils/truncateText.js +7 -0
- package/utils/createLazy.js +13 -0
- package/utils/functional.js +48 -0
- package/utils/math.js +26 -0
- package/utils/notificationSettings.js +61 -0
- package/utils/object.utils.js +79 -0
- package/utils/predicates.js +17 -0
- package/utils/remoteCommands.js +40 -0
- package/utils/sync.js +3 -0
- package/velor-remote-mouse-6.4.8.tgz +0 -0
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { REMOTE_EVENT_SYSTEM_RELOAD } from '../../utils/remoteCommands.js';
|
|
2
|
+
|
|
3
|
+
const SYSTEM_RELOAD_GUARD_KEY = 'remote-mouse.system-reload-at';
|
|
4
|
+
const SYSTEM_RELOAD_GUARD_MS = 15_000;
|
|
5
|
+
const WAKE_RECONNECT_IDLE_MS = 5_000;
|
|
6
|
+
const WAKE_RECONNECT_DEBOUNCE_MS = 100;
|
|
7
|
+
|
|
8
|
+
const SOCKET_IO_OPTIONS = {
|
|
9
|
+
reconnection: true,
|
|
10
|
+
reconnectionDelay: 250,
|
|
11
|
+
reconnectionDelayMax: 2_000,
|
|
12
|
+
randomizationFactor: 0.2,
|
|
13
|
+
timeout: 4_000,
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
function getDefaultSetTimeout(windowRef) {
|
|
17
|
+
return typeof windowRef?.setTimeout === 'function'
|
|
18
|
+
? windowRef.setTimeout.bind(windowRef)
|
|
19
|
+
: setTimeout;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
function getDefaultClearTimeout(windowRef) {
|
|
23
|
+
return typeof windowRef?.clearTimeout === 'function'
|
|
24
|
+
? windowRef.clearTimeout.bind(windowRef)
|
|
25
|
+
: clearTimeout;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function isPageVisible(documentRef) {
|
|
29
|
+
return !documentRef || documentRef.visibilityState !== 'hidden';
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export function bindSocketWakeReconnect(socket, {
|
|
33
|
+
windowRef = typeof window !== 'undefined' ? window : undefined,
|
|
34
|
+
documentRef = typeof document !== 'undefined' ? document : undefined,
|
|
35
|
+
now = () => Date.now(),
|
|
36
|
+
setTimeoutFn = getDefaultSetTimeout(windowRef),
|
|
37
|
+
clearTimeoutFn = getDefaultClearTimeout(windowRef),
|
|
38
|
+
} = {}) {
|
|
39
|
+
if (!socket || !windowRef?.addEventListener) {
|
|
40
|
+
return () => {};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
let lastInactiveAt = 0;
|
|
44
|
+
let reconnectTimer = null;
|
|
45
|
+
|
|
46
|
+
function markInactive() {
|
|
47
|
+
lastInactiveAt = now();
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
function scheduleWakeReconnect() {
|
|
51
|
+
if (!isPageVisible(documentRef)) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
const inactiveDuration = lastInactiveAt > 0 ? now() - lastInactiveAt : 0;
|
|
56
|
+
if (socket.connected && inactiveDuration < WAKE_RECONNECT_IDLE_MS) {
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (reconnectTimer) {
|
|
61
|
+
clearTimeoutFn(reconnectTimer);
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
reconnectTimer = setTimeoutFn(() => {
|
|
65
|
+
reconnectTimer = null;
|
|
66
|
+
if (!isPageVisible(documentRef)) {
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
if (socket.connected) {
|
|
71
|
+
socket.disconnect?.();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
socket.connect?.();
|
|
75
|
+
}, WAKE_RECONNECT_DEBOUNCE_MS);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
function handleVisibilityChange() {
|
|
79
|
+
if (isPageVisible(documentRef)) {
|
|
80
|
+
scheduleWakeReconnect();
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
markInactive();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
windowRef.addEventListener('pageshow', scheduleWakeReconnect);
|
|
87
|
+
windowRef.addEventListener('focus', scheduleWakeReconnect);
|
|
88
|
+
windowRef.addEventListener('online', scheduleWakeReconnect);
|
|
89
|
+
windowRef.addEventListener('pagehide', markInactive);
|
|
90
|
+
documentRef?.addEventListener?.('visibilitychange', handleVisibilityChange);
|
|
91
|
+
|
|
92
|
+
return () => {
|
|
93
|
+
if (reconnectTimer) {
|
|
94
|
+
clearTimeoutFn(reconnectTimer);
|
|
95
|
+
reconnectTimer = null;
|
|
96
|
+
}
|
|
97
|
+
windowRef.removeEventListener?.('pageshow', scheduleWakeReconnect);
|
|
98
|
+
windowRef.removeEventListener?.('focus', scheduleWakeReconnect);
|
|
99
|
+
windowRef.removeEventListener?.('online', scheduleWakeReconnect);
|
|
100
|
+
windowRef.removeEventListener?.('pagehide', markInactive);
|
|
101
|
+
documentRef?.removeEventListener?.('visibilitychange', handleVisibilityChange);
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
export function initSocketIo() {
|
|
106
|
+
const socket = io(SOCKET_IO_OPTIONS);
|
|
107
|
+
bindSocketWakeReconnect(socket);
|
|
108
|
+
socket.on(REMOTE_EVENT_SYSTEM_RELOAD, () => {
|
|
109
|
+
const lastReloadAt = Number(window.sessionStorage.getItem(SYSTEM_RELOAD_GUARD_KEY) || 0);
|
|
110
|
+
if (lastReloadAt > 0 && (Date.now() - lastReloadAt) < SYSTEM_RELOAD_GUARD_MS) {
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
window.sessionStorage.setItem(SYSTEM_RELOAD_GUARD_KEY, String(Date.now()));
|
|
114
|
+
window.location.reload();
|
|
115
|
+
});
|
|
116
|
+
return socket;
|
|
117
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function onWindowEvent(eventName, listener) {
|
|
2
|
+
if (typeof listener !== 'function') {
|
|
3
|
+
return () => {};
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
const handler = (event) => {
|
|
7
|
+
listener(event.detail || {});
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
window.addEventListener(eventName, handler);
|
|
11
|
+
return () => {
|
|
12
|
+
window.removeEventListener(eventName, handler);
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export function emitWindowEvent(eventName, detail) {
|
|
17
|
+
window.dispatchEvent(new CustomEvent(eventName, {detail}));
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export function createWindowEventListener(eventName) {
|
|
21
|
+
return (listener) => onWindowEvent(eventName, listener);
|
|
22
|
+
}
|
|
23
|
+
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export function applyPageTranslations(root, t) {
|
|
2
|
+
for (const node of root.querySelectorAll('[data-i18n]')) {
|
|
3
|
+
node.textContent = t(node.dataset.i18n);
|
|
4
|
+
}
|
|
5
|
+
for (const node of root.querySelectorAll('[data-i18n-placeholder]')) {
|
|
6
|
+
node.setAttribute('placeholder', t(node.dataset.i18nPlaceholder));
|
|
7
|
+
}
|
|
8
|
+
for (const node of root.querySelectorAll('[data-i18n-title]')) {
|
|
9
|
+
node.setAttribute('title', t(node.dataset.i18nTitle));
|
|
10
|
+
}
|
|
11
|
+
for (const node of root.querySelectorAll('[data-i18n-aria-label]')) {
|
|
12
|
+
node.setAttribute('aria-label', t(node.dataset.i18nAriaLabel));
|
|
13
|
+
}
|
|
14
|
+
const pageTitleKey = root.documentElement?.dataset?.i18nPageTitle || document.documentElement.dataset.i18nPageTitle;
|
|
15
|
+
if (pageTitleKey) {
|
|
16
|
+
document.title = t(pageTitleKey);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import {localePrefixes, localeRegistry} from './locale-registry.js';
|
|
2
|
+
|
|
3
|
+
export function resolveLocale(value, fallbackLocale = 'fr') {
|
|
4
|
+
const normalized = String(value || '').toLowerCase();
|
|
5
|
+
|
|
6
|
+
if (localeRegistry[normalized]) {
|
|
7
|
+
return normalized;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
for (const [prefix, locale] of localePrefixes) {
|
|
11
|
+
if (normalized.startsWith(prefix)) {
|
|
12
|
+
return locale;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
return fallbackLocale;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export async function loadDictionary(locale) {
|
|
20
|
+
return localeRegistry[locale]?.load() || localeRegistry.fr.load();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function interpolate(template, params = {}) {
|
|
24
|
+
return String(template || '').replace(/\{(\w+)\}/g, (_match, key) => String(params[key] ?? ''));
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export async function createI18n(locale) {
|
|
28
|
+
const normalizedLocale = resolveLocale(locale);
|
|
29
|
+
const dict = await loadDictionary(normalizedLocale);
|
|
30
|
+
|
|
31
|
+
function t(key, params = {}) {
|
|
32
|
+
const template = dict[key] ?? key;
|
|
33
|
+
return interpolate(template, params);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return {
|
|
37
|
+
locale: normalizedLocale,
|
|
38
|
+
t,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
export const localeRegistry = {
|
|
2
|
+
fr: {
|
|
3
|
+
label: 'Francais',
|
|
4
|
+
load: async () => {
|
|
5
|
+
const module = await import('./locales/fr.js');
|
|
6
|
+
return module.fr;
|
|
7
|
+
},
|
|
8
|
+
},
|
|
9
|
+
en: {
|
|
10
|
+
label: 'English',
|
|
11
|
+
load: async () => {
|
|
12
|
+
const module = await import('./locales/en.js');
|
|
13
|
+
return module.en;
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
es: {
|
|
17
|
+
label: 'Espanol',
|
|
18
|
+
load: async () => {
|
|
19
|
+
const module = await import('./locales/es.js');
|
|
20
|
+
return module.es;
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
de: {
|
|
24
|
+
label: 'Deutsch',
|
|
25
|
+
load: async () => {
|
|
26
|
+
const module = await import('./locales/de.js');
|
|
27
|
+
return module.de;
|
|
28
|
+
},
|
|
29
|
+
},
|
|
30
|
+
ru: {
|
|
31
|
+
label: 'Русский',
|
|
32
|
+
load: async () => {
|
|
33
|
+
const module = await import('./locales/ru.js');
|
|
34
|
+
return module.ru;
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
it: {
|
|
38
|
+
label: 'Italiano',
|
|
39
|
+
load: async () => {
|
|
40
|
+
const module = await import('./locales/it.js');
|
|
41
|
+
return module.it;
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
pt: {
|
|
45
|
+
label: 'Portugues',
|
|
46
|
+
load: async () => {
|
|
47
|
+
const module = await import('./locales/pt.js');
|
|
48
|
+
return module.pt;
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
ja: {
|
|
52
|
+
label: '日本語',
|
|
53
|
+
load: async () => {
|
|
54
|
+
const module = await import('./locales/ja.js');
|
|
55
|
+
return module.ja;
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
zh: {
|
|
59
|
+
label: '中文',
|
|
60
|
+
load: async () => {
|
|
61
|
+
const module = await import('./locales/zh.js');
|
|
62
|
+
return module.zh;
|
|
63
|
+
},
|
|
64
|
+
},
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
export const localePrefixes = [
|
|
68
|
+
['fr', 'fr'],
|
|
69
|
+
['en', 'en'],
|
|
70
|
+
['es', 'es'],
|
|
71
|
+
['de', 'de'],
|
|
72
|
+
['ru', 'ru'],
|
|
73
|
+
['it', 'it'],
|
|
74
|
+
['pt', 'pt'],
|
|
75
|
+
['ja', 'ja'],
|
|
76
|
+
['zh', 'zh'],
|
|
77
|
+
];
|
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
import {en} from './en.js';
|
|
2
|
+
|
|
3
|
+
export const de = {
|
|
4
|
+
...en,
|
|
5
|
+
'common.unknown': 'unbekannt',
|
|
6
|
+
'common.language': 'Sprache',
|
|
7
|
+
'common.languageShort': 'DE',
|
|
8
|
+
|
|
9
|
+
'main.serverActionsAria': 'Serveraktionen',
|
|
10
|
+
'main.updatesAria': 'Aktualisierungen',
|
|
11
|
+
'main.updateCheckButton': 'Update pruefen',
|
|
12
|
+
'main.installUpdateButton': 'Update installieren',
|
|
13
|
+
'main.restartServiceButton': 'Dienst neu starten',
|
|
14
|
+
'main.displayInfoAria': 'Anzeige und Infos',
|
|
15
|
+
'main.openQrServer': 'QR Server',
|
|
16
|
+
'main.openQrClient': 'QR Client',
|
|
17
|
+
'main.openServerInfoServer': 'Serverinfo',
|
|
18
|
+
'main.openServerInfoClient': 'Clientinfo',
|
|
19
|
+
'main.openConfig': 'Konfiguration',
|
|
20
|
+
'main.accessAria': 'Zugriff',
|
|
21
|
+
'main.toggleQrOverlay': 'QR anzeigen',
|
|
22
|
+
'main.rotateEntryToken': 'Zugangstoken wechseln',
|
|
23
|
+
'main.browserShortcutsAria': 'Browser-Kuerzel',
|
|
24
|
+
'main.tvControlsAria': 'Samsung-TV-Steuerung',
|
|
25
|
+
'main.textInputPlaceholder': 'Zu sendenden Text eingeben',
|
|
26
|
+
'main.sendText': 'Senden',
|
|
27
|
+
'main.connectionUnavailableTitle': 'Server nicht erreichbar',
|
|
28
|
+
'main.connectionWaiting': 'Warte auf Verbindung...',
|
|
29
|
+
'main.connectionExpiredTitle': 'Verbindung abgelaufen',
|
|
30
|
+
'main.connectionExpiredMessage': 'QR-Code des Servers erneut scannen.',
|
|
31
|
+
'main.canvas.oneFingerScroll': 'Scroll',
|
|
32
|
+
'main.canvas.dragMouse': 'Ziehen: Maus',
|
|
33
|
+
'main.canvas.touchHelp': 'Tippen: Linksklick\n2 Finger: Scroll / Rechtsklick\nRechter Rand: Scroll',
|
|
34
|
+
|
|
35
|
+
'adminConfig.eyebrow': 'Administration',
|
|
36
|
+
'adminConfig.title': 'Persistente Konfiguration',
|
|
37
|
+
'adminConfig.copy': 'Die folgenden Felder werden in der Datenbank gespeichert und nach der Struktur des Konfigurationsobjekts gruppiert.',
|
|
38
|
+
'adminConfig.back': 'Zur Fernbedienung',
|
|
39
|
+
'adminConfig.reload': 'Neu laden',
|
|
40
|
+
'adminConfig.restart': 'Dienst neu starten',
|
|
41
|
+
'adminConfig.loading': 'Konfiguration wird geladen...',
|
|
42
|
+
'adminConfig.showSection': 'Anzeigen',
|
|
43
|
+
'adminConfig.hideSection': 'Ausblenden',
|
|
44
|
+
'adminConfig.defaultButton': 'Standard',
|
|
45
|
+
'adminConfig.toggleActive': 'Aktiv',
|
|
46
|
+
'adminConfig.toggleInactive': 'Inaktiv',
|
|
47
|
+
'adminConfig.statusLoading': 'Konfiguration wird geladen...',
|
|
48
|
+
'adminConfig.statusLoaded': 'Konfiguration geladen.',
|
|
49
|
+
'adminConfig.statusLoadError': 'Fehler beim Laden.',
|
|
50
|
+
'adminConfig.detectSamsung': 'TV erkennen',
|
|
51
|
+
|
|
52
|
+
'serverInfo.pageTitle': 'Remote Mouse - Serverinfo',
|
|
53
|
+
'serverInfo.heading': 'Remote Mouse - Serverinfo',
|
|
54
|
+
'serverInfo.now': 'Jetzt: {value}',
|
|
55
|
+
'serverInfo.onlineSince': 'Online seit: {value}',
|
|
56
|
+
'serverInfo.uptime': 'Laufzeit: {value}',
|
|
57
|
+
'serverInfo.clientsCount': 'Clients: {value}',
|
|
58
|
+
'serverInfo.section.clients': 'Verbundene Clients',
|
|
59
|
+
'serverInfo.section.tasks': 'Geplante Aufgaben',
|
|
60
|
+
'serverInfo.section.config': 'Konfiguration',
|
|
61
|
+
'serverInfo.section.sysConfig': 'Systemkonfiguration',
|
|
62
|
+
'serverInfo.section.logs': 'Letzte Logs',
|
|
63
|
+
'main.workspaceAria': 'Remote-Arbeitsbereich',
|
|
64
|
+
'main.updateCheckButtonTitle': 'Update-Pruefung erzwingen',
|
|
65
|
+
'main.installUpdateButtonTitle': 'Update installieren',
|
|
66
|
+
'main.restartServiceButtonTitle': 'Dienst neu starten',
|
|
67
|
+
'main.openQrServerTitle': 'QR-Seite auf dem Server oeffnen',
|
|
68
|
+
'main.openQrClientTitle': 'QR-Seite auf dem Client oeffnen',
|
|
69
|
+
'main.openServerInfoServerTitle': 'Serverinfo-Seite auf dem Server oeffnen',
|
|
70
|
+
'main.openServerInfoClientTitle': 'Serverinfo-Seite auf dem Client oeffnen',
|
|
71
|
+
'main.openConfigTitle': 'Konfigurationsseite oeffnen',
|
|
72
|
+
'main.openPreferences': 'Einstellungen',
|
|
73
|
+
'main.openPreferencesTitle': 'Lokale Einstellungsseite oeffnen',
|
|
74
|
+
'main.toggleQrOverlayTitle': 'QR-Overlay ein- oder ausblenden',
|
|
75
|
+
'main.rotateEntryTokenTitle': 'Zugangstoken-Rotation erzwingen',
|
|
76
|
+
'main.adminActionsDisabledMessage': 'Server-Admin-Aktionen sind deaktiviert.',
|
|
77
|
+
'main.adminAppVersion': 'Version: --',
|
|
78
|
+
'main.browserShortcutsLabel': 'Browser',
|
|
79
|
+
'main.openBrowser': 'Browser oeffnen oder fokussieren',
|
|
80
|
+
'main.browserBack': 'Vorherige Seite',
|
|
81
|
+
'main.browserForward': 'Naechste Seite',
|
|
82
|
+
'main.prevTab': 'Vorheriger Tab',
|
|
83
|
+
'main.nextTab': 'Naechster Tab',
|
|
84
|
+
'main.newTab': 'Neuer Tab',
|
|
85
|
+
'main.closeTab': 'Tab schliessen',
|
|
86
|
+
'main.addressBar': 'Adressleiste',
|
|
87
|
+
'main.reload': 'Neu laden',
|
|
88
|
+
'main.fullscreen': 'Vollbild',
|
|
89
|
+
'main.videoPlayPause': 'Wiedergabe/Pause',
|
|
90
|
+
'main.videoMute': 'Video stummschalten',
|
|
91
|
+
'main.videoFullscreen': 'Video Vollbild',
|
|
92
|
+
'main.windowToggle': 'Maximieren/Minimieren',
|
|
93
|
+
'main.windowToggleTitle': 'Aktives Fenster maximieren oder minimieren',
|
|
94
|
+
'main.windowClose': 'Schliessen',
|
|
95
|
+
'main.windowCloseTitle': 'Aktives Fenster schliessen',
|
|
96
|
+
'main.vlcControlsAria': 'VLC-Steuerung',
|
|
97
|
+
'main.vlcSectionLabel': 'VLC',
|
|
98
|
+
'main.vlcOpen': 'VLC oeffnen',
|
|
99
|
+
'main.vlcOpenTitle': 'VLC Media Player oeffnen oder in den Vordergrund holen',
|
|
100
|
+
'main.vlcPrevious': 'Vorheriges Medium',
|
|
101
|
+
'main.vlcPlayPause': 'VLC wiedergeben oder pausieren',
|
|
102
|
+
'main.vlcNext': 'Naechstes Medium',
|
|
103
|
+
'main.vlcSeekBackward': 'In VLC zurueckspulen',
|
|
104
|
+
'main.vlcStop': 'VLC stoppen',
|
|
105
|
+
'main.vlcSeekForward': 'In VLC vorspulen',
|
|
106
|
+
'main.vlcVolumeDown': 'VLC-Lautstaerke verringern',
|
|
107
|
+
'main.vlcMute': 'VLC stummschalten',
|
|
108
|
+
'main.vlcVolumeUp': 'VLC-Lautstaerke erhoehen',
|
|
109
|
+
'main.vlcFullscreen': 'VLC-Vollbild umschalten',
|
|
110
|
+
'main.systemControlsAria': 'Systemsteuerung',
|
|
111
|
+
'main.systemSectionLabel': 'System',
|
|
112
|
+
'main.systemShowDesktop': 'Desktop anzeigen',
|
|
113
|
+
'main.systemWindowLeft': 'Vorheriges Fenster',
|
|
114
|
+
'main.systemWindowRight': 'Naechstes Fenster',
|
|
115
|
+
'main.systemStartMenu': 'Startmenue oeffnen',
|
|
116
|
+
'main.systemSettings': 'Systemeinstellungen oeffnen',
|
|
117
|
+
'main.systemNotifications': 'Benachrichtigungszentrale oeffnen',
|
|
118
|
+
'main.tvSectionLabel': 'Samsung TV',
|
|
119
|
+
'main.samsungOn': 'Samsung-TV einschalten',
|
|
120
|
+
'main.samsungOff': 'Samsung-TV ausschalten',
|
|
121
|
+
'main.samsungVolUp': 'Samsung-Lautstaerke erhoehen',
|
|
122
|
+
'main.samsungVolDown': 'Samsung-Lautstaerke verringern',
|
|
123
|
+
'main.samsungMute': 'Samsung stummschalten',
|
|
124
|
+
'main.samsungInput': 'Samsung-Quelle wechseln',
|
|
125
|
+
'main.samsungEnter': 'Samsung-Menue bestaetigen',
|
|
126
|
+
'main.samsungPcInput': 'Samsung auf PC-Eingang umschalten',
|
|
127
|
+
'main.cursorPreviewAria': 'Cursor-Vorschau',
|
|
128
|
+
'main.keyboardPanelAria': 'Tastatur',
|
|
129
|
+
'main.touchEntryPanelAria': 'Tastaturbereich',
|
|
130
|
+
'main.liveKeyboardPlaceholder': 'Hier tippen',
|
|
131
|
+
'main.menuAria': 'Aktionen',
|
|
132
|
+
'main.textEntry': 'Texteingabe',
|
|
133
|
+
'main.touchEntry': 'Tasteneingabe',
|
|
134
|
+
'main.keyboard': 'Tastatur',
|
|
135
|
+
'main.escape': 'Esc',
|
|
136
|
+
'main.tab': 'Tab',
|
|
137
|
+
'main.shift': 'Umschalt',
|
|
138
|
+
'main.alt': 'Alt',
|
|
139
|
+
'main.ctrl': 'Strg',
|
|
140
|
+
'main.leftClick': 'Linksklick',
|
|
141
|
+
'main.rightClick': 'Rechtsklick',
|
|
142
|
+
'main.enter': 'Enter',
|
|
143
|
+
'main.orientationLockTitle': 'Querformat wird nicht unterstuetzt',
|
|
144
|
+
'main.orientationLockMessage': 'Drehen Sie das Geraet zurueck ins Hochformat, um die Remote zu nutzen.',
|
|
145
|
+
'main.notificationsAria': 'Benachrichtigungen',
|
|
146
|
+
'main.shortcut.videoPlayPause': 'Leertaste',
|
|
147
|
+
'main.shortcut.vlcPrevious': 'P',
|
|
148
|
+
'main.shortcut.vlcPlayPause': 'Leertaste',
|
|
149
|
+
'main.shortcut.vlcNext': 'N',
|
|
150
|
+
'main.shortcut.vlcSeekBackward': 'Links',
|
|
151
|
+
'main.shortcut.vlcStop': 'S',
|
|
152
|
+
'main.shortcut.vlcSeekForward': 'Rechts',
|
|
153
|
+
'main.shortcut.vlcVolumeDown': 'Strg+Unten',
|
|
154
|
+
'main.shortcut.vlcMute': 'M',
|
|
155
|
+
'main.shortcut.vlcVolumeUp': 'Strg+Oben',
|
|
156
|
+
'main.shortcut.vlcFullscreen': 'F',
|
|
157
|
+
'preferences.pageTitle': 'Remote Mouse Einstellungen',
|
|
158
|
+
'preferences.eyebrow': 'Einstellungen',
|
|
159
|
+
'preferences.title': 'Lokale Einstellungen',
|
|
160
|
+
'preferences.copy': 'Diese Einstellungen werden lokal in diesem Browser gespeichert und aendern die Serverkonfiguration nicht.',
|
|
161
|
+
'preferences.back': 'Zurueck zur Remote',
|
|
162
|
+
'preferences.section.local.key': 'Lokal',
|
|
163
|
+
'preferences.section.local.title': 'Browser-Einstellungen',
|
|
164
|
+
'preferences.section.local.description': 'Waehlen Sie Sprache, Design und Haendigkeit fuer dieses Geraet.',
|
|
165
|
+
'preferences.section.remotes.key': 'Fernbedienungen',
|
|
166
|
+
'preferences.section.remotes.title': 'Sichtbarkeit der Remotes',
|
|
167
|
+
'preferences.section.remotes.description': 'Waehlen Sie, welche lokalen Remotes in der Hauptoberflaeche angezeigt werden sollen.',
|
|
168
|
+
'preferences.section.browsers.key': 'Browser',
|
|
169
|
+
'preferences.section.browsers.title': 'Browser-Launcher',
|
|
170
|
+
'preferences.section.browsers.description': 'Waehlen Sie, welche lokalen Browser in der Browser-Remote angezeigt werden koennen.',
|
|
171
|
+
'preferences.remote.keyboard': 'Tastatur',
|
|
172
|
+
'preferences.remote.browser': 'Browser',
|
|
173
|
+
'preferences.remote.vlc': 'VLC',
|
|
174
|
+
'preferences.remote.samsung': 'Samsung TV',
|
|
175
|
+
'preferences.remote.preview': 'Cursor-Vorschau',
|
|
176
|
+
'adminConfig.section.vlc.title': 'VLC',
|
|
177
|
+
'adminConfig.section.vlc.description': 'Die VLC-Remote fuer alle Clients aktivieren oder ausblenden.',
|
|
178
|
+
'adminConfig.field.vlc.enabled': 'VLC-Remote aktivieren',
|
|
179
|
+
'serverInfo.version': 'Version: {value}',
|
|
180
|
+
'serverInfo.section.tokens': 'Tokens',
|
|
181
|
+
'serverInfo.section.lifecycle': 'Letzte Lebenszyklus-Ereignisse',
|
|
182
|
+
'serverInfo.daemon': 'Daemon: {value}{suffix}',
|
|
183
|
+
'serverInfo.daemon.yes': 'ja',
|
|
184
|
+
'serverInfo.daemon.no': 'nein',
|
|
185
|
+
'serverInfo.daemon.installed': '(installiert)',
|
|
186
|
+
'serverInfo.adminActions': 'Admin-Aktionen: {value}',
|
|
187
|
+
'serverInfo.adminActions.enabled': 'aktiviert',
|
|
188
|
+
'serverInfo.adminActions.disabled': 'deaktiviert',
|
|
189
|
+
'serverInfo.adminActions.localConfigOnly': 'Wenn Admin-Aktionen deaktiviert sind, verwenden Sie die Einstellungsseite fuer lokale Browser-Einstellungen.',
|
|
190
|
+
'serverInfo.table.client.id': 'ID',
|
|
191
|
+
'serverInfo.table.client.connectedAt': 'Verbunden seit',
|
|
192
|
+
'serverInfo.table.client.address': 'Adresse',
|
|
193
|
+
'serverInfo.table.client.transport': 'Transport',
|
|
194
|
+
'serverInfo.table.task.name': 'Name',
|
|
195
|
+
'serverInfo.table.task.state': 'Status',
|
|
196
|
+
'serverInfo.table.task.dueAt': 'Faellig am',
|
|
197
|
+
'serverInfo.table.task.remaining': 'In',
|
|
198
|
+
'serverInfo.table.token.state': 'Status',
|
|
199
|
+
'serverInfo.table.token.token': 'Token',
|
|
200
|
+
'serverInfo.table.token.createdAt': 'Erstellt am',
|
|
201
|
+
'serverInfo.table.token.expiresAt': 'Laeuft ab am',
|
|
202
|
+
'serverInfo.table.lifecycle.id': 'ID',
|
|
203
|
+
'serverInfo.table.lifecycle.event': 'Ereignis',
|
|
204
|
+
'serverInfo.table.lifecycle.requestedAt': 'Angefordert',
|
|
205
|
+
'serverInfo.table.lifecycle.detectedAt': 'Erkannt',
|
|
206
|
+
'serverInfo.table.lifecycle.status': 'Status',
|
|
207
|
+
'serverInfo.table.lifecycle.cause': 'Ursache',
|
|
208
|
+
'serverInfo.table.lifecycle.source': 'Quelle',
|
|
209
|
+
'serverInfo.empty.clients': 'Keine verbundenen Clients.',
|
|
210
|
+
'serverInfo.empty.tasks': 'Keine geplanten Aufgaben.',
|
|
211
|
+
'serverInfo.empty.tokens': 'Keine gespeicherten Tokens.',
|
|
212
|
+
'serverInfo.empty.lifecycle': 'Kein aufgezeichnetes Lebenszyklus-Ereignis.',
|
|
213
|
+
'serverInfo.empty.logs': 'Keine Logs.',
|
|
214
|
+
'serverInfo.task.running': 'Laufend',
|
|
215
|
+
'serverInfo.task.scheduled': 'Geplant',
|
|
216
|
+
'serverInfo.task.waiting': 'Wartend',
|
|
217
|
+
'serverInfo.token.active': 'Aktiv',
|
|
218
|
+
'serverInfo.token.archived': 'Archiviert',
|
|
219
|
+
'serverInfo.token.masked': '[maskiert]',
|
|
220
|
+
'serverInfo.duration.hours': '{value} Std',
|
|
221
|
+
'serverInfo.duration.minutes': '{value} Min',
|
|
222
|
+
'serverInfo.duration.seconds': '{value} Sek',
|
|
223
|
+
'serverInfo.nowMoment': 'jetzt',
|
|
224
|
+
'serverInfo.loadError': 'Fehler beim Laden: {message}',
|
|
225
|
+
'serverInfo.sseCreateError': 'Config-Abonnement konnte nicht erstellt werden.',
|
|
226
|
+
'serverInfo.sseInvalid': 'Ungueltiges SSE-Abonnement',
|
|
227
|
+
};
|