1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 12:59:36 +02:00

Add localization support for adventure and settings pages; enhance UI elements

- Updated Chinese translations in zh.json for various UI components including coordinates, sun times, and authentication settings.
- Refactored adventure page to utilize localization for visit counts, descriptions, and other text elements.
- Improved settings page by integrating localization for profile, security, email management, and integration sections.
- Enhanced visual consistency by updating card backgrounds and adding localized text for buttons and labels.
This commit is contained in:
Sean Morley 2025-05-23 17:22:28 -04:00
parent e856a57498
commit d3d74f9f35
15 changed files with 879 additions and 175 deletions

View file

@ -4,6 +4,7 @@ from .models import Adventure, AdventureImage, ChecklistItem, Collection, Note,
from rest_framework import serializers
from main.utils import CustomModelSerializer
from users.serializers import CustomUserDetailsSerializer
from worldtravel.serializers import CountrySerializer, RegionSerializer, CitySerializer
class AdventureImageSerializer(CustomModelSerializer):
@ -82,7 +83,9 @@ class AdventureSerializer(CustomModelSerializer):
category = CategorySerializer(read_only=False, required=False)
is_visited = serializers.SerializerMethodField()
user = serializers.SerializerMethodField()
country = serializers.SerializerMethodField()
country = CountrySerializer(read_only=True)
region = RegionSerializer(read_only=True)
city = CitySerializer(read_only=True)
class Meta:
model = Adventure
@ -105,9 +108,6 @@ class AdventureSerializer(CustomModelSerializer):
category_data['name'] = name
return category_data
def get_country(self, obj):
return obj.country.country_code if obj.country else None
def get_or_create_category(self, category_data):
user = self.context['request'].user

View file

