From 3e962a497789c220aa5b0c4b9ec190f2527fb3de Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 14:14:41 +0000 Subject: [PATCH] Add new i18n translation keys to locale files (work in progress - fixing duplicates) Co-authored-by: cadtoolbox <12723486+cadtoolbox@users.noreply.github.com> --- frontend/src/i18n/locales/de.ts | 384 +++++++++++++++++++++++++++++++ frontend/src/i18n/locales/en.ts | 377 ++++++++++++++++++++++++++++++ frontend/src/i18n/locales/ja.ts | 395 ++++++++++++++++++++++++++++++++ 3 files changed, 1156 insertions(+) diff --git a/frontend/src/i18n/locales/de.ts b/frontend/src/i18n/locales/de.ts index 8d2820a71..09aac08d7 100644 --- a/frontend/src/i18n/locales/de.ts +++ b/frontend/src/i18n/locales/de.ts @@ -2640,4 +2640,388 @@ export default { replaceCarbonFilter: 'Aktivkohlefilter ersetzen', lubricateLeftNozzleRail: 'Linke Düsenschiene schmieren (H2-Serie)', }, + + // Smart Plugs + smartPlugs: { + offline: 'Offline', + admin: 'Admin', + openPlugAdminPage: 'Plug-Admin-Seite öffnen', + deleteSmartPlug: 'Smart Plug löschen', + turnOnSmartPlug: 'Smart Plug einschalten', + turnOffSmartPlug: 'Smart Plug ausschalten', + turnOn: 'Einschalten', + turnOff: 'Ausschalten', + addSmartPlug: { + scanningNetwork: 'Netzwerk wird durchsucht...', + chooseEntity: 'Entität auswählen...', + connectionFailed: 'Verbindung fehlgeschlagen', + searchEntities: 'Entitäten suchen...', + searchPowerSensors: 'Leistungssensoren suchen...', + searchEnergySensors: 'Energiesensoren suchen...', + placeholders: { + mqttTopic: 'zigbee2mqtt/shelly-working-room', + mqttPowerPath: 'power_l1', + mqttEnergyPath: 'energy_l1', + mqttStatePath: 'state_l1', + mqttStateOnValue: 'ON, true, 1', + mqttMultiplier: '1', + ipAddress: '192.168.1.100', + plugName: 'Wohnzimmer Steckdose', + username: 'admin', + password: '********', + wattThreshold: 'z.B. 200', + kwThreshold: 'z.B. 10', + mqttSameAsPower: 'Gleich wie Leistungs-Topic oder anders', + }, + }, + }, + + // Rich Text Editor + richTextEditor: { + bold: 'Fett', + italic: 'Kursiv', + underline: 'Unterstrichen', + bulletList: 'Aufzählungsliste', + numberedList: 'Nummerierte Liste', + alignLeft: 'Linksbündig', + alignCenter: 'Zentriert', + alignRight: 'Rechtsbündig', + addLink: 'Link hinzufügen', + removeLink: 'Link entfernen', + }, + + // External Links + externalLinks: { + noLinksConfigured: 'Keine externen Links konfiguriert', + deleteLink: 'Link löschen', + removeCustomIcon: 'Benutzerdefiniertes Symbol entfernen', + placeholders: { + linkName: 'Mein Link', + linkUrl: 'https://example.com', + }, + }, + + // Keyboard Shortcuts Modal + keyboardShortcuts: { + title: 'Tastaturkürzel', + navigation: 'Navigation', + archivesSection: 'Archive', + kProfilesSection: 'K-Profile', + generalSection: 'Allgemein', + shortcuts: { + goToPrinters: 'Zu Drucker gehen', + goToArchives: 'Zu Archiv gehen', + goToQueue: 'Zur Warteschlange gehen', + goToStats: 'Zu Statistiken gehen', + goToProfiles: 'Zu Cloud-Profilen gehen', + goToSettings: 'Zu Einstellungen gehen', + focusSearch: 'Suche fokussieren', + openUploadModal: 'Upload-Modal öffnen', + clearSelection: 'Auswahl löschen / Eingabe aufheben', + contextMenu: 'Kontextmenü auf Karten', + refreshProfiles: 'Profile aktualisieren', + newProfile: 'Neues Profil', + exitSelectionMode: 'Auswahlmodus beenden', + showHelp: 'Diese Hilfe anzeigen', + }, + footer: 'Drücken Sie Esc oder klicken Sie außerhalb, um zu schließen', + }, + + // Notification Log + notificationLog: { + title: 'Benachrichtigungsprotokoll', + events: { + printStarted: 'Druck gestartet', + printComplete: 'Druck abgeschlossen', + printFailed: 'Druck fehlgeschlagen', + printStopped: 'Druck gestoppt', + progress: 'Fortschritt', + printerOffline: 'Drucker offline', + printerError: 'Druckerfehler', + lowFilament: 'Wenig Filament', + maintenanceDue: 'Wartung fällig', + test: 'Test', + }, + timeAgo: { + justNow: 'Gerade eben', + minutesAgo: 'vor {{minutes}}m', + hoursAgo: 'vor {{hours}}h', + }, + }, + + // Restore/Backup Modal + restoreBackup: { + title: 'Backup wiederherstellen', + restoring: 'Wird wiederhergestellt...', + restoreComplete: 'Wiederherstellung abgeschlossen', + restoreFailed: 'Wiederherstellung fehlgeschlagen', + importSettings: 'Einstellungen aus Backup-Datei importieren', + pleaseWait: 'Bitte warten Sie, während Ihre Daten wiederhergestellt werden', + clickToSelect: 'Klicken Sie, um Backup-Datei auszuwählen (.json oder .zip)', + howDuplicateHandling: 'So funktioniert die Duplikatbehandlung:', + categories: { + printers: 'Drucker', + smartPlugs: 'Smart Plugs', + notificationProviders: 'Benachrichtigungsanbieter', + filaments: 'Filamente', + archives: 'Archive', + pendingUploads: 'Ausstehende Uploads', + settingsTemplates: 'Einstellungen & Vorlagen', + }, + matchingInfo: { + printers: 'abgeglichen nach Seriennummer', + smartPlugs: 'abgeglichen nach IP-Adresse', + notificationProviders: 'abgeglichen nach Name', + filaments: 'abgeglichen nach Name + Typ + Marke', + archives: 'abgeglichen nach Inhalts-Hash', + pendingUploads: 'abgeglichen nach Dateiname', + settingsTemplates: 'immer überschrieben', + }, + replaceExisting: 'Vorhandene Daten ersetzen', + keepExisting: 'Vorhandene Daten behalten', + replaceDescription: 'Bereits vorhandene Elemente mit Backup-Daten überschreiben', + keepDescription: 'Nur Elemente wiederherstellen, die noch nicht existieren', + caution: 'Vorsicht:', + cautionText: 'Das Überschreiben ersetzt Ihre aktuellen Konfigurationen durch Backup-Daten. Drucker-Zugangscodes werden aus Sicherheitsgründen niemals überschrieben.', + itemsRestored: 'Wiederhergestellte Elemente', + itemsSkipped: 'Übersprungene Elemente', + restored: 'Wiederhergestellt', + skipped: 'Übersprungen (existieren bereits)', + filesLabel: 'Dateien (3MF, Thumbnails, etc.)', + newApiKeysGenerated: 'Neue API-Schlüssel generiert', + newApiKeysWarning: 'Diese Schlüssel werden nur einmal angezeigt. Kopieren Sie sie jetzt!', + processingBackup: 'Backup-Datei wird verarbeitet...', + noDataFound: 'In der Backup-Datei wurden keine wiederherzustellenden Daten gefunden.', + failedToRestore: 'Backup konnte nicht wiederhergestellt werden. Bitte überprüfen Sie das Dateiformat.', + }, + + // Backup Export Modal + backupExport: { + title: 'Backup exportieren', + selectData: 'Zu exportierende Daten auswählen', + selectAll: 'Alle auswählen', + selectNone: 'Keine auswählen', + categoryDescriptions: { + settings: 'Sprache, Theme, Update-Einstellungen', + notifications: 'ntfy, Pushover, Discord, usw.', + templates: 'Benutzerdefinierte Nachrichtenvorlagen', + smartPlugs: 'Tasmota-Plug-Konfigurationen', + externalLinks: 'Seitenleiste Links zu externen Diensten', + printers: 'Druckerinformationen (Zugangscodes ausgeschlossen)', + plateDetection: 'Leere Platten-Referenzbilder', + filaments: 'Filamenttypen und -kosten', + maintenance: 'Benutzerdefinierte Wartungspläne', + archives: 'Alle Druckdaten + Dateien (3MF, Thumbnails, Fotos)', + projects: 'Projekte, BOM-Elemente und Anhänge', + pendingUploads: 'Virtueller Drucker-Uploads zur Überprüfung', + apiKeys: 'Webhook-API-Schlüssel (neue Schlüssel bei Import generiert)', + }, + requiresPrinters: 'Drucker müssen ausgewählt sein', + zipFileWarning: 'ZIP-Datei wird erstellt.', + zipFileDescription: 'Enthält alle 3MF-Dateien, Thumbnails, Zeitraffer und Fotos. Dies kann eine Weile dauern und zu einer großen Datei führen.', + includeAccessCodes: 'Zugangscodes einschließen', + includeAccessCodesDescription: 'Für die Übertragung auf eine andere Maschine', + includeAccessCodesWarning: 'Zugangscodes werden im Klartext eingeschlossen. Bewahren Sie diese Backup-Datei sicher auf!', + categoriesSelected: '{{selectedCount}} Kategorien ausgewählt', + }, + + // Pending Uploads Panel + pendingUploads: { + placeholders: { + tags: 'z.B. funktional, Prototyp, Geschenk', + notes: 'Notizen zu diesem Druck hinzufügen...', + }, + discardUpload: 'Upload verwerfen', + archiveAllUploads: 'Alle Uploads archivieren', + discardAllUploads: 'Alle Uploads verwerfen', + archive: 'Archivieren', + timeAgo: { + justNow: 'Gerade eben', + minutesAgo: 'vor {{minutes}}m', + hoursAgo: 'vor {{hours}}h', + daysAgo: 'vor {{days}}d', + }, + }, + + // API Browser + apiBrowser: { + placeholders: { + requestBody: 'JSON-Anforderungstext...', + searchEndpoints: 'Endpunkte suchen...', + }, + }, + + // Configure AMS Slot Modal + configureAmsSlot: { + searchPresets: 'Voreinstellungen suchen...', + colorPlaceholder: 'Farbname oder Hex (z.B. braun, FF8800)', + clearCustomColor: 'Benutzerdefinierte Farbe löschen', + noCloudPresets: 'Keine Cloud-Voreinstellungen. Melden Sie sich bei Bambu Cloud an, um zu synchronisieren.', + noMatchingPresets: 'Keine passenden Voreinstellungen gefunden.', + custom: 'Benutzerdefiniert', + settingsSentToPrinter: 'Einstellungen an Drucker gesendet', + filamentProfile: 'Filamentprofil', + }, + + // GitHub Backup Settings + githubBackup: { + title: 'GitHub-Backup', + history: 'Verlauf', + downloadBackup: 'Backup herunterladen', + restoreBackup: 'Backup wiederherstellen', + noBackupsYet: 'Noch keine Backups', + placeholders: { + repoUrl: 'https://github.com/benutzername/bambuddy-backup', + branch: 'main', + }, + }, + + // Email Settings + emailSettings: { + placeholders: { + smtpServer: 'smtp.gmail.com', + smtpPort: '587', + smtpUser: 'ihre.email@gmail.com', + fromAddress: 'ihre@email.com', + fromName: 'BamBuddy', + testEmail: 'test@example.com', + }, + }, + + // Tag Management Modal + tagManagement: { + searchTags: 'Tags suchen...', + renameTag: 'Tag umbenennen', + deleteTag: 'Tag löschen', + }, + + // Notification Template Editor + notificationTemplates: { + placeholders: { + title: 'Benachrichtigungstitel...', + body: 'Benachrichtigungstext...', + }, + }, + + // Batch Tag Modal + batchTag: { + placeholders: { + newTag: 'Neuen Tag eingeben...', + }, + }, + + // Edit Archive Modal + editArchive: { + placeholders: { + copies: '1', + sourceUrl: 'https://printables.com/model/...', + }, + }, + + // Photo Gallery Modal + photoGallery: { + deletePhoto: 'Foto löschen', + }, + + // Filament Hover Card + filamentHoverCard: { + copySpoolUuid: 'Spulen-UUID kopieren', + }, + + // K Profiles View + kProfilesView: { + hasNote: 'Hat Notiz', + copyProfile: 'Profil kopieren', + }, + + // Layout/Navigation + layout: { + openMenu: 'Menü öffnen', + noPermissionSystemInfo: 'Sie haben keine Berechtigung zum Anzeigen von Systeminformationen', + }, + + // Dashboard + dashboard: { + dragToReorder: 'Ziehen zum Neuordnen', + hideWidget: 'Widget ausblenden', + }, + + // Notification Provider Card + notificationProviderCard: { + deleteNotificationProvider: 'Benachrichtigungsanbieter löschen', + }, + + // File Manager Modal + fileManagerModal: { + closeFileManager: 'Dateimanager schließen', + sortFiles: 'Dateien sortieren', + goToParentFolder: 'Zum übergeordneten Ordner gehen', + threeView: '3D-Ansicht', + }, + + // Print Modal + printModal: { + sameTypeDifferentColor: 'Gleicher Typ, andere Farbe', + filamentTypeNotLoaded: 'Filamenttyp nicht geladen', + openCalendar: 'Kalender öffnen', + }, + + // Embedded Camera Viewer + embeddedCameraViewer: { + refreshStream: 'Stream aktualisieren', + close: 'Schließen', + zoomOut: 'Verkleinern', + resetZoom: 'Zoom zurücksetzen', + zoomIn: 'Vergrößern', + dragToResize: 'Ziehen zum Größe ändern', + }, + + // Timelapse Viewer + timelapseViewer: { + skipBack5s: '5s zurückspringen', + skipForward5s: '5s vorspringen', + }, + + // Notification Providers + notificationProviders: { + descriptions: { + email: 'SMTP-E-Mail-Benachrichtigungen', + telegram: 'Benachrichtigungen über Telegram-Bot', + discord: 'An Discord-Kanal über Webhook senden', + ntfy: 'Kostenlose, selbst hostbare Push-Benachrichtigungen', + pushover: 'Einfache, zuverlässige Push-Benachrichtigungen', + callmebot: 'Kostenlose WhatsApp-Benachrichtigungen über CallMeBot', + webhook: 'Generischer HTTP POST zu beliebiger URL', + }, + }, + + // Log Viewer + logViewer: { + searchPlaceholder: 'Nachricht oder Logger-Name suchen...', + noLogEntries: 'Keine Logeinträge gefunden', + }, + + // Switchbar Popover + switchbarPopover: { + noSwitchesInSwitchbar: 'Keine Schalter in Schalterleiste', + }, + + // Project Page Modal + projectPageModal: { + placeholders: { + title: 'Titel', + designer: 'Designer', + license: 'Lizenz', + description: 'Beschreibung eingeben...', + profileTitle: 'Profil-Titel', + profileDescription: 'Profilbeschreibung...', + }, + }, + + // Spoolman Settings + spoolmanSettings: { + placeholders: { + serverUrl: 'http://192.168.1.100:7912', + }, + }, }; diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index cdeccdd51..dcf4c846a 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -2286,6 +2286,9 @@ export default { noPrintersAvailable: 'No printers available', printerBusy: 'Printer is busy', printerOffline: 'Printer is offline', + sameTypeDifferentColor: 'Same type, different color', + filamentTypeNotLoaded: 'Filament type not loaded', + openCalendar: 'Open calendar', }, // Backup @@ -2338,6 +2341,7 @@ export default { }, // Edit archive modal + // Edit Archive Modal editArchive: { title: 'Edit Archive', name: 'Name', @@ -2366,6 +2370,10 @@ export default { photosHelp: 'Click + to add photos of your printed result', printResult: 'Print result', saving: 'Saving...', + placeholders: { + copies: '1', + sourceUrl: 'https://printables.com/model/...', + }, // Failure reasons failureReasons: { adhesionFailure: 'Adhesion failure', @@ -2640,4 +2648,373 @@ export default { replaceCarbonFilter: 'Replace activated carbon filter', lubricateLeftNozzleRail: 'Lubricate left nozzle rail (H2 series)', }, + + // Smart Plugs + smartPlugs: { + offline: 'Offline', + admin: 'Admin', + openPlugAdminPage: 'Open plug admin page', + deleteSmartPlug: 'Delete Smart Plug', + turnOnSmartPlug: 'Turn On Smart Plug', + turnOffSmartPlug: 'Turn Off Smart Plug', + turnOn: 'Turn On', + turnOff: 'Turn Off', + addSmartPlug: { + scanningNetwork: 'Scanning network...', + chooseEntity: 'Choose an entity...', + connectionFailed: 'Connection failed', + searchEntities: 'Search entities...', + searchPowerSensors: 'Search power sensors...', + searchEnergySensors: 'Search energy sensors...', + placeholders: { + mqttTopic: 'zigbee2mqtt/shelly-working-room', + mqttPowerPath: 'power_l1', + mqttEnergyPath: 'energy_l1', + mqttStatePath: 'state_l1', + mqttStateOnValue: 'ON, true, 1', + mqttMultiplier: '1', + ipAddress: '192.168.1.100', + plugName: 'Living Room Plug', + username: 'admin', + password: '********', + wattThreshold: 'e.g. 200', + kwThreshold: 'e.g. 10', + mqttSameAsPower: 'Same as power topic, or different', + }, + }, + }, + + // Rich Text Editor + richTextEditor: { + bold: 'Bold', + italic: 'Italic', + underline: 'Underline', + bulletList: 'Bullet List', + numberedList: 'Numbered List', + alignLeft: 'Align Left', + alignCenter: 'Align Center', + alignRight: 'Align Right', + addLink: 'Add Link', + removeLink: 'Remove Link', + }, + + // External Links + externalLinks: { + noLinksConfigured: 'No external links configured', + deleteLink: 'Delete Link', + removeCustomIcon: 'Remove custom icon', + placeholders: { + linkName: 'My Link', + linkUrl: 'https://example.com', + }, + }, + + // Keyboard Shortcuts Modal + keyboardShortcuts: { + title: 'Keyboard Shortcuts', + navigation: 'Navigation', + archivesSection: 'Archives', + kProfilesSection: 'K-Profiles', + generalSection: 'General', + shortcuts: { + goToPrinters: 'Go to Printers', + goToArchives: 'Go to Archives', + goToQueue: 'Go to Queue', + goToStats: 'Go to Statistics', + goToProfiles: 'Go to Cloud Profiles', + goToSettings: 'Go to Settings', + focusSearch: 'Focus search', + openUploadModal: 'Open upload modal', + clearSelection: 'Clear selection / blur input', + contextMenu: 'Context menu on cards', + refreshProfiles: 'Refresh profiles', + newProfile: 'New profile', + exitSelectionMode: 'Exit selection mode', + showHelp: 'Show this help', + }, + footer: 'Press Esc or click outside to close', + }, + + // Notification Log + notificationLog: { + title: 'Notification Log', + events: { + printStarted: 'Print Started', + printComplete: 'Print Complete', + printFailed: 'Print Failed', + printStopped: 'Print Stopped', + progress: 'Progress', + printerOffline: 'Printer Offline', + printerError: 'Printer Error', + lowFilament: 'Low Filament', + maintenanceDue: 'Maintenance Due', + test: 'Test', + }, + timeAgo: { + justNow: 'Just now', + minutesAgo: '{{minutes}}m ago', + hoursAgo: '{{hours}}h ago', + }, + }, + + // Restore/Backup Modal + restoreBackup: { + title: 'Restore Backup', + restoring: 'Restoring...', + restoreComplete: 'Restore Complete', + restoreFailed: 'Restore Failed', + importSettings: 'Import settings from a backup file', + pleaseWait: 'Please wait while your data is being restored', + clickToSelect: 'Click to select backup file (.json or .zip)', + howDuplicateHandling: 'How duplicate handling works:', + categories: { + printers: 'Printers', + smartPlugs: 'Smart Plugs', + notificationProviders: 'Notification Providers', + filaments: 'Filaments', + archives: 'Archives', + pendingUploads: 'Pending Uploads', + settingsTemplates: 'Settings & Templates', + }, + matchingInfo: { + printers: 'matched by serial number', + smartPlugs: 'matched by IP address', + notificationProviders: 'matched by name', + filaments: 'matched by name + type + brand', + archives: 'matched by content hash', + pendingUploads: 'matched by filename', + settingsTemplates: 'always overwritten', + }, + replaceExisting: 'Replace existing data', + keepExisting: 'Keep existing data', + replaceDescription: 'Overwrite items that already exist with backup data', + keepDescription: 'Only restore items that don\'t already exist', + caution: 'Caution:', + cautionText: 'Overwriting will replace your current configurations with backup data. Printer access codes are never overwritten for security.', + itemsRestored: 'Items Restored', + itemsSkipped: 'Items Skipped', + restored: 'Restored', + skipped: 'Skipped (already exist)', + filesLabel: 'Files (3MF, thumbnails, etc.)', + newApiKeysGenerated: 'New API Keys Generated', + newApiKeysWarning: 'These keys are only shown once. Copy them now!', + processingBackup: 'Processing backup file...', + noDataFound: 'No data was found to restore in the backup file.', + failedToRestore: 'Failed to restore backup. Please check the file format.', + }, + + // Backup Export Modal + backupExport: { + title: 'Export Backup', + selectData: 'Select data to include', + selectAll: 'Select All', + selectNone: 'Select None', + categoryDescriptions: { + settings: 'Language, theme, update preferences', + notifications: 'ntfy, Pushover, Discord, etc.', + templates: 'Custom message templates', + smartPlugs: 'Tasmota plug configurations', + externalLinks: 'Sidebar links to external services', + printers: 'Printer info (access codes excluded)', + plateDetection: 'Empty plate reference images', + filaments: 'Filament types and costs', + maintenance: 'Custom maintenance schedules', + archives: 'All print data + files (3MF, thumbnails, photos)', + projects: 'Projects, BOM items, and attachments', + pendingUploads: 'Virtual printer uploads awaiting review', + apiKeys: 'Webhook API keys (new keys generated on import)', + }, + requiresPrinters: 'Requires Printers to be selected', + zipFileWarning: 'ZIP file will be created.', + zipFileDescription: 'Includes all 3MF files, thumbnails, timelapses, and photos. This may take a while and result in a large file.', + includeAccessCodes: 'Include Access Codes', + includeAccessCodesDescription: 'For transferring to another machine', + includeAccessCodesWarning: 'Access codes will be included in plain text. Keep this backup file secure!', + categoriesSelected: '{{selectedCount}} categories selected', + }, + + // Pending Uploads Panel + pendingUploads: { + placeholders: { + tags: 'e.g., functional, prototype, gift', + notes: 'Add notes about this print...', + }, + discardUpload: 'Discard Upload', + archiveAllUploads: 'Archive All Uploads', + discardAllUploads: 'Discard All Uploads', + archive: 'Archive', + timeAgo: { + justNow: 'Just now', + minutesAgo: '{{minutes}}m ago', + hoursAgo: '{{hours}}h ago', + daysAgo: '{{days}}d ago', + }, + }, + + // API Browser + apiBrowser: { + placeholders: { + requestBody: 'JSON request body...', + searchEndpoints: 'Search endpoints...', + }, + }, + + // Configure AMS Slot Modal + configureAmsSlot: { + searchPresets: 'Search presets...', + colorPlaceholder: 'Color name or hex (e.g., brown, FF8800)', + clearCustomColor: 'Clear custom color', + noCloudPresets: 'No cloud presets. Login to Bambu Cloud to sync.', + noMatchingPresets: 'No matching presets found.', + custom: 'Custom', + settingsSentToPrinter: 'Settings sent to printer', + filamentProfile: 'Filament Profile', + }, + + // GitHub Backup Settings + githubBackup: { + title: 'GitHub Backup', + history: 'History', + downloadBackup: 'Download Backup', + restoreBackup: 'Restore Backup', + noBackupsYet: 'No backups yet', + placeholders: { + repoUrl: 'https://github.com/username/bambuddy-backup', + branch: 'main', + }, + }, + + // Email Settings + emailSettings: { + placeholders: { + smtpServer: 'smtp.gmail.com', + smtpPort: '587', + smtpUser: 'your.email@gmail.com', + fromAddress: 'your@email.com', + fromName: 'BamBuddy', + testEmail: 'test@example.com', + }, + }, + + // Tag Management Modal + tagManagement: { + searchTags: 'Search tags...', + renameTag: 'Rename tag', + deleteTag: 'Delete tag', + }, + + // Notification Template Editor + notificationTemplates: { + placeholders: { + title: 'Notification title...', + body: 'Notification body...', + }, + }, + + // Batch Tag Modal + batchTag: { + placeholders: { + newTag: 'Enter new tag...', + }, + }, + + // Photo Gallery Modal + photoGallery: { + deletePhoto: 'Delete Photo', + }, + + // Filament Hover Card + filamentHoverCard: { + copySpoolUuid: 'Copy spool UUID', + }, + + // K Profiles View + kProfilesView: { + hasNote: 'Has note', + copyProfile: 'Copy profile', + }, + + // Layout/Navigation + layout: { + openMenu: 'Open menu', + noPermissionSystemInfo: 'You do not have permission to view system information', + }, + + // Dashboard + dashboard: { + dragToReorder: 'Drag to reorder', + hideWidget: 'Hide widget', + }, + + // Notification Provider Card + notificationProviderCard: { + deleteNotificationProvider: 'Delete Notification Provider', + }, + + // File Manager Modal + fileManagerModal: { + closeFileManager: 'Close file manager', + sortFiles: 'Sort files', + goToParentFolder: 'Go to parent folder', + threeView: '3D View', + }, + + // Embedded Camera Viewer + embeddedCameraViewer: { + refreshStream: 'Refresh stream', + close: 'Close', + zoomOut: 'Zoom out', + resetZoom: 'Reset zoom', + zoomIn: 'Zoom in', + dragToResize: 'Drag to resize', + }, + + // Timelapse Viewer + timelapseViewer: { + skipBack5s: 'Skip back 5s', + skipForward5s: 'Skip forward 5s', + }, + + // Notification Providers + notificationProviders: { + descriptions: { + email: 'SMTP email notifications', + telegram: 'Notifications via Telegram bot', + discord: 'Send to Discord channel via webhook', + ntfy: 'Free, self-hostable push notifications', + pushover: 'Simple, reliable push notifications', + callmebot: 'Free WhatsApp notifications via CallMeBot', + webhook: 'Generic HTTP POST to any URL', + }, + }, + + // Log Viewer + logViewer: { + searchPlaceholder: 'Search message or logger name...', + noLogEntries: 'No log entries found', + }, + + // Switchbar Popover + switchbarPopover: { + noSwitchesInSwitchbar: 'No switches in switchbar', + }, + + // Project Page Modal + projectPageModal: { + placeholders: { + title: 'Title', + designer: 'Designer', + license: 'License', + description: 'Enter description...', + profileTitle: 'Profile Title', + profileDescription: 'Profile description...', + }, + }, + + // Spoolman Settings + spoolmanSettings: { + placeholders: { + serverUrl: 'http://192.168.1.100:7912', + }, + }, }; diff --git a/frontend/src/i18n/locales/ja.ts b/frontend/src/i18n/locales/ja.ts index 4fcfd4230..787e2a31a 100644 --- a/frontend/src/i18n/locales/ja.ts +++ b/frontend/src/i18n/locales/ja.ts @@ -3190,4 +3190,399 @@ export default { unsupportedFormat: 'サポートされていないファイル形式です', }, }, + + // Maintenance type descriptions (built-in) + maintenanceDescriptions: { + lubricateRails: 'リニアレールに潤滑剤を塗布してスムーズな動きを実現', + cleanNozzle: 'ホットエンドとノズルを清掃して詰まりを防止', + checkBelts: 'ベルトの張力を確認して正確な印刷を実現', + cleanBuildPlate: 'ビルドプレートを清掃して接着力を向上', + checkExtruder: 'エクストルーダーギアの摩耗を検査', + checkCooling: '冷却ファンが正常に動作していることを確認', + generalInspection: 'プリンターの一般的な点検', + cleanCarbonRods: 'カーボンロッドを清掃して摩擦を軽減', + checkPtfeTube: 'PTFEチューブの摩耗や損傷を検査', + replaceHepaFilter: 'HEPAフィルターを交換して空気品質を向上', + replaceCarbonFilter: '活性炭フィルターを交換', + lubricateLeftNozzleRail: '左ノズルレールに潤滑剤を塗布(H2シリーズ)', + }, + + // Smart Plugs + smartPlugs: { + offline: 'オフライン', + admin: '管理', + openPlugAdminPage: 'プラグ管理ページを開く', + deleteSmartPlug: 'スマートプラグを削除', + turnOnSmartPlug: 'スマートプラグをオンにする', + turnOffSmartPlug: 'スマートプラグをオフにする', + turnOn: 'オンにする', + turnOff: 'オフにする', + addSmartPlug: { + scanningNetwork: 'ネットワークをスキャン中...', + chooseEntity: 'エンティティを選択...', + connectionFailed: '接続失敗', + searchEntities: 'エンティティを検索...', + searchPowerSensors: '電力センサーを検索...', + searchEnergySensors: 'エネルギーセンサーを検索...', + placeholders: { + mqttTopic: 'zigbee2mqtt/shelly-working-room', + mqttPowerPath: 'power_l1', + mqttEnergyPath: 'energy_l1', + mqttStatePath: 'state_l1', + mqttStateOnValue: 'ON, true, 1', + mqttMultiplier: '1', + ipAddress: '192.168.1.100', + plugName: 'リビングルームプラグ', + username: 'admin', + password: '********', + wattThreshold: '例: 200', + kwThreshold: '例: 10', + mqttSameAsPower: '電力トピックと同じ、または異なる', + }, + }, + }, + + // Rich Text Editor + richTextEditor: { + bold: '太字', + italic: '斜体', + underline: '下線', + bulletList: '箇条書きリスト', + numberedList: '番号付きリスト', + alignLeft: '左揃え', + alignCenter: '中央揃え', + alignRight: '右揃え', + addLink: 'リンクを追加', + removeLink: 'リンクを削除', + }, + + // External Links + externalLinks: { + noLinksConfigured: '外部リンクが設定されていません', + deleteLink: 'リンクを削除', + removeCustomIcon: 'カスタムアイコンを削除', + placeholders: { + linkName: 'マイリンク', + linkUrl: 'https://example.com', + }, + }, + + // Keyboard Shortcuts Modal + keyboardShortcuts: { + title: 'キーボードショートカット', + navigation: 'ナビゲーション', + archivesSection: 'アーカイブ', + kProfilesSection: 'Kプロファイル', + generalSection: '全般', + shortcuts: { + goToPrinters: 'プリンターへ移動', + goToArchives: 'アーカイブへ移動', + goToQueue: 'キューへ移動', + goToStats: '統計へ移動', + goToProfiles: 'クラウドプロファイルへ移動', + goToSettings: '設定へ移動', + focusSearch: '検索にフォーカス', + openUploadModal: 'アップロードモーダルを開く', + clearSelection: '選択をクリア / 入力をぼかす', + contextMenu: 'カードのコンテキストメニュー', + refreshProfiles: 'プロファイルを更新', + newProfile: '新しいプロファイル', + exitSelectionMode: '選択モードを終了', + showHelp: 'このヘルプを表示', + }, + footer: 'Escキーを押すか外側をクリックして閉じます', + }, + + // Notification Log + notificationLog: { + title: '通知ログ', + events: { + printStarted: '印刷開始', + printComplete: '印刷完了', + printFailed: '印刷失敗', + printStopped: '印刷停止', + progress: '進捗', + printerOffline: 'プリンターオフライン', + printerError: 'プリンターエラー', + lowFilament: 'フィラメント残量少', + maintenanceDue: 'メンテナンス期限', + test: 'テスト', + }, + timeAgo: { + justNow: 'たった今', + minutesAgo: '{{minutes}}分前', + hoursAgo: '{{hours}}時間前', + }, + }, + + // Restore/Backup Modal + restoreBackup: { + title: 'バックアップを復元', + restoring: '復元中...', + restoreComplete: '復元完了', + restoreFailed: '復元失敗', + importSettings: 'バックアップファイルから設定をインポート', + pleaseWait: 'データの復元中です。しばらくお待ちください', + clickToSelect: 'クリックしてバックアップファイルを選択(.jsonまたは.zip)', + howDuplicateHandling: '重複の処理方法:', + categories: { + printers: 'プリンター', + smartPlugs: 'スマートプラグ', + notificationProviders: '通知プロバイダー', + filaments: 'フィラメント', + archives: 'アーカイブ', + pendingUploads: '保留中のアップロード', + settingsTemplates: '設定とテンプレート', + }, + matchingInfo: { + printers: 'シリアル番号で照合', + smartPlugs: 'IPアドレスで照合', + notificationProviders: '名前で照合', + filaments: '名前+タイプ+ブランドで照合', + archives: 'コンテンツハッシュで照合', + pendingUploads: 'ファイル名で照合', + settingsTemplates: '常に上書き', + }, + replaceExisting: '既存データを置き換え', + keepExisting: '既存データを保持', + replaceDescription: '既に存在するアイテムをバックアップデータで上書き', + keepDescription: 'まだ存在しないアイテムのみを復元', + caution: '注意:', + cautionText: '上書きすると現在の構成がバックアップデータに置き換えられます。セキュリティ上の理由から、プリンターのアクセスコードは上書きされません。', + itemsRestored: '復元されたアイテム', + itemsSkipped: 'スキップされたアイテム', + restored: '復元済み', + skipped: 'スキップ(既に存在)', + filesLabel: 'ファイル(3MF、サムネイルなど)', + newApiKeysGenerated: '新しいAPIキーが生成されました', + newApiKeysWarning: 'これらのキーは一度だけ表示されます。今すぐコピーしてください!', + processingBackup: 'バックアップファイルを処理中...', + noDataFound: 'バックアップファイルに復元するデータが見つかりませんでした。', + failedToRestore: 'バックアップの復元に失敗しました。ファイル形式を確認してください。', + }, + + // Backup Export Modal + backupExport: { + title: 'バックアップをエクスポート', + selectData: '含めるデータを選択', + selectAll: 'すべて選択', + selectNone: 'なし', + categoryDescriptions: { + settings: '言語、テーマ、更新設定', + notifications: 'ntfy、Pushover、Discordなど', + templates: 'カスタムメッセージテンプレート', + smartPlugs: 'Tasmotaプラグ設定', + externalLinks: 'サイドバーの外部サービスへのリンク', + printers: 'プリンター情報(アクセスコード除外)', + plateDetection: '空プレート参照画像', + filaments: 'フィラメントの種類とコスト', + maintenance: 'カスタムメンテナンススケジュール', + archives: 'すべての印刷データ+ファイル(3MF、サムネイル、写真)', + projects: 'プロジェクト、BOMアイテム、添付ファイル', + pendingUploads: '仮想プリンターアップロード待機中', + apiKeys: 'Webhook APIキー(インポート時に新しいキーが生成されます)', + }, + requiresPrinters: 'プリンターを選択する必要があります', + zipFileWarning: 'ZIPファイルが作成されます。', + zipFileDescription: 'すべての3MFファイル、サムネイル、タイムラプス、写真が含まれます。これには時間がかかり、大きなファイルになる可能性があります。', + includeAccessCodes: 'アクセスコードを含める', + includeAccessCodesDescription: '別のマシンへの転送用', + includeAccessCodesWarning: 'アクセスコードはプレーンテキストで含まれます。このバックアップファイルを安全に保管してください!', + categoriesSelected: '{{selectedCount}}カテゴリー選択済み', + }, + + // Pending Uploads Panel + pendingUploads: { + placeholders: { + tags: '例: 機能的、プロトタイプ、ギフト', + notes: 'この印刷についてのメモを追加...', + }, + discardUpload: 'アップロードを破棄', + archiveAllUploads: 'すべてのアップロードをアーカイブ', + discardAllUploads: 'すべてのアップロードを破棄', + archive: 'アーカイブ', + timeAgo: { + justNow: 'たった今', + minutesAgo: '{{minutes}}分前', + hoursAgo: '{{hours}}時間前', + daysAgo: '{{days}}日前', + }, + }, + + // API Browser + apiBrowser: { + placeholders: { + requestBody: 'JSONリクエストボディ...', + searchEndpoints: 'エンドポイントを検索...', + }, + }, + + // Configure AMS Slot Modal + configureAmsSlot: { + searchPresets: 'プリセットを検索...', + colorPlaceholder: '色名またはHex(例: 茶色、FF8800)', + clearCustomColor: 'カスタム色をクリア', + noCloudPresets: 'クラウドプリセットがありません。Bambu Cloudにログインして同期してください。', + noMatchingPresets: '一致するプリセットが見つかりません。', + custom: 'カスタム', + settingsSentToPrinter: '設定をプリンターに送信しました', + filamentProfile: 'フィラメントプロファイル', + }, + + // GitHub Backup Settings (additional keys) + githubBackupSettings: { + placeholders: { + repoUrl: 'https://github.com/username/bambuddy-backup', + branch: 'main', + }, + }, + + // Email Settings + emailSettings: { + placeholders: { + smtpServer: 'smtp.gmail.com', + smtpPort: '587', + smtpUser: 'your.email@gmail.com', + fromAddress: 'your@email.com', + fromName: 'BamBuddy', + testEmail: 'test@example.com', + }, + }, + + // Tag Management Modal + tagManagement: { + searchTags: 'タグを検索...', + renameTag: 'タグ名を変更', + deleteTag: 'タグを削除', + }, + + // Notification Template Editor + notificationTemplates: { + placeholders: { + title: '通知タイトル...', + body: '通知本文...', + }, + }, + + // Batch Tag Modal + batchTag: { + placeholders: { + newTag: '新しいタグを入力...', + }, + }, + + // Edit Archive Modal + editArchive: { + placeholders: { + copies: '1', + sourceUrl: 'https://printables.com/model/...', + }, + }, + + // Photo Gallery Modal + photoGallery: { + deletePhoto: '写真を削除', + }, + + // Filament Hover Card + filamentHoverCard: { + copySpoolUuid: 'スプールUUIDをコピー', + }, + + // K Profiles View + kProfilesView: { + hasNote: 'メモあり', + copyProfile: 'プロファイルをコピー', + }, + + // Layout/Navigation + layout: { + openMenu: 'メニューを開く', + noPermissionSystemInfo: 'システム情報を表示する権限がありません', + }, + + // Dashboard + dashboard: { + dragToReorder: 'ドラッグして並べ替え', + hideWidget: 'ウィジェットを非表示', + }, + + // Notification Provider Card + notificationProviderCard: { + deleteNotificationProvider: '通知プロバイダーを削除', + }, + + // File Manager Modal + fileManagerModal: { + closeFileManager: 'ファイルマネージャーを閉じる', + sortFiles: 'ファイルを並べ替え', + goToParentFolder: '親フォルダーへ移動', + threeView: '3Dビュー', + }, + + // Print Modal + printModal: { + sameTypeDifferentColor: '同じタイプ、異なる色', + filamentTypeNotLoaded: 'フィラメントタイプが読み込まれていません', + openCalendar: 'カレンダーを開く', + }, + + // Embedded Camera Viewer + embeddedCameraViewer: { + refreshStream: 'ストリームを更新', + close: '閉じる', + zoomOut: 'ズームアウト', + resetZoom: 'ズームをリセット', + zoomIn: 'ズームイン', + dragToResize: 'ドラッグしてサイズ変更', + }, + + // Timelapse Viewer + timelapseViewer: { + skipBack5s: '5秒戻る', + skipForward5s: '5秒進む', + }, + + // Notification Providers + notificationProviders: { + descriptions: { + email: 'SMTP電子メール通知', + telegram: 'Telegramボット経由の通知', + discord: 'Webhookを介してDiscordチャンネルに送信', + ntfy: '無料でセルフホスト可能なプッシュ通知', + pushover: 'シンプルで信頼性の高いプッシュ通知', + callmebot: 'CallMeBot経由の無料WhatsApp通知', + webhook: '任意のURLへのジェネリックHTTP POST', + }, + }, + + // Log Viewer + logViewer: { + searchPlaceholder: 'メッセージまたはロガー名を検索...', + noLogEntries: 'ログエントリが見つかりません', + }, + + // Switchbar Popover + switchbarPopover: { + noSwitchesInSwitchbar: 'スイッチバーにスイッチがありません', + }, + + // Project Page Modal + projectPageModal: { + placeholders: { + title: 'タイトル', + designer: 'デザイナー', + license: 'ライセンス', + description: '説明を入力...', + profileTitle: 'プロファイルタイトル', + profileDescription: 'プロファイルの説明...', + }, + }, + + // Spoolman Settings + spoolmanSettings: { + placeholders: { + serverUrl: 'http://192.168.1.100:7912', + }, + }, };