diff --git a/frontend/messages/da.json b/frontend/messages/da.json
new file mode 100644
index 00000000..627b058e
--- /dev/null
+++ b/frontend/messages/da.json
@@ -0,0 +1,359 @@
+{
+ "$schema": "https://inlang.com/schema/inlang-message-format",
+ "my_account": "My Account",
+ "logout": "Logout",
+ "confirm": "Confirm",
+ "key": "Key",
+ "value": "Value",
+ "remove_custom_claim": "Remove custom claim",
+ "add_custom_claim": "Add custom claim",
+ "add_another": "Add another",
+ "select_a_date": "Select a date",
+ "select_file": "Select File",
+ "profile_picture": "Profile Picture",
+ "profile_picture_is_managed_by_ldap_server": "The profile picture is managed by the LDAP server and cannot be changed here.",
+ "click_profile_picture_to_upload_custom": "Click on the profile picture to upload a custom one from your files.",
+ "image_should_be_in_format": "The image should be in PNG or JPEG format.",
+ "items_per_page": "Items per page",
+ "no_items_found": "No items found",
+ "search": "Search...",
+ "expand_card": "Expand card",
+ "copied": "Copied",
+ "click_to_copy": "Click to copy",
+ "something_went_wrong": "Something went wrong",
+ "go_back_to_home": "Go back to home",
+ "dont_have_access_to_your_passkey": "Don't have access to your passkey?",
+ "login_background": "Login background",
+ "logo": "Logo",
+ "login_code": "Login Code",
+ "create_a_login_code_to_sign_in_without_a_passkey_once": "Create a login code that the user can use to sign in without a passkey once.",
+ "one_hour": "1 hour",
+ "twelve_hours": "12 hours",
+ "one_day": "1 day",
+ "one_week": "1 week",
+ "one_month": "1 month",
+ "expiration": "Expiration",
+ "generate_code": "Generate Code",
+ "name": "Name",
+ "browser_unsupported": "Browser unsupported",
+ "this_browser_does_not_support_passkeys": "This browser doesn't support passkeys. Please use an alternative sign in method.",
+ "an_unknown_error_occurred": "An unknown error occurred",
+ "authentication_process_was_aborted": "The authentication process was aborted",
+ "error_occurred_with_authenticator": "An error occurred with the authenticator",
+ "authenticator_does_not_support_discoverable_credentials": "The authenticator does not support discoverable credentials",
+ "authenticator_does_not_support_resident_keys": "The authenticator does not support resident keys",
+ "passkey_was_previously_registered": "This passkey was previously registered",
+ "authenticator_does_not_support_any_of_the_requested_algorithms": "The authenticator does not support any of the requested algorithms",
+ "authenticator_timed_out": "The authenticator timed out",
+ "critical_error_occurred_contact_administrator": "A critical error occurred. Please contact your administrator.",
+ "sign_in_to": "Sign in to {name}",
+ "client_not_found": "Client not found",
+ "client_wants_to_access_the_following_information": "{client} wants to access the following information:",
+ "do_you_want_to_sign_in_to_client_with_your_app_name_account": "Do you want to sign in to {client} with your {appName} account?",
+ "email": "Email",
+ "view_your_email_address": "View your email address",
+ "profile": "Profile",
+ "view_your_profile_information": "View your profile information",
+ "groups": "Groups",
+ "view_the_groups_you_are_a_member_of": "View the groups you are a member of",
+ "cancel": "Cancel",
+ "sign_in": "Sign in",
+ "try_again": "Try again",
+ "client_logo": "Client Logo",
+ "sign_out": "Sign out",
+ "do_you_want_to_sign_out_of_pocketid_with_the_account": "Do you want to sign out of {appName} with the account {username}?",
+ "sign_in_to_appname": "Sign in to {appName}",
+ "please_try_to_sign_in_again": "Please try to sign in again.",
+ "authenticate_yourself_with_your_passkey_to_access_the_admin_panel": "Authenticate yourself with your passkey to access the admin panel.",
+ "authenticate": "Authenticate",
+ "appname_setup": "{appName} Setup",
+ "please_try_again": "Please try again.",
+ "you_are_about_to_sign_in_to_the_initial_admin_account": "You're about to sign in to the initial admin account. Anyone with this link can access the account until a passkey is added. Please set up a passkey as soon as possible to prevent unauthorized access.",
+ "continue": "Continue",
+ "alternative_sign_in": "Alternative Sign In",
+ "if_you_do_not_have_access_to_your_passkey_you_can_sign_in_using_one_of_the_following_methods": "If you don't have access to your passkey, you can sign in using one of the following methods.",
+ "use_your_passkey_instead": "Use your passkey instead?",
+ "email_login": "Email Login",
+ "enter_a_login_code_to_sign_in": "Enter a login code to sign in.",
+ "request_a_login_code_via_email": "Request a login code via email.",
+ "go_back": "Go back",
+ "an_email_has_been_sent_to_the_provided_email_if_it_exists_in_the_system": "An email has been sent to the provided email, if it exists in the system.",
+ "enter_code": "Enter code",
+ "enter_your_email_address_to_receive_an_email_with_a_login_code": "Enter your email address to receive an email with a login code.",
+ "your_email": "Your email",
+ "submit": "Submit",
+ "enter_the_code_you_received_to_sign_in": "Enter the code you received to sign in.",
+ "code": "Code",
+ "invalid_redirect_url": "Invalid redirect URL",
+ "audit_log": "Audit Log",
+ "users": "Users",
+ "user_groups": "User Groups",
+ "oidc_clients": "OIDC Clients",
+ "api_keys": "API Keys",
+ "application_configuration": "Application Configuration",
+ "settings": "Settings",
+ "update_pocket_id": "Update Pocket ID",
+ "powered_by": "Powered by",
+ "see_your_account_activities_from_the_last_3_months": "See your account activities from the last 3 months.",
+ "time": "Time",
+ "event": "Event",
+ "approximate_location": "Approximate Location",
+ "ip_address": "IP Address",
+ "device": "Device",
+ "client": "Client",
+ "unknown": "Unknown",
+ "account_details_updated_successfully": "Account details updated successfully",
+ "profile_picture_updated_successfully": "Profile picture updated successfully. It may take a few minutes to update.",
+ "account_settings": "Account Settings",
+ "passkey_missing": "Passkey missing",
+ "please_provide_a_passkey_to_prevent_losing_access_to_your_account": "Please add a passkey to prevent losing access to your account.",
+ "single_passkey_configured": "Single Passkey Configured",
+ "it_is_recommended_to_add_more_than_one_passkey": "It is recommended to add more than one passkey to avoid losing access to your account.",
+ "account_details": "Account Details",
+ "passkeys": "Passkeys",
+ "manage_your_passkeys_that_you_can_use_to_authenticate_yourself": "Manage your passkeys that you can use to authenticate yourself.",
+ "add_passkey": "Add Passkey",
+ "create_a_one_time_login_code_to_sign_in_from_a_different_device_without_a_passkey": "Create a one-time login code to sign in from a different device without a passkey.",
+ "create": "Create",
+ "first_name": "First name",
+ "last_name": "Last name",
+ "username": "Username",
+ "save": "Save",
+ "username_can_only_contain": "Username can only contain lowercase letters, numbers, underscores, dots, hyphens, and '@' symbols",
+ "sign_in_using_the_following_code_the_code_will_expire_in_minutes": "Sign in using the following code. The code will expire in 15 minutes.",
+ "or_visit": "or visit",
+ "added_on": "Added on",
+ "rename": "Rename",
+ "delete": "Delete",
+ "are_you_sure_you_want_to_delete_this_passkey": "Are you sure you want to delete this passkey?",
+ "passkey_deleted_successfully": "Passkey deleted successfully",
+ "delete_passkey_name": "Delete {passkeyName}",
+ "passkey_name_updated_successfully": "Passkey name updated successfully",
+ "name_passkey": "Name Passkey",
+ "name_your_passkey_to_easily_identify_it_later": "Name your passkey to easily identify it later.",
+ "create_api_key": "Create API Key",
+ "add_a_new_api_key_for_programmatic_access": "Add a new API key for programmatic access.",
+ "add_api_key": "Add API Key",
+ "manage_api_keys": "Manage API Keys",
+ "api_key_created": "API Key Created",
+ "for_security_reasons_this_key_will_only_be_shown_once": "For security reasons, this key will only be shown once. Please store it securely.",
+ "description": "Description",
+ "api_key": "API Key",
+ "close": "Close",
+ "name_to_identify_this_api_key": "Name to identify this API key.",
+ "expires_at": "Expires At",
+ "when_this_api_key_will_expire": "When this API key will expire.",
+ "optional_description_to_help_identify_this_keys_purpose": "Optional description to help identify this key's purpose.",
+ "name_must_be_at_least_3_characters": "Name must be at least 3 characters",
+ "name_cannot_exceed_50_characters": "Name cannot exceed 50 characters",
+ "expiration_date_must_be_in_the_future": "Expiration date must be in the future",
+ "revoke_api_key": "Revoke API Key",
+ "never": "Never",
+ "revoke": "Revoke",
+ "api_key_revoked_successfully": "API key revoked successfully",
+ "are_you_sure_you_want_to_revoke_the_api_key_apikeyname": "Are you sure you want to revoke the API key \"{apiKeyName}\"? This will break any integrations using this key.",
+ "last_used": "Last Used",
+ "actions": "Actions",
+ "images_updated_successfully": "Images updated successfully",
+ "general": "General",
+ "configure_smtp_to_send_emails": "Enable email notifications to alert users when a login is detected from a new device or location.",
+ "ldap": "LDAP",
+ "configure_ldap_settings_to_sync_users_and_groups_from_an_ldap_server": "Configure LDAP settings to sync users and groups from an LDAP server.",
+ "images": "Images",
+ "update": "Update",
+ "email_configuration_updated_successfully": "Email configuration updated successfully",
+ "save_changes_question": "Save changes?",
+ "you_have_to_save_the_changes_before_sending_a_test_email_do_you_want_to_save_now": "You have to save the changes before sending a test email. Do you want to save now?",
+ "save_and_send": "Save and send",
+ "test_email_sent_successfully": "Test email sent successfully to your email address.",
+ "failed_to_send_test_email": "Failed to send test email. Check the server logs for more information.",
+ "smtp_configuration": "SMTP Configuration",
+ "smtp_host": "SMTP Host",
+ "smtp_port": "SMTP Port",
+ "smtp_user": "SMTP User",
+ "smtp_password": "SMTP Password",
+ "smtp_from": "SMTP From",
+ "smtp_tls_option": "SMTP TLS Option",
+ "email_tls_option": "Email TLS Option",
+ "skip_certificate_verification": "Skip Certificate Verification",
+ "this_can_be_useful_for_selfsigned_certificates": "This can be useful for self-signed certificates.",
+ "enabled_emails": "Enabled Emails",
+ "email_login_notification": "Email Login Notification",
+ "send_an_email_to_the_user_when_they_log_in_from_a_new_device": "Send an email to the user when they log in from a new device.",
+ "emai_login_code_requested_by_user": "Email Login Code Requested by User",
+ "allow_users_to_sign_in_with_a_login_code_sent_to_their_email": "Allows users to bypass passkeys by requesting a login code sent to their email. This reduces the security significantly as anyone with access to the user's email can gain entry.",
+ "email_login_code_from_admin": "Email Login Code from Admin",
+ "allows_an_admin_to_send_a_login_code_to_the_user": "Allows an admin to send a login code to the user via email.",
+ "send_test_email": "Send test email",
+ "application_configuration_updated_successfully": "Application configuration updated successfully",
+ "application_name": "Application Name",
+ "session_duration": "Session Duration",
+ "the_duration_of_a_session_in_minutes_before_the_user_has_to_sign_in_again": "The duration of a session in minutes before the user has to sign in again.",
+ "enable_self_account_editing": "Enable Self-Account Editing",
+ "whether_the_users_should_be_able_to_edit_their_own_account_details": "Whether the users should be able to edit their own account details.",
+ "emails_verified": "Emails Verified",
+ "whether_the_users_email_should_be_marked_as_verified_for_the_oidc_clients": "Whether the user's email should be marked as verified for the OIDC clients.",
+ "ldap_configuration_updated_successfully": "LDAP configuration updated successfully",
+ "ldap_disabled_successfully": "LDAP disabled successfully",
+ "ldap_sync_finished": "LDAP sync finished",
+ "client_configuration": "Client Configuration",
+ "ldap_url": "LDAP URL",
+ "ldap_bind_dn": "LDAP Bind DN",
+ "ldap_bind_password": "LDAP Bind Password",
+ "ldap_base_dn": "LDAP Base DN",
+ "user_search_filter": "User Search Filter",
+ "the_search_filter_to_use_to_search_or_sync_users": "The Search filter to use to search/sync users.",
+ "groups_search_filter": "Groups Search Filter",
+ "the_search_filter_to_use_to_search_or_sync_groups": "The Search filter to use to search/sync groups.",
+ "attribute_mapping": "Attribute Mapping",
+ "user_unique_identifier_attribute": "User Unique Identifier Attribute",
+ "the_value_of_this_attribute_should_never_change": "The value of this attribute should never change.",
+ "username_attribute": "Username Attribute",
+ "user_mail_attribute": "User Mail Attribute",
+ "user_first_name_attribute": "User First Name Attribute",
+ "user_last_name_attribute": "User Last Name Attribute",
+ "user_profile_picture_attribute": "User Profile Picture Attribute",
+ "the_value_of_this_attribute_can_either_be_a_url_binary_or_base64_encoded_image": "The value of this attribute can either be a URL, a binary or a base64 encoded image.",
+ "group_members_attribute": "Group Members Attribute",
+ "the_attribute_to_use_for_querying_members_of_a_group": "The attribute to use for querying members of a group.",
+ "group_unique_identifier_attribute": "Group Unique Identifier Attribute",
+ "group_name_attribute": "Group Name Attribute",
+ "admin_group_name": "Admin Group Name",
+ "members_of_this_group_will_have_admin_privileges_in_pocketid": "Members of this group will have Admin Privileges in Pocket ID.",
+ "disable": "Disable",
+ "sync_now": "Sync now",
+ "enable": "Enable",
+ "user_created_successfully": "User created successfully",
+ "create_user": "Create User",
+ "add_a_new_user_to_appname": "Add a new user to {appName}",
+ "add_user": "Add User",
+ "manage_users": "Manage Users",
+ "admin_privileges": "Admin Privileges",
+ "admins_have_full_access_to_the_admin_panel": "Admins have full access to the admin panel.",
+ "delete_firstname_lastname": "Delete {firstName} {lastName}",
+ "are_you_sure_you_want_to_delete_this_user": "Are you sure you want to delete this user?",
+ "user_deleted_successfully": "User deleted successfully",
+ "role": "Role",
+ "source": "Source",
+ "admin": "Admin",
+ "user": "User",
+ "local": "Local",
+ "toggle_menu": "Toggle menu",
+ "edit": "Edit",
+ "user_groups_updated_successfully": "User groups updated successfully",
+ "user_updated_successfully": "User updated successfully",
+ "custom_claims_updated_successfully": "Custom claims updated successfully",
+ "back": "Back",
+ "user_details_firstname_lastname": "User Details {firstName} {lastName}",
+ "manage_which_groups_this_user_belongs_to": "Manage which groups this user belongs to.",
+ "custom_claims": "Custom Claims",
+ "custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user": "Custom claims are key-value pairs that can be used to store additional information about a user. These claims will be included in the ID token if the scope 'profile' is requested.",
+ "user_group_created_successfully": "User group created successfully",
+ "create_user_group": "Create User Group",
+ "create_a_new_group_that_can_be_assigned_to_users": "Create a new group that can be assigned to users.",
+ "add_group": "Add Group",
+ "manage_user_groups": "Manage User Groups",
+ "friendly_name": "Friendly Name",
+ "name_that_will_be_displayed_in_the_ui": "Name that will be displayed in the UI",
+ "name_that_will_be_in_the_groups_claim": "Name that will be in the \"groups\" claim",
+ "delete_name": "Delete {name}",
+ "are_you_sure_you_want_to_delete_this_user_group": "Are you sure you want to delete this user group?",
+ "user_group_deleted_successfully": "User group deleted successfully",
+ "user_count": "User Count",
+ "user_group_updated_successfully": "User group updated successfully",
+ "users_updated_successfully": "Users updated successfully",
+ "user_group_details_name": "User Group Details {name}",
+ "assign_users_to_this_group": "Assign users to this group.",
+ "custom_claims_are_key_value_pairs_that_can_be_used_to_store_additional_information_about_a_user_prioritized": "Custom claims are key-value pairs that can be used to store additional information about a user. These claims will be included in the ID token if the scope 'profile' is requested. Custom claims defined on the user will be prioritized if there are conflicts.",
+ "oidc_client_created_successfully": "OIDC client created successfully",
+ "create_oidc_client": "Create OIDC Client",
+ "add_a_new_oidc_client_to_appname": "Add a new OIDC client to {appName}.",
+ "add_oidc_client": "Add OIDC Client",
+ "manage_oidc_clients": "Manage OIDC Clients",
+ "one_time_link": "One Time Link",
+ "use_this_link_to_sign_in_once": "Use this link to sign in once. This is needed for users who haven't added a passkey yet or have lost it.",
+ "add": "Add",
+ "callback_urls": "Callback URLs",
+ "logout_callback_urls": "Logout Callback URLs",
+ "public_client": "Public Client",
+ "public_clients_description": "Public clients do not have a client secret. They are designed for mobile, web, and native applications where secrets cannot be securely stored.",
+ "pkce": "PKCE",
+ "public_key_code_exchange_is_a_security_feature_to_prevent_csrf_and_authorization_code_interception_attacks": "Public Key Code Exchange is a security feature to prevent CSRF and authorization code interception attacks.",
+ "name_logo": "{name} logo",
+ "change_logo": "Change Logo",
+ "upload_logo": "Upload Logo",
+ "remove_logo": "Remove Logo",
+ "are_you_sure_you_want_to_delete_this_oidc_client": "Are you sure you want to delete this OIDC client?",
+ "oidc_client_deleted_successfully": "OIDC client deleted successfully",
+ "authorization_url": "Authorization URL",
+ "oidc_discovery_url": "OIDC Discovery URL",
+ "token_url": "Token URL",
+ "userinfo_url": "Userinfo URL",
+ "logout_url": "Logout URL",
+ "certificate_url": "Certificate URL",
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "oidc_client_updated_successfully": "OIDC client updated successfully",
+ "create_new_client_secret": "Create new client secret",
+ "are_you_sure_you_want_to_create_a_new_client_secret": "Are you sure you want to create a new client secret? The old one will be invalidated.",
+ "generate": "Generate",
+ "new_client_secret_created_successfully": "New client secret created successfully",
+ "allowed_user_groups_updated_successfully": "Allowed user groups updated successfully",
+ "oidc_client_name": "OIDC Client {name}",
+ "client_id": "Client ID",
+ "client_secret": "Client secret",
+ "show_more_details": "Show more details",
+ "allowed_user_groups": "Allowed User Groups",
+ "add_user_groups_to_this_client_to_restrict_access_to_users_in_these_groups": "Add user groups to this client to restrict access to users in these groups. If no user groups are selected, all users will have access to this client.",
+ "favicon": "Favicon",
+ "light_mode_logo": "Light Mode Logo",
+ "dark_mode_logo": "Dark Mode Logo",
+ "background_image": "Background Image",
+ "language": "Language",
+ "reset_profile_picture_question": "Reset profile picture?",
+ "this_will_remove_the_uploaded_image_and_reset_the_profile_picture_to_default": "This will remove the uploaded image, and reset the profile picture to default. Do you want to continue?",
+ "reset": "Reset",
+ "reset_to_default": "Reset to default",
+ "profile_picture_has_been_reset": "Profile picture has been reset. It may take a few minutes to update.",
+ "select_the_language_you_want_to_use": "Select the language you want to use. Some languages may not be fully translated.",
+ "personal": "Personal",
+ "global": "Global",
+ "all_users": "All Users",
+ "all_events": "All Events",
+ "all_clients": "All Clients",
+ "global_audit_log": "Global Audit Log",
+ "see_all_account_activities_from_the_last_3_months": "See all user activity for the last 3 months.",
+ "token_sign_in": "Token Sign In",
+ "client_authorization": "Client Authorization",
+ "new_client_authorization": "New Client Authorization",
+ "disable_animations": "Disable Animations",
+ "turn_off_all_animations_throughout_the_admin_ui": "Turn off all animations throughout the Admin UI.",
+ "user_disabled": "Account Disabled",
+ "disabled_users_cannot_log_in_or_use_services": "Disabled users cannot log in or use services.",
+ "user_disabled_successfully": "User has been disabled successfully.",
+ "user_enabled_successfully": "User has been enabled successfully.",
+ "status": "Status",
+ "disable_firstname_lastname": "Disable {firstName} {lastName}",
+ "are_you_sure_you_want_to_disable_this_user": "Are you sure you want to disable this user? They will not be able to log in or access any services.",
+ "ldap_soft_delete_users": "Keep disabled users from LDAP.",
+ "ldap_soft_delete_users_description": "When enabled, users removed from LDAP will be disabled rather than deleted from the system.",
+ "login_code_email_success": "The login code has been sent to the user.",
+ "send_email": "Send Email",
+ "show_code": "Show Code",
+ "callback_url_description": "URL(s) provided by your client. Will be automatically added if left blank. Wildcards (*) are supported, but best avoided for better security.",
+ "logout_callback_url_description": "URL(s) provided by your client for logout. Wildcards (*) are supported, but best avoided for better security.",
+ "api_key_expiration": "API Key Expiration",
+ "send_an_email_to_the_user_when_their_api_key_is_about_to_expire": "Send an email to the user when their API key is about to expire.",
+ "authorize_device": "Authorize Device",
+ "the_device_has_been_authorized": "The device has been authorized.",
+ "enter_code_displayed_in_previous_step": "Enter the code that was displayed in the previous step.",
+ "authorize": "Authorize",
+ "federated_identities": "Federated Identities",
+ "federated_identities_description": "Using federated identities, you can authenticate OIDC clients using JWT tokens issued by third-party authorities.",
+ "add_federated_identity": "Add Federated Identity",
+ "add_another_federated_identity": "Add another federated identity",
+ "oidc_allowed_group_count": "Allowed Group Count",
+ "unrestricted": "Unrestricted",
+ "show_advanced_options": "Show Advanced Options",
+ "hide_advanced_options": "Hide Advanced Options"
+}
diff --git a/frontend/project.inlang/settings.json b/frontend/project.inlang/settings.json
index 7d3e25de..05428300 100644
--- a/frontend/project.inlang/settings.json
+++ b/frontend/project.inlang/settings.json
@@ -1,7 +1,7 @@
{
"$schema": "https://inlang.com/schema/project-settings",
"baseLocale": "en",
- "locales": ["cs", "de", "en", "es", "fr", "it", "nl", "pl", "pt-BR", "ru", "zh-CN"],
+ "locales": ["cs", "da", "de", "en", "es", "fr", "it", "nl", "pl", "pt-BR", "ru", "zh-CN"],
"modules": [
"./node_modules/@inlang/plugin-message-format/dist/index.js",
"./node_modules/@inlang/plugin-m-function-matcher/dist/index.js"
diff --git a/frontend/src/routes/settings/account/locale-picker.svelte b/frontend/src/routes/settings/account/locale-picker.svelte
index 9e109cc4..0e96ab31 100644
--- a/frontend/src/routes/settings/account/locale-picker.svelte
+++ b/frontend/src/routes/settings/account/locale-picker.svelte
@@ -9,6 +9,7 @@
const locales = {
cs: 'Čeština',
+ da: 'Dansk',
de: 'Deutsch',
en: 'English',
es: 'Español',