package server func t(locale, key string) string { if translations, ok := _translations[locale]; ok { if v, ok := translations[key]; ok { return v } } if translations, ok := _translations["en"]; ok { if v, ok := translations[key]; ok { return v } } if locale == "ru" { return "Перевод временно недоступен" } return "Translation unavailable" } var _translations = map[string]map[string]string{ "ru": { "home.title": "Синхронизация Верстака", "home.eyebrow": "Локальная работа, когда нужно", "home.heading": "Ваши vault остаются вашими", "home.description": "Verstak Sync Server безопасно связывает ваши устройства, не заменяя локальный vault.", "home.login": "Войти", "home.register": "Создать аккаунт", "home.version": "Версия", "nav.primary": "Основная навигация", "nav.login": "Войти", "nav.register": "Регистрация", "footer.localFirst": "Локальная работа прежде всего", "locale.label": "Язык", "locale.system": "Системный", "locale.apply": "Применить язык", "auth.welcome": "Добро пожаловать", "auth.account": "Учётная запись", "auth.loginTitle": "Вход в синхронизацию", "auth.login": "Войти", "auth.logout": "Выйти", "auth.register": "Создать аккаунт", "auth.registerTitle": "Создать аккаунт", "auth.haveAccount": "Уже есть аккаунт? Войти", "auth.forgot": "Забыли пароль?", "auth.forgotTitle": "Восстановление пароля", "auth.forgotDescription": "Укажите email, и мы отправим ссылку для сброса пароля, если аккаунт существует.", "auth.sendLink": "Отправить ссылку", "auth.backLogin": "Вернуться ко входу", "auth.resetTitle": "Новый пароль", "auth.savePassword": "Сохранить пароль", "field.username": "Имя пользователя", "field.usernameOrEmail": "Имя пользователя или email", "field.email": "Email", "field.password": "Пароль", "field.newPassword": "Новый пароль", "field.confirmPassword": "Подтвердите пароль", "register.resultTitle": "Проверьте почту", "register.resultMessage": "Если SMTP настроен, мы отправили ссылку подтверждения. После подтверждения можно войти.", "forgot.sentTitle": "Проверьте почту", "forgot.sentMessage": "Если аккаунт существует, ссылка для сброса уже отправлена.", "reset.doneTitle": "Пароль изменён", "reset.doneMessage": "Теперь можно войти с новым паролем.", "confirm.title": "Подтвердите email", "confirm.description": "Подтвердите адрес email, чтобы активировать учётную запись.", "confirm.action": "Подтвердить email", "confirm.resultTitle": "Email подтверждён", "confirm.resultMessage": "Учётная запись активирована. Теперь можно войти.", "common.continue": "Продолжить", "common.back": "Назад", "common.actions": "Действия", "error.label": "Ошибка", "error.badRequest": "Некорректный запрос", "error.tryAgain": "Проверьте данные и повторите попытку.", "error.registrationDisabled": "Регистрация отключена администратором.", "error.allFieldsRequired": "Все поля обязательны.", "error.passwordInvalid": "Пароль не соответствует требованиям безопасности.", "error.accountTaken": "Имя пользователя или email уже заняты.", "error.emailRequired": "Введите email.", "error.passwordMismatch": "Пароли не совпадают.", "error.invalidCredentials": "Неверное имя пользователя или пароль.", "error.internal": "Внутренняя ошибка. Повторите попытку позже.", "admin.eyebrow": "Администрирование сервера", "admin.loginTitle": "Вход администратора", "admin.navigation": "Навигация администратора", "admin.overview": "Обзор", "admin.access": "Доступ", "admin.activeDevices": "Активные устройства", "admin.operations": "Операции", "admin.vaults": "Vault", "admin.storage": "Хранилище", "admin.audit": "Аудит", "admin.settings": "Настройки", "admin.diagnostics": "Диагностика", "admin.serviceHealth": "Состояние сервиса", "admin.lastActivity": "Последняя активность", "admin.noVaults": "Vault пока нет", "admin.databaseBytes": "Размер базы данных, байт", "admin.blobBytes": "Объём blobs, байт", "admin.retentionNote": "Журнал операций не удаляется автоматически: он нужен новым устройствам для восстановления состояния.", "admin.event": "Событие", "admin.time": "Время", "admin.noAudit": "Событий аудита пока нет", "admin.database": "База данных доступна", "admin.blobStorage": "Blob-хранилище доступно", "admin.schema": "Версия схемы", "admin.serverTime": "Время сервера", "admin.healthJSON": "Открыть health JSON", "admin.manage": "Управление", "admin.saveUser": "Сохранить пользователя", "admin.search": "Поиск", "admin.all": "Все", "admin.applyFilters": "Применить", "admin.pagination": "Пагинация", "admin.previous": "Назад", "admin.next": "Далее", "admin.runCleanup": "Запустить безопасную очистку", "admin.downloadDiagnostics": "Скачать диагностику", "admin.vaultPrivacy": "Содержимое файлов и операции не отображаются в диагностике.", "user.account": "Моя учётная запись", "user.devices": "Подключённые устройства", "user.noDevices": "Устройств пока нет", "device.name": "Устройство", "device.vault": "Vault", "device.version": "Версия клиента", "device.lastSeen": "Последняя активность", "device.status": "Статус", "device.active": "Активно", "device.revoked": "Отозвано", "device.revoke": "Отозвать", "device.revokeConfirm": "Отозвать это устройство? Для продолжения нужен пароль.", "server.registerTitle": "Регистрация", "server.register": "Регистрация", "server.username": "Имя пользователя", "server.email": "Email", "server.password": "Пароль", "server.registerBtn": "Зарегистрироваться", "server.alreadyHaveAccount": "Уже есть аккаунт?", "server.loginBtn": "Войти", "server.loginTitle": "Вход", "server.usernameOrEmail": "Имя пользователя или email", "server.forgotPassword": "Забыли пароль?", "server.adminLink": "Админ", "server.dashboard": "Панель управления", "server.allFieldsRequired": "Все поля обязательны", "server.back": "Назад", "server.emailConfirmBody": "Подтвердите регистрацию: %s", "server.emailConfirmSubject": "Verstak — подтверждение email", "server.registrationSuccess": "Регистрация успешна", "server.registrationEmailSent": "Письмо с ссылкой подтверждения отправлено.", "server.registrationCheckEmail": "Проверьте почту и подтвердите аккаунт.", "server.registrationAutoMessage": "Email не подтверждается. Токен подтверждения выведен в лог сервера.", "server.resetPasswordTitle": "Сброс пароля", "server.resetPassword": "Сброс пароля", "server.resetInstruction": "Введите email для получения ссылки сброса.", "server.sendLink": "Отправить ссылку", "server.backToLogin": "Вернуться к входу", "server.emailSentTitle": "Письмо отправлено", "server.emailSent": "Письмо отправлено", "server.emailSentMessage": "Если аккаунт существует, ссылка для сброса пароля отправлена на почту.", "server.goHome": "На главную", "server.newPasswordTitle": "Новый пароль", "server.newPassword": "Новый пароль", "server.passwordConfirm": "Подтвердите пароль", "server.save": "Сохранить", "server.passwordChanged": "Пароль изменён", "server.passwordChangedMessage": "Пароль успешно изменён. Теперь можно войти.", "server.emailConfirmed": "Email подтверждён", "server.emailConfirmedMessage": "Аккаунт активирован. Теперь можно войти.", "server.needEmail": "Введите email", "server.passwordsDoNotMatch": "Пароли не совпадают", "server.newPasswordResult": "Новый пароль для %s:\n", "server.logout": "Выйти", "server.error": "Ошибка", "server.internalError": "Что-то пошло не так. Повторите попытку.", "server.registrationFailed": "Не удалось зарегистрировать аккаунт. Повторите попытку.", "userDashboard.devices": "Устройства", "userDashboard.device": "Устройство", "userDashboard.status": "Статус", "userDashboard.connected": "Подключено", "userDashboard.lastSeen": "Последний раз", "userDashboard.version": "Версия", "userDashboard.connectNew": "Подключить новое устройство", "userDashboard.connectNewHint": "Установите Верстак на новом устройстве и выполните регистрацию.", "userDashboard.revokeConfirm": "Отозвать устройство?", "userDashboard.revokePrompt": "Введите пароль для подтверждения:", "userDashboard.noDevices": "Нет устройств", "userDashboard.active": "Активно", "userDashboard.revoked": "Отозвано", "userDashboard.revoke": "Отозвать", "admin.login": "Вход администратора", "admin.username": "Имя пользователя", "admin.password": "Пароль", "admin.loginBtn": "Войти", "admin.dashboard": "Панель управления", "admin.deviceCount": "Устройств", "admin.opsCount": "Операций", "admin.devices": "Устройства", "admin.noDevices": "Нет устройств", "admin.device": "Устройство", "admin.user": "Пользователь", "admin.version": "Версия", "admin.status": "Статус", "admin.lastSeen": "Последний раз", "admin.active": "Активно", "admin.revoked": "Отозвано", "admin.revoke": "Отозвать", "admin.smtp": "SMTP", "admin.users": "Пользователи", "admin.usersHeading": "Пользователи", "admin.healthCheck": "Проверка здоровья", "admin.smtpServer": "SMTP сервер", "admin.smtpPort": "SMTP порт", "admin.smtpType": "Тип шифрования", "admin.smtpNoEncryption": "Без шифрования", "admin.smtpUsername": "Имя пользователя SMTP", "admin.smtpPassword": "Пароль SMTP", "admin.smtpFrom": "Отправитель", "admin.smtpServerURL": "URL сервера", "admin.smtpSave": "Сохранить", "admin.smtpTest": "Тест", "admin.smtpTitle": "Настройки SMTP", "admin.smtpTesting": "Проверка...", "admin.smtpPassed": "✓ Тест пройден", "admin.smtpRequired": "Укажите SMTP-сервер, порт и отправителя.", "admin.smtpTestFailed": "Не удалось проверить настройки SMTP. Повторите попытку.", "admin.revokeConfirm": "Вы уверены?", "common.loading": "Загрузка...", "common.ok": "OK", "common.error": "Ошибка", "admin.filterPlaceholder": "Поиск...", "admin.email": "Email", "admin.actions": "Действия", "admin.confirmTitle": "Подтверждение", "admin.modalCancel": "Отмена", "admin.modalConfirm": "Подтвердить", "admin.editUser": "Редактировать пользователя", "admin.editBtn": "Сохранить", "admin.resultTitle": "Результат", "admin.confirmed": "Подтверждён", "admin.unconfirmed": "Не подтверждён", "admin.blocked": "Заблокирован", "admin.unblock": "Разблокировать", "admin.block": "Заблокировать", "admin.resetPassword": "Сбросить пароль", "admin.noUsers": "Нет пользователей", "admin.resetPasswordConfirm": "Сбросить пароль", "admin.resetPasswordMessage": "Новый пароль: ", "admin.resetBtn": "Сбросить", "admin.deleteUser": "Удалить", "admin.deleteUserMessage": "Удалить пользователя %s?", "admin.deleteBtn": "Удалить", "admin.unblockUserTitle": "Разблокировать", "admin.blockUserTitle": "Заблокировать", "admin.unblockUserMessage": "Разблокировать пользователя?", "admin.blockUserMessage": "Заблокировать пользователя?", "admin.createUser": "Создать пользователя", "admin.createUserBtn": "Создать", "admin.createUserFailed": "Не удалось создать пользователя. Повторите попытку.", }, "en": { "home.title": "Verstak Sync", "home.eyebrow": "Local work, when it matters", "home.heading": "Your vaults stay yours", "home.description": "Verstak Sync Server securely connects your devices without replacing the local vault.", "home.login": "Login", "home.register": "Create account", "home.version": "Version", "nav.primary": "Primary navigation", "nav.login": "Login", "nav.register": "Register", "footer.localFirst": "Local-first by design", "locale.label": "Language", "locale.system": "System", "locale.apply": "Apply language", "auth.welcome": "Welcome", "auth.account": "Account", "auth.loginTitle": "Sign in to sync", "auth.login": "Login", "auth.logout": "Logout", "auth.register": "Create account", "auth.registerTitle": "Create an account", "auth.haveAccount": "Already have an account? Login", "auth.forgot": "Forgot password?", "auth.forgotTitle": "Reset your password", "auth.forgotDescription": "Enter your email and we will send a reset link if the account exists.", "auth.sendLink": "Send reset link", "auth.backLogin": "Back to login", "auth.resetTitle": "New password", "auth.savePassword": "Save password", "field.username": "Username", "field.usernameOrEmail": "Username or email", "field.email": "Email", "field.password": "Password", "field.newPassword": "New password", "field.confirmPassword": "Confirm password", "register.resultTitle": "Check your email", "register.resultMessage": "If SMTP is configured, we sent a confirmation link. You can sign in after confirmation.", "forgot.sentTitle": "Check your email", "forgot.sentMessage": "If the account exists, a reset link has been sent.", "reset.doneTitle": "Password changed", "reset.doneMessage": "You can now sign in with your new password.", "confirm.title": "Confirm your email", "confirm.description": "Confirm your email address to activate the account.", "confirm.action": "Confirm email", "confirm.resultTitle": "Email confirmed", "confirm.resultMessage": "Your account is active. You can now sign in.", "common.continue": "Continue", "common.back": "Back", "common.actions": "Actions", "error.label": "Error", "error.badRequest": "Invalid request", "error.tryAgain": "Check the entered data and try again.", "error.registrationDisabled": "Registration is disabled by the administrator.", "error.allFieldsRequired": "All fields are required.", "error.passwordInvalid": "The password does not meet the security requirements.", "error.accountTaken": "Username or email is already in use.", "error.emailRequired": "Enter an email address.", "error.passwordMismatch": "Passwords do not match.", "error.invalidCredentials": "Invalid username or password.", "error.internal": "Internal error. Please try again later.", "admin.eyebrow": "Server administration", "admin.loginTitle": "Administrator login", "admin.navigation": "Administrator navigation", "admin.overview": "Overview", "admin.access": "Access", "admin.activeDevices": "Active devices", "admin.operations": "Operations", "admin.vaults": "Vaults", "admin.storage": "Storage", "admin.audit": "Audit log", "admin.settings": "Settings", "admin.diagnostics": "Diagnostics", "admin.serviceHealth": "Service health", "admin.lastActivity": "Last activity", "admin.noVaults": "No vaults yet", "admin.databaseBytes": "Database size, bytes", "admin.blobBytes": "Blob storage, bytes", "admin.retentionNote": "Operations are not deleted automatically: new devices need them to restore state.", "admin.event": "Event", "admin.time": "Time", "admin.noAudit": "No audit events yet", "admin.database": "Database reachable", "admin.blobStorage": "Blob storage writable", "admin.schema": "Schema version", "admin.serverTime": "Server time", "admin.healthJSON": "Open health JSON", "admin.manage": "Manage", "admin.saveUser": "Save user", "admin.search": "Search", "admin.all": "All", "admin.applyFilters": "Apply", "admin.pagination": "Pagination", "admin.previous": "Previous", "admin.next": "Next", "admin.runCleanup": "Run safe cleanup", "admin.downloadDiagnostics": "Download diagnostics", "admin.vaultPrivacy": "File contents and operations are not displayed in diagnostics.", "user.account": "My account", "user.devices": "Connected devices", "user.noDevices": "No devices yet", "device.name": "Device", "device.vault": "Vault", "device.version": "Client version", "device.lastSeen": "Last activity", "device.status": "Status", "device.active": "Active", "device.revoked": "Revoked", "device.revoke": "Revoke", "device.revokeConfirm": "Revoke this device? Your password is required to continue.", "server.registerTitle": "Registration", "server.register": "Register", "server.username": "Username", "server.email": "Email", "server.password": "Password", "server.registerBtn": "Register", "server.alreadyHaveAccount": "Already have an account?", "server.loginBtn": "Login", "server.loginTitle": "Login", "server.usernameOrEmail": "Username or email", "server.forgotPassword": "Forgot password?", "server.adminLink": "Admin", "server.dashboard": "Dashboard", "server.allFieldsRequired": "All fields are required", "server.back": "Back", "server.emailConfirmBody": "Confirm registration: %s", "server.emailConfirmSubject": "Verstak — email confirmation", "server.registrationSuccess": "Registration successful", "server.registrationEmailSent": "Confirmation link has been sent.", "server.registrationCheckEmail": "Check your email and confirm your account.", "server.registrationAutoMessage": "Email is not confirmed. Confirmation token logged to server.", "server.resetPasswordTitle": "Reset Password", "server.resetPassword": "Reset Password", "server.resetInstruction": "Enter your email to receive a reset link.", "server.sendLink": "Send link", "server.backToLogin": "Back to login", "server.emailSentTitle": "Email sent", "server.emailSent": "Email sent", "server.emailSentMessage": "If the account exists, a reset link has been sent.", "server.goHome": "Go home", "server.newPasswordTitle": "New Password", "server.newPassword": "New Password", "server.passwordConfirm": "Confirm Password", "server.save": "Save", "server.passwordChanged": "Password changed", "server.passwordChangedMessage": "Password has been changed. You can now login.", "server.emailConfirmed": "Email confirmed", "server.emailConfirmedMessage": "Account activated. You can now login.", "server.needEmail": "Enter email", "server.passwordsDoNotMatch": "Passwords do not match", "server.newPasswordResult": "New password for %s:\n", "server.logout": "Logout", "server.error": "Error", "server.internalError": "Something went wrong. Please try again.", "server.registrationFailed": "Could not register the account. Please try again.", "userDashboard.devices": "Devices", "userDashboard.device": "Device", "userDashboard.status": "Status", "userDashboard.connected": "Connected", "userDashboard.lastSeen": "Last seen", "userDashboard.version": "Version", "userDashboard.connectNew": "Connect new device", "userDashboard.connectNewHint": "Install Verstak on a new device and register it.", "userDashboard.revokeConfirm": "Revoke device?", "userDashboard.revokePrompt": "Enter password to confirm:", "userDashboard.noDevices": "No devices", "userDashboard.active": "Active", "userDashboard.revoked": "Revoked", "userDashboard.revoke": "Revoke", "admin.login": "Admin Login", "admin.username": "Username", "admin.password": "Password", "admin.loginBtn": "Login", "admin.dashboard": "Admin Dashboard", "admin.deviceCount": "Devices", "admin.opsCount": "Operations", "admin.devices": "Devices", "admin.noDevices": "No devices", "admin.device": "Device", "admin.user": "User", "admin.version": "Version", "admin.status": "Status", "admin.lastSeen": "Last seen", "admin.active": "Active", "admin.revoked": "Revoked", "admin.revoke": "Revoke", "admin.smtp": "SMTP", "admin.users": "Users", "admin.usersHeading": "Users", "admin.healthCheck": "Health Check", "admin.smtpServer": "SMTP Server", "admin.smtpPort": "SMTP Port", "admin.smtpType": "Encryption", "admin.smtpNoEncryption": "None", "admin.smtpUsername": "SMTP Username", "admin.smtpPassword": "SMTP Password", "admin.smtpFrom": "From", "admin.smtpServerURL": "Server URL", "admin.smtpSave": "Save", "admin.smtpTest": "Test", "admin.smtpTitle": "SMTP Settings", "admin.smtpTesting": "Testing...", "admin.smtpPassed": "✓ Test passed", "admin.smtpRequired": "Enter the SMTP server, port, and sender.", "admin.smtpTestFailed": "Could not test the SMTP settings. Please try again.", "admin.revokeConfirm": "Are you sure?", "common.loading": "Loading...", "common.ok": "OK", "common.error": "Error", "admin.filterPlaceholder": "Search...", "admin.email": "Email", "admin.actions": "Actions", "admin.confirmTitle": "Confirm", "admin.modalCancel": "Cancel", "admin.modalConfirm": "Confirm", "admin.editUser": "Edit User", "admin.editBtn": "Save", "admin.resultTitle": "Result", "admin.confirmed": "Confirmed", "admin.unconfirmed": "Unconfirmed", "admin.blocked": "Blocked", "admin.unblock": "Unblock", "admin.block": "Block", "admin.resetPassword": "Reset Password", "admin.noUsers": "No users", "admin.resetPasswordConfirm": "Reset Password", "admin.resetPasswordMessage": "New password: ", "admin.resetBtn": "Reset", "admin.deleteUser": "Delete", "admin.deleteUserMessage": "Delete user %s?", "admin.deleteBtn": "Delete", "admin.unblockUserTitle": "Unblock", "admin.blockUserTitle": "Block", "admin.unblockUserMessage": "Unblock user?", "admin.blockUserMessage": "Block user?", "admin.createUser": "Create User", "admin.createUserBtn": "Create", "admin.createUserFailed": "Could not create the user. Please try again.", }, }