@ -45,9 +45,9 @@ export type Adventure = {
category: Category | null;
attachments: Attachment[];
user?: User | null;
city?: string | null;
region?: string | null;
country?: string | null;
city?: City | null;
region?: Region | null;
country?: Country | null;
};
export type AdditionalAdventure = Adventure & {

View file

@ -261,7 +261,13 @@
"arrival_timezone": "Ankunftszeitzone",
"departure_timezone": "Abfahrtszeit",
"arrival_date": "Ankunftsdatum",
"departure_date": "Abflugdatum"
"departure_date": "Abflugdatum",
"coordinates": "Koordinaten",
"copy_coordinates": "Koordinaten kopieren",
"sun_times": "Sonnenzeiten",
"sunrise": "Sonnenaufgang",
"sunset": "Sonnenuntergang",
"timed": "Zeitlich abgestimmt"
},
"home": {
"desc_1": "Entdecken, planen und erkunden Sie mühelos",
@ -450,7 +456,58 @@
"password_disabled": "Kennwortauthentifizierung deaktiviert",
"password_disabled_error": "Fehler beim Deaktivieren der Kennwortauthentifizierung. \nStellen Sie sicher, dass ein sozialer oder OIDC -Anbieter mit Ihrem Konto verknüpft ist.",
"password_enabled": "Kennwortauthentifizierung aktiviert",
"password_enabled_error": "Fehler zur Kennwortauthentifizierung."
"password_enabled_error": "Fehler zur Kennwortauthentifizierung.",
"access_restricted": "Zugang eingeschränkt",
"access_restricted_desc": "Yadministrative Funktionen stehen den Mitarbeitern nur zur Verfügung.",
"add_new_email": "Neue E -Mail hinzufügen",
"add_new_email_address": "Neue E -Mail -Adresse hinzufügen",
"admin": "Administrator",
"admin_panel_desc": "Greifen Sie auf die vollständige Verwaltungsschnittstelle zu",
"administration": "Verwaltung",
"administration_desc": "Verwaltungswerkzeuge und Einstellungen",
"advanced": "Fortschrittlich",
"advanced_settings": "Erweiterte Einstellungen",
"advanced_settings_desc": "Erweiterte Konfigurations- und Entwicklungstools",
"all_rights_reserved": "Alle Rechte vorbehalten.",
"app_version": "App -Version",
"confirm_new_password_desc": "Neues Passwort bestätigen",
"connected": "Verbunden",
"debug_information": "Informationen debuggen",
"disabled": "Deaktiviert",
"disconnected": "Getrennt",
"email_management": "E -Mail -Management",
"email_management_desc": "Verwalten Sie Ihre E -Mail -Adressen und den Überprüfungsstatus",
"emails": "E -Mails",
"enabled": "Ermöglicht",
"enter_current_password": "Geben Sie das aktuelle Passwort ein",
"enter_first_name": "Geben Sie Ihren Vornamen ein",
"enter_last_name": "Geben Sie Ihren Nachnamen ein",
"enter_new_email": "Geben Sie eine neue E -Mail -Adresse ein",
"enter_new_password": "Geben Sie ein neues Passwort ein",
"enter_username": "Geben Sie Ihren Benutzernamen ein",
"integrations": "Integrationen",
"integrations_desc": "Verbinden Sie externe Dienste, um Ihre Erfahrung zu verbessern",
"license": "Lizenz",
"mfa_desc": "Fügen Sie Ihrem Konto eine zusätzliche Sicherheitsebene hinzu",
"mfa_is_enabled": "MFA ist aktiviert",
"pass_change_desc": "Aktualisieren Sie Ihr Kontokennwort für eine bessere Sicherheit",
"password_auth": "Passwortauthentifizierung",
"password_login_disabled": "Passwort Login deaktiviert",
"password_login_enabled": "Passwort Login aktiviert",
"profile_info": "Profilinformationen",
"public_profile_desc": "Machen Sie Ihr Profil für andere Benutzer sichtbar",
"quick_actions": "Schnelle Aktionen",
"region_updates": "Regionen Updates",
"region_updates_desc": "Update besuchte Regionen und Städte",
"regular_user": "Regulärer Benutzer",
"security": "Sicherheit",
"settings_menu": "Einstellungsmenü",
"social_auth": "Sozialauthentifizierung",
"social_auth_desc_1": "Verwalten Sie die Optionen für soziale Anmeldungen und Kennworteinstellungen",
"social_auth_setup": "Social Authentication Setup",
"staff_status": "Personalstatus",
"staff_user": "Personalbenutzer",
"profile_info_desc": "Aktualisieren Sie Ihre persönlichen Daten und Ihr Profilbild"
},
"checklist": {
"add_item": "Eintrag hinzufügen",
@ -602,7 +659,11 @@
"update_integration": "Integration updaten",
"immich_integration": "Immich-Integration",
"documentation": "Dokumentation zur Immich-Integration",
"localhost_note": "Hinweis: localhost wird höchstwahrscheinlich nicht funktionieren, es sei denn, Sie haben Docker-Netzwerke entsprechend eingerichtet. \nEs wird empfohlen, die IP-Adresse des Servers oder den Domänennamen zu verwenden."
"localhost_note": "Hinweis: localhost wird höchstwahrscheinlich nicht funktionieren, es sei denn, Sie haben Docker-Netzwerke entsprechend eingerichtet. \nEs wird empfohlen, die IP-Adresse des Servers oder den Domänennamen zu verwenden.",
"api_key_placeholder": "Geben Sie Ihren Immich -API -Schlüssel ein",
"enable_integration": "Integration aktivieren",
"immich_integration_desc": "Schließen Sie Ihren Immich -Photo -Management -Server an",
"need_help": "Benötigen Sie Hilfe bei der Einrichtung? \nSchauen Sie sich das an"
},
"recomendations": {
"address": "Adresse",

View file

@ -94,6 +94,9 @@
"longitude": "Longitude",
"latitude": "Latitude",
"visit": "Visit",
"timed": "Timed",
"coordinates": "Coordinates",
"copy_coordinates": "Copy Coordinates",
"visits": "Visits",
"create_new": "Create New...",
"adventure": "Adventure",
@ -120,6 +123,9 @@
"upload_images_here": "Upload images here",
"share_adventure": "Share this Adventure!",
"copy_link": "Copy Link",
"sun_times": "Sun Times",
"sunrise": "Sunrise",
"sunset": "Sunset",
"image": "Image",
"upload_image": "Upload Image",
"open_in_maps": "Open in Maps",
@ -370,12 +376,22 @@
"account_settings": "User Account Settings",
"update": "Update",
"no_verified_email_warning": "You must have a verified email address to enable two-factor authentication.",
"social_auth": "Social Authentication",
"social_auth_desc_1": "Manage social login options and password settings",
"password_auth": "Password Authentication",
"password_login_enabled": "Password login enabled",
"password_login_disabled": "Password login disabled",
"password_change": "Change Password",
"new_password": "New Password",
"confirm_new_password": "Confirm New Password",
"email_change": "Change Email",
"current_email": "Current Email",
"no_email_set": "No email set",
"email_management": "Email Management",
"email_management_desc": "Manage your email addresses and verification status",
"add_new_email": "Add New Email",
"add_new_email_address": "Add New Email Address",
"enter_new_email": "Enter new email address",
"new_email": "New Email",
"change_password": "Change Password",
"login_redir": "You will then be redirected to the login page.",
@ -411,10 +427,14 @@
"no_emai_set": "No email set",
"error_change_password": "Error changing password. Please check your current password and try again.",
"mfa_disabled": "Multi-factor authentication disabled successfully!",
"mfa_page_title": "Multi-factor Authentication",
"mfa_page_title": "Multi-Factor Authentication",
"mfa_desc": "Add an extra layer of security to your account",
"enable_mfa": "Enable MFA",
"disable_mfa": "Disable MFA",
"enabled": "Enabled",
"disabled": "Disabled",
"mfa_not_enabled": "MFA is not enabled",
"mfa_is_enabled": "MFA is enabled",
"mfa_enabled": "Multi-factor authentication enabled successfully!",
"copy": "Copy",
"recovery_codes": "Recovery Codes",
@ -436,6 +456,24 @@
"username_taken": "This username is already in use.",
"administration_settings": "Administration Settings",
"launch_administration_panel": "Launch Administration Panel",
"administration": "Administration",
"admin_panel_desc": "Access the full administration interface",
"region_updates": "Region Updates",
"debug_information": "Debug Information",
"staff_status": "Staff Status",
"staff_user": "Staff User",
"regular_user": "Regular User",
"app_version": "App Version",
"quick_actions": "Quick Actions",
"license": "License",
"all_rights_reserved": "All rights reserved.",
"region_updates_desc": "Update visited regions and cities",
"access_restricted": "Access Restricted",
"access_restricted_desc": "YAdministrative features are only available to staff members.",
"advanced_settings": "Advanced Settings",
"advanced_settings_desc": "Advanced configuration and development tools",
"social_auth_setup": "Social Authentication Setup",
"administration_desc": "Administrative tools and settings",
"social_oidc_auth": "Social and OIDC Authentication",
"social_auth_desc": "Enable or disable social and OIDC authentication providers for your account. These connections allow you to sign in with self hosted authentication identity providers like Authentik or 3rd party providers like GitHub.",
"social_auth_desc_2": "These settings are managed in the AdventureLog server and must be manually enabled by the administrator.",
@ -450,7 +488,26 @@
"password_disabled": "Password authentication disabled",
"password_disable_warning": "Currently, password authentication is disabled. Login via a social or OIDC provider is required.",
"password_disabled_error": "Error disabling password authentication. Make sure a social or OIDC provider is linked to your account.",
"password_enabled_error": "Error enabling password authentication."
"password_enabled_error": "Error enabling password authentication.",
"settings_menu": "Settings Menu",
"security": "Security",
"emails": "Emails",
"integrations": "Integrations",
"integrations_desc": "Connect external services to enhance your experience",
"admin": "Admin",
"advanced": "Advanced",
"profile_info": "Profile Information",
"profile_info_desc": "Update your personal details and profile picture",
"public_profile_desc": "Make your profile visible to other users",
"pass_change_desc": "Update your account password for better security",
"enter_first_name": "Enter your first name",
"enter_last_name": "Enter your last name",
"enter_username": "Enter your username",
"enter_current_password": "Enter current password",
"enter_new_password": "Enter new password",
"connected": "Connected",
"disconnected": "Disconnected",
"confirm_new_password_desc": "Confirm new password"
},
"collection": {
"collection_created": "Collection created successfully!",
@ -629,10 +686,14 @@
"api_note": "Note: this must be the URL to the Immich API server so it likely ends with /api unless you have a custom config.",
"api_key": "Immich API Key",
"enable_immich": "Enable Immich",
"enable_integration": "Enable Integration",
"update_integration": "Update Integration",
"immich_integration": "Immich Integration",
"immich_integration_desc": "Connect your Immich photo management server",
"localhost_note": "Note: localhost will most likely not work unless you have setup docker networks accordingly. It is recommended to use the IP address of the server or the domain name.",
"documentation": "Immich Integration Documentation"
"documentation": "Immich Integration Documentation",
"api_key_placeholder": "Enter your Immich API key",
"need_help": "Need help setting this up? Check out the"
},
"recomendations": {
"address": "Address",

View file

@ -309,7 +309,13 @@
"arrival_timezone": "Zona horaria de llegada",
"departure_timezone": "Zona horaria de salida",
"arrival_date": "Fecha de llegada",
"departure_date": "Fecha de salida"
"departure_date": "Fecha de salida",
"coordinates": "Coordenadas",
"copy_coordinates": "Coordenadas de copia",
"sun_times": "Sol Times",
"sunrise": "Amanecer",
"sunset": "Atardecer",
"timed": "Cronometrado"
},
"worldtravel": {
"all": "Todo",
@ -450,7 +456,58 @@
"password_disabled": "Autenticación de contraseña deshabilitada",
"password_disabled_error": "Error a deshabilitar la autenticación de contraseña. \nAsegúrese de que un proveedor social o OIDC esté vinculado a su cuenta.",
"password_enabled": "Autenticación de contraseña habilitada",
"password_enabled_error": "Error al habilitar la autenticación de contraseña."
"password_enabled_error": "Error al habilitar la autenticación de contraseña.",
"admin": "Administración",
"advanced": "Avanzado",
"confirm_new_password_desc": "Confirmar nueva contraseña",
"disabled": "Desactivado",
"emails": "Correos electrónicos",
"enabled": "Activado",
"enter_current_password": "Ingrese la contraseña actual",
"enter_first_name": "Ingrese su primer nombre",
"enter_last_name": "Ingrese su apellido",
"enter_new_password": "Ingrese una nueva contraseña",
"enter_username": "Ingrese su nombre de usuario",
"integrations": "Integración",
"mfa_desc": "Agregue una capa adicional de seguridad a su cuenta",
"mfa_is_enabled": "MFA está habilitado",
"pass_change_desc": "Actualice la contraseña de su cuenta para una mejor seguridad",
"password_auth": "Autenticación de contraseña",
"password_login_disabled": "Inicio de sesión de contraseña Deshabilitado",
"password_login_enabled": "Inicio de sesión de contraseña habilitado",
"profile_info": "Información de perfil",
"profile_info_desc": "Actualice sus datos personales y su foto de perfil",
"public_profile_desc": "Haga que su perfil sea visible para otros usuarios",
"security": "Seguridad",
"settings_menu": "Menú Configuración",
"social_auth": "Autenticación social",
"social_auth_desc_1": "Administrar opciones de inicio de sesión sociales y configuración de contraseña",
"add_new_email": "Agregar nuevo correo electrónico",
"add_new_email_address": "Agregar nueva dirección de correo electrónico",
"email_management": "Administración de correo electrónico",
"email_management_desc": "Administre sus direcciones de correo electrónico y estado de verificación",
"enter_new_email": "Ingrese una nueva dirección de correo electrónico",
"access_restricted": "Acceso restringido",
"access_restricted_desc": "Las características de YAdMinistratrating solo están disponibles para los miembros del personal.",
"admin_panel_desc": "Acceder a la interfaz de administración completa",
"administration": "Administración",
"administration_desc": "Herramientas y configuraciones administrativas",
"advanced_settings": "Configuración avanzada",
"advanced_settings_desc": "Herramientas avanzadas de configuración y desarrollo",
"app_version": "Versión de la aplicación",
"connected": "Conectado",
"debug_information": "Información de depuración",
"disconnected": "Desconectado",
"integrations_desc": "Conecte los servicios externos para mejorar su experiencia",
"quick_actions": "Acciones rápidas",
"region_updates": "Actualizaciones de región",
"region_updates_desc": "Actualizar regiones y ciudades visitadas",
"regular_user": "Usuario regular",
"social_auth_setup": "Configuración de autenticación social",
"staff_status": "Estado del personal",
"staff_user": "Usuario de personal",
"license": "Licencia",
"all_rights_reserved": "Reservados todos los derechos."
},
"checklist": {
"add_item": "Agregar artículo",
@ -602,7 +659,11 @@
"update_integration": "Integración de actualización",
"immich_integration": "Integración Immich",
"documentation": "Documentación de integración de Immich",
"localhost_note": "Nota: lo más probable es que localhost no funcione a menos que haya configurado las redes acoplables en consecuencia. \nSe recomienda utilizar la dirección IP del servidor o el nombre de dominio."
"localhost_note": "Nota: lo más probable es que localhost no funcione a menos que haya configurado las redes acoplables en consecuencia. \nSe recomienda utilizar la dirección IP del servidor o el nombre de dominio.",
"api_key_placeholder": "Ingrese su clave de API IMICH",
"enable_integration": "Habilitar la integración",
"immich_integration_desc": "Conecte su servidor de administración de fotos de Immich",
"need_help": "¿Necesita ayuda para configurar esto? \nMira el"
},
"recomendations": {
"address": "DIRECCIÓN",

View file

@ -261,7 +261,13 @@
"arrival_timezone": "Fuseau horaire d'arrivée",
"departure_timezone": "Fuseau horaire de départ",
"arrival_date": "Date d'arrivée",
"departure_date": "Date de départ"
"departure_date": "Date de départ",
"coordinates": "Coordonnées",
"copy_coordinates": "Coordonnées de copie",
"sun_times": "Temps du soleil",
"sunrise": "Lever du soleil",
"sunset": "Coucher de soleil",
"timed": "Chronométré"
},
"home": {
"desc_1": "Découvrez, planifiez et explorez en toute simplicité",
@ -450,7 +456,58 @@
"password_disabled": "Authentification par mot de passe désactivée",
"password_disabled_error": "Erreur de désactivation de l'authentification par mot de passe. \nAssurez-vous qu'un fournisseur social ou OIDC est lié à votre compte.",
"password_enabled": "Authentification par mot de passe activée",
"password_enabled_error": "Erreur permettant l'authentification par mot de passe."
"password_enabled_error": "Erreur permettant l'authentification par mot de passe.",
"admin_panel_desc": "Accéder à l'interface d'administration complète",
"administration": "Administration",
"advanced_settings": "Paramètres avancés",
"app_version": "Version de l'application",
"confirm_new_password_desc": "Confirmer un nouveau mot de passe",
"connected": "Connecté",
"email_management_desc": "Gérez vos adresses e-mail et votre statut de vérification",
"emails": "E-mails",
"enabled": "Activé",
"enter_current_password": "Entrez le mot de passe actuel",
"enter_first_name": "Entrez votre prénom",
"enter_new_email": "Entrez la nouvelle adresse e-mail",
"enter_new_password": "Entrez un nouveau mot de passe",
"enter_username": "Entrez votre nom d'utilisateur",
"integrations": "Intégrations",
"integrations_desc": "Connectez les services externes pour améliorer votre expérience",
"license": "Licence",
"mfa_desc": "Ajoutez une couche supplémentaire de sécurité à votre compte",
"mfa_is_enabled": "MFA est activé",
"pass_change_desc": "Mettez à jour le mot de passe de votre compte pour une meilleure sécurité",
"password_auth": "Authentification du mot de passe",
"password_login_disabled": "Login de mot de passe désactivé",
"password_login_enabled": "Connexion du mot de passe activé",
"profile_info": "Informations sur le profil",
"profile_info_desc": "Mettez à jour vos coordonnées personnelles et votre photo de profil",
"public_profile_desc": "Rendre votre profil visible pour les autres utilisateurs",
"quick_actions": "Actions rapides",
"region_updates": "Mises à jour de la région",
"region_updates_desc": "Mettre à jour les régions et les villes visitées",
"regular_user": "Utilisateur régulier",
"security": "Sécurité",
"settings_menu": "Menu des paramètres",
"social_auth": "Authentification sociale",
"social_auth_desc_1": "Gérer les options de connexion sociales et les paramètres de mot de passe",
"social_auth_setup": "Configuration d'authentification sociale",
"staff_status": "Statut du personnel",
"staff_user": "Utilisateur du personnel",
"access_restricted": "Accès restreint",
"access_restricted_desc": "Les fonctionnalités yadministratives ne sont disponibles que pour les membres du personnel.",
"add_new_email": "Ajouter un nouvel e-mail",
"add_new_email_address": "Ajouter une nouvelle adresse e-mail",
"admin": "Administrer",
"administration_desc": "Outils et paramètres administratifs",
"advanced": "Avancé",
"advanced_settings_desc": "Outils avancés de configuration et de développement",
"all_rights_reserved": "Tous droits réservés.",
"debug_information": "Débogage des informations",
"disabled": "Désactivé",
"disconnected": "Déconnecté",
"email_management": "Gestion des e-mails",
"enter_last_name": "Entrez votre nom de famille"
},
"checklist": {
"add_item": "Ajouter un élément",
@ -602,7 +659,11 @@
"server_url": "URL du serveur Immich",
"update_integration": "Intégration des mises à jour",
"documentation": "Documentation de l'intégration Immich",
"localhost_note": "Remarque : localhost ne fonctionnera probablement pas à moins que vous n'ayez configuré les réseaux Docker en conséquence. \nIl est recommandé d'utiliser l'adresse IP du serveur ou le nom de domaine."
"localhost_note": "Remarque : localhost ne fonctionnera probablement pas à moins que vous n'ayez configuré les réseaux Docker en conséquence. \nIl est recommandé d'utiliser l'adresse IP du serveur ou le nom de domaine.",
"api_key_placeholder": "Entrez votre clé API Immich",
"enable_integration": "Activer l'intégration",
"immich_integration_desc": "Connectez votre serveur de gestion de photos Immich",
"need_help": "Besoin d'aide pour la configurer? \nDécouvrez le"
},
"recomendations": {
"address": "Adresse",

View file

@ -261,7 +261,13 @@
"arrival_timezone": "Fuso orario di arrivo",
"departure_timezone": "Fuso orario di partenza",
"arrival_date": "Data di arrivo",
"departure_date": "Data di partenza"
"departure_date": "Data di partenza",
"coordinates": "Coordinate",
"copy_coordinates": "Copia coordinate",
"sun_times": "Sun Times",
"sunrise": "Alba",
"sunset": "Tramonto",
"timed": "A tempo"
},
"home": {
"desc_1": "Scopri, pianifica ed esplora con facilità",
@ -450,7 +456,58 @@
"password_disabled": "Autenticazione password disabilitata",
"password_disabled_error": "Errore di disabilitazione dell'autenticazione della password. \nAssicurati che un fornitore sociale o OIDC sia collegato al tuo account.",
"password_enabled": "Autenticazione password abilitata",
"password_enabled_error": "Errore che abilita l'autenticazione della password."
"password_enabled_error": "Errore che abilita l'autenticazione della password.",
"access_restricted": "Accesso limitato",
"access_restricted_desc": "Le funzionalità YAdministrative sono disponibili solo per i membri del personale.",
"add_new_email": "Aggiungi nuova e -mail",
"add_new_email_address": "Aggiungi nuovo indirizzo email",
"admin": "Amministratore",
"admin_panel_desc": "Accedi all'interfaccia di amministrazione completa",
"administration": "Amministrazione",
"administration_desc": "Strumenti e impostazioni amministrative",
"advanced": "Avanzato",
"advanced_settings": "Impostazioni avanzate",
"advanced_settings_desc": "Strumenti avanzati di configurazione e sviluppo",
"all_rights_reserved": "Tutti i diritti riservati.",
"app_version": "Versione app",
"confirm_new_password_desc": "Conferma nuova password",
"connected": "Collegato",
"debug_information": "Informazioni sul debug",
"disabled": "Disabile",
"disconnected": "Disconnesso",
"email_management": "Gestione e -mail",
"email_management_desc": "Gestisci i tuoi indirizzi e -mail e lo stato di verifica",
"emails": "E -mail",
"enabled": "Abilitato",
"enter_current_password": "Immettere la password corrente",
"enter_first_name": "Inserisci il tuo nome",
"enter_last_name": "Inserisci il tuo cognome",
"enter_new_email": "Inserisci un nuovo indirizzo email",
"enter_new_password": "Immettere nuova password",
"enter_username": "Inserisci il tuo nome utente",
"integrations": "Integrazioni",
"integrations_desc": "Collega i servizi esterni per migliorare la tua esperienza",
"license": "Licenza",
"mfa_desc": "Aggiungi un ulteriore livello di sicurezza al tuo account",
"mfa_is_enabled": "MFA è abilitato",
"pass_change_desc": "Aggiorna la password del tuo account per una migliore sicurezza",
"password_login_disabled": "Accesso della password disabilitata",
"password_login_enabled": "Accesso alla password abilitata",
"profile_info": "Informazioni sul profilo",
"profile_info_desc": "Aggiorna i tuoi dettagli personali e l'immagine del profilo",
"public_profile_desc": "Rendi il tuo profilo visibile ad altri utenti",
"quick_actions": "Azioni rapide",
"region_updates": "Aggiornamenti della regione",
"region_updates_desc": "Aggiorna le regioni e le città visitate",
"regular_user": "Utente normale",
"security": "Sicurezza",
"settings_menu": "Menu Impostazioni",
"social_auth": "Autenticazione sociale",
"social_auth_desc_1": "Gestisci le opzioni di accesso social e le impostazioni della password",
"social_auth_setup": "Setup di autenticazione sociale",
"staff_status": "Stato del personale",
"staff_user": "Utente del personale",
"password_auth": "Autenticazione della password"
},
"checklist": {
"add_item": "Aggiungi elemento",
@ -602,7 +659,11 @@
"server_url": "URL del server Immich",
"update_integration": "Aggiorna integrazione",
"documentation": "Documentazione sull'integrazione di Immich",
"localhost_note": "Nota: molto probabilmente localhost non funzionerà a meno che tu non abbia configurato le reti docker di conseguenza. \nSi consiglia di utilizzare l'indirizzo IP del server o il nome del dominio."
"localhost_note": "Nota: molto probabilmente localhost non funzionerà a meno che tu non abbia configurato le reti docker di conseguenza. \nSi consiglia di utilizzare l'indirizzo IP del server o il nome del dominio.",
"api_key_placeholder": "Inserisci la tua chiave API immich",
"enable_integration": "Abilita l'integrazione",
"immich_integration_desc": "Collega il tuo server di gestione delle foto immich",
"need_help": "Hai bisogno di aiuto per impostare questo? \nDai un'occhiata al"
},
"recomendations": {
"address": "Indirizzo",

View file

@ -261,7 +261,13 @@
"arrival_timezone": "도착 시간대",
"departure_timezone": "출발 시간대",
"arrival_date": "도착 날짜",
"departure_date": "출발 날짜"
"departure_date": "출발 날짜",
"coordinates": "좌표",
"copy_coordinates": "좌표를 복사하십시오",
"sun_times": "태양 시간",
"sunrise": "해돋이",
"sunset": "일몰",
"timed": "시간이 정해졌습니다"
},
"auth": {
"both_passwords_required": "두 암호 모두 필요합니다",
@ -371,7 +377,11 @@
"query_required": "쿼리가 필요합니다",
"server_down": "현재 Immich 서버가 다운되었거나 도달할 수 없습니다",
"server_url": "Immich 서버 URL",
"update_integration": "통합 업데이트"
"update_integration": "통합 업데이트",
"api_key_placeholder": "Immich API 키를 입력하십시오",
"enable_integration": "통합을 활성화합니다",
"immich_integration_desc": "Immich Photo Management Server를 연결하십시오",
"need_help": "이것을 설정하는 데 도움이 필요하십니까? \n확인하십시오"
},
"map": {
"add_adventure": "새로운 모험 추가",
@ -536,7 +546,58 @@
"password_disabled": "비밀번호 인증 비활성화",
"password_disabled_error": "비밀번호 인증 오류. \n소셜 또는 OIDC 제공 업체가 귀하의 계정에 연결되어 있는지 확인하십시오.",
"password_enabled": "비밀번호 인증 활성화",
"password_enabled_error": "비밀번호 인증을 활성화하는 오류."
"password_enabled_error": "비밀번호 인증을 활성화하는 오류.",
"access_restricted": "액세스 제한",
"access_restricted_desc": "Yadministrative 기능은 직원에게만 사용할 수 있습니다.",
"add_new_email": "새 이메일을 추가하십시오",
"add_new_email_address": "새 이메일 주소를 추가하십시오",
"admin": "관리자",
"admin_panel_desc": "전체 관리 인터페이스에 액세스하십시오",
"administration": "관리",
"administration_desc": "관리 도구 및 설정",
"advanced": "고급의",
"advanced_settings": "고급 설정",
"advanced_settings_desc": "고급 구성 및 개발 도구",
"all_rights_reserved": "모든 권리 보유.",
"app_version": "앱 버전",
"confirm_new_password_desc": "새 비밀번호를 확인하십시오",
"connected": "연결",
"debug_information": "디버그 정보",
"disabled": "장애가 있는",
"disconnected": "연결이 끊어졌습니다",
"email_management": "이메일 관리",
"email_management_desc": "이메일 주소 및 확인 상태를 관리하십시오",
"emails": "이메일",
"enabled": "활성화",
"enter_current_password": "현재 비밀번호를 입력하십시오",
"enter_first_name": "이름을 입력하십시오",
"enter_last_name": "성을 입력하십시오",
"enter_new_email": "새 이메일 주소를 입력하십시오",
"enter_new_password": "새 비밀번호를 입력하십시오",
"enter_username": "사용자 이름을 입력하십시오",
"integrations": "통합",
"integrations_desc": "경험을 향상시키기 위해 외부 서비스를 연결하십시오",
"license": "특허",
"mfa_desc": "계정에 추가 보안 계층을 추가하십시오",
"mfa_is_enabled": "MFA가 활성화되었습니다",
"pass_change_desc": "더 나은 보안을 위해 계정 비밀번호를 업데이트하십시오",
"password_auth": "비밀번호 인증",
"password_login_disabled": "암호 로그인이 비활성화되었습니다",
"password_login_enabled": "암호 로그인이 활성화되었습니다",
"profile_info": "프로필 정보",
"profile_info_desc": "개인 정보 및 프로필 사진을 업데이트하십시오",
"public_profile_desc": "프로필을 다른 사용자에게 보이게하십시오",
"quick_actions": "빠른 행동",
"region_updates": "지역 업데이트",
"region_updates_desc": "업데이트 방문 지역 및 도시",
"regular_user": "일반 사용자",
"security": "보안",
"settings_menu": "설정 메뉴",
"social_auth": "사회적 인증",
"social_auth_desc_1": "소셜 로그인 옵션 및 비밀번호 설정을 관리합니다",
"social_auth_setup": "소셜 인증 설정",
"staff_status": "직원 상태",
"staff_user": "직원 사용자"
},
"share": {
"go_to_settings": "설정으로 이동",

View file

@ -261,7 +261,13 @@
"arrival_timezone": "Aankomsttijdzone",
"departure_timezone": "Vertrektijdzone",
"arrival_date": "Aankomstdatum",
"departure_date": "Vertrekdatum"
"departure_date": "Vertrekdatum",
"coordinates": "Coördineert",
"copy_coordinates": "Kopieer coördinaten",
"sun_times": "Zonnetijden",
"sunrise": "Zonsopgang",
"sunset": "Zonsondergang",
"timed": "Getimed"
},
"home": {
"desc_1": "Ontdek, plan en verken met gemak",
@ -450,7 +456,58 @@
"password_disabled": "Wachtwoordverificatie uitgeschakeld",
"password_disabled_error": "Fout het uitschakelen van wachtwoordverificatie. \nZorg ervoor dat een sociale of OIDC -provider is gekoppeld aan uw account.",
"password_enabled": "Wachtwoordverificatie ingeschakeld",
"password_enabled_error": "Fout bij het inschakelen van wachtwoordverificatie."
"password_enabled_error": "Fout bij het inschakelen van wachtwoordverificatie.",
"access_restricted": "Toegang beperkt",
"access_restricted_desc": "Yadministratieve functies zijn alleen beschikbaar voor personeelsleden.",
"add_new_email": "Voeg nieuwe e -mail toe",
"add_new_email_address": "Voeg nieuw e -mailadres toe",
"admin": "Beheersing",
"admin_panel_desc": "Toegang tot de volledige beheerinterface",
"administration": "Administratie",
"administration_desc": "Administratieve tools en instellingen",
"advanced": "Geavanceerd",
"advanced_settings": "Geavanceerde instellingen",
"advanced_settings_desc": "Geavanceerde configuratie- en ontwikkelingstools",
"all_rights_reserved": "Alle rechten voorbehouden.",
"app_version": "App -versie",
"confirm_new_password_desc": "Bevestig nieuw wachtwoord",
"debug_information": "Debug -informatie",
"disabled": "Gehandicapt",
"disconnected": "Losgekoppeld",
"email_management": "E -mailbeheer",
"email_management_desc": "Beheer uw e -mailadressen en verificatiestatus",
"emails": "E -mails",
"enabled": "Ingeschakeld",
"enter_current_password": "Voer het huidige wachtwoord in",
"enter_first_name": "Voer uw voornaam in",
"enter_last_name": "Voer uw achternaam in",
"enter_new_email": "Voer een nieuw e -mailadres in",
"enter_new_password": "Voer een nieuw wachtwoord in",
"enter_username": "Voer uw gebruikersnaam in",
"integrations": "Integratie",
"integrations_desc": "Verbind externe services om uw ervaring te verbeteren",
"license": "Licentie",
"mfa_desc": "Voeg een extra beveiligingslaag toe aan uw account",
"mfa_is_enabled": "MFA is ingeschakeld",
"pass_change_desc": "Werk uw accountwachtwoord bij voor een betere beveiliging",
"password_auth": "Wachtwoordverificatie",
"password_login_disabled": "Wachtwoord Aanmelding Uitgeschakeld",
"password_login_enabled": "Wachtwoordaanmelding ingeschakeld",
"profile_info": "Profielinformatie",
"profile_info_desc": "Werk uw persoonlijke gegevens en profielfoto bij",
"public_profile_desc": "Maak uw profiel zichtbaar voor andere gebruikers",
"quick_actions": "Snelle acties",
"region_updates": "Regio -updates",
"region_updates_desc": "Update bezochte regio's en steden",
"regular_user": "Gewone gebruiker",
"security": "Beveiliging",
"settings_menu": "Instellingenmenu",
"social_auth": "Sociale authenticatie",
"social_auth_desc_1": "Beheer sociale inlogopties en wachtwoordinstellingen",
"social_auth_setup": "Sociale authenticatie -opstelling",
"staff_status": "Status",
"staff_user": "Personeelsgebruiker",
"connected": "Aangesloten"
},
"checklist": {
"add_item": "Artikel toevoegen",
@ -602,7 +659,11 @@
"server_url": "Immich-server-URL",
"update_integration": "Integratie bijwerken",
"documentation": "Immich-integratiedocumentatie",
"localhost_note": "Opmerking: localhost zal hoogstwaarschijnlijk niet werken tenzij dit bewust zo geconfigureerd is in het docker-netwerk. \nHet is aanbevolen om het IP-adres van de server of de domeinnaam te gebruiken."
"localhost_note": "Opmerking: localhost zal hoogstwaarschijnlijk niet werken tenzij dit bewust zo geconfigureerd is in het docker-netwerk. \nHet is aanbevolen om het IP-adres van de server of de domeinnaam te gebruiken.",
"api_key_placeholder": "Voer uw Immich API -sleutel in",
"enable_integration": "Integratie inschakelen",
"immich_integration_desc": "Verbind uw Immich Photo Management Server",
"need_help": "Hulp nodig bij het opzetten van dit? \nBekijk de"
},
"recomendations": {
"address": "Adres",

View file

@ -309,7 +309,13 @@
"arrival_timezone": "Ankomst tidssone",
"departure_timezone": "Avgangstidssone",
"arrival_date": "Ankomstdato",
"departure_date": "Avgangsdato"
"departure_date": "Avgangsdato",
"coordinates": "Koordinater",
"copy_coordinates": "Kopier koordinater",
"sun_times": "Soltider",
"sunrise": "Soloppgang",
"sunset": "Solnedgang",
"timed": "Tidsbestemt"
},
"worldtravel": {
"country_list": "Liste over land",
@ -450,7 +456,58 @@
"password_disabled": "Passordautentisering er deaktivert",
"password_disable_warning": "Akkurat nå er passordautentisering deaktivert. Innlogging via en sosial eller OIDC-leverandør er påkrevd.",
"password_disabled_error": "Feil ved deaktivering av passordautentisering. Sørg for at en sosial eller OIDC-leverandør er koblet til kontoen din.",
"password_enabled_error": "Feil ved aktivering av passordautentisering."
"password_enabled_error": "Feil ved aktivering av passordautentisering.",
"access_restricted": "Tilgang begrenset",
"access_restricted_desc": "Yadministative funksjoner er bare tilgjengelige for ansatte.",
"add_new_email": "Legg til ny e -post",
"add_new_email_address": "Legg til ny e -postadresse",
"admin": "Admin",
"admin_panel_desc": "Få tilgang til hele administrasjonsgrensesnittet",
"administration": "Administrasjon",
"administration_desc": "Administrative verktøy og innstillinger",
"advanced": "Avansert",
"advanced_settings": "Avanserte innstillinger",
"advanced_settings_desc": "Avanserte konfigurasjons- og utviklingsverktøy",
"all_rights_reserved": "Alle rettigheter forbeholdt.",
"app_version": "Appversjon",
"confirm_new_password_desc": "Bekreft nytt passord",
"connected": "Tilkoblet",
"debug_information": "Feilsøkingsinformasjon",
"disabled": "Funksjonshemmet",
"disconnected": "Koblet fra",
"email_management": "E -postadministrasjon",
"email_management_desc": "Administrer e -postadressene og bekreftelsesstatusen",
"emails": "E -post",
"enabled": "Aktivert",
"enter_current_password": "Skriv inn gjeldende passord",
"enter_first_name": "Skriv inn fornavnet ditt",
"enter_last_name": "Skriv inn etternavnet ditt",
"enter_new_email": "Skriv inn ny e -postadresse",
"enter_new_password": "Skriv inn nytt passord",
"enter_username": "Skriv inn brukernavnet ditt",
"integrations": "Integrasjoner",
"integrations_desc": "Koble eksterne tjenester for å forbedre opplevelsen din",
"license": "Tillatelse",
"mfa_desc": "Legg til et ekstra lag med sikkerhet til kontoen din",
"mfa_is_enabled": "MFA er aktivert",
"pass_change_desc": "Oppdater kontopassordet ditt for bedre sikkerhet",
"password_auth": "Passordautentisering",
"password_login_disabled": "Passordinnloggingsaktivert",
"password_login_enabled": "Passordinnlogging er aktivert",
"profile_info": "Profilinformasjon",
"profile_info_desc": "Oppdater dine personlige detaljer og profilbilde",
"public_profile_desc": "Gjør profilen din synlig for andre brukere",
"quick_actions": "Raske handlinger",
"region_updates": "Regionoppdateringer",
"region_updates_desc": "Oppdatering besøkte regioner og byer",
"regular_user": "Vanlig bruker",
"security": "Sikkerhet",
"settings_menu": "Innstillingsmenyen",
"social_auth": "Sosial godkjenning",
"social_auth_desc_1": "Administrer sosiale påloggingsalternativer og passordinnstillinger",
"social_auth_setup": "Sosial autentiseringsoppsett",
"staff_status": "Personalstatus",
"staff_user": "Personalbruker"
},
"collection": {
"collection_created": "Samling opprettet!",
@ -632,7 +689,11 @@
"update_integration": "Oppdater integrasjon",
"immich_integration": "Immich-integrasjon",
"localhost_note": "Merk: localhost vil sannsynligvis ikke fungere med mindre du har satt opp docker-nettverk. Det anbefales å bruke serverens IP-adresse eller domenenavn.",
"documentation": "Immich-integrasjonsdokumentasjon"
"documentation": "Immich-integrasjonsdokumentasjon",
"api_key_placeholder": "Skriv inn Immich API -tasten",
"enable_integration": "Aktiver integrasjon",
"immich_integration_desc": "Koble til Immich Photo Management Server",
"need_help": "Trenger du hjelp til å sette opp dette? \nSjekk ut"
},
"recomendations": {
"address": "Adresse",

View file

@ -309,7 +309,13 @@
"arrival_timezone": "Strefa czasowa przyjazdu",
"departure_timezone": "Strefa czasowa odlotu",
"arrival_date": "Data przyjazdu",
"departure_date": "Data wyjazdu"
"departure_date": "Data wyjazdu",
"coordinates": "Współrzędne",
"copy_coordinates": "Kopiuj współrzędne",
"sun_times": "Czasy słońca",
"sunrise": "Wschód słońca",
"sunset": "Zachód słońca",
"timed": "Czas"
},
"worldtravel": {
"country_list": "Lista krajów",
@ -450,7 +456,58 @@
"password_disabled": "Uwierzytelnianie hasła wyłączone",
"password_disabled_error": "Błąd wyłączający uwierzytelnianie hasła. \nUpewnij się, że dostawca społecznościowy lub OIDC jest powiązany z Twoim kontem.",
"password_enabled": "Włączone uwierzytelnianie hasła",
"password_enabled_error": "Błąd umożliwiający uwierzytelnianie hasła."
"password_enabled_error": "Błąd umożliwiający uwierzytelnianie hasła.",
"access_restricted": "Dostęp do ograniczenia",
"access_restricted_desc": "Funkcje jadminarne są dostępne tylko dla pracowników.",
"add_new_email": "Dodaj nowy e -mail",
"add_new_email_address": "Dodaj nowy adres e -mail",
"admin": "Admin",
"admin_panel_desc": "Uzyskaj dostęp do pełnego interfejsu administracyjnego",
"administration": "Administracja",
"administration_desc": "Narzędzia administracyjne i ustawienia",
"advanced": "Zaawansowany",
"advanced_settings": "Zaawansowane ustawienia",
"advanced_settings_desc": "Zaawansowane narzędzia konfiguracyjne i programistyczne",
"all_rights_reserved": "Wszelkie prawa zastrzeżone.",
"app_version": "Wersja aplikacji",
"confirm_new_password_desc": "Potwierdź nowe hasło",
"connected": "Połączony",
"debug_information": "Informacje o debugowaniu",
"disabled": "Wyłączony",
"disconnected": "Bezładny",
"email_management": "Zarządzanie e -mail",
"email_management_desc": "Zarządzaj adresami e -mail i statusem weryfikacji",
"emails": "E -maile",
"enabled": "Włączony",
"enter_current_password": "Wprowadź bieżące hasło",
"enter_first_name": "Wprowadź swoje imię",
"enter_last_name": "Wprowadź swoje nazwisko",
"enter_new_email": "Wprowadź nowy adres e -mail",
"enter_new_password": "Wprowadź nowe hasło",
"enter_username": "Wprowadź swoją nazwę użytkownika",
"integrations": "Integracje",
"integrations_desc": "Połącz usługi zewnętrzne, aby ulepszyć swoje wrażenia",
"license": "Licencja",
"mfa_desc": "Dodaj dodatkową warstwę bezpieczeństwa na swoje konto",
"mfa_is_enabled": "MFA jest włączona",
"pass_change_desc": "Zaktualizuj hasło konta, aby uzyskać lepsze bezpieczeństwo",
"password_auth": "Uwierzytelnianie hasła",
"password_login_disabled": "Wyłączanie logowania hasła",
"password_login_enabled": "Włączone logowanie hasła",
"profile_info": "Informacje o profilu",
"profile_info_desc": "Zaktualizuj swoje dane osobowe i zdjęcie profilowe",
"public_profile_desc": "Spraw, aby Twój profil był widoczny dla innych użytkowników",
"quick_actions": "Szybkie działania",
"region_updates": "Aktualizacje regionu",
"region_updates_desc": "Aktualizacja odwiedzonych regionów i miast",
"regular_user": "Zwykły użytkownik",
"security": "Bezpieczeństwo",
"settings_menu": "Menu Ustawienia",
"social_auth": "Uwierzytelnianie społeczne",
"social_auth_desc_1": "Zarządzaj opcjami logowania społecznościowego i ustawieniami haseł",
"social_auth_setup": "Konfiguracja uwierzytelniania społecznego",
"staff_status": "Status personelu",
"staff_user": "Użytkownik personelu"
},
"collection": {
"collection_created": "Kolekcja została pomyślnie utworzona!",
@ -602,7 +659,11 @@
"immich_desc": "Zintegruj swoje konto Immich z AdventureLog, aby móc przeszukiwać bibliotekę zdjęć i importować zdjęcia do swoich przygód.",
"immich_disabled": "Integracja z Immich została pomyślnie wyłączona!",
"documentation": "Dokumentacja integracji Immicha",
"localhost_note": "Uwaga: localhost najprawdopodobniej nie będzie działać, jeśli nie skonfigurujesz odpowiednio sieci dokerów. \nZalecane jest użycie adresu IP serwera lub nazwy domeny."
"localhost_note": "Uwaga: localhost najprawdopodobniej nie będzie działać, jeśli nie skonfigurujesz odpowiednio sieci dokerów. \nZalecane jest użycie adresu IP serwera lub nazwy domeny.",
"api_key_placeholder": "Wprowadź swój klucz API IMMICH",
"enable_integration": "Włącz integrację",
"immich_integration_desc": "Połącz swój serwer zarządzania zdjęciami Immich",
"need_help": "Potrzebujesz pomocy w konfiguracji? \nSprawdź"
},
"recomendations": {
"address": "Adres",

View file

@ -261,7 +261,13 @@
"arrival_timezone": "Ankomsttidszon",
"departure_timezone": "Avgångstidszon",
"arrival_date": "Ankomstdatum",
"departure_date": "Avgångsdatum"
"departure_date": "Avgångsdatum",
"coordinates": "Koordinater",
"copy_coordinates": "Kopieringskoordinater",
"sun_times": "Soltider",
"sunrise": "Soluppgång",
"sunset": "Solnedgång",
"timed": "Tidsinställd"
},
"home": {
"desc_1": "Upptäck, planera och utforska med lätthet",
@ -450,7 +456,58 @@
"password_disabled": "Lösenordsautentisering inaktiverad",
"password_disabled_error": "Fel Inaktivera lösenordsautentisering. \nSe till att en social eller OIDC -leverantör är länkad till ditt konto.",
"password_enabled": "Lösenordsautentisering aktiverad",
"password_enabled_error": "Fel som aktiverar lösenordsautentisering."
"password_enabled_error": "Fel som aktiverar lösenordsautentisering.",
"access_restricted": "Tillgång begränsad",
"access_restricted_desc": "Yadministrativa funktioner är endast tillgängliga för personal.",
"add_new_email": "Lägg till nytt e -postmeddelande",
"add_new_email_address": "Lägg till ny e -postadress",
"admin": "Administration",
"admin_panel_desc": "Åtkomst till hela administrationsgränssnittet",
"administration": "Administration",
"administration_desc": "Administrativa verktyg och inställningar",
"advanced": "Avancerad",
"advanced_settings": "Avancerade inställningar",
"advanced_settings_desc": "Avancerade konfigurations- och utvecklingsverktyg",
"all_rights_reserved": "Alla rättigheter reserverade.",
"app_version": "Appversion",
"confirm_new_password_desc": "Bekräfta nytt lösenord",
"connected": "Ansluten",
"debug_information": "Felsökningsinformation",
"disabled": "Funktionshindrad",
"disconnected": "Osammanhängande",
"email_management": "E -posthantering",
"email_management_desc": "Hantera dina e -postadresser och verifieringsstatus",
"emails": "E -postmeddelanden",
"enabled": "Aktiverad",
"enter_current_password": "Ange aktuellt lösenord",
"enter_first_name": "Ange ditt förnamn",
"enter_last_name": "Ange ditt efternamn",
"enter_new_email": "Ange en ny e -postadress",
"enter_new_password": "Ange ett nytt lösenord",
"enter_username": "Ange ditt användarnamn",
"integrations": "Integrationer",
"integrations_desc": "Anslut externa tjänster för att förbättra din upplevelse",
"license": "Licens",
"mfa_desc": "Lägg till ett extra lager av säkerhet till ditt konto",
"mfa_is_enabled": "MFA är aktiverad",
"pass_change_desc": "Uppdatera ditt kontolösenord för bättre säkerhet",
"password_auth": "Lösenordsautentisering",
"password_login_disabled": "Lösenordsinloggning inaktiverad",
"password_login_enabled": "Lösenordsinloggning aktiverad",
"profile_info": "Profilinformation",
"profile_info_desc": "Uppdatera dina personliga uppgifter och profilbild",
"public_profile_desc": "Gör din profil synlig för andra användare",
"quick_actions": "Snabbåtgärder",
"region_updates": "Regionuppdateringar",
"region_updates_desc": "Uppdatera besökta regioner och städer",
"regular_user": "Vanlig användare",
"security": "Säkerhet",
"settings_menu": "Inställningsmeny",
"social_auth": "Social autentisering",
"social_auth_desc_1": "Hantera sociala inloggningsalternativ och lösenordsinställningar",
"social_auth_setup": "Social autentiseringsinställning",
"staff_status": "Personalstatus",
"staff_user": "Personalanvändare"
},
"checklist": {
"add_item": "Lägg till objekt",
@ -602,7 +659,11 @@
"server_url": "Immich Server URL",
"update_integration": "Uppdatera integration",
"documentation": "Immich Integrationsdokumentation",
"localhost_note": "Obs: localhost kommer sannolikt inte att fungera om du inte har konfigurerat docker-nätverk i enlighet med detta. \nDet rekommenderas att använda serverns IP-adress eller domännamnet."
"localhost_note": "Obs: localhost kommer sannolikt inte att fungera om du inte har konfigurerat docker-nätverk i enlighet med detta. \nDet rekommenderas att använda serverns IP-adress eller domännamnet.",
"api_key_placeholder": "Ange din immich API -nyckel",
"enable_integration": "Aktivera integration",
"immich_integration_desc": "Anslut din immich fotohanteringsserver",
"need_help": "Behöver du hjälp med att ställa in detta? \nKolla in"
},
"recomendations": {
"address": "Adress",

View file

@ -309,7 +309,13 @@
"arrival_timezone": "到达时区",
"departure_timezone": "离开时区",
"arrival_date": "到达日期",
"departure_date": "出发日期"
"departure_date": "出发日期",
"coordinates": "坐标",
"copy_coordinates": "复制坐标",
"sun_times": "阳光时代",
"sunrise": "日出",
"sunset": "日落",
"timed": "时间"
},
"auth": {
"forgot_password": "忘记密码?",
@ -450,7 +456,58 @@
"password_disabled": "密码身份验证禁用",
"password_disabled_error": "错误禁用密码身份验证。\n确保将社交或OIDC提供商链接到您的帐户。",
"password_enabled": "启用密码身份验证",
"password_enabled_error": "启用密码身份验证的错误。"
"password_enabled_error": "启用密码身份验证的错误。",
"access_restricted": "访问受限制",
"access_restricted_desc": "Yadministrative功能仅适用于工作人员。",
"add_new_email": "添加新电子邮件",
"add_new_email_address": "添加新的电子邮件地址",
"admin": "行政",
"admin_panel_desc": "访问完整的管理接口",
"administration": "行政",
"administration_desc": "管理工具和设置",
"advanced": "先进的",
"advanced_settings": "高级设置",
"advanced_settings_desc": "高级配置和开发工具",
"all_rights_reserved": "版权所有。",
"app_version": "应用版本",
"confirm_new_password_desc": "确认新密码",
"connected": "连接",
"debug_information": "调试信息",
"disabled": "禁用",
"disconnected": "断开连接",
"email_management": "电子邮件管理",
"email_management_desc": "管理您的电子邮件地址和验证状态",
"emails": "电子邮件",
"enabled": "启用",
"enter_current_password": "输入当前密码",
"enter_first_name": "输入您的名字",
"enter_last_name": "输入您的姓氏",
"enter_new_email": "输入新的电子邮件地址",
"enter_new_password": "输入新密码",
"enter_username": "输入您的用户名",
"integrations": "集成",
"integrations_desc": "连接外部服务以增强您的体验",
"license": "执照",
"mfa_desc": "在您的帐户中添加额外的安全性",
"mfa_is_enabled": "MFA已启用",
"pass_change_desc": "更新您的帐户密码以获得更好的安全性",
"password_auth": "密码身份验证",
"password_login_disabled": "密码登录禁用",
"password_login_enabled": "启用密码登录",
"profile_info": "个人资料信息",
"profile_info_desc": "更新您的个人详细信息和个人资料图片",
"public_profile_desc": "让其他用户可以看到您的个人资料",
"regular_user": "常规用户",
"security": "安全",
"settings_menu": "设置菜单",
"social_auth": "社会身份验证",
"social_auth_desc_1": "管理社交登录选项和密码设置",
"social_auth_setup": "社会身份验证设置",
"staff_status": "员工身份",
"staff_user": "员工用户",
"quick_actions": "快速动作",
"region_updates": "区域更新",
"region_updates_desc": "更新访问了地区和城市"
},
"checklist": {
"add_item": "添加项目",
@ -602,7 +659,11 @@
"server_url": "Immich 服务器网址",
"update_integration": "更新集成",
"documentation": "Immich 集成文档",
"localhost_note": "注意:除非您相应地设置了 docker 网络,否则 localhost 很可能无法工作。\n建议使用服务器的IP地址或域名。"
"localhost_note": "注意:除非您相应地设置了 docker 网络,否则 localhost 很可能无法工作。\n建议使用服务器的IP地址或域名。",
"api_key_placeholder": "输入您的Immich API密钥",
"enable_integration": "启用集成",
"immich_integration_desc": "连接您的Immich照片管理服务器",
"need_help": "需要帮助设置吗?\n查看"
},
"recomendations": {
"address": "地址",

View file

@ -217,7 +217,7 @@
{#if adventure.visits.length > 0}
<div class="badge badge-lg badge-accent font-semibold px-4 py-3">
🎯 {adventure.visits.length}
{adventure.visits.length === 1 ? 'Visit' : 'Visits'}
{adventure.visits.length === 1 ? $t('adventures.visit') : $t('adventures.visits')}
</div>
{/if}
</div>
@ -274,7 +274,7 @@
<div class="lg:col-span-2 space-y-6 sm:space-y-8">
<!-- Author Info Card -->
{#if adventure.user}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<div class="flex items-center gap-4">
{#if adventure.user.profile_pic}
@ -312,9 +312,11 @@
{adventure.user.last_name || ''}
{/if}
</div>
<div class="flex items-center gap-2 text-sm opacity-70">
<div class="flex items-center gap-2 text-sm opacity-70 mt-1">
<div class="badge badge-sm">
{adventure.is_public ? '🌍 Public' : '🔒 Private'}
{adventure.is_public
? `🌍 ${$t('adventures.public')}`
: `🔒 ${$t('adventures.private')}`}
</div>
{#if data.props.collection}
<div class="badge badge-sm badge-outline">
@ -332,9 +334,9 @@
<!-- Description Card -->
{#if adventure.description}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">📝 Description</h2>
<h2 class="card-title text-2xl mb-4">📝 {$t('adventures.description')}</h2>
<article class="prose max-w-none">
{@html DOMPurify.sanitize(renderMarkdown(adventure.description))}
</article>
@ -344,9 +346,9 @@
<!-- Visits Timeline -->
{#if adventure.visits.length > 0}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h2 class="card-title text-2xl mb-6">🎯 Visit History</h2>
<h2 class="card-title text-2xl mb-6">🎯 {$t('adventures.visits')}</h2>
<div class="space-y-4">
{#each adventure.visits as visit, index}
<div class="flex gap-4">
@ -369,18 +371,18 @@
{:else}
<div class="space-y-2">
<div class="flex items-center gap-2">
<span class="badge badge-primary">🕓 Timed</span>
<span class="badge badge-primary">🕓 {$t('adventures.timed')}</span>
{#if visit.timezone}
<span class="badge badge-outline">{visit.timezone}</span>
{/if}
</div>
<div class="text-sm">
{#if visit.timezone}
<strong>Start:</strong>
<strong>{$t('adventures.start')}:</strong>
{DateTime.fromISO(visit.start_date, { zone: 'utc' })
.setZone(visit.timezone)
.toLocaleString(DateTime.DATETIME_MED)}<br />
<strong>End:</strong>
<strong>{$t('adventures.end')}:</strong>
{DateTime.fromISO(visit.end_date, { zone: 'utc' })
.setZone(visit.timezone)
.toLocaleString(DateTime.DATETIME_MED)}
@ -398,7 +400,7 @@
</div>
{/if}
{#if visit.notes}
<div class="mt-3 p-3 bg-base-100 rounded-lg">
<div class="mt-3 p-3 bg-base-200 rounded-lg">
<p class="text-sm italic">"{visit.notes}"</p>
</div>
{/if}
@ -414,9 +416,9 @@
<!-- Map Section -->
{#if (adventure.longitude && adventure.latitude) || geojson}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h2 class="card-title text-2xl mb-4">🗺️ Location & Route</h2>
<h2 class="card-title text-2xl mb-4">🗺️ {$t('adventures.location')}</h2>
{#if adventure.longitude && adventure.latitude}
<!-- Compact Coordinates Card -->
@ -425,20 +427,23 @@
>
<div class="card-body p-4">
<div class="flex items-center justify-between mb-3">
<h3 class="text-lg font-bold flex items-center gap-2">🎯 Coordinates</h3>
<div class="badge badge-primary badge-sm">GPS</div>
<h3 class="text-lg font-bold flex items-center gap-2">
🎯 {$t('adventures.coordinates')}
</h3>
</div>
<div class="grid grid-cols-2 gap-3 mb-4">
<div class="text-center p-2 bg-base-100/70 rounded border border-primary/10">
<div class="text-xs text-primary/70 uppercase tracking-wide">Latitude</div>
<div class="text-center p-2 bg-base-200/70 rounded border border-primary/10">
<div class="text-xs text-primary/70 uppercase tracking-wide">
{$t('adventures.latitude')}
</div>
<div class="text-lg font-bold text-primary">{adventure.latitude}°</div>
</div>
<div
class="text-center p-2 bg-base-100/70 rounded border border-secondary/10"
class="text-center p-2 bg-base-200/70 rounded border border-secondary/10"
>
<div class="text-xs text-secondary/70 uppercase tracking-wide">
Longitude
{$t('adventures.longitude')}
</div>
<div class="text-lg font-bold text-secondary">{adventure.longitude}°</div>
</div>
@ -452,13 +457,15 @@
class="btn btn-xs btn-outline hover:btn-info"
on:click={() => {
if (adventure.country && adventure.region) {
goto(`/worldtravel/${adventure.country}/${adventure.region}`);
goto(
`/worldtravel/${adventure.country.country_code}/${adventure.region.id}`
);
} else if (adventure.country) {
goto(`/worldtravel/${adventure.country}`);
goto(`/worldtravel/${adventure.country.country_code}`);
}
}}
>
🏙️ {adventure.city}
🏙️ {adventure.city.name}
</button>
{/if}
{#if adventure.region}
@ -466,21 +473,23 @@
class="btn btn-xs btn-outline hover:btn-warning"
on:click={() => {
if (adventure.country && adventure.region) {
goto(`/worldtravel/${adventure.country}/${adventure.region}`);
goto(
`/worldtravel/${adventure.country.country_code}/${adventure.region.id}`
);
} else if (adventure.country) {
goto(`/worldtravel/${adventure.country}`);
goto(`/worldtravel/${adventure.country.country_code}`);
}
}}
>
🗺️ {adventure.region}
🗺️ {adventure.region.name}
</button>
{/if}
{#if adventure.country}
<button
class="btn btn-xs btn-outline hover:btn-success"
on:click={() => goto(`/worldtravel/${adventure.country}`)}
on:click={() => goto(`/worldtravel/${adventure.country?.country_code}`)}
>
🌎 {adventure.country}
🌎 {adventure.country.name}
</button>
{/if}
</div>
@ -523,7 +532,7 @@
`${adventure.latitude}, ${adventure.longitude}`
)}
>
📋 Copy Coords
📋 {$t('adventures.copy_coordinates')}
</button>
<button
class="btn btn-xs btn-ghost flex-1 text-xs"
@ -532,7 +541,7 @@
`https://www.google.com/maps/@${adventure.latitude},${adventure.longitude},15z`
)}
>
🔗 Copy Link
🔗 {$t('adventures.copy_link')}
</button>
</div>
</div>
@ -568,9 +577,8 @@
</p>
{#if adventure.visits.length > 0}
<div class="text-xs text-black">
{adventure.visits.length} visit{adventure.visits.length !== 1
? 's'
: ''}
{adventure.visits.length}
{$t('adventures.visit')}{adventure.visits.length !== 1 ? 's' : ''}
</div>
{/if}
</div>
@ -587,13 +595,13 @@
<!-- Right Column - Sidebar -->
<div class="space-y-4 sm:space-y-6">
<!-- Quick Info Card -->
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h3 class="card-title text-lg mb-4"> Quick Info</h3>
<h3 class="card-title text-lg mb-4"> {$t('adventures.basic_information')}</h3>
<div class="space-y-3">
{#if adventure.activity_types && adventure.activity_types?.length > 0}
<div>
<div class="text-sm opacity-70 mb-1">Activities</div>
<div class="text-sm opacity-70 mb-1">{$t('adventures.tags')}</div>
<div class="flex flex-wrap gap-1">
{#each adventure.activity_types as activity}
<span class="badge badge-sm badge-outline">{activity}</span>
@ -603,7 +611,7 @@
{/if}
{#if adventure.link}
<div>
<div class="text-sm opacity-70 mb-1">External Link</div>
<div class="text-sm opacity-70 mb-1">{$t('adventures.link')}</div>
<a
href={adventure.link}
class="link link-primary text-sm break-all"
@ -621,10 +629,10 @@
<!-- Sunrise/Sunset -->
{#if adventure.sun_times && adventure.sun_times.length > 0}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h3 class="card-title text-lg mb-4">
🌅 Sun Times
🌅 {$t('adventures.sun_times')}
<WeatherSunset class="w-5 h-5" />
</h3>
<div class="space-y-3">
@ -634,7 +642,7 @@
{new Date(sun_time.date).toLocaleDateString()}
</div>
<div class="text-xs opacity-70">
Sunrise: {sun_time.sunrise} • Sunset: {sun_time.sunset}
{$t('adventures.sunrise')}: {sun_time.sunrise}{$t('adventures.sunset')}: {sun_time.sunset}
</div>
</div>
{/each}
@ -645,10 +653,10 @@
<!-- Attachments -->
{#if adventure.attachments && adventure.attachments.length > 0}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h3 class="card-title text-lg mb-4">
📎 Attachments
📎 {$t('adventures.attachments')}
<div class="tooltip" data-tip={$t('adventures.gpx_tip')}>
<LightbulbOn class="w-4 h-4 opacity-60" />
</div>
@ -664,9 +672,9 @@
<!-- Additional Images -->
{#if adventure.images && adventure.images.length > 1}
<div class="card bg-base-100 shadow-xl">
<div class="card bg-base-200 shadow-xl">
<div class="card-body">
<h3 class="card-title text-lg mb-4">🖼️ Gallery</h3>
<h3 class="card-title text-lg mb-4">🖼️ {$t('adventures.images')}</h3>
<div class="grid grid-cols-2 sm:grid-cols-3 gap-2">
{#each adventure.images as image}
<div class="relative group">
@ -680,7 +688,7 @@
></div>
{#if image.is_primary}
<div class="absolute top-1 right-1">
<span class="badge badge-primary badge-xs">Primary</span>
<span class="badge badge-primary badge-xs">{$t('settings.primary')}</span>
</div>
{/if}
</div>

View file

@ -34,12 +34,12 @@
let isMFAModalOpen: boolean = false;
const sections = [
{ id: 'profile', icon: '👤', label: 'Profile' },
{ id: 'security', icon: '🔒', label: 'Security' },
{ id: 'emails', icon: '📧', label: 'Emails' },
{ id: 'integrations', icon: '🔗', label: 'Integrations' },
{ id: 'admin', icon: '⚙️', label: 'Admin' },
{ id: 'advanced', icon: '🛠️', label: 'Advanced' }
{ id: 'profile', icon: '👤', label: () => $t('navbar.profile') },
{ id: 'security', icon: '🔒', label: () => $t('settings.security') },
{ id: 'emails', icon: '📧', label: () => $t('settings.emails') },
{ id: 'integrations', icon: '🔗', label: () => $t('settings.integrations') },
{ id: 'admin', icon: '⚙️', label: () => $t('settings.admin') },
{ id: 'advanced', icon: '🛠️', label: () => $t('settings.advanced') }
];
onMount(async () => {
@ -263,11 +263,10 @@
<div class="flex items-center justify-between">
<div>
<h1
class="text-4xl font-bold bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent"
class="text-4xl font-bold bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent pb-1"
>
{$t('settings.settings_page')}
</h1>
<p class="text-base-content/70 mt-2">Manage your account preferences and integrations</p>
</div>
</div>
</div>
@ -278,7 +277,9 @@
<!-- Sidebar Navigation -->
<div class="lg:w-1/4">
<div class="bg-base-100 rounded-2xl shadow-xl p-6 sticky top-8">
<h3 class="font-semibold text-lg mb-4 text-base-content/80">Settings Menu</h3>
<h3 class="font-semibold text-lg mb-4 text-base-content/80">
{$t('settings.settings_menu')}
</h3>
<ul class="menu menu-vertical w-full space-y-1">
{#each sections as section}
<li>
@ -290,7 +291,7 @@
on:click={() => (activeSection = section.id)}
>
<span class="text-xl">{section.icon}</span>
<span class="font-medium">{section.label}</span>
<span class="font-medium">{section.label()}</span>
</button>
</li>
{/each}
@ -309,9 +310,9 @@
<span class="text-2xl">👤</span>
</div>
<div>
<h2 class="text-2xl font-bold">Profile Information</h2>
<h2 class="text-2xl font-bold">{$t('settings.profile_info')}</h2>
<p class="text-base-content/70">
Update your personal details and profile picture
{$t('settings.profile_info_desc')}
</p>
</div>
</div>
@ -325,6 +326,7 @@
>
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('auth.username')}</span>
</label>
@ -333,11 +335,12 @@
bind:value={user.username}
name="username"
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter your username"
placeholder={$t('settings.enter_username')}
/>
</div>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('auth.first_name')}</span>
</label>
@ -346,11 +349,12 @@
bind:value={user.first_name}
name="first_name"
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter your first name"
placeholder={$t('settings.enter_first_name')}
/>
</div>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('auth.last_name')}</span>
</label>
@ -359,11 +363,12 @@
bind:value={user.last_name}
name="last_name"
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter your last name"
placeholder={$t('settings.enter_last_name')}
/>
</div>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('auth.profile_picture')}</span>
</label>
@ -387,7 +392,7 @@
<div>
<span class="label-text font-medium">{$t('auth.public_profile')}</span>
<p class="text-sm text-base-content/60">
Make your profile visible to other users
{$t('settings.public_profile_desc')}
</p>
</div>
</label>
@ -411,9 +416,9 @@
<span class="text-2xl">🔐</span>
</div>
<div>
<h2 class="text-2xl font-bold">Change Password</h2>
<h2 class="text-2xl font-bold">{$t('settings.change_password')}</h2>
<p class="text-base-content/70">
Update your account password for better security
{$t('settings.pass_change_desc')}
</p>
</div>
</div>
@ -421,6 +426,7 @@
<form method="post" action="?/changePassword" use:enhance class="space-y-6">
{#if user.has_password}
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('settings.current_password')}</span
>
@ -429,13 +435,14 @@
type="password"
name="current_password"
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter current password"
placeholder={$t('settings.enter_current_password')}
/>
</div>
{/if}
<div class="grid grid-cols-1 md:grid-cols-2 gap-6">
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">{$t('settings.new_password')}</span>
</label>
@ -443,11 +450,12 @@
type="password"
name="password1"
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter new password"
placeholder={$t('settings.enter_new_password')}
/>
</div>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium"
>{$t('settings.confirm_new_password')}</span
@ -457,7 +465,7 @@
type="password"
name="password2"
class="input input-bordered input-primary focus:input-primary"
placeholder="Confirm new password"
placeholder={$t('settings.confirm_new_password')}
/>
</div>
</div>
@ -499,9 +507,9 @@
<span class="text-2xl">🛡️</span>
</div>
<div>
<h2 class="text-2xl font-bold">Two-Factor Authentication</h2>
<h2 class="text-2xl font-bold">{$t('settings.mfa_page_title')}</h2>
<p class="text-base-content/70">
Add an extra layer of security to your account
{$t('settings.mfa_desc')}
</p>
</div>
</div>
@ -514,15 +522,15 @@
: 'badge-error'} gap-2"
>
{#if data.props.authenticators}
Enabled
{$t('settings.enabled')}
{:else}
Disabled
{$t('settings.disabled')}
{/if}
</div>
<span class="font-medium">
{data.props.authenticators
? 'MFA is currently enabled'
: 'MFA is not enabled'}
? $t('settings.mfa_is_enabled')
: $t('settings.mfa_not_enabled')}
</span>
</div>
@ -530,17 +538,19 @@
{#if !emails.some((e) => e.verified)}
<div
class="tooltip tooltip-warning"
data-tip="You need a verified email first"
data-tip={$t('settings.no_verified_email_warning')}
>
<button class="btn btn-disabled">Enable MFA</button>
<button class="btn btn-disabled">{$t('settings.enable_mfa')}</button>
</div>
{:else}
<button class="btn btn-primary" on:click={() => (isMFAModalOpen = true)}>
Enable MFA
{$t('settings.enable_mfa')}
</button>
{/if}
{:else}
<button class="btn btn-warning" on:click={disableMfa}> Disable MFA </button>
<button class="btn btn-warning" on:click={disableMfa}>
{$t('settings.disable_mfa')}
</button>
{/if}
</div>
@ -572,9 +582,9 @@
<span class="text-2xl">🔗</span>
</div>
<div>
<h2 class="text-2xl font-bold">Social Authentication</h2>
<h2 class="text-2xl font-bold">{$t('settings.social_auth')}</h2>
<p class="text-base-content/70">
Manage social login options and password settings
{$t('settings.social_auth_desc_1')}
</p>
</div>
</div>
@ -583,18 +593,20 @@
<div class="p-4 bg-base-200 rounded-xl">
<div class="flex items-center justify-between">
<div>
<h3 class="font-semibold">Password Authentication</h3>
<h3 class="font-semibold">{$t('settings.password_auth')}</h3>
<p class="text-sm text-base-content/70">
{user.disable_password
? 'Password login is disabled'
: 'Password login is enabled'}
? $t('settings.password_login_disabled')
: $t('settings.password_login_enabled')}
</p>
</div>
<div class="flex items-center gap-4">
<div
class="badge {user.disable_password ? 'badge-error' : 'badge-success'}"
>
{user.disable_password ? 'Disabled' : 'Enabled'}
{user.disable_password
? $t('settings.disabled')
: $t('settings.enabled')}
</div>
<input
type="checkbox"
@ -645,9 +657,9 @@
<span class="text-2xl">📧</span>
</div>
<div>
<h2 class="text-2xl font-bold">Email Management</h2>
<h2 class="text-2xl font-bold">{$t('settings.email_management')}</h2>
<p class="text-base-content/70">
Manage your email addresses and verification status
{$t('settings.email_management_desc')}
</p>
</div>
</div>
@ -662,12 +674,16 @@
<span class="font-medium">{email.email}</span>
<div class="flex gap-2">
{#if email.verified}
<div class="badge badge-success gap-1">✅ Verified</div>
<div class="badge badge-success gap-1">
{$t('settings.verified')}
</div>
{:else}
<div class="badge badge-error gap-1">❌ Not Verified</div>
{/if}
{#if email.primary}
<div class="badge badge-primary gap-1">⭐ Primary</div>
<div class="badge badge-primary gap-1">
{$t('settings.primary')}
</div>
{/if}
</div>
</div>
@ -677,7 +693,7 @@
class="btn btn-sm btn-secondary"
on:click={() => verifyEmail(email)}
>
Verify
{$t('settings.verify')}
</button>
{/if}
{#if !email.primary && email.verified}
@ -685,14 +701,14 @@
class="btn btn-sm btn-primary"
on:click={() => primaryEmail(email)}
>
Make Primary
{$t('settings.make_primary')}
</button>
{/if}
<button
class="btn btn-sm btn-warning"
on:click={() => removeEmail(email)}
>
Remove
{$t('adventures.remove')}
</button>
</div>
</div>
@ -707,21 +723,24 @@
{/if}
<!-- Add New Email -->
<div class="divider">Add New Email</div>
<div class="divider">{$t('settings.add_new_email')}</div>
<form class="space-y-4" on:submit|preventDefault={addEmail}>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">New Email Address</span>
<span class="label-text font-medium"
>{$t('settings.add_new_email_address')}</span
>
</label>
<input
type="email"
bind:value={new_email}
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter new email address"
placeholder={$t('settings.enter_new_email')}
required
/>
</div>
<button class="btn btn-primary w-full"> Add Email </button>
<button class="btn btn-primary w-full"> {$t('settings.add_email')} </button>
</form>
</div>
{/if}
@ -734,9 +753,9 @@
<span class="text-2xl">🔗</span>
</div>
<div>
<h2 class="text-2xl font-bold">Integrations</h2>
<h2 class="text-2xl font-bold">{$t('settings.integrations')}</h2>
<p class="text-base-content/70">
Connect external services to enhance your experience
{$t('settings.integrations_desc')}
</p>
</div>
</div>
@ -746,15 +765,15 @@
<div class="flex items-center gap-4 mb-4">
<img src={ImmichLogo} alt="Immich" class="w-8 h-8" />
<div>
<h3 class="text-xl font-bold">Immich Integration</h3>
<h3 class="text-xl font-bold">{$t('immich.immich_integration')}</h3>
<p class="text-sm text-base-content/70">
Connect your Immich photo management server
{$t('immich.immich_integration_desc')}
</p>
</div>
{#if immichIntegration}
<div class="badge badge-success ml-auto">Connected</div>
<div class="badge badge-success ml-auto">{$t('settings.connected')}</div>
{:else}
<div class="badge badge-error ml-auto">Disconnected</div>
<div class="badge badge-error ml-auto">{$t('settings.disconnected')}</div>
{/if}
</div>
@ -766,10 +785,10 @@
if (immichIntegration) newImmichIntegration = immichIntegration;
}}
>
✏️ Edit
✏️ {$t('lodging.edit')}
</button>
<button class="btn btn-error" on:click={disableImmichIntegration}>
Disable
{$t('immich.disable')}
</button>
</div>
{/if}
@ -777,8 +796,9 @@
{#if !immichIntegration || newImmichIntegration.id}
<div class="space-y-4">
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">Server URL</span>
<span class="label-text font-medium">{$t('immich.server_url')}</span>
</label>
<input
type="url"
@ -801,30 +821,33 @@
</div>
<div class="form-control">
<!-- svelte-ignore a11y-label-has-associated-control -->
<label class="label">
<span class="label-text font-medium">API Key</span>
<span class="label-text font-medium">{$t('immich.api_key')}</span>
</label>
<input
type="password"
bind:value={newImmichIntegration.api_key}
class="input input-bordered input-primary focus:input-primary"
placeholder="Enter your Immich API key"
placeholder={$t('immich.api_key_placeholder')}
/>
</div>
<button on:click={enableImmichIntegration} class="btn btn-primary w-full">
{!immichIntegration?.id ? '🔗 Enable Integration' : '💾 Update Integration'}
{!immichIntegration?.id
? `🔗 ${$t('immich.enable_integration')}`
: `💾 ${$t('immich.update_integration')}`}
</button>
</div>
{/if}
<div class="mt-4 p-4 bg-info/10 rounded-lg">
<p class="text-sm text-info-content">
📖 Need help setting this up? Check out the
<p class="text-sm">
📖 {$t('immich.need_help')}
<a
class="link link-primary"
href="https://adventurelog.app/docs/configuration/immich_integration.html"
target="_blank">documentation</a
target="_blank">{$t('navbar.documentation')}</a
>
</p>
</div>
@ -840,8 +863,8 @@
<span class="text-2xl">⚙️</span>
</div>
<div>
<h2 class="text-2xl font-bold">Administration</h2>
<p class="text-base-content/70">Administrative tools and settings</p>
<h2 class="text-2xl font-bold">{$t('settings.administration')}</h2>
<p class="text-base-content/70">{$t('settings.administration_desc')}</p>
</div>
</div>
@ -851,12 +874,12 @@
>
<div class="card-body text-center">
<div class="text-4xl mb-4">🛠️</div>
<h3 class="card-title justify-center">Admin Panel</h3>
<h3 class="card-title justify-center">{$t('navbar.admin_panel')}</h3>
<p class="text-sm text-base-content/70 mb-4">
Access the full administration interface
{$t('settings.admin_panel_desc')}
</p>
<a class="btn btn-primary" href={`${public_url}/admin/`} target="_blank">
Launch Admin Panel
{$t('settings.launch_administration_panel')}
</a>
</div>
</div>
@ -866,12 +889,12 @@
>
<div class="card-body text-center">
<div class="text-4xl mb-4">📍</div>
<h3 class="card-title justify-center">Region Updates</h3>
<h3 class="card-title justify-center">{$t('settings.region_updates')}</h3>
<p class="text-sm text-base-content/70 mb-4">
Update visited regions and cities
{$t('settings.region_updates_desc')}
</p>
<button class="btn btn-info" on:click={checkVisitedRegions}>
Update Regions
{$t('adventures.update_visited_regions')}
</button>
</div>
</div>
@ -880,9 +903,9 @@
{:else if activeSection === 'admin' && !user.is_staff}
<div class="bg-base-100 rounded-2xl shadow-xl p-8 text-center">
<div class="text-6xl mb-4">🔒</div>
<h2 class="text-2xl font-bold mb-2">Access Restricted</h2>
<h2 class="text-2xl font-bold mb-2">{$t('settings.access_restricted')}</h2>
<p class="text-base-content/70">
Administrative features are only available to staff members.
{$t('settings.access_restricted_desc')}
</p>
</div>
{/if}
@ -897,15 +920,17 @@
<span class="text-2xl">🛠️</span>
</div>
<div>
<h2 class="text-2xl font-bold">Advanced Settings</h2>
<p class="text-base-content/70">Advanced configuration and development tools</p>
<h2 class="text-2xl font-bold">{$t('settings.advanced_settings')}</h2>
<p class="text-base-content/70">
{$t('settings.advanced_settings_desc')}
</p>
</div>
</div>
<div class="space-y-6">
<!-- Social Auth Configuration -->
<div class="p-6 bg-base-200 rounded-xl">
<h3 class="text-lg font-semibold mb-4">Social Authentication Setup</h3>
<h3 class="text-lg font-semibold mb-4">{$t('settings.social_auth_setup')}</h3>
<p class="text-base-content/70 mb-4">{$t('settings.social_auth_desc')}</p>
<div class="alert alert-info">
@ -935,22 +960,22 @@
<!-- Debug Information -->
<div class="p-6 bg-base-200 rounded-xl">
<h3 class="text-lg font-semibold mb-4">Debug Information</h3>
<h3 class="text-lg font-semibold mb-4">{$t('settings.debug_information')}</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4 text-sm font-mono">
<div class="p-3 bg-base-300 rounded-lg">
<span class="text-base-content/60">User UUID:</span>
<span class="text-base-content/60">UUID:</span>
<br />
<span class="text-primary font-semibold">{user.uuid}</span>
</div>
<div class="p-3 bg-base-300 rounded-lg">
<span class="text-base-content/60">Staff Status:</span>
<span class="text-base-content/60">{$t('settings.staff_status')}:</span>
<br />
<span class="badge {user.is_staff ? 'badge-success' : 'badge-error'}">
{user.is_staff ? 'Staff User' : 'Regular User'}
{user.is_staff ? $t('settings.staff_user') : $t('settings.regular_user')}
</span>
</div>
<div class="p-3 bg-base-300 rounded-lg">
<span class="text-base-content/60">App Version:</span>
<span class="text-base-content/60">{$t('settings.app_version')}:</span>
<br />
<span class="text-secondary font-semibold">{appTitle} {appVersion}</span>
</div>
@ -958,7 +983,7 @@
<span class="text-base-content/60">Profile Type:</span>
<br />
<span class="badge {user.public_profile ? 'badge-info' : 'badge-ghost'}">
{user.public_profile ? 'Public' : 'Private'}
{user.public_profile ? $t('adventures.public') : $t('adventures.private')}
</span>
</div>
</div>
@ -966,10 +991,10 @@
<!-- Quick Actions -->
<div class="p-6 bg-base-200 rounded-xl">
<h3 class="text-lg font-semibold mb-4">Quick Actions</h3>
<h3 class="text-lg font-semibold mb-4">{$t('settings.quick_actions')}</h3>
<div class="grid grid-cols-1 md:grid-cols-2 gap-4">
<button class="btn btn-outline btn-info" on:click={checkVisitedRegions}>
📍 Update Visited Regions
📍 {$t('adventures.update_visited_regions')}
</button>
{#if user.is_staff}
<a
@ -977,7 +1002,7 @@
href={`${public_url}/admin/`}
target="_blank"
>
⚙️ Open Admin Panel
⚙️ {$t('settings.launch_administration_panel')}
</a>
{/if}
</div>
@ -986,14 +1011,14 @@
<!-- Developer message and thanks -->
<div class="p-6 bg-base-200 rounded-xl">
<div class="text-center space-y-3">
<h4 class="font-medium">About AdventureLog</h4>
<h4 class="font-medium">{$t('about.about')} AdventureLog</h4>
<p>
AdventureLog is open-source software released under the GPL-3.0 License.
{$t('about.license')}
</p>
<p class="text-sm text-base-content/70">
© {copyrightYear}
<a href="https://seanmorley.com" target="_blank" class="link">Sean Morley</a
>. All rights reserved.
>. {$t('settings.all_rights_reserved')}
</p>
<div class="flex justify-center gap-3 mt-2">
<a
@ -1001,14 +1026,14 @@
target="_blank"
class="link link-primary text-sm"
>
GitHub Repository
GitHub
</a>
<a
href="https://github.com/seanmorley15/AdventureLog/blob/main/LICENSE"
target="_blank"
class="link link-secondary text-sm"
>
License Information
{$t('settings.license')}
</a>
</div>
</div>