From ce2a115bf61ebacd65f641397c97f52dd06f0739 Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 31 Mar 2026 08:37:02 +0200 Subject: [PATCH 1/7] feat(i18n): start implementation of danish translations --- config/i18n.ts | 5 + i18n/locales/da-DK.json | 1525 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 1530 insertions(+) create mode 100644 i18n/locales/da-DK.json diff --git a/config/i18n.ts b/config/i18n.ts index e775400e7..e52316657 100644 --- a/config/i18n.ts +++ b/config/i18n.ts @@ -132,6 +132,11 @@ const locales: (LocaleObjectData | (Omit & { code: str name: 'Български', pluralRule: createPluralRule('bg-BG', { zero: 1, one: 0, two: 1, few: 1, many: 1, other: 1 }), }, + { + code: 'da', + file: 'da-DK.json', + name: 'Dansk', + }, /*{ code: 'ckb', file: 'ckb.json', diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json new file mode 100644 index 000000000..cc2eed361 --- /dev/null +++ b/i18n/locales/da-DK.json @@ -0,0 +1,1525 @@ +{ + "$schema": "../schema.json", + "seo": { + "home": { + "title": "npmx - Pakke Browser til npm Registry", + "description": "en hurtig, moderne browser til npm-registret. Søg, gennemse og udforsk pakker med en moderne grænseflade." + } + }, + "built_at": "bygget {0}", + "alt_logo": "npmx logo", + "tagline": "en hurtig, moderne browser til npm-registret", + "non_affiliation_disclaimer": "ikke tilknyttet npm, Inc.", + "trademark_disclaimer": "npm er et registreret varemærke for npm, Inc. Dette websted er ikke tilknyttet npm, Inc.", + "footer": { + "about": "om", + "blog": "blog", + "docs": "dokumentation", + "source": "kilde", + "social": "sociale medier", + "chat": "chat", + "builders_chat": "byggere", + "keyboard_shortcuts": "tastaturgenveje", + "brand": "mærke" + }, + "shortcuts": { + "section": { + "global": "Global", + "search": "Søg", + "package": "Pakke" + }, + "focus_search": "Fokusér søgning", + "show_kbd_hints": "Fremhæv tastaturgenveje", + "settings": "Åbn indstillinger", + "compare": "Sammenlign", + "compare_from_package": "Sammenlign (forudfyldt med nuværende pakke)", + "navigate_results": "Naviger resultater", + "go_to_result": "Gå til resultat", + "open_code_view": "Åbn kodevisning", + "open_docs": "Åbn dokumentation", + "disable_shortcuts": "Du kan deaktivere tastaturgenveje i {settings}.", + "open_main": "Åbn hovedinformation", + "open_diff": "Åbn versionsforskelle" + }, + "search": { + "label": "Søg npm-pakker", + "placeholder": "søg pakker...", + "button": "søg", + "searching": "Søger...", + "found_packages": "Ingen pakker fundet | Fundet 1 pakke | Fundet {count} pakker", + "found_packages_sorted": "Ingen resultater fundet | Sortering af top {count} resultat | Sortering af top {count} resultater", + "updating": "(opdaterer...)", + "no_results": "Ingen pakker fundet for \"{query}\"", + "rate_limited": "Ramte npm rate limit, prøv igen om et øjeblik", + "title": "søg", + "title_search": "søg: {search}", + "title_packages": "søg pakker", + "meta_description": "Søgeresultater for '{search}'", + "meta_description_packages": "Søg npm-pakker", + "not_taken": "{name} er ikke taget", + "claim_prompt": "Krav dette pakkenavn på npm", + "claim_button": "Krav \"{name}\"", + "want_to_claim": "Vil du kræve dette pakkenavn?", + "start_typing": "Begynd at skrive for at søge efter pakker", + "algolia_disclaimer": "Drevet af Algolia", + "exact_match": "præcis", + "suggestion": { + "user": "bruger", + "org": "organisation", + "view_user_packages": "Se pakker fra denne bruger", + "view_org_packages": "Se pakker fra denne organisation" + }, + "instant_search": "Instant søgning", + "instant_search_on": "på", + "instant_search_off": "fra", + "instant_search_turn_on": "tænd", + "instant_search_turn_off": "sluk", + "instant_search_advisory": "{label} {state} — {action}" + }, + "nav": { + "main_navigation": "Hovednavigation", + "popular_packages": "Populære pakker", + "settings": "Indstillinger", + "compare": "Sammenlign", + "back": "Tilbage", + "menu": "Menu", + "mobile_menu": "Navigationsmenu", + "open_menu": "Åbn menu", + "links": "Links", + "tap_to_search": "Tryk for at søge" + }, + "blog": { + "title": "Blog", + "heading": "blog", + "meta_description": "Indsigter og opdateringer fra npmx-fællesskabet", + "author": { + "view_profile": "Se {name}'s profil på Bluesky" + }, + "draft_badge": "Udkast", + "draft_banner": "Dette er et upubliceret udkast. Det kan være ufuldstændigt eller indeholde unøjagtigheder.", + "no_posts": "Ingen indlæg fundet.", + "atproto": { + "view_on_bluesky": "Se på Bluesky", + "reply_on_bluesky": "Svar på Bluesky", + "likes_on_bluesky": "Synes godt om på Bluesky", + "like_or_reply_on_bluesky": "Synes godt om dette indlæg eller tilføj din kommentar på Bluesky", + "no_comments_yet": "Ingen kommentarer endnu.", + "could_not_load_comments": "Kunne ikke indlæse kommentarer.", + "comments": "Kommentarer", + "loading_comments": "Indlæser kommentarer...", + "updating": "Opdaterer...", + "reply_count": "{count} svar | {count} svar", + "like_count": "{count} synes godt om | {count} synes godt om", + "repost_count": "{count} deling | {count} delinger", + "more_replies": "{count} flere svar... | {count} flere svar..." + } + }, + "settings": { + "title": "Indstillinger", + "tagline": "Tilpas din npmx-oplevelse", + "meta_description": "Tilpas din npmx.dev-oplevelse med tema, sprog og visningsindstillinger.", + "sections": { + "appearance": "Udseende", + "display": "Visning", + "search": "Søgefunktioner", + "language": "Sprog", + "keyboard_shortcuts": "Tastaturgenveje" + }, + "data_source": { + "label": "Datakilde", + "description": "Vælg, hvor npmx henter søgedata fra. Individuelle pakkesider bruger altid npm-registret direkte.", + "npm": "npm Registry", + "npm_description": "Henter søgning, organisation og brugeroplysninger direkte fra det officielle npm-registre. Autoritativt, men kan være langsommere.", + "algolia": "Algolia", + "algolia_description": "Bruger Algolia for hurtigere søgning, organisations- og brugersider." + }, + "instant_search": "Instant søgning", + "instant_search_description": "Navigerer til søgesiden og opdaterer resultaterne, mens du skriver.", + "relative_dates": "Relative datoer", + "include_types": "Inkluder {'@'}types i installationen", + "include_types_description": "Tilføj {'@'}types-pakken til installationskommandoer for utypede pakker", + "hide_platform_packages": "Skjul platform-specifikke pakker i søgningen", + "hide_platform_packages_description": "Skjul native binære pakker som {'@'}esbuild/linux-x64 fra resultaterne", + "enable_graph_pulse_loop": "Aktivér looping af pulseffekt på mini-graf", + "enable_graph_pulse_loop_description": "Aktivér en kontinuerlig pulserende animation på den ugentlige download-graf. Denne animation kan være distraherende for nogle brugere.", + "theme": "Tema", + "theme_light": "Lys", + "theme_dark": "Mørk", + "theme_system": "System", + "language": "Sprog", + "help_translate": "Hjælp med at oversætte npmx", + "translation_status": "Tjek global oversættelsesstatus", + "accent_colors": { + "label": "Accentfarver", + "sky": "Himmel", + "coral": "Koraller", + "amber": "Amber", + "emerald": "Smaragd", + "violet": "Violet", + "magenta": "Magenta" + }, + "clear_accent": "Fjern accentfarve", + "translation_progress": "Oversættelsesfremskridt", + "background_themes": { + "label": "Baggrundsfarve", + "neutral": "Neutral", + "stone": "Sten", + "zinc": "Zink", + "slate": "Skifer", + "black": "Sort" + }, + "keyboard_shortcuts_enabled": "Aktivér tastaturgenveje", + "keyboard_shortcuts_enabled_description": "Tastaturgenveje kan deaktiveres, hvis de konflikter med andre browser- eller systemgenveje" + }, + "i18n": { + "missing_keys": "{count} manglende oversættelse | {count} manglende oversættelser", + "copy_keys": "Kopiér nøgler", + "show_more_keys": "Vis {count} flere...", + "contribute_hint": "Hjælp med at forbedre denne oversættelse ved at tilføje de manglende nøgler.", + "edit_on_github": "Rediger på GitHub", + "view_guide": "Oversættelsesguide" + }, + "error": { + "401": "Uautoriseret", + "404": "Siden kunne ikke findes", + "500": "Intern serverfejl", + "503": "Tjenesten er utilgængelig", + "default": "Noget gik galt" + }, + "common": { + "loading": "Indlæser...", + "loading_more": "Indlæser mere...", + "loading_packages": "Indlæser pakker...", + "end_of_results": "Ingen flere resultater", + "try_again": "Prøv igen", + "close": "Luk", + "or": "eller", + "retry": "Prøv igen", + "copy": "Kopiér", + "copied": "Kopieret!", + "skip_link": "Spring til hovedindhold", + "warnings": "Advarsler:", + "go_back_home": "Gå tilbage til forsiden", + "per_week": "/ uge", + "vanity_downloads_hint": "Vanity-nummer: ingen pakker vist | Vanity-nummer: for den viste pakke | Vanity-nummer: Summen af {count} viste pakker", + "sort": { + "name": "navn", + "role": "rolle", + "members": "medlemmer" + }, + "scroll_to_top": "Scroll til toppen", + "cancel": "Annuller", + "save": "Gem", + "edit": "Rediger", + "error": "Fejl", + "view_on": { + "npm": "vis på npm", + "github": "Vis på GitHub", + "gitlab": "Vis på GitLab", + "bitbucket": "Vis på Bitbucket", + "codeberg": "Vis på Codeberg", + "git_repo": "Vis på Git repository", + "forgejo": "Vis på Forgejo", + "gitea": "Vis på Gitea", + "gitee": "Vis på Gitee", + "radicle": "Vis på Radicle", + "sourcehut": "Vis på SourceHut", + "tangled": "Vis på Tangled" + }, + "collapse": "Skjul", + "expand": "Udvid" + }, + "profile": { + "display_name": "Visningsnavn", + "description": "Beskrivelse", + "no_description": "Ingen beskrivelse", + "website": "Hjemmeside", + "website_placeholder": "https://example.com", + "likes": "Synes godt om", + "seo_title": "{handle} - npmx", + "seo_description": "npmx profil af {handle}", + "not_found": "Profil ikke fundet", + "not_found_message": "Profilen for {handle} kunne ikke findes.", + "invite": { + "message": "Det ser ikke ud til, at de bruger npmx endnu. Vil du fortælle dem om det?", + "share_button": "Del på Bluesky", + "compose_text": "Hej {'@'}{handle}! Har du tjekket npmx.dev endnu? Det er en browser til npm-registret, der er hurtig, moderne og open-source.\nhttps://npmx.dev" + } + }, + "package": { + "not_found": "Pakke ikke fundet", + "not_found_message": "Pakken kunne ikke findes.", + "no_description": "Ingen beskrivelse", + "verified_provenance": "Verificeret oprindelse", + "navigation": "Pakke", + "copy_name": "Kopiér pakkenavn", + "deprecation": { + "package": "Denne pakke er blevet forældet.", + "version": "Denne version er blevet forældet.", + "no_reason": "Ingen årsag angivet" + }, + "size_increase": { + "title_size": "Betydelig størrelsesstigning siden v{version}", + "title_deps": "Betydelig stigning i afhængigheder siden v{version}", + "title_both": "Betydelig stigning i både størrelse og afhængigheder siden v{version}", + "size": "Installationsstørrelse øget med {percent} ({size} større)", + "deps": "{count} flere afhængigheder" + }, + "replacement": { + "title": "Du har muligvis ikke brug for denne afhængighed.", + "native": "Dette kan erstattes med {replacement}, tilgængelig siden Node {nodeVersion}.", + "simple": "{community} har markeret denne pakke som overflødig, med rådet: {replacement}.", + "documented": "{community} har markeret denne pakke som havende mere effektive alternativer.", + "none": "Denne pakke er blevet markeret som ikke længere nødvendig, og dens funktionalitet er sandsynligvis tilgængelig nativt i alle motorer.", + "learn_more": "Lær mere", + "learn_more_above": "Lær mere ovenfor.", + "mdn": "MDN", + "community": "community", + "consider_no_dep": "+ Overvej ingen afhængighed?" + }, + "stats": { + "license": "Licens", + "deps": "Afhængigheder", + "install_size": "Installationsstørrelse", + "vulns": "Sårbarheder", + "published": "Udgivet", + "published_tooltip": "Dato {package}{'@'}{version} blev udgivet", + "view_dependency_graph": "Vis afhængighedsgraf", + "inspect_dependency_tree": "Undersøg afhængighedstræ", + "size_tooltip": { + "unpacked": "{size} udpakket størrelse (denne pakke)", + "total": "{size} total udpakket størrelse (inklusive {count} afhængighed for linux-x64) | {size} total udpakket størrelse (inklusive alle {count} afhængigheder for linux-x64)" + } + }, + "skills": { + "title": "Agent Færdigheder", + "skills_available": "{count} færdighed tilgængelig | {count} færdigheder tilgængelige", + "compatible_with": "Kompatibel med {tool}", + "install": "Installer", + "installation_method": "Installationsmetode", + "learn_more": "Lær mere", + "available_skills": "Tilgængelige færdigheder", + "click_to_expand": "Klik for at udvide", + "no_description": "Ingen beskrivelse", + "file_counts": { + "scripts": "{count} script | {count} scripts", + "refs": "{count} ref | {count} refs", + "assets": "{count} asset | {count} assets" + }, + "view_source": "Se kilde", + "skills_cli": "færdigheder CLI" + }, + "links": { + "main": "vigtigste", + "repo": "repo", + "homepage": "hjemmeside", + "issues": "problemer", + "jsr": "jsr", + "code": "kode", + "docs": "dokumentation", + "fund": "fund", + "compare": "sammenlign", + "compare_this_package": "sammenlign denne pakke" + }, + "likes": { + "like": "Synes godt om denne pakke", + "unlike": "Synes ikke godt om denne pakke" + }, + "docs": { + "contents": "Indhold", + "default_not_available": "Dokumentation er ikke tilgængelig for denne version.", + "not_available": "Dokumentation ikke tilgængelig", + "not_available_detail": "Vi kunne ikke generere dokumentation for denne version.", + "page_title": "API Dokumentation - npmx", + "page_title_name": "{name} dokumentation - npmx", + "page_title_version": "{name} dokumentation - npmx", + "og_title": "{name} - Dokumentation", + "view_package": "Se pakke" + }, + "get_started": { + "title": "Kom godt i gang", + "pm_label": "Pakkehåndtering", + "copy_command": "Kopiér installationskommando", + "copy_dev_command": "Kopiér udviklingsinstallationskommando", + "dev_dependency_hint": "Normalt installeret som en udviklingsafhængighed", + "view_types": "Se {package}" + }, + "create": { + "title": "Opret nyt projekt", + "copy_command": "Kopiér oprettelseskommando", + "view": "{packageName} har samme vedligeholder. Klik for flere detaljer." + }, + "run": { + "title": "Kør", + "locally": "Kør lokalt" + }, + "readme": { + "title": "Readme", + "no_readme": "Ingen README tilgængelig.", + "toc_title": "Oversigt", + "callout": { + "note": "Note", + "tip": "Tip", + "important": "Vigtigt", + "warning": "Advarsel", + "caution": "Forsigtighed" + }, + "copy_as_markdown": "Kopiér README som Markdown" + }, + "provenance_section": { + "title": "Provenance", + "built_and_signed_on": "Bygget og underskrevet på {provider}", + "view_build_summary": "Se byggesammendrag", + "source_commit": "Kilde Commit", + "build_file": "Byg fil", + "public_ledger": "Offentlig Ledger", + "transparency_log_entry": "Transparency log entry", + "view_more_details": "Se flere detaljer", + "error_loading": "Kunne ikke indlæse provenance-detaljer" + }, + "security_downgrade": { + "title": "Nedgradering af sikkerhed", + "description_to_none_provenance": "Denne version blev udgivet uden {provenance}.", + "description_to_none_trustedPublisher": "Denne version blev udgivet uden {trustedPublishing}.", + "description_to_provenance_trustedPublisher": "Denne version bruger {provenance}, men ikke {trustedPublishing}.", + "fallback_install_provenance": "Installationskommandoer er fastlåst til {version}, den sidste version med provenance.", + "fallback_install_trustedPublisher": "Installationskommandoer er fastlåst til {version}, den sidste version med trusted publishing.", + "provenance_link_text": "provenance", + "trusted_publishing_link_text": "trusted publishing" + }, + "keywords_title": "Nøgleord", + "compatibility": "Kompatibilitet", + "card": { + "publisher": "Udgiver", + "published": "Udgivet", + "weekly_downloads": "Ugentlige downloads", + "keywords": "Nøgleord", + "license": "Licens", + "select": "Vælg pakke", + "select_maximum": "Maksimum {count} pakker kan vælges" + }, + "versions": { + "title": "Versioner", + "collapse": "Skjul {tag}", + "expand": "Udvid {tag}", + "collapse_other": "Skjul andre versioner", + "expand_other": "Udvid andre versioner", + "collapse_major": "Skjul major {major}", + "expand_major": "Udvid major {major}", + "other_versions": "Andre versioner", + "more_tagged": "{count} flere taggede", + "all_covered": "Alle versioner er dækket af tags ovenfor", + "deprecated_title": "{version} (udgået)", + "view_all": "Se {count} version | Se alle {count} versioner", + "view_all_versions": "Se alle versioner", + "distribution_title": "Semver Gruppe", + "distribution_modal_title": "Versioner", + "distribution_range_date_same_year": "fra {from} til {to}, {endYear}", + "distribution_range_date_multiple_years": "fra {from}, {startYear} til {to}, {endYear}", + "grouping_major": "Major", + "grouping_minor": "Minor", + "grouping_versions_title": "Versioner", + "grouping_versions_about": "Om version gruppering", + "grouping_versions_all": "Alle", + "grouping_versions_only_recent": "Kun nyere", + "grouping_usage_title": "Brug", + "grouping_usage_about": "Om brug gruppering", + "grouping_usage_all": "Alle", + "grouping_usage_most_used": "Mest brugt", + "recent_versions_only_tooltip": "Vis kun versioner udgivet inden for det sidste år.", + "show_low_usage_tooltip": "Inkluder version grupper med mindre end 1% af de samlede downloads.", + "y_axis_label": "Downloads", + "filter_placeholder": "Filtrer efter semver (f.eks. ^3.0.0)", + "filter_invalid": "Ugyldig semver rækkevidde", + "filter_help": "Hjælp til semver rækkevidde filter", + "filter_tooltip": "Filtrer versioner ved hjælp af en {link}. For eksempel viser ^3.0.0 alle 3.x versioner.", + "filter_tooltip_link": "semver range", + "no_matches": "Ingen versioner matcher denne rækkevidde", + "copy_alt": { + "per_version_analysis": "{version} version blev downloadet {downloads} gange", + "general_description": "Søjlediagram, der viser downloads pr. version for {versions_count} {semver_grouping_mode} versioner af {package_name}-pakken, {date_range_label} fra {first_version}-versionen til {last_version}-versionen. Den mest downloadede version er {max_downloaded_version} med {max_version_downloads} downloads. {per_version_analysis}. {watermark}." + }, + "page_title": "Versionshistorik", + "current_tags": "Nuværende tags", + "version_filter_placeholder": "Filtrer versioner…", + "version_filter_label": "Filtrer versioner", + "no_match_filter": "Ingen versioner matcher {filter}" + }, + "dependencies": { + "title": "Afhængighed ({count}) | Afhængigheder ({count})", + "list_label": "Pakkeafhængigheder", + "show_all": "vis {count} afh | vis alle {count} afh", + "optional": "valgfri", + "view_vulnerabilities": "Se sårbarheder", + "outdated_major": "{count} major version bagud (seneste: {latest}) | {count} major versioner bagud (seneste: {latest})", + "outdated_minor": "{count} minor version bagud (seneste: {latest}) | {count} minor versioner bagud (seneste: {latest})", + "outdated_patch": "Patch opdatering tilgængelig (seneste: {latest})", + "has_replacement": "Denne afhængighed har foreslåede erstatninger", + "vulnerabilities_count": "{count} sårbarhed | {count} sårbarheder" + }, + "peer_dependencies": { + "title": "Peer Dependency ({count}) | Peer Dependencies ({count})", + "list_label": "Pakke peer afhængigheder", + "show_all": "vis {count} peer afhængighed | vis alle {count} peer afhængigheder" + }, + "optional_dependencies": { + "title": "Valgfri afhængighed ({count}) | Valgfri afhængigheder ({count})", + "list_label": "Pakkevalgfri afhængigheder", + "show_all": "vis {count} valgfri afhængighed | vis alle {count} valgfri afhængigheder" + }, + "maintainers": { + "title": "Vedligeholdere", + "list_label": "Pakkevedligeholdere", + "you": "(dig)", + "via": "via {teams}", + "remove_owner": "Fjern {name} som ejer", + "username_to_add": "Brugernavn til at tilføje som ejer", + "username_placeholder": "brugernavn...", + "add_button": "tilføj", + "cancel_add": "Annuller tilføjelse af ejer", + "add_owner": "+ Tilføj ejer", + "show_more": "(vis {count} mere)", + "show_less": "(vis færre)", + "maintainer_template": "{avatar} {char126}{name}" + }, + "trends": { + "chart_assistive_text": { + "keyboard_navigation_horizontal": "Brug venstre og højre piletaster til at cykle gennem datapunkter.", + "keyboard_navigation_vertical": "Brug op og ned piletaster til at cykle gennem datapunkter.", + "table_available": "En datatabel for dette diagram er tilgængelig nedenfor.", + "table_caption": "Diagramdatatabel" + }, + "chart_view_toggle": "Skift visning", + "chart_view_combined": "Kombineret visning", + "chart_view_split": "Opdelt visning", + "granularity": "Granularitet", + "granularity_daily": "Daglig", + "granularity_weekly": "Ugentlig", + "granularity_monthly": "Månedlig", + "granularity_yearly": "Årlig", + "start_date": "Start", + "end_date": "Slut", + "loading": "Indlæser...", + "date_range": "{start} til {end}", + "date_range_multiline": "{start}\ntil {end}", + "download_file": "Download {fileType}", + "toggle_annotator": "Skift annotator", + "toggle_stack_mode": "Skift staktilstand", + "open_options": "Åbn indstillinger", + "close_options": "Luk indstillinger", + "legend_estimation": "Estimation", + "no_data": "Ingen data tilgængelig", + "y_axis_label": "{granularity} {facet}", + "facet": "Facet", + "title": "Trends", + "contributors_skip": "Vises ikke i Bidragydere (ingen GitHub-repo):", + "items": { + "downloads": "Downloads", + "likes": "Likes", + "contributors": "Bidragydere" + }, + "data_correction": "Datakorrektion", + "average_window": "Gennemsnitsvindue", + "smoothing": "Udjævning", + "prediction": "Forudsigelse", + "known_anomalies": "Kendte anomalier", + "known_anomalies_description": "Interpolerer over kendte downloadspidser forårsaget af bots eller CI-problemer.", + "known_anomalies_ranges": "Anomalierækker", + "known_anomalies_range": "Fra {start} til {end}", + "known_anomalies_range_named": "{packageName}: fra {start} til {end}", + "known_anomalies_none": "Ingen kendte anomalier for denne pakke. | Ingen kendte anomalier for disse pakker.", + "known_anomalies_contribute": "Bidrag med anomalidata", + "apply_correction": "Anvend korrektion", + "copy_alt": { + "trend_none": "mostly flat", + "trend_strong": "strong", + "trend_weak": "weak", + "trend_undefined": "undefined (insufficient data)", + "button_label": "Copy alt text", + "watermark": "At the bottom, a watermark reads \"./npmx a fast, modern browser for the npm registry\"", + "analysis": "{package_name} starts at {start_value} and ends at {end_value}, showing a {trend} trend with a slope of {downloads_slope} downloads per time interval", + "estimation": "The final value is an estimate based on partial data for the current period.", + "estimations": "The final values are estimates based on partial data for the current period.", + "compare": "Package download comparison line chart for: {packages}.", + "single_package": "Downloads line chart for the {package} package.", + "general_description": "The Y axis represents the number of downloads. The X axis represents the date range, from {start_date} to {end_date}, with a {granularity} time period.{estimation_notice} {packages_analysis}. {watermark}.", + "facet_bar_general_description": "Horizontal bar chart for: {packages}, comparing {facet} ({description}). {facet_analysis} {watermark}.", + "facet_bar_analysis": "{package_name} has a value of {value}." + } + }, + "downloads": { + "title": "Ugentlige Downloads", + "community_distribution": "Se distributionen af fællesskabsadoption", + "subtitle": "På tværs af alle versioner", + "sparkline_nav_hint": "Brug ← →" + }, + "install_scripts": { + "title": "Installationsscripts", + "script_label": "(script)", + "npx_packages": "{count} npx package | {count} npx packages", + "currently": "currently {version}" + }, + "playgrounds": { + "title": "Prøv det", + "choose": "vælg legeplads" + }, + "metrics": { + "esm": "ES Modules supported", + "cjs": "CommonJS supported", + "no_esm": "ES Modules unsupported", + "wasm": "Has WebAssembly", + "types_label": "Types", + "types_included": "Types included", + "types_available": "Types available via {package}", + "no_types": "No types" + }, + "license": { + "view_spdx": "View license text on SPDX", + "none": "None" + }, + "vulnerabilities": { + "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", + "show_all_packages": "show {count} affected package | show all {count} affected packages", + "path": "path", + "more": "+{count} more", + "packages_failed": "{count} package could not be checked | {count} packages could not be checked", + "scan_failed": "Could not scan for vulnerabilities", + "severity": { + "critical": "critical", + "high": "high", + "moderate": "moderate", + "low": "low" + }, + "fixed_in_title": "Fixed in version {version}" + }, + "deprecated": { + "label": "Deprecated", + "tree_found": "{count} deprecated dependency | {count} deprecated dependencies", + "show_all": "show {count} deprecated package | show all {count} deprecated packages" + }, + "access": { + "title": "Team Access", + "refresh": "Refresh team access", + "list_label": "Team access list", + "owner": "owner", + "rw": "rw", + "ro": "ro", + "revoke_access": "Revoke {name} access", + "no_access": "No team access configured", + "select_team_label": "Select team", + "loading_teams": "Loading teams...", + "select_team": "Select team", + "permission_label": "Permission level", + "permission": { + "read_only": "read-only", + "read_write": "read-write" + }, + "grant_button": "grant", + "cancel_grant": "Cancel granting access", + "grant_access": "+ Grant team access" + }, + "list": { + "filter_label": "Filter packages", + "filter_placeholder": "Filter packages...", + "sort_label": "Sort packages", + "showing_count": "Showing {filtered} of {total} packages" + }, + "skeleton": { + "loading": "Loading package details", + "maintainers": "Maintainers", + "keywords": "Keywords", + "versions": "Versions", + "dependencies": "Dependencies" + }, + "sort": { + "downloads": "Most downloaded", + "published": "Recently published", + "name_asc": "Name (A-Z)", + "name_desc": "Name (Z-A)" + }, + "size": { + "b": "{size} B", + "kb": "{size} kB", + "mb": "{size} MB" + }, + "download": { + "button": "Download", + "tarball": "Download Tarball as .tar.gz" + } + }, + "connector": { + "modal": { + "title": "Local Connector", + "connected": "Connected", + "connected_as_user": "Connected as ~{user}", + "connected_hint": "You can now manage packages and organizations from the web UI.", + "disconnect": "Disconnect", + "run_hint": "Run the connector on your machine to enable admin features.", + "copy_command": "Copy command", + "copied": "Copied", + "paste_token": "Then paste the token below to connect:", + "token_label": "Token", + "token_placeholder": "paste token here...", + "advanced": "Advanced options", + "port_label": "Port", + "warning": "WARNING", + "warning_text": "This allows npmx to access your npm CLI. Only connect to sites you trust.", + "connect": "Connect", + "connecting": "Connecting...", + "auto_open_url": "Automatically open auth page" + } + }, + "operations": { + "queue": { + "title": "Operations Queue", + "clear_all": "clear all", + "refresh": "Refresh operations", + "empty": "No operations queued", + "empty_hint": "Add operations from package or org pages", + "active_label": "Active operations", + "otp_required": "OTP required", + "otp_prompt": "Enter OTP to continue", + "otp_placeholder": "Enter OTP code...", + "otp_label": "One-time password", + "retry_otp": "Retry with OTP", + "retry_web_auth": "Retry with web auth", + "retrying": "Retrying...", + "open_web_auth": "Open web auth link", + "approve_operation": "Approve operation", + "remove_operation": "Remove operation", + "approve_all": "Approve All", + "execute": "Execute", + "executing": "Executing...", + "log": "Log", + "log_label": "Completed operations log", + "remove_from_log": "Remove from log" + } + }, + "org": { + "teams": { + "title": "Teams", + "refresh": "Refresh teams", + "filter_label": "Filter teams", + "filter_placeholder": "Filter teams...", + "sort_by": "Sort by", + "loading": "Loading teams...", + "no_teams": "No teams found", + "list_label": "Organization teams", + "delete_team": "Delete team {name}", + "member_count": "{count} member | {count} members", + "members_of": "Members of {team}", + "no_members": "No members", + "remove_user": "Remove {user} from team", + "username_to_add": "Username to add to {team}", + "username_placeholder": "username...", + "add_button": "add", + "cancel_add_user": "Cancel adding user", + "add_member": "+ Add member", + "team_name_label": "Team name", + "team_name_placeholder": "team-name...", + "create_button": "create", + "no_match": "No teams match \"{query}\"", + "cancel_create": "Cancel creating team", + "create_team": "+ Create team" + }, + "members": { + "title": "Members", + "refresh": "Refresh members", + "filter_label": "Filter members", + "filter_placeholder": "Filter members...", + "filter_by_role": "Filter by role", + "filter_by_team": "Filter by team", + "all_teams": "all teams", + "sort_by": "Sort by", + "loading": "Loading members...", + "no_members": "No members found", + "list_label": "Organization members", + "change_role_for": "Change role for {name}", + "remove_from_org": "Remove {name} from org", + "view_team": "View {team} team", + "no_match": "No members match your filters", + "username_label": "Username", + "username_placeholder": "username...", + "role_label": "Role", + "role": { + "all": "all", + "developer": "developer", + "admin": "admin", + "owner": "owner" + }, + "team_label": "Team", + "no_team": "no team", + "add_button": "add", + "cancel_add": "Cancel adding member", + "add_member": "+ Add member" + }, + "public_packages": "{count} public package | {count} public packages", + "page": { + "packages_title": "Packages", + "members_tab": "Members", + "teams_tab": "Teams", + "no_packages": "No public packages found for", + "no_packages_hint": "This organization may not exist or has no public packages.", + "failed_to_load": "Failed to load organization packages", + "no_match": "No packages match \"{query}\"", + "not_found": "Organization not found", + "not_found_message": "The organization \"{'@'}{name}\" does not exist on npm" + } + }, + "user": { + "combobox": { + "add_to_org_hint": "(will also add to org)", + "press_enter_to_add": "Press Enter to add {'@'}{username}", + "default_placeholder": "username...", + "suggestions_label": "User suggestions" + }, + "page": { + "packages_title": "Packages", + "no_packages": "No public packages found for", + "no_packages_hint": "This user may not exist or has no public packages.", + "failed_to_load": "Failed to load user packages", + "no_match": "No packages match \"{query}\"", + "filter_placeholder": "Filter {count} package... | Filter {count} packages..." + }, + "orgs_page": { + "title": "Organizations", + "back_to_profile": "Back to profile", + "connect_required": "Connect the local CLI to view your organizations.", + "connect_hint_prefix": "Run", + "connect_hint_suffix": "to get started.", + "own_orgs_only": "You can only view your own organizations.", + "view_your_orgs": "View your organizations", + "loading": "Loading organizations...", + "empty": "No organizations found.", + "empty_hint": "Organizations are detected from your scoped packages.", + "count": "{count} Organization | {count} Organizations", + "packages_count": "{count} package | {count} packages" + } + }, + "claim": { + "modal": { + "title": "Claim Package Name", + "success": "Package claimed!", + "success_detail": "{name}{'@'}0.0.0 has been published to npm.", + "success_hint": "You can now publish new versions to this package using npm publish.", + "view_package": "View Package", + "invalid_name": "Invalid package name:", + "available": "This name is available!", + "taken": "This name is already taken.", + "missing_permission": "You do not have permission to add a package to scope {'@'}{scope}.", + "similar_warning": "Similar packages exist - npm may reject this name:", + "related": "Related packages:", + "scope_warning_title": "Consider using a scoped package instead", + "scope_warning_text": "Unscoped package names are a shared resource. Only claim a name if you intend to publish and maintain a package. For personal or organizational projects, use a scoped name like {'@'}{username}/{name}.", + "connect_required": "Connect to the local connector to claim this package name.", + "connect_button": "Connect to Connector", + "publish_hint": "This will publish a minimal placeholder package.", + "preview_json": "Preview package.json", + "claim_button": "Claim Package Name", + "publishing": "Publishing...", + "checking": "Checking availability...", + "failed_to_check": "Failed to check name availability", + "failed_to_claim": "Failed to claim package" + } + }, + "code": { + "files_label": "Files", + "no_files": "No files in this directory", + "root": "root", + "lines": "{count} line | {count} lines", + "toggle_tree": "Toggle file tree", + "close_tree": "Close file tree", + "copy_link": "Copy link", + "raw": "Raw", + "view_raw": "View raw file", + "file_too_large": "File too large to preview", + "file_size_warning": "{size} exceeds the 500KB limit for syntax highlighting", + "failed_to_load": "Failed to load file", + "unavailable_hint": "The file may be too large or unavailable", + "version_required": "Version is required to browse code", + "go_to_package": "Go to package", + "loading_tree": "Loading file tree...", + "failed_to_load_tree": "Failed to load files for this package version", + "back_to_package": "Back to package", + "table": { + "name": "Name", + "size": "Size" + }, + "markdown_view_mode": { + "preview": "preview", + "code": "code" + }, + "file_path": "File path", + "binary_file": "Binary file", + "binary_rendering_warning": "File type \"{contentType}\" is not supported for preview." + }, + "badges": { + "provenance": { + "verified": "verified", + "verified_title": "Verified provenance", + "verified_via": "Verified: published via {provider}" + }, + "jsr": { + "title": "also available on JSR" + } + }, + "filters": { + "title": "Filters", + "search": "Search", + "search_scope": "Search scope", + "search_placeholder_name": "Filter by package name...", + "search_placeholder_description": "Filter by description...", + "search_placeholder_keywords": "Filter by keywords...", + "search_placeholder_all": "Search all or use name: desc: kw:", + "scope_name": "Name", + "scope_name_description": "Search package names only", + "scope_description": "Description", + "scope_description_description": "Search descriptions only", + "scope_keywords": "Keywords", + "scope_keywords_description": "Search keywords only", + "scope_all": "All", + "scope_all_description": "Search all fields, supports name: desc: kw: operators", + "weekly_downloads": "Weekly downloads", + "updated_within": "Updated within", + "security": "Security", + "keywords": "Keywords", + "more_keywords": "+{count} more", + "clear_all": "Clear all", + "remove_filter": "Remove {label} filter", + "chips": { + "search": "Search", + "downloads": "Downloads", + "keyword": "Keyword", + "security": "Security", + "updated": "Updated" + }, + "download_range": { + "any": "Any", + "lt100": "< 100", + "100_1k": "100 - 1K", + "1k_10k": "1K - 10K", + "10k_100k": "10K - 100K", + "gt100k": "> 100K" + }, + "updated": { + "any": "Any time", + "week": "Past week", + "month": "Past month", + "quarter": "Past 3 months", + "year": "Past year" + }, + "security_options": { + "all": "All packages", + "secure": "Without warnings", + "insecure": "With warnings" + }, + "view_selected": "View selected", + "clear_selected_label": "Clear selected", + "sort": { + "label": "Sort packages", + "toggle_direction": "Toggle sort direction", + "ascending": "Ascending", + "descending": "Descending", + "relevance": "Relevance", + "downloads_week": "Downloads/wk", + "downloads_day": "Downloads/day", + "downloads_month": "Downloads/mo", + "downloads_year": "Downloads/yr", + "published": "Last Published", + "name": "Name" + }, + "columns": { + "title": "Columns", + "show": "Show columns", + "reset": "Reset to defaults", + "coming_soon": "Coming soon", + "name": "Name", + "version": "Version", + "description": "Description", + "downloads": "Downloads/wk", + "published": "Last Published", + "maintainers": "Maintainers", + "keywords": "Keywords", + "security": "Security", + "selection": "Select package" + }, + "view_mode": { + "label": "View mode", + "cards": "Card view", + "table": "Table view" + }, + "pagination": { + "mode_label": "Pagination mode", + "infinite": "Infinite", + "paginated": "Paginated", + "items_per_page": "Items per page", + "per_page": "{count} / page", + "showing": "{range} of {total}", + "previous": "Previous page", + "next": "Next page", + "nav_label": "Pagination" + }, + "count": { + "showing_filtered": "{filtered} of {count} package | {filtered} of {count} packages", + "showing_all": "{count} package | {count} packages", + "showing_paginated": "{pageSize} of {count} package | {pageSize} of {count} packages" + }, + "table": { + "security_warning": "Security warning", + "secure": "Secure", + "no_packages": "No packages found" + } + }, + "about": { + "title": "About", + "heading": "about", + "meta_description": "npmx is a fast, modern browser for the npm registry. A great UX/DX for exploring npm packages.", + "what_we_are": { + "title": "What we are", + "better_ux_dx": "great UX/DX", + "admin_ui": "admin UI", + "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We strive to provide a fast, modern interface for exploring packages, with features like dark mode, keyboard navigation, code browsing, and connections to alternative registries like {jsr}.", + "admin_description": "We also aim to provide a great {adminUi} for managing your packages, teams, and organizations — all from the browser, powered by your local npm CLI." + }, + "what_we_are_not": { + "title": "What we're not", + "not_package_manager": "Not a package manager.", + "not_registry": "Not a registry.", + "registry_description": "We don't host packages. We're just a fast, modern way to browse them.", + "package_managers_exist": "{already} {people} {building} {really} {cool} {package} {managers}.", + "words": { + "already": "There are", + "people": "already", + "building": "people", + "really": "building", + "cool": "really", + "package": "cool", + "managers": "package managers" + } + }, + "sponsors": { + "title": "Sponsors" + }, + "oss_partners": { + "title": "OSS Partners" + }, + "team": { + "title": "Team", + "governance": "Governance", + "role_steward": "steward", + "role_maintainer": "maintainer", + "sponsor": "sponsor", + "sponsor_aria": "Sponsor {name} on GitHub" + }, + "contributors": { + "title": "... and {count} more contributor | ... and {count} more contributors", + "description": "npmx is fully open source, built by an amazing community of contributors. Join us and let's build the npm browsing experience we always wanted, together.", + "loading": "Loading contributors...", + "error": "Failed to load contributors", + "view_profile": "View {name}'s GitHub profile" + }, + "get_involved": { + "title": "Get involved", + "contribute": { + "title": "Contribute", + "description": "Help us build the npm experience we all want.", + "cta": "View on GitHub" + }, + "community": { + "title": "Join the community", + "description": "Chat, ask questions, and share ideas.", + "cta": "Join Discord" + }, + "builders": { + "title": "Help build npmx", + "description": "Join the builders shaping the future of npmx.", + "cta": "Join Builders Discord" + }, + "follow": { + "title": "Stay updated", + "description": "Find out the latest on npmx.", + "cta": "Follow on Bluesky" + } + } + }, + "account_menu": { + "connect": "connect", + "account": "Account", + "npm_cli": "npm CLI", + "atmosphere": "Atmosphere", + "npm_cli_desc": "Manage packages & orgs", + "atmosphere_desc": "Social features & identity", + "connect_npm_cli": "Connect to npm CLI", + "connect_atmosphere": "Connect to Atmosphere", + "connecting": "Connecting...", + "ops": "{count} op | {count} ops" + }, + "auth": { + "modal": { + "title": "Atmosphere", + "connected_as": "Connected as {'@'}{handle}", + "disconnect": "Disconnect", + "connect_prompt": "Connect with your Atmosphere account", + "handle_label": "Handle", + "handle_placeholder": "alice.npmx.social", + "connect": "Connect", + "create_account": "Create a new account", + "connect_bluesky": "Connect with Bluesky", + "what_is_atmosphere": "What is an Atmosphere account?", + "atmosphere_explanation": "{npmx} uses the {atproto} to power many of its social features, allowing users to own their data and use one account for all compatible applications. Once you create an account, you can use other apps like {bluesky} and {tangled} with the same account.", + "default_input_error": "Please enter a valid handle, DID, or a full PDS URL", + "profile": "Profile" + } + }, + "header": { + "home": "npmx home", + "packages": "packages", + "packages_dropdown": { + "title": "Your Packages", + "loading": "Loading...", + "error": "Failed to load packages", + "empty": "No packages found", + "view_all": "View all" + }, + "orgs": "orgs", + "orgs_dropdown": { + "title": "Your Organizations", + "loading": "Loading...", + "error": "Failed to load organizations", + "empty": "No organizations found", + "view_all": "View all" + }, + "pr": "Open GitHub pull request #{prNumber}" + }, + "compare": { + "packages": { + "title": "compare packages", + "tagline": "compare npm packages side-by-side to help you choose the right one.", + "meta_title": "Compare {packages} - npmx", + "meta_title_empty": "Compare Packages - npmx", + "meta_description": "Side-by-side comparison of {packages}", + "meta_description_empty": "Compare npm packages side-by-side", + "section_packages": "Packages", + "section_facets": "Facets", + "section_comparison": "Comparison", + "copy_as_markdown": "Copy table", + "loading": "Loading package data...", + "error": "Failed to load package data. Please try again.", + "empty_title": "Select packages to compare", + "empty_description": "Search and add at least 2 packages above to see a side-by-side comparison of their metrics.", + "table_view": "Table", + "charts_view": "Charts", + "no_chartable_data": "No chartable data available for the selected facets.", + "bar_chart_nav_hint": "Use ↑ ↓", + "line_chart_nav_hint": "Use ← →" + }, + "selector": { + "search_label": "Search for packages", + "search_first": "Search for a package...", + "search_add": "Add another package...", + "searching": "Searching...", + "remove_package": "Remove {package}", + "packages_selected": "{count}/{max} packages selected.", + "add_hint": "Add at least 2 packages to compare." + }, + "no_dependency": { + "label": "(No dependency)", + "typeahead_title": "What Would James Do?", + "typeahead_description": "Compare against not using a dependency! e18e approved.", + "tooltip_title": "You might not need a dependency", + "tooltip_description": "Compare against not using a dependency! The {link} maintains a list of packages that can be replaced with native APIs or simpler alternatives.", + "e18e_community": "e18e community", + "add_column": "Add no dependency column to comparison" + }, + "facets": { + "all": "all", + "none": "none", + "select_all_category_facets": "Select all {category} facets", + "deselect_all_category_facets": "Deselect all {category} facets", + "selected_all_category_facets": "Selected all {category} facets", + "deselected_all_category_facets": "Deselected all {category} facets", + "coming_soon": "Coming soon", + "select_all": "Select all facets", + "deselect_all": "Deselect all facets", + "binary_only_tooltip": "This package exposes binaries and no exports", + "categories": { + "performance": "Performance", + "health": "Health", + "compatibility": "Compatibility", + "security": "Security & Compliance" + }, + "items": { + "packageSize": { + "label": "Package Size", + "description": "Size of the package itself (unpacked)" + }, + "installSize": { + "label": "Install Size", + "description": "Total install size including all dependencies" + }, + "dependencies": { + "label": "Direct Deps", + "description": "Number of direct dependencies" + }, + "totalDependencies": { + "label": "Total Deps", + "description": "Total number of dependencies including transitive" + }, + "downloads": { + "label": "Downloads/wk", + "description": "Weekly download count" + }, + "totalLikes": { + "label": "Likes", + "description": "Number of likes" + }, + "lastUpdated": { + "label": "Published", + "description": "When this version was published" + }, + "deprecated": { + "label": "Deprecated?", + "description": "Whether the package is deprecated" + }, + "engines": { + "label": "Engines", + "description": "Node.js version requirements" + }, + "types": { + "label": "Types", + "description": "TypeScript type definitions" + }, + "moduleFormat": { + "label": "Module Format", + "description": "ESM/CJS support" + }, + "license": { + "label": "License", + "description": "Package license" + }, + "vulnerabilities": { + "label": "Vulnerabilities", + "description": "Known security vulnerabilities" + } + }, + "values": { + "any": "Any", + "none": "None", + "unknown": "Unknown", + "deprecated": "Deprecated", + "not_deprecated": "No", + "types_included": "Included", + "types_none": "None", + "vulnerabilities_summary": "{count} ({critical}C/{high}H)", + "up_to_you": "Up to you!" + }, + "trends": { + "title": "Compare Trends" + } + }, + "file_changes": "File Changes", + "files_count": "{count} file | {count} files", + "lines_hidden": "{count} line hidden | {count} lines hidden", + "file_too_large": "File too large to compare", + "file_size_warning": "{size} exceeds the 250KB limit for comparison", + "compare_versions": "diff", + "compare_versions_title": "Compare with latest version", + "comparing_versions_label": "Comparing versions...", + "version_back_to_package": "Back to package", + "version_error_message": "Failed to compare versions.", + "version_invalid_url_format": { + "hint": "Invalid comparison URL. Use format: {0}", + "from_version": "from", + "to_version": "to" + }, + "version_selector_title": "Compare with version", + "summary": "Summary", + "deps_count": "{count} dep | {count} deps", + "dependencies": "Dependencies", + "dev_dependencies": "Dev Dependencies", + "peer_dependencies": "Peer Dependencies", + "optional_dependencies": "Optional Dependencies", + "no_dependency_changes": "No dependency changes", + "file_filter_option": { + "all": "All ({count})", + "added": "Added ({count})", + "removed": "Removed ({count})", + "modified": "Modified ({count})" + }, + "search_files_placeholder": "Search files...", + "no_files_all": "No files", + "no_files_search": "No files matching \"{query}\"", + "no_files_filtered": "No {filter} files", + "filter": { + "added": "added", + "removed": "removed", + "modified": "modified" + }, + "files_button": "Files", + "select_file_prompt": "Select a file from the sidebar to view its diff", + "close_files_panel": "Close files panel", + "filter_files_label": "Filter files by change type", + "change_ratio": "Change ratio", + "char_edits": "Char edits", + "diff_distance": "Diff distance", + "loading_diff": "Loading diff...", + "loading_diff_error": "Failed to load diff", + "merge_modified_lines": "Merge modified lines", + "no_content_changes": "No content changes detected", + "options": "Options", + "view_file": "View file", + "view_in_code_browser": "View in code browser", + "word_wrap": "Word wrap" + }, + "pds": { + "title": "npmx.social", + "meta_description": "The official AT Protocol Personal Data Server (PDS) for the npmx community.", + "join": { + "title": "Join the Community", + "description": "Whether you are creating your first account on the atmosphere or migrating an existing one, you belong here. You can migrate your current account without losing your handle, your posts, or your followers.", + "migrate": "Migrate with PDS MOOver" + }, + "server": { + "title": "Server Details", + "location_label": "Location:", + "location_value": "Nuremberg, Germany", + "infrastructure_label": "Infrastructure:", + "infrastructure_value": "Hosted on Hetzner", + "privacy_label": "Privacy:", + "privacy_value": "Subject to strict EU Data Protection laws", + "learn_more": "Learn how npmx uses the Atmosphere" + }, + "community": { + "title": "Who is here", + "description": "Some of the {count} accounts that are already calling npmx.social home:", + "loading": "Loading PDS community...", + "error": "Failed to load PDS community.", + "empty": "No community members to display.", + "view_profile": "View {handle}'s profile", + "new_accounts": "...plus {count} more that are new to the atmosphere" + } + }, + "privacy_policy": { + "title": "privacy policy", + "last_updated": "Last updated: {date}", + "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.", + "cookies": { + "what_are": { + "title": "What are cookies?", + "p1": "Cookies are small text files stored on your device when you visit a website. Their purpose is to enhance your browsing experience by remembering certain preferences and settings." + }, + "types": { + "title": "What cookies do we use?", + "p1": "We only use {bold} for purposes strictly necessary for the site's functionality. We do not use third-party or advertising cookies.", + "bold": "essential technical cookies", + "li1": "{li11}{separator} {li12}", + "li2": "{li21}{separator} {li22}", + "separator": ":", + "cookie_vdpl": "__vdpl", + "cookie_vdpl_desc": "This cookie is used by our hosting provider (Vercel) for skew protection. It ensures you fetch assets from the correct deployment version if a new update is released while you are browsing. It does not track you.", + "cookie_h3": "h3", + "cookie_h3_desc": "This is our secure session cookie. It stores the OAuth access token when you connect your Atmosphere account. It is essential for maintaining your authenticated session." + }, + "local_storage": { + "title": "Local storage", + "p1": "In addition to session cookies, we use your browser's {bold} to save your display preferences. This allows us to remember the theme (light/dark) and some other {settings} you have selected, so you don't have to reconfigure them on each visit.", + "bold": "Local Storage", + "p2": "This information is purely functional, stored only on your device, and {bold2}. We use it exclusively to improve your experience on our website.", + "bold2": "contains no personal data nor is it used to track you", + "settings": "settings" + }, + "management": { + "title": "Managing cookies", + "p1": "You can configure your browser to accept, reject, or delete cookies according to your preferences. However, please note that {bold}.", + "bold": "rejecting essential cookies may prevent full access to the application", + "p2": "Below are links with instructions for cookie management in the most commonly used browsers:", + "chrome": "Google Chrome (opens in a new window)", + "firefox": "Mozilla Firefox (opens in a new window)", + "edge": "Microsoft Edge (opens in a new window)" + } + }, + "analytics": { + "title": "Analytics", + "p1": "We use {bold} to understand how visitors use our website. This helps us improve the user experience and identify issues.", + "bold": "Vercel Web Analytics", + "p2": "Vercel Analytics is designed with privacy in mind:", + "li1": "It does not use cookies", + "li2": "It does not collect personal identifiers", + "li3": "It does not track users across websites", + "li4": "All data is aggregated and anonymised", + "p3": "The only information collected includes: page URLs, referrer, country/region, device type, browser, and operating system. This data cannot be used to identify individual users." + }, + "authenticated": { + "title": "Authenticated users", + "p1": "When you connect your {bold} account to npmx, we store your OAuth access token in a secure, HTTP-only session cookie. This token is used solely to authenticate requests on your behalf.", + "bold": "Atmosphere", + "p2": "We do not store your credentials, and we do not access any data beyond what is necessary to provide the features you use. You can disconnect your account at any time from the {settings} page.", + "settings": "settings" + }, + "data_retention": { + "title": "Data retention", + "p1": "Session cookies are automatically deleted when you close your browser or after a period of inactivity. Local storage preferences remain on your device until you clear your browser data. Analytics data is retained in aggregate form and cannot be linked to individual users." + }, + "your_rights": { + "title": "Your rights", + "p1": "You have the right to:", + "li1": "Access information about what data we collect", + "li2": "Clear your local storage and cookies at any time", + "li3": "Disconnect your authenticated session", + "li4": "Request information about our data practices", + "p2": "Since we do not collect personal data, there is typically no personal information to delete or export." + }, + "contact": { + "title": "Contact us", + "p1": "For any questions or concerns about this privacy policy, you can contact us by opening an issue on our {link}.", + "link": "GitHub repository" + }, + "changes": { + "title": "Changes to this policy", + "p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date." + } + }, + "a11y": { + "title": "accessibility", + "footer_title": "a11y", + "welcome": "We want {app} to be usable by as many people as possible.", + "approach": { + "title": "Our approach", + "p1": "We try to follow the Web Content Accessibility Guidelines (WCAG) 2.2 and use them as a reference when building features. We don't claim full conformance with any level of WCAG — accessibility is a continual process and there is always more work to do.", + "p2": "This site is an {about}. Accessibility improvements are made incrementally as part of our regular development.", + "about_link": "open-source, community-driven project" + }, + "measures": { + "title": "What we do", + "p1": "Some of the things we aim to do across the site:", + "li1": "Use semantic HTML and ARIA attributes where appropriate.", + "li2": "Use relative text sizes so you can adjust them in your browser.", + "li3": "Support keyboard navigation throughout the interface.", + "li4": "Respect the prefers-reduced-motion and prefers-color-scheme media queries.", + "li5": "Design with sufficient color contrast in mind.", + "li6": "Ensure essential content is available without JavaScript, though some interactive features require it." + }, + "limitations": { + "title": "Known limitations", + "p1": "Some parts of the site — particularly third-party content like package READMEs — may not meet accessibility standards. We are working to improve these areas over time." + }, + "contact": { + "title": "Feedback", + "p1": "If you encounter an accessibility barrier on {app}, please let us know by opening an issue on our {link}. We take these reports seriously and will do our best to address them.", + "link": "GitHub repository" + } + }, + "translation_status": { + "title": "translation status", + "generated_at": "Generation date: {date}", + "welcome": "If you're interested in helping us to translate {npmx} into one of the languages listed below, you've come to the right place! This auto-updating page always lists all the content that could use your help right now.", + "p1": "We use {lang} as the default language, with a total of {count}. If you'd like to help add translations, locate the language in {bylang} and expand the details.", + "p1_lang": "American English (en-US)", + "p1_count": "0 messages | 1 message |{count} messages", + "p2": "Before starting, please read our {guide} to learn about our translation process and how you can get involved.", + "guide": "localization (i18n) guide", + "by_locale": "Translation progress by locale", + "by_file": "Translation progress by file", + "complete_text": "This translation is complete, amazing job!", + "missing_text": "missing", + "missing_keys": "There is no missing translations | Missing translation | Missing translations", + "progress_label": "Progress status for {locale}", + "table": { + "file": "File", + "status": "Status", + "error": "Error while loading file list.", + "empty": "No files found", + "file_link": "Edit {file} ({lang}) on GitHub" + } + }, + "vacations": { + "title": "on vacation", + "meta_description": "The npmx team was recharging. Discord reopened after a week.", + "heading": "recharging", + "subtitle": "we were building npmx at a pace that was costing {some} of us sleep. we didn't want that to be the norm! so we took a week off. together.", + "illustration_alt": "a single row of cosy icons", + "poke_log": "Poke the campfire", + "what": { + "title": "what happened", + "p1": "discord was closed {dates}.", + "dates": "February 14 – 21", + "p2": "all invite links were gone and channels were locked – except {garden}, which stayed open for folks who wanted to keep hanging out.", + "garden": "#garden" + }, + "meantime": { + "title": "in the meantime", + "p1": "{site} and {repo} stayed open – people still dug in, filed some issues, opened a few PRs, but mainly everyone spent time somewhere near a cosy fireplace.", + "repo_link": "the repo" + }, + "return": { + "title": "we came back!", + "p1": "we came back recharged and ready for the final push to March 3rd. {social} for updates.", + "social_link": "follow us on Bluesky" + }, + "stats": { + "contributors": "Contributors", + "commits": "Commits", + "pr": "PRs Merged", + "subtitle": { + "some": "some", + "all": "all" + } + } + }, + "action_bar": { + "title": "action bar", + "selection": "0 selected | 1 selected | {count} selected", + "shortcut": "Press \"{key}\" to focus actions", + "button_close_aria_label": "Close action bar" + }, + "logo_menu": { + "copy_svg": "Kopiér logo som SVG", + "copied": "Kopieret!", + "browse_brand": "Gennemse brandkit" + }, + "brand": { + "title": "Brand", + "heading": "brand", + "meta_description": "npmx brand guidelines, logos, colors, and typography for use in press and media.", + "intro": "Resources and guidelines for using the npmx brand in your projects, articles, and media.", + "logos": { + "title": "logos", + "description": "Download npmx logos in SVG and PNG formats. Use the appropriate variant for your background.", + "wordmark": "FULL WORDMARK", + "wordmark_alt": "npmx full wordmark logo with blue slash on dark background", + "wordmark_light_alt": "npmx full wordmark logo with accent slash on light background", + "mark": "LOGO MARK", + "mark_alt": "npmx logo mark with dot and slash on dark background", + "mark_light_alt": "npmx logo mark with dot and slash on light background", + "on_dark": "on dark", + "on_light": "on light", + "download_svg": "SVG", + "download_png": "PNG", + "download_svg_aria": "Download {name} as SVG", + "download_png_aria": "Download {name} as PNG" + }, + "customize": { + "title": "customize your logo", + "description": "Preview the npmx logo with your accent color and background. The preview reflects your current settings — pick a color, toggle the background, and download.", + "accent_label": "accent", + "bg_label": "background", + "download_svg_aria": "Download customized logo as SVG", + "download_png_aria": "Download customized logo as PNG" + }, + "typography": { + "title": "typography", + "description": "npmx uses the Geist font family by Vercel for both interface text and code.", + "sans": "Geist Sans", + "sans_desc": "Used for body text and UI elements.", + "mono": "Geist Mono", + "mono_desc": "Used for code, headings, and technical content.", + "pangram": "The quick brown fox jumps over the lazy dog", + "numbers": "0123456789" + }, + "guidelines": { + "title": "just a note", + "message": "Accessibility matters to us, and we would love you to follow us in this vision. When using mentioned media, ensure there is enough contrast against the background, and don't go smaller than 24px. If you need any other resources or additional information about the project, feel free to reach us at {link}.", + "discord_link_text": "chat.npmx.dev" + } + } +} From 49d5f7090efa5c1ef59920b68935a34907bc1b1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lucas=20N=C3=B8rg=C3=A5rd?= Date: Tue, 31 Mar 2026 21:21:31 +0200 Subject: [PATCH 2/7] chore: apply suggestion MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Jens Rømer Hesselbjerg --- i18n/locales/da-DK.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index cc2eed361..3385cf48d 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -129,7 +129,7 @@ "label": "Datakilde", "description": "Vælg, hvor npmx henter søgedata fra. Individuelle pakkesider bruger altid npm-registret direkte.", "npm": "npm Registry", - "npm_description": "Henter søgning, organisation og brugeroplysninger direkte fra det officielle npm-registre. Autoritativt, men kan være langsommere.", + "npm_description": "Henter søgning, organisation og brugeroplysninger direkte fra det officielle npm-register. Autoritativt, men kan være langsommere.", "algolia": "Algolia", "algolia_description": "Bruger Algolia for hurtigere søgning, organisations- og brugersider." }, From b0f98b19be262f1eddb5500b75db3133b62e021a Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 31 Mar 2026 21:27:20 +0200 Subject: [PATCH 3/7] fix(i18n): update danish translations for clarity and accuracy --- i18n/locales/da-DK.json | 44 ++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index 3385cf48d..ec7b1df27 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -69,7 +69,7 @@ "view_user_packages": "Se pakker fra denne bruger", "view_org_packages": "Se pakker fra denne organisation" }, - "instant_search": "Instant søgning", + "instant_search": "Øjeblikkelig søgning", "instant_search_on": "på", "instant_search_off": "fra", "instant_search_turn_on": "tænd", @@ -127,13 +127,13 @@ }, "data_source": { "label": "Datakilde", - "description": "Vælg, hvor npmx henter søgedata fra. Individuelle pakkesider bruger altid npm-registret direkte.", + "description": "Vælg, hvor npmx henter søgedata fra. Individuelle pakkesider bruger altid npm-registeret direkte.", "npm": "npm Registry", - "npm_description": "Henter søgning, organisation og brugeroplysninger direkte fra det officielle npm-register. Autoritativt, men kan være langsommere.", + "npm_description": "Henter søgning, organisation og brugeroplysninger direkte fra det officielle npm-register. Altid korrekt, men kan være langsommere.", "algolia": "Algolia", "algolia_description": "Bruger Algolia for hurtigere søgning, organisations- og brugersider." }, - "instant_search": "Instant søgning", + "instant_search": "Øjeblikkelig søgning", "instant_search_description": "Navigerer til søgesiden og opdaterer resultaterne, mens du skriver.", "relative_dates": "Relative datoer", "include_types": "Inkluder {'@'}types i installationen", @@ -593,30 +593,30 @@ "fixed_in_title": "Fixed in version {version}" }, "deprecated": { - "label": "Deprecated", - "tree_found": "{count} deprecated dependency | {count} deprecated dependencies", - "show_all": "show {count} deprecated package | show all {count} deprecated packages" + "label": "Forældet", + "tree_found": "{count} forældet afhængighed | {count} forældede afhængigheder", + "show_all": "vis {count} forældet pakke | vis alle {count} forældede pakker" }, "access": { - "title": "Team Access", - "refresh": "Refresh team access", - "list_label": "Team access list", - "owner": "owner", + "title": "Teamadgang", + "refresh": "Opdater teamadgang", + "list_label": "Teamadgangsliste", + "owner": "ejer", "rw": "rw", "ro": "ro", - "revoke_access": "Revoke {name} access", - "no_access": "No team access configured", - "select_team_label": "Select team", - "loading_teams": "Loading teams...", - "select_team": "Select team", - "permission_label": "Permission level", + "revoke_access": "Fjern {name} adgang", + "no_access": "Ingen teamadgang konfigureret", + "select_team_label": "Vælg team", + "loading_teams": "Indlæser teams...", + "select_team": "Vælg team", + "permission_label": "Tilladelsesniveau", "permission": { - "read_only": "read-only", - "read_write": "read-write" + "read_only": "kun læse", + "read_write": "læse-skrive" }, - "grant_button": "grant", - "cancel_grant": "Cancel granting access", - "grant_access": "+ Grant team access" + "grant_button": "tildel", + "cancel_grant": "Annuller tildeling af adgang", + "grant_access": "+ Tildel teamadgang" }, "list": { "filter_label": "Filter packages", From 47453c96f34d0a0efd08d9ca0f4a74348cc263c3 Mon Sep 17 00:00:00 2001 From: Lucas Date: Tue, 31 Mar 2026 21:42:16 +0200 Subject: [PATCH 4/7] fix(i18n): update danish translations for accuracy and clarity --- i18n/locales/da-DK.json | 238 ++++++++++++++++++++-------------------- 1 file changed, 119 insertions(+), 119 deletions(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index ec7b1df27..eed84e2a6 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -556,7 +556,7 @@ "install_scripts": { "title": "Installationsscripts", "script_label": "(script)", - "npx_packages": "{count} npx package | {count} npx packages", + "npx_packages": "{count} npx pakke | {count} npx pakker", "currently": "currently {version}" }, "playgrounds": { @@ -564,33 +564,33 @@ "choose": "vælg legeplads" }, "metrics": { - "esm": "ES Modules supported", - "cjs": "CommonJS supported", - "no_esm": "ES Modules unsupported", - "wasm": "Has WebAssembly", - "types_label": "Types", - "types_included": "Types included", - "types_available": "Types available via {package}", - "no_types": "No types" + "esm": "ES Modules understøttet", + "cjs": "CommonJS understøttet", + "no_esm": "ES Modules ikke understøttet", + "wasm": "Har WebAssembly", + "types_label": "Typer", + "types_included": "Typer inkluderet", + "types_available": "Typer tilgængelige via {package}", + "no_types": "Ingen typer" }, "license": { - "view_spdx": "View license text on SPDX", - "none": "None" + "view_spdx": "Se licens tekst på SPDX", + "none": "Ingen" }, "vulnerabilities": { - "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", - "show_all_packages": "show {count} affected package | show all {count} affected packages", - "path": "path", - "more": "+{count} more", - "packages_failed": "{count} package could not be checked | {count} packages could not be checked", - "scan_failed": "Could not scan for vulnerabilities", + "tree_found": "{vulns} sårbarhed i {packages}/{total} pakker | {vulns} sårbarheder i {packages}/{total} pakker", + "show_all_packages": "vis {count} berørte pakke | vis alle {count} berørte pakker", + "path": "sti", + "more": "+{count} mere", + "packages_failed": "{count} pakke kunne ikke kontrolleres | {count} pakker kunne ikke kontrolleres", + "scan_failed": "Kunne ikke scanne for sårbarheder", "severity": { - "critical": "critical", - "high": "high", - "moderate": "moderate", - "low": "low" + "critical": "kritisk", + "high": "høj", + "moderate": "moderat", + "low": "lav" }, - "fixed_in_title": "Fixed in version {version}" + "fixed_in_title": "Håndteret i version {version}" }, "deprecated": { "label": "Forældet", @@ -619,23 +619,23 @@ "grant_access": "+ Tildel teamadgang" }, "list": { - "filter_label": "Filter packages", - "filter_placeholder": "Filter packages...", - "sort_label": "Sort packages", - "showing_count": "Showing {filtered} of {total} packages" + "filter_label": "Filtrer pakker", + "filter_placeholder": "Filtrer pakker...", + "sort_label": "Sorter pakker", + "showing_count": "Viser {filtered} af {total} pakker" }, "skeleton": { - "loading": "Loading package details", - "maintainers": "Maintainers", - "keywords": "Keywords", - "versions": "Versions", - "dependencies": "Dependencies" + "loading": "Indlæser pakkeoplysninger", + "maintainers": "Vedligeholdere", + "keywords": "Nøgleord", + "versions": "Versioner", + "dependencies": "Afhængigheder" }, "sort": { - "downloads": "Most downloaded", - "published": "Recently published", - "name_asc": "Name (A-Z)", - "name_desc": "Name (Z-A)" + "downloads": "Mest downloadede", + "published": "Senest udgivet", + "name_asc": "Navn (A-Z)", + "name_desc": "Navn (Z-A)" }, "size": { "b": "{size} B", @@ -644,7 +644,7 @@ }, "download": { "button": "Download", - "tarball": "Download Tarball as .tar.gz" + "tarball": "Download Tarball som .tar.gz" } }, "connector": { @@ -671,107 +671,107 @@ }, "operations": { "queue": { - "title": "Operations Queue", - "clear_all": "clear all", - "refresh": "Refresh operations", - "empty": "No operations queued", - "empty_hint": "Add operations from package or org pages", - "active_label": "Active operations", - "otp_required": "OTP required", - "otp_prompt": "Enter OTP to continue", - "otp_placeholder": "Enter OTP code...", - "otp_label": "One-time password", - "retry_otp": "Retry with OTP", - "retry_web_auth": "Retry with web auth", - "retrying": "Retrying...", - "open_web_auth": "Open web auth link", - "approve_operation": "Approve operation", - "remove_operation": "Remove operation", - "approve_all": "Approve All", - "execute": "Execute", - "executing": "Executing...", + "title": "Operationskø", + "clear_all": "ryd alle", + "refresh": "Opdater operationer", + "empty": "Ingen operationer i kø", + "empty_hint": "Tilføj operationer fra pakke- eller organisationssider", + "active_label": "Aktive operationer", + "otp_required": "OTP påkrævet", + "otp_prompt": "Indtast OTP for at fortsætte", + "otp_placeholder": "Indtast OTP-kode...", + "otp_label": "Engangskode", + "retry_otp": "Prøv igen med OTP", + "retry_web_auth": "Prøv igen med webauth", + "retrying": "Forsøger igen...", + "open_web_auth": "Åbn webauth-link", + "approve_operation": "Godkend operation", + "remove_operation": "Fjern operation", + "approve_all": "Godkend alle", + "execute": "Udfør", + "executing": "Udfører...", "log": "Log", - "log_label": "Completed operations log", - "remove_from_log": "Remove from log" + "log_label": "Log over gennemførte operationer", + "remove_from_log": "Fjern fra log" } }, "org": { "teams": { "title": "Teams", - "refresh": "Refresh teams", - "filter_label": "Filter teams", - "filter_placeholder": "Filter teams...", - "sort_by": "Sort by", - "loading": "Loading teams...", - "no_teams": "No teams found", - "list_label": "Organization teams", - "delete_team": "Delete team {name}", - "member_count": "{count} member | {count} members", - "members_of": "Members of {team}", - "no_members": "No members", - "remove_user": "Remove {user} from team", - "username_to_add": "Username to add to {team}", - "username_placeholder": "username...", - "add_button": "add", - "cancel_add_user": "Cancel adding user", - "add_member": "+ Add member", - "team_name_label": "Team name", - "team_name_placeholder": "team-name...", - "create_button": "create", - "no_match": "No teams match \"{query}\"", - "cancel_create": "Cancel creating team", - "create_team": "+ Create team" + "refresh": "Opdater teams", + "filter_label": "Filtrer teams", + "filter_placeholder": "Filtrer teams...", + "sort_by": "Sorter efter", + "loading": "Indlæser teams...", + "no_teams": "Ingen teams fundet", + "list_label": "Organisationsteams", + "delete_team": "Slet team {name}", + "member_count": "{count} medlem | {count} medlemmer", + "members_of": "Medlemmer af {team}", + "no_members": "Ingen medlemmer", + "remove_user": "Fjern {user} fra team", + "username_to_add": "Brugernavn tilføjes til {team}", + "username_placeholder": "brugernavn...", + "add_button": "tilføj", + "cancel_add_user": "Annuller tilføjelse af bruger", + "add_member": "+ Tilføj medlem", + "team_name_label": "Team navn", + "team_name_placeholder": "team-navn...", + "create_button": "opret", + "no_match": "Ingen teams matcher \"{query}\"", + "cancel_create": "Annuller oprettelse af team", + "create_team": "+ Opret team" }, "members": { - "title": "Members", - "refresh": "Refresh members", - "filter_label": "Filter members", - "filter_placeholder": "Filter members...", - "filter_by_role": "Filter by role", - "filter_by_team": "Filter by team", - "all_teams": "all teams", - "sort_by": "Sort by", - "loading": "Loading members...", - "no_members": "No members found", - "list_label": "Organization members", - "change_role_for": "Change role for {name}", - "remove_from_org": "Remove {name} from org", - "view_team": "View {team} team", - "no_match": "No members match your filters", - "username_label": "Username", - "username_placeholder": "username...", - "role_label": "Role", + "title": "Medlemmer", + "refresh": "Opdater medlemmer", + "filter_label": "Filtrer medlemmer", + "filter_placeholder": "Filtrer medlemmer...", + "filter_by_role": "Filtrer efter rolle", + "filter_by_team": "Filtrer efter team", + "all_teams": "alle teams", + "sort_by": "Sorter efter", + "loading": "Indlæser medlemmer...", + "no_members": "Ingen medlemmer fundet", + "list_label": "Organisationens medlemmer", + "change_role_for": "Skift rolle for {name}", + "remove_from_org": "Fjern {name} fra organisationen", + "view_team": "Se {team} team", + "no_match": "Ingen medlemmer matcher dine filtre", + "username_label": "Brugernavn", + "username_placeholder": "brugernavn...", + "role_label": "Rolle", "role": { - "all": "all", - "developer": "developer", - "admin": "admin", - "owner": "owner" + "all": "alle", + "developer": "udvikler", + "admin": "administrator", + "owner": "ejer" }, "team_label": "Team", - "no_team": "no team", - "add_button": "add", - "cancel_add": "Cancel adding member", - "add_member": "+ Add member" + "no_team": "intet team", + "add_button": "tilføj", + "cancel_add": "Annuller tilføjelse af medlem", + "add_member": "+ Tilføj medlem" }, - "public_packages": "{count} public package | {count} public packages", + "public_packages": "{count} offentlig pakke | {count} offentlige pakker", "page": { - "packages_title": "Packages", - "members_tab": "Members", + "packages_title": "Pakker", + "members_tab": "Medlemmer", "teams_tab": "Teams", - "no_packages": "No public packages found for", - "no_packages_hint": "This organization may not exist or has no public packages.", - "failed_to_load": "Failed to load organization packages", - "no_match": "No packages match \"{query}\"", - "not_found": "Organization not found", - "not_found_message": "The organization \"{'@'}{name}\" does not exist on npm" + "no_packages": "Ingen offentlige pakker fundet for", + "no_packages_hint": "Denne organisation findes muligvis ikke eller har ingen offentlige pakker.", + "failed_to_load": "Kunne ikke indlæse organisationspakker", + "no_match": "Ingen pakker matcher \"{query}\"", + "not_found": "Organisation ikke fundet", + "not_found_message": "Organisationen \"{'@'}{name}\" findes ikke på npm" } }, "user": { "combobox": { - "add_to_org_hint": "(will also add to org)", - "press_enter_to_add": "Press Enter to add {'@'}{username}", - "default_placeholder": "username...", - "suggestions_label": "User suggestions" + "add_to_org_hint": "(vil også blive tilføjet til organisationen)", + "press_enter_to_add": "Tryk Enter for at tilføje {'@'}{username}", + "default_placeholder": "brugernavn...", + "suggestions_label": "Brugerforslag" }, "page": { "packages_title": "Packages", From 147cfcddbdc2560394650c71aacc6105868d98be Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 1 Apr 2026 05:40:39 +0200 Subject: [PATCH 5/7] fix(i18n): update danish translations for packages and organization pages --- i18n/locales/da-DK.json | 264 ++++++++++++++++++++-------------------- 1 file changed, 132 insertions(+), 132 deletions(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index eed84e2a6..449e43b55 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -774,127 +774,127 @@ "suggestions_label": "Brugerforslag" }, "page": { - "packages_title": "Packages", - "no_packages": "No public packages found for", - "no_packages_hint": "This user may not exist or has no public packages.", - "failed_to_load": "Failed to load user packages", - "no_match": "No packages match \"{query}\"", - "filter_placeholder": "Filter {count} package... | Filter {count} packages..." + "packages_title": "Pakker", + "no_packages": "Ingen offentlige pakker fundet for", + "no_packages_hint": "Denne bruger findes muligvis ikke eller har ingen offentlige pakker.", + "failed_to_load": "Kunne ikke indlæse bruger pakker", + "no_match": "Ingen pakker matcher \"{query}\"", + "filter_placeholder": "Filtrer {count} pakke... | Filtrer {count} pakker..." }, "orgs_page": { - "title": "Organizations", - "back_to_profile": "Back to profile", - "connect_required": "Connect the local CLI to view your organizations.", - "connect_hint_prefix": "Run", - "connect_hint_suffix": "to get started.", - "own_orgs_only": "You can only view your own organizations.", - "view_your_orgs": "View your organizations", - "loading": "Loading organizations...", - "empty": "No organizations found.", - "empty_hint": "Organizations are detected from your scoped packages.", - "count": "{count} Organization | {count} Organizations", - "packages_count": "{count} package | {count} packages" + "title": "Organisationer", + "back_to_profile": "Tilbage til profil", + "connect_required": "Forbind den lokale CLI for at se dine organisationer.", + "connect_hint_prefix": "Kør", + "connect_hint_suffix": "for at komme i gang.", + "own_orgs_only": "Du kan kun se dine egne organisationer.", + "view_your_orgs": "Se dine organisationer", + "loading": "Indlæser organisationer...", + "empty": "Ingen organisationer fundet.", + "empty_hint": "Organisationer opdages fra dine scoped pakker.", + "count": "{count} Organisation | {count} Organisationer", + "packages_count": "{count} pakke | {count} pakker" } }, "claim": { "modal": { - "title": "Claim Package Name", - "success": "Package claimed!", - "success_detail": "{name}{'@'}0.0.0 has been published to npm.", - "success_hint": "You can now publish new versions to this package using npm publish.", - "view_package": "View Package", - "invalid_name": "Invalid package name:", - "available": "This name is available!", - "taken": "This name is already taken.", - "missing_permission": "You do not have permission to add a package to scope {'@'}{scope}.", - "similar_warning": "Similar packages exist - npm may reject this name:", - "related": "Related packages:", - "scope_warning_title": "Consider using a scoped package instead", - "scope_warning_text": "Unscoped package names are a shared resource. Only claim a name if you intend to publish and maintain a package. For personal or organizational projects, use a scoped name like {'@'}{username}/{name}.", - "connect_required": "Connect to the local connector to claim this package name.", - "connect_button": "Connect to Connector", - "publish_hint": "This will publish a minimal placeholder package.", - "preview_json": "Preview package.json", - "claim_button": "Claim Package Name", - "publishing": "Publishing...", - "checking": "Checking availability...", - "failed_to_check": "Failed to check name availability", - "failed_to_claim": "Failed to claim package" + "title": "Reserver Pakke Navn", + "success": "Pakke reserveret!", + "success_detail": "{name}{'@'}0.0.0 er blevet publiceret på npm.", + "success_hint": "Du kan nu publicere nye versioner af denne pakke ved hjælp af npm publish.", + "view_package": "Se pakke", + "invalid_name": "Ugyldigt pakkenavn:", + "available": "Dette navn er tilgængeligt!", + "taken": "Dette navn er allerede taget.", + "missing_permission": "Du har ikke tilladelse til at tilføje en pakke til scope {'@'}{scope}.", + "similar_warning": "Lignende pakker findes - npm kan afvise dette navn:", + "related": "Relaterede pakker:", + "scope_warning_title": "Overvej at bruge en scoped pakke i stedet", + "scope_warning_text": "Unscoped pakkenavne er en delt ressource. Kræv kun et navn, hvis du har til hensigt at publicere og vedligeholde en pakke. For personlige eller organisatoriske projekter, brug et scoped navn som {'@'}{username}/{name}.", + "connect_required": "Forbind til den lokale connector for at kræve dette pakkenavn.", + "connect_button": "Forbind til Connector", + "publish_hint": "Dette vil publicere en minimal placeholder-pakke.", + "preview_json": "Forhåndsvis package.json", + "claim_button": "Reserver pakkenavn", + "publishing": "Publicerer...", + "checking": "Tjekker tilgængelighed...", + "failed_to_check": "Kunne ikke tjekke navnets tilgængelighed", + "failed_to_claim": "Kunne ikke reservere pakken" } }, "code": { - "files_label": "Files", - "no_files": "No files in this directory", - "root": "root", - "lines": "{count} line | {count} lines", - "toggle_tree": "Toggle file tree", - "close_tree": "Close file tree", - "copy_link": "Copy link", - "raw": "Raw", - "view_raw": "View raw file", - "file_too_large": "File too large to preview", - "file_size_warning": "{size} exceeds the 500KB limit for syntax highlighting", - "failed_to_load": "Failed to load file", - "unavailable_hint": "The file may be too large or unavailable", - "version_required": "Version is required to browse code", - "go_to_package": "Go to package", - "loading_tree": "Loading file tree...", - "failed_to_load_tree": "Failed to load files for this package version", - "back_to_package": "Back to package", + "files_label": "Filer", + "no_files": "Ingen filer i denne mappe", + "root": "rod", + "lines": "{count} linje | {count} linjer", + "toggle_tree": "Skift filtræ", + "close_tree": "Luk filtræ", + "copy_link": "Kopiér link", + "raw": "Rå", + "view_raw": "Se rå fil", + "file_too_large": "Fil for stor til forhåndsvisning", + "file_size_warning": "{size} overskrider 500KB-grænsen for syntaksfremhævning", + "failed_to_load": "Kunne ikke indlæse fil", + "unavailable_hint": "Filen kan være for stor eller utilgængelig", + "version_required": "Version er påkrævet for at gennemse kode", + "go_to_package": "Gå til pakke", + "loading_tree": "Indlæser filtræ...", + "failed_to_load_tree": "Kunne ikke indlæse filer for denne pakkeversion", + "back_to_package": "Tilbage til pakke", "table": { - "name": "Name", - "size": "Size" + "name": "Navn", + "size": "Størrelse" }, "markdown_view_mode": { - "preview": "preview", - "code": "code" + "preview": "Forhåndsvisning", + "code": "Kode" }, - "file_path": "File path", - "binary_file": "Binary file", - "binary_rendering_warning": "File type \"{contentType}\" is not supported for preview." + "file_path": "Filsti", + "binary_file": "Binær fil", + "binary_rendering_warning": "Filtypen \"{contentType}\" understøttes ikke til forhåndsvisning." }, "badges": { "provenance": { - "verified": "verified", - "verified_title": "Verified provenance", - "verified_via": "Verified: published via {provider}" + "verified": "verificeret", + "verified_title": "Verificeret oprindelse", + "verified_via": "Verificeret: publiceret via {provider}" }, "jsr": { - "title": "also available on JSR" + "title": "også tilgængelig på JSR" } }, "filters": { - "title": "Filters", - "search": "Search", - "search_scope": "Search scope", - "search_placeholder_name": "Filter by package name...", - "search_placeholder_description": "Filter by description...", - "search_placeholder_keywords": "Filter by keywords...", - "search_placeholder_all": "Search all or use name: desc: kw:", - "scope_name": "Name", - "scope_name_description": "Search package names only", - "scope_description": "Description", - "scope_description_description": "Search descriptions only", - "scope_keywords": "Keywords", - "scope_keywords_description": "Search keywords only", - "scope_all": "All", - "scope_all_description": "Search all fields, supports name: desc: kw: operators", - "weekly_downloads": "Weekly downloads", - "updated_within": "Updated within", - "security": "Security", - "keywords": "Keywords", - "more_keywords": "+{count} more", - "clear_all": "Clear all", - "remove_filter": "Remove {label} filter", + "title": "Filtre", + "search": "Søg", + "search_scope": "Søgeområde", + "search_placeholder_name": "Filtrer efter pakkenavn...", + "search_placeholder_description": "Filtrer efter beskrivelse...", + "search_placeholder_keywords": "Filtrer efter nøgleord...", + "search_placeholder_all": "Søg i alle eller brug name: desc: kw:", + "scope_name": "Navn", + "scope_name_description": "Søg kun i pakkenavne", + "scope_description": "Beskrivelse", + "scope_description_description": "Søg kun i beskrivelser", + "scope_keywords": "Nøgleord", + "scope_keywords_description": "Søg kun i nøgleord", + "scope_all": "Alle", + "scope_all_description": "Søg i alle felter, understøtter name: desc: kw: operatorer", + "weekly_downloads": "Ugentlige downloads", + "updated_within": "Opdateret inden for", + "security": "Sikkerhed", + "keywords": "Nøgleord", + "more_keywords": "+{count} mere", + "clear_all": "Ryd alle", + "remove_filter": "Fjern {label} filter", "chips": { - "search": "Search", + "search": "Søg", "downloads": "Downloads", - "keyword": "Keyword", - "security": "Security", - "updated": "Updated" + "keyword": "Nøgleord", + "security": "Sikkerhed", + "updated": "Opdateret" }, "download_range": { - "any": "Any", + "any": "Alle", "lt100": "< 100", "100_1k": "100 - 1K", "1k_10k": "1K - 10K", @@ -902,51 +902,51 @@ "gt100k": "> 100K" }, "updated": { - "any": "Any time", - "week": "Past week", - "month": "Past month", - "quarter": "Past 3 months", - "year": "Past year" + "any": "Når som helst", + "week": "Sidste uge", + "month": "Sidste måned", + "quarter": "Sidste kvartal", + "year": "Sidste år" }, "security_options": { - "all": "All packages", - "secure": "Without warnings", - "insecure": "With warnings" + "all": "Alle pakker", + "secure": "Uden advarsler", + "insecure": "Med advarsler" }, - "view_selected": "View selected", - "clear_selected_label": "Clear selected", + "view_selected": "Vis valgte", + "clear_selected_label": "Ryd valgte", "sort": { - "label": "Sort packages", - "toggle_direction": "Toggle sort direction", - "ascending": "Ascending", - "descending": "Descending", - "relevance": "Relevance", - "downloads_week": "Downloads/wk", - "downloads_day": "Downloads/day", - "downloads_month": "Downloads/mo", - "downloads_year": "Downloads/yr", - "published": "Last Published", - "name": "Name" + "label": "Sortér pakker", + "toggle_direction": "Skift sorteringsretning", + "ascending": "Stigende", + "descending": "Faldende", + "relevance": "Relevans", + "downloads_week": "Downloads/uge", + "downloads_day": "Downloads/dag", + "downloads_month": "Downloads/md", + "downloads_year": "Downloads/år", + "published": "Sidst udgivet", + "name": "Navn" }, "columns": { - "title": "Columns", - "show": "Show columns", - "reset": "Reset to defaults", - "coming_soon": "Coming soon", - "name": "Name", + "title": "Kolonner", + "show": "Vis kolonner", + "reset": "Nulstil til standard", + "coming_soon": "Kommer snart", + "name": "Navn", "version": "Version", - "description": "Description", - "downloads": "Downloads/wk", - "published": "Last Published", - "maintainers": "Maintainers", - "keywords": "Keywords", - "security": "Security", - "selection": "Select package" + "description": "Beskrivelse", + "downloads": "Downloads/uge", + "published": "Sidst udgivet", + "maintainers": "Vedligeholdere", + "keywords": "Nøgleord", + "security": "Sikkerhed", + "selection": "Vælg pakke" }, "view_mode": { - "label": "View mode", - "cards": "Card view", - "table": "Table view" + "label": "Visningstilstand", + "cards": "Kortvisning", + "table": "Tabelvisning" }, "pagination": { "mode_label": "Pagination mode", From 3a0b4d737dee3ef034e12b7c35fd48fd230b637f Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 1 Apr 2026 05:54:39 +0200 Subject: [PATCH 6/7] fix(i18n): update danish translations for connector and comparison features --- i18n/locales/da-DK.json | 310 ++++++++++++++++++++-------------------- 1 file changed, 155 insertions(+), 155 deletions(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index 449e43b55..d47f12549 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -649,24 +649,24 @@ }, "connector": { "modal": { - "title": "Local Connector", - "connected": "Connected", - "connected_as_user": "Connected as ~{user}", - "connected_hint": "You can now manage packages and organizations from the web UI.", - "disconnect": "Disconnect", - "run_hint": "Run the connector on your machine to enable admin features.", - "copy_command": "Copy command", - "copied": "Copied", - "paste_token": "Then paste the token below to connect:", + "title": "Lokal Connector", + "connected": "Tilsluttet", + "connected_as_user": "Tilsluttet som ~{user}", + "connected_hint": "Du kan nu administrere pakker og organisationer fra web UI.", + "disconnect": "Afbryd forbindelse", + "run_hint": "Kør connectoren på din maskine for at aktivere admin-funktioner.", + "copy_command": "Kopiér kommando", + "copied": "Kopieret", + "paste_token": "Indsæt derefter tokenet nedenfor for at oprette forbindelse:", "token_label": "Token", - "token_placeholder": "paste token here...", - "advanced": "Advanced options", + "token_placeholder": "indsæt token her...", + "advanced": "Avancerede indstillinger", "port_label": "Port", - "warning": "WARNING", - "warning_text": "This allows npmx to access your npm CLI. Only connect to sites you trust.", - "connect": "Connect", - "connecting": "Connecting...", - "auto_open_url": "Automatically open auth page" + "warning": "ADVARSEL", + "warning_text": "Dette giver npmx adgang til din npm CLI. Opret kun forbindelse til sider, du stoler på.", + "connect": "Opret forbindelse", + "connecting": "Opretter forbindelse...", + "auto_open_url": "Åbn godkendelsesside automatisk" } }, "operations": { @@ -1072,204 +1072,204 @@ } }, "header": { - "home": "npmx home", - "packages": "packages", + "home": "npmx hjem", + "packages": "pakker", "packages_dropdown": { - "title": "Your Packages", - "loading": "Loading...", - "error": "Failed to load packages", - "empty": "No packages found", - "view_all": "View all" + "title": "Dine pakker", + "loading": "Indlæser...", + "error": "Kunne ikke indlæse pakker", + "empty": "Ingen pakker fundet", + "view_all": "Se alle" }, - "orgs": "orgs", + "orgs": "organisationer", "orgs_dropdown": { - "title": "Your Organizations", - "loading": "Loading...", - "error": "Failed to load organizations", - "empty": "No organizations found", - "view_all": "View all" + "title": "Dine organisationer", + "loading": "Indlæser...", + "error": "Kunne ikke indlæse organisationer", + "empty": "Ingen organisationer fundet", + "view_all": "Se alle" }, - "pr": "Open GitHub pull request #{prNumber}" + "pr": "Åbn GitHub pull request #{prNumber}" }, "compare": { "packages": { - "title": "compare packages", - "tagline": "compare npm packages side-by-side to help you choose the right one.", - "meta_title": "Compare {packages} - npmx", - "meta_title_empty": "Compare Packages - npmx", - "meta_description": "Side-by-side comparison of {packages}", - "meta_description_empty": "Compare npm packages side-by-side", - "section_packages": "Packages", - "section_facets": "Facets", - "section_comparison": "Comparison", - "copy_as_markdown": "Copy table", - "loading": "Loading package data...", - "error": "Failed to load package data. Please try again.", - "empty_title": "Select packages to compare", - "empty_description": "Search and add at least 2 packages above to see a side-by-side comparison of their metrics.", - "table_view": "Table", - "charts_view": "Charts", - "no_chartable_data": "No chartable data available for the selected facets.", - "bar_chart_nav_hint": "Use ↑ ↓", - "line_chart_nav_hint": "Use ← →" + "title": "Sammenlign pakker", + "tagline": "Sammenlign npm-pakker side om side for at hjælpe dig med at vælge den rigtige.", + "meta_title": "Sammenlign {packages} - npmx", + "meta_title_empty": "Sammenlign pakker - npmx", + "meta_description": "Side-by-side sammenligning af {packages}", + "meta_description_empty": "Sammenlign npm-pakker side om side", + "section_packages": "Pakker", + "section_facets": "Facetter", + "section_comparison": "Sammenligning", + "copy_as_markdown": "Kopiér tabel", + "loading": "Indlæser pakkeoplysninger...", + "error": "Kunne ikke indlæse pakkeoplysninger. Prøv igen.", + "empty_title": "Vælg pakker at sammenligne", + "empty_description": "Søg og tilføj mindst 2 pakker ovenfor for at se en side-by-side sammenligning af deres målinger.", + "table_view": "Tabel", + "charts_view": "Diagrammer", + "no_chartable_data": "Ingen data tilgængelige for de valgte facetter.", + "bar_chart_nav_hint": "Brug ↑ ↓", + "line_chart_nav_hint": "Brug ← →" }, "selector": { - "search_label": "Search for packages", - "search_first": "Search for a package...", - "search_add": "Add another package...", - "searching": "Searching...", - "remove_package": "Remove {package}", - "packages_selected": "{count}/{max} packages selected.", - "add_hint": "Add at least 2 packages to compare." + "search_label": "Søg efter pakker", + "search_first": "Søg efter en pakke...", + "search_add": "Tilføj en anden pakke...", + "searching": "Søger...", + "remove_package": "Fjern {package}", + "packages_selected": "{count}/{max} pakker valgt.", + "add_hint": "Tilføj mindst 2 pakker for at sammenligne." }, "no_dependency": { - "label": "(No dependency)", - "typeahead_title": "What Would James Do?", - "typeahead_description": "Compare against not using a dependency! e18e approved.", - "tooltip_title": "You might not need a dependency", - "tooltip_description": "Compare against not using a dependency! The {link} maintains a list of packages that can be replaced with native APIs or simpler alternatives.", + "label": "(Ingen afhængighed)", + "typeahead_title": "Hvad ville James gøre?", + "typeahead_description": "Sammenlign med ikke at bruge en afhængighed! e18e godkendt.", + "tooltip_title": "Du har måske ikke brug for en afhængighed", + "tooltip_description": "Sammenlign med ikke at bruge en afhængighed! {link} opretholder en liste over pakker, der kan erstattes med native API'er eller enklere alternativer.", "e18e_community": "e18e community", - "add_column": "Add no dependency column to comparison" + "add_column": "Tilføj kolonne for ingen afhængighed til sammenligning" }, "facets": { - "all": "all", - "none": "none", - "select_all_category_facets": "Select all {category} facets", - "deselect_all_category_facets": "Deselect all {category} facets", - "selected_all_category_facets": "Selected all {category} facets", - "deselected_all_category_facets": "Deselected all {category} facets", - "coming_soon": "Coming soon", - "select_all": "Select all facets", - "deselect_all": "Deselect all facets", - "binary_only_tooltip": "This package exposes binaries and no exports", + "all": "alle", + "none": "ingen", + "select_all_category_facets": "Vælg alle {category} facetter", + "deselect_all_category_facets": "Fravælg alle {category} facetter", + "selected_all_category_facets": "Valgte alle {category} facetter", + "deselected_all_category_facets": "Fravalgte alle {category} facetter", + "coming_soon": "Kommer snart", + "select_all": "Vælg alle facetter", + "deselect_all": "Fravælg alle facetter", + "binary_only_tooltip": "Denne pakke eksponerer kun binære filer og ingen exports", "categories": { - "performance": "Performance", - "health": "Health", - "compatibility": "Compatibility", - "security": "Security & Compliance" + "performance": "Ydeevne", + "health": "Sundhed", + "compatibility": "Kompatibilitet", + "security": "Sikkerhed & Overholdelse" }, "items": { "packageSize": { - "label": "Package Size", - "description": "Size of the package itself (unpacked)" + "label": "Pakke størrelse", + "description": "Størrelsen af selve pakken (udpakket)" }, "installSize": { - "label": "Install Size", - "description": "Total install size including all dependencies" + "label": "Installationsstørrelse", + "description": "Total installationsstørrelse inklusive alle afhængigheder" }, "dependencies": { - "label": "Direct Deps", - "description": "Number of direct dependencies" + "label": "Direkte afhængigheder", + "description": "Antal direkte afhængigheder" }, "totalDependencies": { - "label": "Total Deps", - "description": "Total number of dependencies including transitive" + "label": "Totale afhængigheder", + "description": "Totalt antal afhængigheder inklusive transitive" }, "downloads": { - "label": "Downloads/wk", - "description": "Weekly download count" + "label": "Downloads/uge", + "description": "Antal downloads pr. uge" }, "totalLikes": { "label": "Likes", - "description": "Number of likes" + "description": "Antal likes" }, "lastUpdated": { - "label": "Published", - "description": "When this version was published" + "label": "Udgivet", + "description": "Hvornår denne version blev udgivet" }, "deprecated": { - "label": "Deprecated?", - "description": "Whether the package is deprecated" + "label": "Forældet?", + "description": "Om pakken er forældet" }, "engines": { "label": "Engines", - "description": "Node.js version requirements" + "description": "Node.js version krav" }, "types": { "label": "Types", - "description": "TypeScript type definitions" + "description": "TypeScript type definitioner" }, "moduleFormat": { "label": "Module Format", "description": "ESM/CJS support" }, "license": { - "label": "License", - "description": "Package license" + "label": "Licens", + "description": "Pakke licens" }, "vulnerabilities": { - "label": "Vulnerabilities", - "description": "Known security vulnerabilities" + "label": "Sårbarheder", + "description": "Kendte sikkerhedssårbarheder" } }, "values": { - "any": "Any", - "none": "None", - "unknown": "Unknown", - "deprecated": "Deprecated", - "not_deprecated": "No", - "types_included": "Included", - "types_none": "None", + "any": "Alle", + "none": "Ingen", + "unknown": "Ukendt", + "deprecated": "Forældet", + "not_deprecated": "Nej", + "types_included": "Inkluderet", + "types_none": "Ingen", "vulnerabilities_summary": "{count} ({critical}C/{high}H)", - "up_to_you": "Up to you!" + "up_to_you": "Op til dig!" }, "trends": { - "title": "Compare Trends" + "title": "Sammenlign tendenser" } }, - "file_changes": "File Changes", - "files_count": "{count} file | {count} files", - "lines_hidden": "{count} line hidden | {count} lines hidden", - "file_too_large": "File too large to compare", - "file_size_warning": "{size} exceeds the 250KB limit for comparison", + "file_changes": "Filændringer", + "files_count": "{count} fil | {count} filer", + "lines_hidden": "{count} linje skjult | {count} linjer skjult", + "file_too_large": "Fil for stor til at sammenligne", + "file_size_warning": "{size} overskrider 250KB grænsen for sammenligning", "compare_versions": "diff", - "compare_versions_title": "Compare with latest version", - "comparing_versions_label": "Comparing versions...", - "version_back_to_package": "Back to package", - "version_error_message": "Failed to compare versions.", + "compare_versions_title": "Sammenlign med seneste version", + "comparing_versions_label": "Sammenligner versioner...", + "version_back_to_package": "Tilbage til pakken", + "version_error_message": "Kunne ikke sammenligne versioner.", "version_invalid_url_format": { - "hint": "Invalid comparison URL. Use format: {0}", - "from_version": "from", - "to_version": "to" - }, - "version_selector_title": "Compare with version", - "summary": "Summary", - "deps_count": "{count} dep | {count} deps", - "dependencies": "Dependencies", - "dev_dependencies": "Dev Dependencies", - "peer_dependencies": "Peer Dependencies", - "optional_dependencies": "Optional Dependencies", - "no_dependency_changes": "No dependency changes", + "hint": "Ugyldig sammenlignings-URL. Brug format: {0}", + "from_version": "fra", + "to_version": "til" + }, + "version_selector_title": "Sammenlign med version", + "summary": "Oversigt", + "deps_count": "{count} afhængighed | {count} afhængigheder", + "dependencies": "Afhængigheder", + "dev_dependencies": "Dev Afhængigheder", + "peer_dependencies": "Peer Afhængigheder", + "optional_dependencies": "Valgfrie Afhængigheder", + "no_dependency_changes": "Ingen ændringer i afhængigheder", "file_filter_option": { - "all": "All ({count})", - "added": "Added ({count})", - "removed": "Removed ({count})", - "modified": "Modified ({count})" - }, - "search_files_placeholder": "Search files...", - "no_files_all": "No files", - "no_files_search": "No files matching \"{query}\"", - "no_files_filtered": "No {filter} files", + "all": "Alle ({count})", + "added": "Tilføjet ({count})", + "removed": "Fjernet ({count})", + "modified": "Ændret ({count})" + }, + "search_files_placeholder": "Søg filer...", + "no_files_all": "Ingen filer", + "no_files_search": "Ingen filer matcher \"{query}\"", + "no_files_filtered": "Ingen {filter} filer", "filter": { - "added": "added", - "removed": "removed", - "modified": "modified" - }, - "files_button": "Files", - "select_file_prompt": "Select a file from the sidebar to view its diff", - "close_files_panel": "Close files panel", - "filter_files_label": "Filter files by change type", - "change_ratio": "Change ratio", - "char_edits": "Char edits", - "diff_distance": "Diff distance", - "loading_diff": "Loading diff...", - "loading_diff_error": "Failed to load diff", - "merge_modified_lines": "Merge modified lines", - "no_content_changes": "No content changes detected", - "options": "Options", - "view_file": "View file", - "view_in_code_browser": "View in code browser", - "word_wrap": "Word wrap" + "added": "tilføjet", + "removed": "fjernet", + "modified": "ændret" + }, + "files_button": "Filer", + "select_file_prompt": "Vælg en fil fra sidepanelet for at se dens diff", + "close_files_panel": "Luk filpanelet", + "filter_files_label": "Filtrer filer efter ændringstype", + "change_ratio": "Ændringsforhold", + "char_edits": "Tegnedits", + "diff_distance": "Diff afstand", + "loading_diff": "Indlæser diff...", + "loading_diff_error": "Kunne ikke indlæse diff", + "merge_modified_lines": "Flet ændrede linjer", + "no_content_changes": "Ingen indholdsændringer registreret", + "options": "Indstillinger", + "view_file": "Se fil", + "view_in_code_browser": "Se i kodebrowser", + "word_wrap": "Ordombrydning" }, "pds": { "title": "npmx.social", From b397477a98f9d51bc577be2583833a7c4b7c0c3b Mon Sep 17 00:00:00 2001 From: Lucas Date: Wed, 1 Apr 2026 06:00:33 +0200 Subject: [PATCH 7/7] fix(i18n): update danish translations for privacy policy and accessibility sections --- i18n/locales/da-DK.json | 152 ++++++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 76 deletions(-) diff --git a/i18n/locales/da-DK.json b/i18n/locales/da-DK.json index d47f12549..823508b4a 100644 --- a/i18n/locales/da-DK.json +++ b/i18n/locales/da-DK.json @@ -1300,128 +1300,128 @@ } }, "privacy_policy": { - "title": "privacy policy", - "last_updated": "Last updated: {date}", - "welcome": "Welcome to {app}. We are committed to protecting your privacy. This policy explains what data we collect, how we use it, and your rights regarding your information.", + "title": "privatlivspolitik", + "last_updated": "Sidst opdateret: {date}", + "welcome": "Velkommen til {app}. Vi er forpligtet til at beskytte dit privatliv. Denne politik forklarer, hvilke data vi indsamler, hvordan vi bruger dem, og dine rettigheder vedrørende dine oplysninger.", "cookies": { "what_are": { - "title": "What are cookies?", - "p1": "Cookies are small text files stored on your device when you visit a website. Their purpose is to enhance your browsing experience by remembering certain preferences and settings." + "title": "Hvad er cookies?", + "p1": "Cookies er små tekstfiler, der gemmes på din enhed, når du besøger en hjemmeside. Deres formål er at forbedre din browsingoplevelse ved at huske visse præferencer og indstillinger." }, "types": { - "title": "What cookies do we use?", - "p1": "We only use {bold} for purposes strictly necessary for the site's functionality. We do not use third-party or advertising cookies.", - "bold": "essential technical cookies", + "title": "Hvilke cookies bruger vi?", + "p1": "Vi bruger kun {bold} til formål, der er strengt nødvendige for sidens funktionalitet. Vi bruger ikke tredjeparts- eller reklamecookies.", + "bold": "væsentlige tekniske cookies", "li1": "{li11}{separator} {li12}", "li2": "{li21}{separator} {li22}", "separator": ":", "cookie_vdpl": "__vdpl", - "cookie_vdpl_desc": "This cookie is used by our hosting provider (Vercel) for skew protection. It ensures you fetch assets from the correct deployment version if a new update is released while you are browsing. It does not track you.", + "cookie_vdpl_desc": "Denne cookie bruges af vores hostingudbyder (Vercel) til skævbeskyttelse. Den sikrer, at du henter ressourcer fra den korrekte deploymentsversion, hvis en ny opdatering frigives, mens du browser. Den sporer dig ikke.", "cookie_h3": "h3", - "cookie_h3_desc": "This is our secure session cookie. It stores the OAuth access token when you connect your Atmosphere account. It is essential for maintaining your authenticated session." + "cookie_h3_desc": "Dette er vores sikre sessionscookie. Den gemmer OAuth-adgangstokenet, når du forbinder din Atmosphere-konto. Den er afgørende for at opretholde din autentificerede session." }, "local_storage": { - "title": "Local storage", - "p1": "In addition to session cookies, we use your browser's {bold} to save your display preferences. This allows us to remember the theme (light/dark) and some other {settings} you have selected, so you don't have to reconfigure them on each visit.", - "bold": "Local Storage", - "p2": "This information is purely functional, stored only on your device, and {bold2}. We use it exclusively to improve your experience on our website.", - "bold2": "contains no personal data nor is it used to track you", - "settings": "settings" + "title": "Lokal lagring", + "p1": "Ud over sessionscookies bruger vi din browsers {bold} til at gemme dine visningspræferencer. Dette gør det muligt for os at huske temaet (lys/mørk) og nogle andre {settings}, du har valgt, så du ikke behøver at konfigurere dem igen ved hvert besøg.", + "bold": "Lokal lagring", + "p2": "Disse oplysninger er udelukkende funktionelle, gemt kun på din enhed, og {bold2}. Vi bruger det udelukkende til at forbedre din oplevelse på vores hjemmeside.", + "bold2": "indeholder ingen personlige data og bruges ikke til at spore dig", + "settings": "indstillinger" }, "management": { - "title": "Managing cookies", - "p1": "You can configure your browser to accept, reject, or delete cookies according to your preferences. However, please note that {bold}.", - "bold": "rejecting essential cookies may prevent full access to the application", - "p2": "Below are links with instructions for cookie management in the most commonly used browsers:", - "chrome": "Google Chrome (opens in a new window)", - "firefox": "Mozilla Firefox (opens in a new window)", - "edge": "Microsoft Edge (opens in a new window)" + "title": "Håndtering af cookies", + "p1": "Du kan konfigurere din browser til at acceptere, afvise eller slette cookies i henhold til dine præferencer. Bemærk dog, at {bold}.", + "bold": "afvisning af væsentlige cookies kan forhindre fuld adgang til applikationen", + "p2": "Nedenfor er links med instruktioner til cookiehåndtering i de mest anvendte browsere:", + "chrome": "Google Chrome (åbner i et nyt vindue)", + "firefox": "Mozilla Firefox (åbner i et nyt vindue)", + "edge": "Microsoft Edge (åbner i et nyt vindue)" } }, "analytics": { "title": "Analytics", - "p1": "We use {bold} to understand how visitors use our website. This helps us improve the user experience and identify issues.", + "p1": "Vi bruger {bold} til at forstå, hvordan besøgende bruger vores hjemmeside. Dette hjælper os med at forbedre brugeroplevelsen og identificere problemer.", "bold": "Vercel Web Analytics", - "p2": "Vercel Analytics is designed with privacy in mind:", - "li1": "It does not use cookies", - "li2": "It does not collect personal identifiers", - "li3": "It does not track users across websites", - "li4": "All data is aggregated and anonymised", - "p3": "The only information collected includes: page URLs, referrer, country/region, device type, browser, and operating system. This data cannot be used to identify individual users." + "p2": "Vercel Analytics er designet med privatliv for øje:", + "li1": "Det bruger ikke cookies", + "li2": "Det indsamler ikke personlige identifikatorer", + "li3": "Det sporer ikke brugere på tværs af hjemmesider", + "li4": "Alle data er aggregerede og anonymiserede", + "p3": "De eneste oplysninger, der indsamles, inkluderer: side-URL'er, henvisninger, land/region, enhedstype, browser og operativsystem. Disse data kan ikke bruges til at identificere individuelle brugere." }, "authenticated": { - "title": "Authenticated users", - "p1": "When you connect your {bold} account to npmx, we store your OAuth access token in a secure, HTTP-only session cookie. This token is used solely to authenticate requests on your behalf.", + "title": "Autentificerede brugere", + "p1": "Når du forbinder din {bold} konto til npmx, gemmer vi dit OAuth-adgangstoken i en sikker, HTTP-only sessionscookie. Dette token bruges udelukkende til at autentificere forespørgsler på dine vegne.", "bold": "Atmosphere", - "p2": "We do not store your credentials, and we do not access any data beyond what is necessary to provide the features you use. You can disconnect your account at any time from the {settings} page.", - "settings": "settings" + "p2": "Vi gemmer ikke dine legitimationsoplysninger, og vi får ikke adgang til nogen data ud over det, der er nødvendigt for at levere de funktioner, du bruger. Du kan til enhver tid afbryde din konto fra {settings}-siden.", + "settings": "indstillinger" }, "data_retention": { - "title": "Data retention", - "p1": "Session cookies are automatically deleted when you close your browser or after a period of inactivity. Local storage preferences remain on your device until you clear your browser data. Analytics data is retained in aggregate form and cannot be linked to individual users." + "title": "Opbevaring af data", + "p1": "Sessionscookies slettes automatisk, når du lukker din browser eller efter en periode med inaktivitet. Lokale lagringspræferencer forbliver på din enhed, indtil du rydder dine browserdata. Analytics-data opbevares i aggregeret form og kan ikke knyttes til individuelle brugere." }, "your_rights": { - "title": "Your rights", - "p1": "You have the right to:", - "li1": "Access information about what data we collect", - "li2": "Clear your local storage and cookies at any time", - "li3": "Disconnect your authenticated session", - "li4": "Request information about our data practices", - "p2": "Since we do not collect personal data, there is typically no personal information to delete or export." + "title": "Dine rettigheder", + "p1": "Du har ret til:", + "li1": "At få adgang til oplysninger om, hvilke data vi indsamler", + "li2": "At rydde din lokale lagring og cookies når som helst", + "li3": "At afbryde din autentificerede session", + "li4": "At anmode om oplysninger om vores datapolitikker", + "p2": "Da vi ikke indsamler personlige data, er der typisk ingen personlige oplysninger at slette eller eksportere." }, "contact": { - "title": "Contact us", - "p1": "For any questions or concerns about this privacy policy, you can contact us by opening an issue on our {link}.", + "title": "Kontakt os", + "p1": "For spørgsmål eller bekymringer om denne privatlivspolitik, kan du kontakte os ved at åbne en sag på vores {link}.", "link": "GitHub repository" }, "changes": { - "title": "Changes to this policy", - "p1": "We may update this privacy policy from time to time. Any changes will be published on this page with an updated revision date." + "title": "Ændringer i denne politik", + "p1": "Vi kan opdatere denne privatlivspolitik fra tid til anden. Eventuelle ændringer vil blive offentliggjort på denne side med en opdateret revisionsdato." } }, "a11y": { - "title": "accessibility", + "title": "tilgængelighed", "footer_title": "a11y", - "welcome": "We want {app} to be usable by as many people as possible.", + "welcome": "Vi ønsker, at {app} skal være brugbar for så mange mennesker som muligt.", "approach": { - "title": "Our approach", - "p1": "We try to follow the Web Content Accessibility Guidelines (WCAG) 2.2 and use them as a reference when building features. We don't claim full conformance with any level of WCAG — accessibility is a continual process and there is always more work to do.", - "p2": "This site is an {about}. Accessibility improvements are made incrementally as part of our regular development.", - "about_link": "open-source, community-driven project" + "title": "Vores tilgang", + "p1": "Vi forsøger at følge Web Content Accessibility Guidelines (WCAG) 2.2 og bruger dem som reference, når vi bygger funktioner. Vi hævder ikke fuld overensstemmelse med nogen WCAG-niveau — tilgængelighed er en kontinuerlig proces, og der er altid mere arbejde at gøre.", + "p2": "Dette websted er et {about}. Tilgængelighedsforbedringer foretages gradvist som en del af vores regelmæssige udvikling.", + "about_link": "open-source, community-drevet projekt" }, "measures": { - "title": "What we do", - "p1": "Some of the things we aim to do across the site:", - "li1": "Use semantic HTML and ARIA attributes where appropriate.", - "li2": "Use relative text sizes so you can adjust them in your browser.", - "li3": "Support keyboard navigation throughout the interface.", - "li4": "Respect the prefers-reduced-motion and prefers-color-scheme media queries.", - "li5": "Design with sufficient color contrast in mind.", - "li6": "Ensure essential content is available without JavaScript, though some interactive features require it." + "title": "Hvad vi gør", + "p1": "Nogle af de ting, vi stræber efter at gøre på tværs af webstedet:", + "li1": "Brug semantisk HTML og ARIA-attributter, hvor det er relevant.", + "li2": "Brug relative tekststørrelser, så du kan justere dem i din browser.", + "li3": "Understøt tastaturnavigation i hele grænsefladen.", + "li4": "Respekter mediernes forespørgsler om reduceret bevægelse og farveskema.", + "li5": "Design med tilstrækkelig farvekontrast i tankerne.", + "li6": "Sørg for, at væsentligt indhold er tilgængeligt uden JavaScript, selvom nogle interaktive funktioner kræver det." }, "limitations": { - "title": "Known limitations", - "p1": "Some parts of the site — particularly third-party content like package READMEs — may not meet accessibility standards. We are working to improve these areas over time." + "title": "Kendte begrænsninger", + "p1": "Nogle dele af webstedet — især tredjepartsindhold som pakke-README'er — opfylder muligvis ikke tilgængelighedsstandarder. Vi arbejder på at forbedre disse områder over tid." }, "contact": { "title": "Feedback", - "p1": "If you encounter an accessibility barrier on {app}, please let us know by opening an issue on our {link}. We take these reports seriously and will do our best to address them.", + "p1": "Hvis du støder på en tilgængelighedsbarriere på {app}, bedes du give os besked ved at åbne en sag på vores {link}. Vi tager disse rapporter alvorligt og vil gøre vores bedste for at løse dem.", "link": "GitHub repository" } }, "translation_status": { - "title": "translation status", - "generated_at": "Generation date: {date}", - "welcome": "If you're interested in helping us to translate {npmx} into one of the languages listed below, you've come to the right place! This auto-updating page always lists all the content that could use your help right now.", - "p1": "We use {lang} as the default language, with a total of {count}. If you'd like to help add translations, locate the language in {bylang} and expand the details.", - "p1_lang": "American English (en-US)", - "p1_count": "0 messages | 1 message |{count} messages", - "p2": "Before starting, please read our {guide} to learn about our translation process and how you can get involved.", - "guide": "localization (i18n) guide", - "by_locale": "Translation progress by locale", - "by_file": "Translation progress by file", - "complete_text": "This translation is complete, amazing job!", - "missing_text": "missing", + "title": "oversættelsesstatus", + "generated_at": "Genereringsdato: {date}", + "welcome": "Hvis du er interesseret i at hjælpe os med at oversætte {npmx} til et af de sprog, der er angivet nedenfor, er du kommet til det rigtige sted! Denne automatisk opdaterende side viser altid alt indhold, der kunne bruge din hjælp lige nu.", + "p1": "Vi bruger {lang} som standardsprog, med i alt {count}. Hvis du gerne vil hjælpe med at tilføje oversættelser, skal du finde sproget i {bylang} og udvide detaljerne.", + "p1_lang": "Amerikansk engelsk (en-US)", + "p1_count": "0 beskeder | 1 besked |{count} beskeder", + "p2": "Før du går i gang, bedes du læse vores {guide} for at lære om vores oversættelsesproces og hvordan du kan deltage.", + "guide": "lokaliseringsguide (i18n)", + "by_locale": "Oversættelsesfremskridt efter lokalitet", + "by_file": "Oversættelsesfremskridt efter fil", + "complete_text": "Denne oversættelse er fuldført, fantastisk arbejde!", + "missing_text": "mangler", "missing_keys": "There is no missing translations | Missing translation | Missing translations", "progress_label": "Progress status for {locale}", "table": {