From 1bc5afc8f5a24e1f4c87adc73465565c50c0443b Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 17:54:18 -0300 Subject: [PATCH 01/14] feat(i18n): add Brazilian Portuguese (pt-BR) translation support - Add pt-BR locale to config/i18n.ts with Portuguese pluralization rules - Create i18n/locales/pt-BR.json with initial translations (~115 keys) - Create lunaria/files/pt-BR.json for Lunaria translation tracking - English fallback for untranslated keys until completed Partial translation (14% complete) with focus on core UI sections (seo, search, nav, settings, package, common). Additional sections can be translated incrementally. --- config/i18n.ts | 5 ++ i18n/locales/pt-BR.json | 115 +++++++++++++++++++++++++++++++++++++++ lunaria/files/pt-BR.json | 115 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 235 insertions(+) create mode 100644 i18n/locales/pt-BR.json create mode 100644 lunaria/files/pt-BR.json diff --git a/config/i18n.ts b/config/i18n.ts index bd89aae0d9..19c31c6032 100644 --- a/config/i18n.ts +++ b/config/i18n.ts @@ -270,6 +270,11 @@ const locales: (LocaleObjectData | (Omit & { code: str return { zero: 0, one: 1, two: 0, few: 2, many: 3, other: 4 }[name] }, }, + { + code: 'pt-BR', + file: 'pt-BR.json', + name: 'Português (Brasil)', + }, /*{ code: 'sv', file: 'sv.json', diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json new file mode 100644 index 0000000000..660f0314c3 --- /dev/null +++ b/i18n/locales/pt-BR.json @@ -0,0 +1,115 @@ +{ + "seo": { + "home": { + "title": "npmx - Navegador de Pacotes para o Registro npm", + "description": "Um navegador melhor para o registro npm. Pesquise, navegue e explore pacotes com uma interface moderna." + } + }, + "version": "Versão", + "built_at": "construído {0}", + "alt_logo": "logo npmx", + "tagline": "um navegador melhor para o registro npm", + "non_affiliation_disclaimer": "não é afiliado com npm, Inc.", + "trademark_disclaimer": "npm é uma marca registrada da npm, Inc. Este site não é afiliado com npm, Inc.", + "footer": { + "about": "sobre", + "docs": "documentação", + "source": "código-fonte", + "social": "redes sociais", + "chat": "chat" + }, + "search": { + "label": "Pesquisar pacotes npm", + "placeholder": "pesquisar pacotes...", + "button": "pesquisar", + "clear": "Limpar pesquisa", + "searching": "Pesquisando...", + "found_packages": "Nenhum pacote encontrado | 1 pacote encontrado | {count} pacotes encontrados", + "updating": "(atualizando...)", + "no_results": "Nenhum pacote encontrado para \"{query}\"", + "results": "Resultados da pesquisa", + "not_taken": "{name} não está em uso", + "claim_prompt": "Reivindicar este nome de pacote no npm", + "claim_button": "Reivindicar \"{name}\"", + "want_to_claim": "Deseja reivindicar este nome de pacote?", + "start_typing": "Comece a digitar para pesquisar pacotes", + "exact_match": "exato", + "suggestion": { + "user": "usuário", + "org": "organização", + "view_user_packages": "Ver pacotes deste usuário", + "view_org_packages": "Ver pacotes desta organização" + } + }, + "nav": { + "main_navigation": "Principal", + "popular_packages": "Pacotes populares", + "search": "pesquisa", + "settings": "configurações", + "compare": "comparar", + "back": "voltar", + "menu": "Menu", + "mobile_menu": "Menu de navegação", + "open_menu": "Abrir menu", + "links": "Links", + "tap_to_search": "Toque para pesquisar" + }, + "settings": { + "title": "configurações", + "tagline": "personalize sua experiência npmx", + "meta_description": "Customize sua experiência npmx.dev com preferências de tema, idioma e exibição.", + "sections": { + "appearance": "Aparência", + "display": "Exibição", + "language": "Idioma" + }, + "relative_dates": "Datas relativas", + "relative_dates_description": "Mostrar \"há 3 dias\" em vez de datas completas", + "include_types": "Incluir {'@'}types na instalação", + "include_types_description": "Adicionar pacote {'@'}types aos comandos de instalação para pacotes sem tipo", + "hide_platform_packages": "Ocultar pacotes específicos de plataforma na pesquisa", + "hide_platform_packages_description": "Ocultar pacotes binários nativos como {'@'}esbuild/linux-x64 dos resultados", + "theme": "Tema", + "theme_light": "Claro", + "theme_dark": "Escuro", + "theme_system": "Sistema", + "language": "Idioma", + "help_translate": "Ajude a traduzir npmx", + "accent_colors": "Cores de destaque", + "clear_accent": "Limpar cor de destaque", + "translation_progress": "Progresso de tradução" + }, + "i18n": { + "missing_keys": "{count} tradução ausente | {count} traduções ausentes", + "copy_keys": "Copiar chaves", + "show_more_keys": "Mostrar {count} mais...", + "contribute_hint": "Ajude a melhorar esta tradução adicionando as chaves ausentes.", + "edit_on_github": "Editar no GitHub", + "view_guide": "Guia de tradução" + }, + "common": { + "loading": "Carregando...", + "loading_more": "Carregando mais...", + "loading_packages": "Carregando pacotes...", + "end_of_results": "Fim dos resultados", + "try_again": "Tente novamente", + "close": "Fechar", + "retry": "Repetir", + "copy": "copiar", + "copied": "copiado!", + "skip_link": "Pular para o conteúdo principal", + "close_modal": "Fechar modal", + "show_more": "mostrar mais", + "warnings": "Avisos:", + "go_back_home": "Voltar para a página inicial", + "view_on_npm": "visualizar no npm", + "per_week": "/ semana", + "vanity_downloads_hint": "Número de vaidade: nenhum pacote exibido | Número de vaidade: para o pacote exibido | Número de vaidade: Soma de {count} pacotes exibidos", + "sort": { + "name": "nome", + "role": "função", + "members": "membros" + }, + "scroll_to_top": "Rolar para o topo" + } +} diff --git a/lunaria/files/pt-BR.json b/lunaria/files/pt-BR.json new file mode 100644 index 0000000000..660f0314c3 --- /dev/null +++ b/lunaria/files/pt-BR.json @@ -0,0 +1,115 @@ +{ + "seo": { + "home": { + "title": "npmx - Navegador de Pacotes para o Registro npm", + "description": "Um navegador melhor para o registro npm. Pesquise, navegue e explore pacotes com uma interface moderna." + } + }, + "version": "Versão", + "built_at": "construído {0}", + "alt_logo": "logo npmx", + "tagline": "um navegador melhor para o registro npm", + "non_affiliation_disclaimer": "não é afiliado com npm, Inc.", + "trademark_disclaimer": "npm é uma marca registrada da npm, Inc. Este site não é afiliado com npm, Inc.", + "footer": { + "about": "sobre", + "docs": "documentação", + "source": "código-fonte", + "social": "redes sociais", + "chat": "chat" + }, + "search": { + "label": "Pesquisar pacotes npm", + "placeholder": "pesquisar pacotes...", + "button": "pesquisar", + "clear": "Limpar pesquisa", + "searching": "Pesquisando...", + "found_packages": "Nenhum pacote encontrado | 1 pacote encontrado | {count} pacotes encontrados", + "updating": "(atualizando...)", + "no_results": "Nenhum pacote encontrado para \"{query}\"", + "results": "Resultados da pesquisa", + "not_taken": "{name} não está em uso", + "claim_prompt": "Reivindicar este nome de pacote no npm", + "claim_button": "Reivindicar \"{name}\"", + "want_to_claim": "Deseja reivindicar este nome de pacote?", + "start_typing": "Comece a digitar para pesquisar pacotes", + "exact_match": "exato", + "suggestion": { + "user": "usuário", + "org": "organização", + "view_user_packages": "Ver pacotes deste usuário", + "view_org_packages": "Ver pacotes desta organização" + } + }, + "nav": { + "main_navigation": "Principal", + "popular_packages": "Pacotes populares", + "search": "pesquisa", + "settings": "configurações", + "compare": "comparar", + "back": "voltar", + "menu": "Menu", + "mobile_menu": "Menu de navegação", + "open_menu": "Abrir menu", + "links": "Links", + "tap_to_search": "Toque para pesquisar" + }, + "settings": { + "title": "configurações", + "tagline": "personalize sua experiência npmx", + "meta_description": "Customize sua experiência npmx.dev com preferências de tema, idioma e exibição.", + "sections": { + "appearance": "Aparência", + "display": "Exibição", + "language": "Idioma" + }, + "relative_dates": "Datas relativas", + "relative_dates_description": "Mostrar \"há 3 dias\" em vez de datas completas", + "include_types": "Incluir {'@'}types na instalação", + "include_types_description": "Adicionar pacote {'@'}types aos comandos de instalação para pacotes sem tipo", + "hide_platform_packages": "Ocultar pacotes específicos de plataforma na pesquisa", + "hide_platform_packages_description": "Ocultar pacotes binários nativos como {'@'}esbuild/linux-x64 dos resultados", + "theme": "Tema", + "theme_light": "Claro", + "theme_dark": "Escuro", + "theme_system": "Sistema", + "language": "Idioma", + "help_translate": "Ajude a traduzir npmx", + "accent_colors": "Cores de destaque", + "clear_accent": "Limpar cor de destaque", + "translation_progress": "Progresso de tradução" + }, + "i18n": { + "missing_keys": "{count} tradução ausente | {count} traduções ausentes", + "copy_keys": "Copiar chaves", + "show_more_keys": "Mostrar {count} mais...", + "contribute_hint": "Ajude a melhorar esta tradução adicionando as chaves ausentes.", + "edit_on_github": "Editar no GitHub", + "view_guide": "Guia de tradução" + }, + "common": { + "loading": "Carregando...", + "loading_more": "Carregando mais...", + "loading_packages": "Carregando pacotes...", + "end_of_results": "Fim dos resultados", + "try_again": "Tente novamente", + "close": "Fechar", + "retry": "Repetir", + "copy": "copiar", + "copied": "copiado!", + "skip_link": "Pular para o conteúdo principal", + "close_modal": "Fechar modal", + "show_more": "mostrar mais", + "warnings": "Avisos:", + "go_back_home": "Voltar para a página inicial", + "view_on_npm": "visualizar no npm", + "per_week": "/ semana", + "vanity_downloads_hint": "Número de vaidade: nenhum pacote exibido | Número de vaidade: para o pacote exibido | Número de vaidade: Soma de {count} pacotes exibidos", + "sort": { + "name": "nome", + "role": "função", + "members": "membros" + }, + "scroll_to_top": "Rolar para o topo" + } +} From 7ba156f77f5d67ffd3fab75793dd35c6cf670364 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:16:31 -0300 Subject: [PATCH 02/14] feat(i18n): expand Brazilian Portuguese translations for package details --- i18n/locales/pt-BR.json | 728 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 728 insertions(+) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 660f0314c3..97248ba1a9 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -111,5 +111,733 @@ "members": "membros" }, "scroll_to_top": "Rolar para o topo" + }, + "package": { + "not_found": "Package Not Found", + "not_found_message": "The package could not be found.", + "no_description": "No description provided", + "show_full_description": "Show full description", + "not_latest": "(not latest)", + "verified_provenance": "Verified provenance", + "view_permalink": "View permalink for this version", + "navigation": "Package", + "copy_name": "Copy package name", + "deprecation": { + "package": "This package has been deprecated.", + "version": "This version has been deprecated.", + "no_reason": "No reason provided" + }, + "replacement": { + "title": "You might not need this dependency.", + "native": "This can be replaced with {replacement}, available since Node {nodeVersion}.", + "simple": "The {community} has flagged this package as redundant, with the advice: {replacement}.", + "documented": "The {community} has flagged this package as having more performant alternatives.", + "none": "This package has been flagged as no longer needed, and its functionality is likely available natively in all engines.", + "learn_more": "Learn more", + "mdn": "MDN", + "community": "community" + }, + "stats": { + "license": "License", + "deps": "Deps", + "install_size": "Install Size", + "vulns": "Vulns", + "updated": "Updated", + "view_dependency_graph": "View dependency graph", + "inspect_dependency_tree": "Inspect dependency tree", + "size_tooltip": { + "unpacked": "{size} unpacked size (this package)", + "total": "{size} total unpacked size (including all {count} dependencies for linux-x64)" + } + }, + "links": { + "repo": "repo", + "homepage": "homepage", + "issues": "issues", + "jsr": "jsr", + "code": "code", + "docs": "docs", + "fund": "fund", + "compare": "compare" + }, + "docs": { + "not_available": "Docs not available", + "not_available_detail": "We could not generate docs for this version." + }, + "get_started": { + "title": "Get started", + "pm_label": "Package manager", + "copy_command": "Copy install command", + "view_types": "View {package}" + }, + "create": { + "title": "Create new project", + "copy_command": "Copy create command" + }, + "run": { + "title": "Run", + "locally": "Run locally" + }, + "readme": { + "title": "Readme", + "no_readme": "No README available.", + "view_on_github": "View on GitHub" + }, + "keywords_title": "Keywords", + "compatibility": "Compatibility", + "card": { + "publisher": "Publisher", + "updated": "Updated", + "weekly_downloads": "Weekly downloads", + "keywords": "Keywords", + "license": "License" + }, + "versions": { + "title": "Versions", + "collapse": "Collapse {tag}", + "expand": "Expand {tag}", + "collapse_other": "Collapse other versions", + "expand_other": "Expand other versions", + "collapse_major": "Collapse major {major}", + "expand_major": "Expand major {major}", + "other_versions": "Other versions", + "more_tagged": "{count} more tagged", + "all_covered": "All versions are covered by tags above", + "deprecated_title": "{version} (deprecated)", + "view_all": "View {count} version | View all {count} versions" + }, + "dependencies": { + "title": "Dependencies ({count})", + "list_label": "Package dependencies", + "show_all": "show {count} dep | show all {count} deps", + "optional": "optional", + "view_vulnerabilities": "View vulnerabilities", + "outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})", + "outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})", + "outdated_patch": "Patch update available (latest: {latest})" + }, + "peer_dependencies": { + "title": "Peer Dependencies ({count})", + "list_label": "Package peer dependencies", + "show_all": "show {count} peer dep | show all {count} peer deps" + }, + "optional_dependencies": { + "title": "Optional Dependencies ({count})", + "list_label": "Package optional dependencies", + "show_all": "show {count} optional dep | show all {count} optional deps" + }, + "maintainers": { + "title": "Maintainers", + "list_label": "Package maintainers", + "you": "(you)", + "via": "via {teams}", + "remove_owner": "Remove {name} as owner", + "username_to_add": "Username to add as owner", + "username_placeholder": "username...", + "add_button": "add", + "cancel_add": "Cancel adding owner", + "add_owner": "+ Add owner", + "show_more": "(show {count} more)", + "show_less": "(show fewer)" + }, + "downloads": { + "title": "Weekly Downloads", + "date_range": "{start} to {end}", + "date_range_multiline": "{start}\nto {end}", + "analyze": "Analyze downloads", + "modal_title": "Downloads", + "granularity": "Granularity", + "granularity_daily": "Daily", + "granularity_weekly": "Weekly", + "granularity_monthly": "Monthly", + "granularity_yearly": "Yearly", + "start_date": "Start", + "end_date": "End", + "no_data": "No download data available", + "loading": "Loading...", + "y_axis_label": "{granularity} downloads", + "download_file": "Download {fileType}", + "toggle_annotator": "Toggle annotator" + }, + "install_scripts": { + "title": "Install Scripts", + "script_label": "(script)", + "npx_packages": "{count} npx package | {count} npx packages", + "currently": "currently {version}" + }, + "playgrounds": { + "title": "Try it out", + "choose": "choose playground" + }, + "metrics": { + "esm": "ES Modules supported", + "cjs": "CommonJS supported", + "no_esm": "No ES Modules support", + "types_label": "Types", + "types_included": "Types included", + "types_available": "Types available via {package}", + "no_types": "No TypeScript types" + }, + "license": { + "view_spdx": "View license text on SPDX" + }, + "vulnerabilities": { + "no_description": "No description available", + "found": "{count} vulnerability found | {count} vulnerabilities found", + "deps_found": "{count} vulnerability found | {count} vulnerabilities found", + "deps_affected": "{count} dependency affected | {count} dependencies affected", + "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", + "scanning_tree": "Scanning dependency tree...", + "show_all_packages": "show all {count} affected packages", + "no_summary": "No summary", + "view_details": "View vulnerability details", + "path": "path", + "more": "+{count} more", + "packages_failed": "{count} package could not be checked | {count} packages could not be checked", + "no_known": "No known vulnerabilities in {count} packages", + "scan_failed": "Could not scan for vulnerabilities", + "depth": { + "root": "This package", + "direct": "Direct dependency", + "transitive": "Transitive dependency (indirect)" + }, + "severity": { + "critical": "critical", + "high": "high", + "moderate": "moderate", + "low": "low" + } + }, + "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", + "license": "License", + "weekly": "Weekly", + "size": "Size", + "deps": "Deps", + "updated": "Updated", + "get_started": "Get started", + "readme": "Readme", + "maintainers": "Maintainers", + "keywords": "Keywords", + "versions": "Versions", + "dependencies": "Dependencies" + }, + "sort": { + "downloads": "Most downloaded", + "updated": "Recently updated", + "name_asc": "Name (A-Z)", + "name_desc": "Name (Z-A)" + } + }, + "connector": { + "status": { + "connecting": "connecting...", + "connected_as": "connected as ~{user}", + "connected": "connected", + "connect_cli": "connect local CLI", + "aria_connecting": "Connecting to local connector", + "aria_connected": "Connected to local connector", + "aria_click_to_connect": "Click to connect to local connector", + "avatar_alt": "{user}'s avatar" + }, + "modal": { + "title": "Local Connector", + "contributor_badge": "Contributors only", + "contributor_notice": "The connector is not yet published to npm. See the {link} for how to run locally.", + "contributor_link": "contributing guide", + "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..." + } + }, + "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", + "retrying": "Retrying...", + "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", + "filter_placeholder": "Filter {count} packages..." + } + }, + "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} 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.", + "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", + "select_version": "Select version", + "root": "root", + "lines": "{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", + "load_anyway": "Load anyway", + "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" + }, + "badges": { + "provenance": { + "verified": "verified", + "verified_title": "Verified provenance", + "verified_via": "Verified: published via {provider}" + }, + "jsr": { + "title": "also available on JSR", + "label": "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", + "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" + }, + "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", + "updated": "Last Updated", + "name": "Name", + "quality": "Quality", + "popularity": "Popularity", + "maintenance": "Maintenance", + "score": "Score" + }, + "columns": { + "title": "Columns", + "show": "Show columns", + "reset": "Reset to defaults", + "coming_soon": "Coming soon", + "name": "Name", + "version": "Version", + "description": "Description", + "downloads": "Downloads/wk", + "updated": "Last Updated", + "maintainers": "Maintainers", + "keywords": "Keywords", + "quality_score": "Quality score", + "popularity_score": "Popularity score", + "maintenance_score": "Maintenance score", + "combined_score": "Combined score", + "security": "Security" + }, + "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", + "all_yolo": "All (YOLO)", + "showing": "{start}-{end} 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 better UX/DX for exploring npm packages.", + "back_home": "back to home", + "what_we_are": { + "title": "What we are", + "better_ux_dx": "better UX/DX", + "admin_ui": "admin UI", + "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We 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 better {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 better 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" + } + }, + "contributors": { + "title": "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 a better npm experience.", + "cta": "View on GitHub" + }, + "community": { + "title": "Join the community", + "description": "Chat, ask questions, and share ideas.", + "cta": "Join 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", + "disconnect": "Disconnect" + }, + "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." + } + }, + "header": { + "home": "npmx home", + "github": "GitHub", + "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" + } + }, + "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", + "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." + }, + "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.", + "loading_versions": "Loading versions...", + "select_version": "Select version" + }, + "facets": { + "group_label": "Comparison facets", + "all": "all", + "none": "none", + "coming_soon": "Coming soon", + "select_all": "Select all facets", + "deselect_all": "Deselect all facets", + "select_category": "Select all {category} facets", + "deselect_category": "Deselect all {category} facets", + "categories": { + "performance": "Performance", + "health": "Health", + "compatibility": "Compatibility", + "security": "Security & Compliance" + } + } } } From 6c13cd5748b76995028e3715635d80d9d3e2052b Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:18:51 -0300 Subject: [PATCH 03/14] feat(i18n): expand Brazilian Portuguese translations for package details --- lunaria/files/pt-BR.json | 728 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 728 insertions(+) diff --git a/lunaria/files/pt-BR.json b/lunaria/files/pt-BR.json index 660f0314c3..97248ba1a9 100644 --- a/lunaria/files/pt-BR.json +++ b/lunaria/files/pt-BR.json @@ -111,5 +111,733 @@ "members": "membros" }, "scroll_to_top": "Rolar para o topo" + }, + "package": { + "not_found": "Package Not Found", + "not_found_message": "The package could not be found.", + "no_description": "No description provided", + "show_full_description": "Show full description", + "not_latest": "(not latest)", + "verified_provenance": "Verified provenance", + "view_permalink": "View permalink for this version", + "navigation": "Package", + "copy_name": "Copy package name", + "deprecation": { + "package": "This package has been deprecated.", + "version": "This version has been deprecated.", + "no_reason": "No reason provided" + }, + "replacement": { + "title": "You might not need this dependency.", + "native": "This can be replaced with {replacement}, available since Node {nodeVersion}.", + "simple": "The {community} has flagged this package as redundant, with the advice: {replacement}.", + "documented": "The {community} has flagged this package as having more performant alternatives.", + "none": "This package has been flagged as no longer needed, and its functionality is likely available natively in all engines.", + "learn_more": "Learn more", + "mdn": "MDN", + "community": "community" + }, + "stats": { + "license": "License", + "deps": "Deps", + "install_size": "Install Size", + "vulns": "Vulns", + "updated": "Updated", + "view_dependency_graph": "View dependency graph", + "inspect_dependency_tree": "Inspect dependency tree", + "size_tooltip": { + "unpacked": "{size} unpacked size (this package)", + "total": "{size} total unpacked size (including all {count} dependencies for linux-x64)" + } + }, + "links": { + "repo": "repo", + "homepage": "homepage", + "issues": "issues", + "jsr": "jsr", + "code": "code", + "docs": "docs", + "fund": "fund", + "compare": "compare" + }, + "docs": { + "not_available": "Docs not available", + "not_available_detail": "We could not generate docs for this version." + }, + "get_started": { + "title": "Get started", + "pm_label": "Package manager", + "copy_command": "Copy install command", + "view_types": "View {package}" + }, + "create": { + "title": "Create new project", + "copy_command": "Copy create command" + }, + "run": { + "title": "Run", + "locally": "Run locally" + }, + "readme": { + "title": "Readme", + "no_readme": "No README available.", + "view_on_github": "View on GitHub" + }, + "keywords_title": "Keywords", + "compatibility": "Compatibility", + "card": { + "publisher": "Publisher", + "updated": "Updated", + "weekly_downloads": "Weekly downloads", + "keywords": "Keywords", + "license": "License" + }, + "versions": { + "title": "Versions", + "collapse": "Collapse {tag}", + "expand": "Expand {tag}", + "collapse_other": "Collapse other versions", + "expand_other": "Expand other versions", + "collapse_major": "Collapse major {major}", + "expand_major": "Expand major {major}", + "other_versions": "Other versions", + "more_tagged": "{count} more tagged", + "all_covered": "All versions are covered by tags above", + "deprecated_title": "{version} (deprecated)", + "view_all": "View {count} version | View all {count} versions" + }, + "dependencies": { + "title": "Dependencies ({count})", + "list_label": "Package dependencies", + "show_all": "show {count} dep | show all {count} deps", + "optional": "optional", + "view_vulnerabilities": "View vulnerabilities", + "outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})", + "outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})", + "outdated_patch": "Patch update available (latest: {latest})" + }, + "peer_dependencies": { + "title": "Peer Dependencies ({count})", + "list_label": "Package peer dependencies", + "show_all": "show {count} peer dep | show all {count} peer deps" + }, + "optional_dependencies": { + "title": "Optional Dependencies ({count})", + "list_label": "Package optional dependencies", + "show_all": "show {count} optional dep | show all {count} optional deps" + }, + "maintainers": { + "title": "Maintainers", + "list_label": "Package maintainers", + "you": "(you)", + "via": "via {teams}", + "remove_owner": "Remove {name} as owner", + "username_to_add": "Username to add as owner", + "username_placeholder": "username...", + "add_button": "add", + "cancel_add": "Cancel adding owner", + "add_owner": "+ Add owner", + "show_more": "(show {count} more)", + "show_less": "(show fewer)" + }, + "downloads": { + "title": "Weekly Downloads", + "date_range": "{start} to {end}", + "date_range_multiline": "{start}\nto {end}", + "analyze": "Analyze downloads", + "modal_title": "Downloads", + "granularity": "Granularity", + "granularity_daily": "Daily", + "granularity_weekly": "Weekly", + "granularity_monthly": "Monthly", + "granularity_yearly": "Yearly", + "start_date": "Start", + "end_date": "End", + "no_data": "No download data available", + "loading": "Loading...", + "y_axis_label": "{granularity} downloads", + "download_file": "Download {fileType}", + "toggle_annotator": "Toggle annotator" + }, + "install_scripts": { + "title": "Install Scripts", + "script_label": "(script)", + "npx_packages": "{count} npx package | {count} npx packages", + "currently": "currently {version}" + }, + "playgrounds": { + "title": "Try it out", + "choose": "choose playground" + }, + "metrics": { + "esm": "ES Modules supported", + "cjs": "CommonJS supported", + "no_esm": "No ES Modules support", + "types_label": "Types", + "types_included": "Types included", + "types_available": "Types available via {package}", + "no_types": "No TypeScript types" + }, + "license": { + "view_spdx": "View license text on SPDX" + }, + "vulnerabilities": { + "no_description": "No description available", + "found": "{count} vulnerability found | {count} vulnerabilities found", + "deps_found": "{count} vulnerability found | {count} vulnerabilities found", + "deps_affected": "{count} dependency affected | {count} dependencies affected", + "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", + "scanning_tree": "Scanning dependency tree...", + "show_all_packages": "show all {count} affected packages", + "no_summary": "No summary", + "view_details": "View vulnerability details", + "path": "path", + "more": "+{count} more", + "packages_failed": "{count} package could not be checked | {count} packages could not be checked", + "no_known": "No known vulnerabilities in {count} packages", + "scan_failed": "Could not scan for vulnerabilities", + "depth": { + "root": "This package", + "direct": "Direct dependency", + "transitive": "Transitive dependency (indirect)" + }, + "severity": { + "critical": "critical", + "high": "high", + "moderate": "moderate", + "low": "low" + } + }, + "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", + "license": "License", + "weekly": "Weekly", + "size": "Size", + "deps": "Deps", + "updated": "Updated", + "get_started": "Get started", + "readme": "Readme", + "maintainers": "Maintainers", + "keywords": "Keywords", + "versions": "Versions", + "dependencies": "Dependencies" + }, + "sort": { + "downloads": "Most downloaded", + "updated": "Recently updated", + "name_asc": "Name (A-Z)", + "name_desc": "Name (Z-A)" + } + }, + "connector": { + "status": { + "connecting": "connecting...", + "connected_as": "connected as ~{user}", + "connected": "connected", + "connect_cli": "connect local CLI", + "aria_connecting": "Connecting to local connector", + "aria_connected": "Connected to local connector", + "aria_click_to_connect": "Click to connect to local connector", + "avatar_alt": "{user}'s avatar" + }, + "modal": { + "title": "Local Connector", + "contributor_badge": "Contributors only", + "contributor_notice": "The connector is not yet published to npm. See the {link} for how to run locally.", + "contributor_link": "contributing guide", + "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..." + } + }, + "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", + "retrying": "Retrying...", + "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", + "filter_placeholder": "Filter {count} packages..." + } + }, + "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} 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.", + "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", + "select_version": "Select version", + "root": "root", + "lines": "{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", + "load_anyway": "Load anyway", + "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" + }, + "badges": { + "provenance": { + "verified": "verified", + "verified_title": "Verified provenance", + "verified_via": "Verified: published via {provider}" + }, + "jsr": { + "title": "also available on JSR", + "label": "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", + "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" + }, + "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", + "updated": "Last Updated", + "name": "Name", + "quality": "Quality", + "popularity": "Popularity", + "maintenance": "Maintenance", + "score": "Score" + }, + "columns": { + "title": "Columns", + "show": "Show columns", + "reset": "Reset to defaults", + "coming_soon": "Coming soon", + "name": "Name", + "version": "Version", + "description": "Description", + "downloads": "Downloads/wk", + "updated": "Last Updated", + "maintainers": "Maintainers", + "keywords": "Keywords", + "quality_score": "Quality score", + "popularity_score": "Popularity score", + "maintenance_score": "Maintenance score", + "combined_score": "Combined score", + "security": "Security" + }, + "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", + "all_yolo": "All (YOLO)", + "showing": "{start}-{end} 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 better UX/DX for exploring npm packages.", + "back_home": "back to home", + "what_we_are": { + "title": "What we are", + "better_ux_dx": "better UX/DX", + "admin_ui": "admin UI", + "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We 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 better {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 better 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" + } + }, + "contributors": { + "title": "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 a better npm experience.", + "cta": "View on GitHub" + }, + "community": { + "title": "Join the community", + "description": "Chat, ask questions, and share ideas.", + "cta": "Join 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", + "disconnect": "Disconnect" + }, + "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." + } + }, + "header": { + "home": "npmx home", + "github": "GitHub", + "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" + } + }, + "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", + "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." + }, + "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.", + "loading_versions": "Loading versions...", + "select_version": "Select version" + }, + "facets": { + "group_label": "Comparison facets", + "all": "all", + "none": "none", + "coming_soon": "Coming soon", + "select_all": "Select all facets", + "deselect_all": "Deselect all facets", + "select_category": "Select all {category} facets", + "deselect_category": "Deselect all {category} facets", + "categories": { + "performance": "Performance", + "health": "Health", + "compatibility": "Compatibility", + "security": "Security & Compliance" + } + } } } From ef291a96321d5856a5b782786d8b50ac9d317fa7 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:23:28 -0300 Subject: [PATCH 04/14] feat(i18n): update Brazilian Portuguese translations for package details --- i18n/locales/pt-BR.json | 352 ++++++++++++++++++++-------------------- 1 file changed, 176 insertions(+), 176 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 97248ba1a9..07526b5178 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -113,252 +113,252 @@ "scroll_to_top": "Rolar para o topo" }, "package": { - "not_found": "Package Not Found", - "not_found_message": "The package could not be found.", - "no_description": "No description provided", - "show_full_description": "Show full description", - "not_latest": "(not latest)", - "verified_provenance": "Verified provenance", - "view_permalink": "View permalink for this version", - "navigation": "Package", - "copy_name": "Copy package name", + "not_found": "Pacote não encontrado", + "not_found_message": "O pacote não pôde ser encontrado.", + "no_description": "Nenhuma descrição fornecida", + "show_full_description": "Mostrar descrição completa", + "not_latest": "(não é a mais recente)", + "verified_provenance": "Proveniência verificada", + "view_permalink": "Ver link permanente para esta versão", + "navigation": "Pacote", + "copy_name": "Copiar nome do pacote", "deprecation": { - "package": "This package has been deprecated.", - "version": "This version has been deprecated.", - "no_reason": "No reason provided" + "package": "Este pacote foi descontinuado.", + "version": "Esta versão foi descontinuada.", + "no_reason": "Nenhum motivo fornecido" }, "replacement": { - "title": "You might not need this dependency.", - "native": "This can be replaced with {replacement}, available since Node {nodeVersion}.", - "simple": "The {community} has flagged this package as redundant, with the advice: {replacement}.", - "documented": "The {community} has flagged this package as having more performant alternatives.", - "none": "This package has been flagged as no longer needed, and its functionality is likely available natively in all engines.", - "learn_more": "Learn more", + "title": "Você pode não precisar desta dependência.", + "native": "Isso pode ser substituído por {replacement}, disponível desde Node {nodeVersion}.", + "simple": "A {community} marcou este pacote como redundante, com o conselho: {replacement}.", + "documented": "A {community} marcou este pacote como tendo alternativas mais performáticas.", + "none": "Este pacote foi marcado como não mais necessário, e sua funcionalidade provavelmente está disponível nativamente em todas as engines.", + "learn_more": "Saiba mais", "mdn": "MDN", - "community": "community" + "community": "comunidade" }, "stats": { - "license": "License", + "license": "Licença", "deps": "Deps", - "install_size": "Install Size", - "vulns": "Vulns", - "updated": "Updated", - "view_dependency_graph": "View dependency graph", - "inspect_dependency_tree": "Inspect dependency tree", + "install_size": "Tamanho de Instalação", + "vulns": "Vulnerabilidades", + "updated": "Atualizado", + "view_dependency_graph": "Ver gráfico de dependências", + "inspect_dependency_tree": "Inspecionar árvore de dependências", "size_tooltip": { - "unpacked": "{size} unpacked size (this package)", - "total": "{size} total unpacked size (including all {count} dependencies for linux-x64)" + "unpacked": "{size} tamanho descompactado (este pacote)", + "total": "{size} tamanho total descompactado (incluindo todas as {count} dependências para linux-x64)" } }, "links": { - "repo": "repo", - "homepage": "homepage", - "issues": "issues", + "repo": "repositório", + "homepage": "página inicial", + "issues": "problemas", "jsr": "jsr", - "code": "code", - "docs": "docs", - "fund": "fund", - "compare": "compare" + "code": "código", + "docs": "documentação", + "fund": "financiar", + "compare": "comparar" }, "docs": { - "not_available": "Docs not available", - "not_available_detail": "We could not generate docs for this version." + "not_available": "Documentação não disponível", + "not_available_detail": "Não conseguimos gerar documentação para esta versão." }, "get_started": { - "title": "Get started", - "pm_label": "Package manager", - "copy_command": "Copy install command", - "view_types": "View {package}" + "title": "Comece agora", + "pm_label": "Gerenciador de pacotes", + "copy_command": "Copiar comando de instalação", + "view_types": "Ver {package}" }, "create": { - "title": "Create new project", - "copy_command": "Copy create command" + "title": "Criar novo projeto", + "copy_command": "Copiar comando de criação" }, "run": { - "title": "Run", - "locally": "Run locally" + "title": "Executar", + "locally": "Executar localmente" }, "readme": { "title": "Readme", - "no_readme": "No README available.", - "view_on_github": "View on GitHub" + "no_readme": "README não disponível.", + "view_on_github": "Ver no GitHub" }, - "keywords_title": "Keywords", - "compatibility": "Compatibility", + "keywords_title": "Palavras-chave", + "compatibility": "Compatibilidade", "card": { - "publisher": "Publisher", - "updated": "Updated", - "weekly_downloads": "Weekly downloads", - "keywords": "Keywords", - "license": "License" + "publisher": "Publicador", + "updated": "Atualizado", + "weekly_downloads": "Downloads semanais", + "keywords": "Palavras-chave", + "license": "Licença" }, "versions": { - "title": "Versions", - "collapse": "Collapse {tag}", - "expand": "Expand {tag}", - "collapse_other": "Collapse other versions", - "expand_other": "Expand other versions", - "collapse_major": "Collapse major {major}", - "expand_major": "Expand major {major}", - "other_versions": "Other versions", - "more_tagged": "{count} more tagged", - "all_covered": "All versions are covered by tags above", - "deprecated_title": "{version} (deprecated)", - "view_all": "View {count} version | View all {count} versions" + "title": "Versões", + "collapse": "Recolher {tag}", + "expand": "Expandir {tag}", + "collapse_other": "Recolher outras versões", + "expand_other": "Expandir outras versões", + "collapse_major": "Recolher versão principal {major}", + "expand_major": "Expandir versão principal {major}", + "other_versions": "Outras versões", + "more_tagged": "{count} mais marcadas", + "all_covered": "Todas as versões estão cobertas pelas tags acima", + "deprecated_title": "{version} (descontinuada)", + "view_all": "Ver {count} versão | Ver todas as {count} versões" }, "dependencies": { - "title": "Dependencies ({count})", - "list_label": "Package dependencies", - "show_all": "show {count} dep | show all {count} deps", - "optional": "optional", - "view_vulnerabilities": "View vulnerabilities", - "outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})", - "outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})", - "outdated_patch": "Patch update available (latest: {latest})" + "title": "Dependências ({count})", + "list_label": "Dependências do pacote", + "show_all": "mostrar {count} dep | mostrar todas as {count} deps", + "optional": "opcional", + "view_vulnerabilities": "Ver vulnerabilidades", + "outdated_major": "{count} versão principal desatualizada (mais recente: {latest}) | {count} versões principais desatualizadas (mais recente: {latest})", + "outdated_minor": "{count} versão secundária desatualizada (mais recente: {latest}) | {count} versões secundárias desatualizadas (mais recente: {latest})", + "outdated_patch": "Atualização de patch disponível (mais recente: {latest})" }, "peer_dependencies": { - "title": "Peer Dependencies ({count})", - "list_label": "Package peer dependencies", - "show_all": "show {count} peer dep | show all {count} peer deps" + "title": "Dependências Pares ({count})", + "list_label": "Dependências pares do pacote", + "show_all": "mostrar {count} dep par | mostrar todas as {count} deps pares" }, "optional_dependencies": { - "title": "Optional Dependencies ({count})", - "list_label": "Package optional dependencies", - "show_all": "show {count} optional dep | show all {count} optional deps" + "title": "Dependências Opcionais ({count})", + "list_label": "Dependências opcionais do pacote", + "show_all": "mostrar {count} dep opcional | mostrar todas as {count} deps opcionais" }, "maintainers": { - "title": "Maintainers", - "list_label": "Package maintainers", - "you": "(you)", + "title": "Mantenedores", + "list_label": "Mantenedores do pacote", + "you": "(você)", "via": "via {teams}", - "remove_owner": "Remove {name} as owner", - "username_to_add": "Username to add as owner", - "username_placeholder": "username...", - "add_button": "add", - "cancel_add": "Cancel adding owner", - "add_owner": "+ Add owner", - "show_more": "(show {count} more)", - "show_less": "(show fewer)" + "remove_owner": "Remover {name} como proprietário", + "username_to_add": "Nome de usuário para adicionar como proprietário", + "username_placeholder": "nome de usuário...", + "add_button": "adicionar", + "cancel_add": "Cancelar adição de proprietário", + "add_owner": "+ Adicionar proprietário", + "show_more": "(mostrar {count} mais)", + "show_less": "(mostrar menos)" }, "downloads": { - "title": "Weekly Downloads", - "date_range": "{start} to {end}", - "date_range_multiline": "{start}\nto {end}", - "analyze": "Analyze downloads", + "title": "Downloads Semanais", + "date_range": "{start} a {end}", + "date_range_multiline": "{start}\npara {end}", + "analyze": "Analisar downloads", "modal_title": "Downloads", - "granularity": "Granularity", - "granularity_daily": "Daily", - "granularity_weekly": "Weekly", - "granularity_monthly": "Monthly", - "granularity_yearly": "Yearly", - "start_date": "Start", - "end_date": "End", - "no_data": "No download data available", - "loading": "Loading...", - "y_axis_label": "{granularity} downloads", - "download_file": "Download {fileType}", - "toggle_annotator": "Toggle annotator" + "granularity": "Granularidade", + "granularity_daily": "Diária", + "granularity_weekly": "Semanal", + "granularity_monthly": "Mensal", + "granularity_yearly": "Anual", + "start_date": "Início", + "end_date": "Fim", + "no_data": "Nenhum dado de download disponível", + "loading": "Carregando...", + "y_axis_label": "downloads {granularity}", + "download_file": "Baixar {fileType}", + "toggle_annotator": "Alternar anotador" }, "install_scripts": { - "title": "Install Scripts", + "title": "Scripts de Instalação", "script_label": "(script)", - "npx_packages": "{count} npx package | {count} npx packages", - "currently": "currently {version}" + "npx_packages": "{count} pacote npx | {count} pacotes npx", + "currently": "atualmente {version}" }, "playgrounds": { - "title": "Try it out", - "choose": "choose playground" + "title": "Experimente", + "choose": "escolher playground" }, "metrics": { - "esm": "ES Modules supported", - "cjs": "CommonJS supported", - "no_esm": "No ES Modules support", - "types_label": "Types", - "types_included": "Types included", - "types_available": "Types available via {package}", - "no_types": "No TypeScript types" + "esm": "ES Modules suportados", + "cjs": "CommonJS suportado", + "no_esm": "Sem suporte a ES Modules", + "types_label": "Tipos", + "types_included": "Tipos inclusos", + "types_available": "Tipos disponíveis via {package}", + "no_types": "Sem tipos TypeScript" }, "license": { - "view_spdx": "View license text on SPDX" + "view_spdx": "Ver texto da licença no SPDX" }, "vulnerabilities": { - "no_description": "No description available", - "found": "{count} vulnerability found | {count} vulnerabilities found", - "deps_found": "{count} vulnerability found | {count} vulnerabilities found", - "deps_affected": "{count} dependency affected | {count} dependencies affected", - "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", - "scanning_tree": "Scanning dependency tree...", - "show_all_packages": "show all {count} affected packages", - "no_summary": "No summary", - "view_details": "View vulnerability details", - "path": "path", - "more": "+{count} more", - "packages_failed": "{count} package could not be checked | {count} packages could not be checked", - "no_known": "No known vulnerabilities in {count} packages", - "scan_failed": "Could not scan for vulnerabilities", + "no_description": "Nenhuma descrição disponível", + "found": "{count} vulnerabilidade encontrada | {count} vulnerabilidades encontradas", + "deps_found": "{count} vulnerabilidade encontrada | {count} vulnerabilidades encontradas", + "deps_affected": "{count} dependência afetada | {count} dependências afetadas", + "tree_found": "{vulns} vulnerabilidade em {packages}/{total} pacotes | {vulns} vulnerabilidades em {packages}/{total} pacotes", + "scanning_tree": "Verificando árvore de dependências...", + "show_all_packages": "mostrar todos os {count} pacotes afetados", + "no_summary": "Sem resumo", + "view_details": "Ver detalhes da vulnerabilidade", + "path": "caminho", + "more": "+{count} mais", + "packages_failed": "{count} pacote não pôde ser verificado | {count} pacotes não puderam ser verificados", + "no_known": "Nenhuma vulnerabilidade conhecida em {count} pacotes", + "scan_failed": "Não foi possível verificar vulnerabilidades", "depth": { - "root": "This package", - "direct": "Direct dependency", - "transitive": "Transitive dependency (indirect)" + "root": "Este pacote", + "direct": "Dependência direta", + "transitive": "Dependência transitória (indireta)" }, "severity": { - "critical": "critical", - "high": "high", - "moderate": "moderate", - "low": "low" + "critical": "crítica", + "high": "alta", + "moderate": "moderada", + "low": "baixa" } }, "deprecated": { - "label": "Deprecated", - "tree_found": "{count} deprecated dependency | {count} deprecated dependencies", - "show_all": "show {count} deprecated package | show all {count} deprecated packages" + "label": "Descontinuado", + "tree_found": "{count} dependência descontinuada | {count} dependências descontinuadas", + "show_all": "mostrar {count} pacote descontinuado | mostrar todos os {count} pacotes descontinuados" }, "access": { - "title": "Team Access", - "refresh": "Refresh team access", - "list_label": "Team access list", - "owner": "owner", + "title": "Acesso da Equipe", + "refresh": "Atualizar acesso da equipe", + "list_label": "Lista de acesso da equipe", + "owner": "proprietário", "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": "Revogar acesso de {name}", + "no_access": "Nenhum acesso de equipe configurado", + "select_team_label": "Selecionar equipe", + "loading_teams": "Carregando equipes...", + "select_team": "Selecionar equipe", + "permission_label": "Nível de permissão", "permission": { - "read_only": "read-only", - "read_write": "read-write" + "read_only": "somente leitura", + "read_write": "leitura-escrita" }, - "grant_button": "grant", - "cancel_grant": "Cancel granting access", - "grant_access": "+ Grant team access" + "grant_button": "conceder", + "cancel_grant": "Cancelar concessão de acesso", + "grant_access": "+ Conceder acesso da equipe" }, "list": { - "filter_label": "Filter packages", - "filter_placeholder": "Filter packages...", - "sort_label": "Sort packages", - "showing_count": "Showing {filtered} of {total} packages" + "filter_label": "Filtrar pacotes", + "filter_placeholder": "Filtrar pacotes...", + "sort_label": "Ordenar pacotes", + "showing_count": "Mostrando {filtered} de {total} pacotes" }, "skeleton": { - "loading": "Loading package details", - "license": "License", - "weekly": "Weekly", - "size": "Size", + "loading": "Carregando detalhes do pacote", + "license": "Licença", + "weekly": "Semanal", + "size": "Tamanho", "deps": "Deps", - "updated": "Updated", - "get_started": "Get started", + "updated": "Atualizado", + "get_started": "Comece agora", "readme": "Readme", - "maintainers": "Maintainers", - "keywords": "Keywords", - "versions": "Versions", - "dependencies": "Dependencies" + "maintainers": "Mantenedores", + "keywords": "Palavras-chave", + "versions": "Versões", + "dependencies": "Dependências" }, "sort": { - "downloads": "Most downloaded", - "updated": "Recently updated", - "name_asc": "Name (A-Z)", - "name_desc": "Name (Z-A)" + "downloads": "Mais baixados", + "updated": "Recentemente atualizado", + "name_asc": "Nome (A-Z)", + "name_desc": "Nome (Z-A)" } }, "connector": { From 4c89217cec80f8c8ceee000c5b6074e5247a29b6 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:25:49 -0300 Subject: [PATCH 05/14] feat(i18n): update Brazilian Portuguese translations for connector status and modal --- i18n/locales/pt-BR.json | 92 ++++++++++++++++++++--------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 07526b5178..d7a54fed32 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -363,60 +363,60 @@ }, "connector": { "status": { - "connecting": "connecting...", - "connected_as": "connected as ~{user}", - "connected": "connected", - "connect_cli": "connect local CLI", - "aria_connecting": "Connecting to local connector", - "aria_connected": "Connected to local connector", - "aria_click_to_connect": "Click to connect to local connector", - "avatar_alt": "{user}'s avatar" + "connecting": "conectando...", + "connected_as": "conectado como ~{user}", + "connected": "conectado", + "connect_cli": "conectar CLI local", + "aria_connecting": "Conectando ao conector local", + "aria_connected": "Conectado ao conector local", + "aria_click_to_connect": "Clique para conectar ao conector local", + "avatar_alt": "Avatar de {user}" }, "modal": { - "title": "Local Connector", - "contributor_badge": "Contributors only", - "contributor_notice": "The connector is not yet published to npm. See the {link} for how to run locally.", - "contributor_link": "contributing guide", - "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": "Conector Local", + "contributor_badge": "Apenas contribuidores", + "contributor_notice": "O conector ainda não foi publicado no npm. Veja o {link} para saber como executar localmente.", + "contributor_link": "guia de contribuição", + "connected": "Conectado", + "connected_as_user": "Conectado como ~{user}", + "connected_hint": "Agora você pode gerenciar pacotes e organizações a partir da interface web.", + "disconnect": "Desconectar", + "run_hint": "Execute o conector na sua máquina para ativar recursos de administrador.", + "copy_command": "Copiar comando", + "copied": "Copiado", + "paste_token": "Em seguida, cole o token abaixo para conectar:", "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..." + "token_placeholder": "cole o token aqui...", + "advanced": "Opções avançadas", + "port_label": "Porta", + "warning": "AVISO", + "warning_text": "Isso permite que npmx acesse seu CLI do npm. Conecte-se apenas a sites em que você confia.", + "connect": "Conectar", + "connecting": "Conectando..." } }, "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", - "retrying": "Retrying...", - "approve_operation": "Approve operation", - "remove_operation": "Remove operation", - "approve_all": "Approve All", - "execute": "Execute", - "executing": "Executing...", + "title": "Fila de Operações", + "clear_all": "limpar tudo", + "refresh": "Atualizar operações", + "empty": "Nenhuma operação na fila", + "empty_hint": "Adicione operações a partir das páginas de pacote ou organização", + "active_label": "Operações ativas", + "otp_required": "OTP obrigatório", + "otp_prompt": "Digite OTP para continuar", + "otp_placeholder": "Digite o código OTP...", + "otp_label": "Senha de um único uso", + "retry_otp": "Tentar novamente com OTP", + "retrying": "Tentando novamente...", + "approve_operation": "Aprovar operação", + "remove_operation": "Remover operação", + "approve_all": "Aprovar Tudo", + "execute": "Executar", + "executing": "Executando...", "log": "Log", - "log_label": "Completed operations log", - "remove_from_log": "Remove from log" + "log_label": "Log de operações concluídas", + "remove_from_log": "Remover do log" } }, "org": { From 1c641664d43709fd155d9da2a42b92a580546617 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:27:46 -0300 Subject: [PATCH 06/14] feat(i18n): update Brazilian Portuguese translations for organization teams and members --- i18n/locales/pt-BR.json | 124 ++++++++++++++++++++-------------------- 1 file changed, 62 insertions(+), 62 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index d7a54fed32..36c842d247 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -421,74 +421,74 @@ }, "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" + "title": "Equipes", + "refresh": "Atualizar equipes", + "filter_label": "Filtrar equipes", + "filter_placeholder": "Filtrar equipes...", + "sort_by": "Ordenar por", + "loading": "Carregando equipes...", + "no_teams": "Nenhuma equipe encontrada", + "list_label": "Equipes da organização", + "delete_team": "Excluir equipe {name}", + "member_count": "{count} membro | {count} membros", + "members_of": "Membros de {team}", + "no_members": "Nenhum membro", + "remove_user": "Remover {user} da equipe", + "username_to_add": "Nome de usuário para adicionar a {team}", + "username_placeholder": "nome de usuário...", + "add_button": "adicionar", + "cancel_add_user": "Cancelar adição de usuário", + "add_member": "+ Adicionar membro", + "team_name_label": "Nome da equipe", + "team_name_placeholder": "nome-da-equipe...", + "create_button": "criar", + "no_match": "Nenhuma equipe corresponde a \"{query}\"", + "cancel_create": "Cancelar criação de equipe", + "create_team": "+ Criar equipe" }, "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": "Membros", + "refresh": "Atualizar membros", + "filter_label": "Filtrar membros", + "filter_placeholder": "Filtrar membros...", + "filter_by_role": "Filtrar por função", + "filter_by_team": "Filtrar por equipe", + "all_teams": "todas as equipes", + "sort_by": "Ordenar por", + "loading": "Carregando membros...", + "no_members": "Nenhum membro encontrado", + "list_label": "Membros da organização", + "change_role_for": "Alterar função para {name}", + "remove_from_org": "Remover {name} da organização", + "view_team": "Ver equipe {team}", + "no_match": "Nenhum membro corresponde aos seus filtros", + "username_label": "Nome de usuário", + "username_placeholder": "nome de usuário...", + "role_label": "Função", "role": { - "all": "all", - "developer": "developer", - "admin": "admin", - "owner": "owner" + "all": "todos", + "developer": "desenvolvedor", + "admin": "administrador", + "owner": "proprietário" }, - "team_label": "Team", - "no_team": "no team", - "add_button": "add", - "cancel_add": "Cancel adding member", - "add_member": "+ Add member" + "team_label": "Equipe", + "no_team": "sem equipe", + "add_button": "adicionar", + "cancel_add": "Cancelar adição de membro", + "add_member": "+ Adicionar membro" }, - "public_packages": "{count} public package | {count} public packages", + "public_packages": "{count} pacote público | {count} pacotes públicos", "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", - "filter_placeholder": "Filter {count} packages..." + "packages_title": "Pacotes", + "members_tab": "Membros", + "teams_tab": "Equipes", + "no_packages": "Nenhum pacote público encontrado para", + "no_packages_hint": "Esta organização pode não existir ou não tem pacotes públicos.", + "failed_to_load": "Falha ao carregar pacotes da organização", + "no_match": "Nenhum pacote corresponde a \"{query}\"", + "not_found": "Organização não encontrada", + "not_found_message": "A organização \"{'@'}{name}\" não existe no npm", + "filter_placeholder": "Filtrar {count} pacotes..." } }, "user": { From 6a274d3db7a2ecea63e25c50080ed4b58a1f72e4 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:29:44 -0300 Subject: [PATCH 07/14] feat(i18n): update Brazilian Portuguese translations for user and organization pages --- i18n/locales/pt-BR.json | 86 ++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 36c842d247..8978f356ec 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -493,57 +493,57 @@ }, "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": "(também será adicionado à organização)", + "press_enter_to_add": "Pressione Enter para adicionar {'@'}{username}", + "default_placeholder": "nome de usuário...", + "suggestions_label": "Sugestões de usuários" }, "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} packages..." + "packages_title": "Pacotes", + "no_packages": "Nenhum pacote público encontrado para", + "no_packages_hint": "Este usuário pode não existir ou não tem pacotes públicos.", + "failed_to_load": "Falha ao carregar pacotes do usuário", + "no_match": "Nenhum pacote corresponde a \"{query}\"", + "filter_placeholder": "Filtrar {count} pacotes..." }, "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": "Organizações", + "back_to_profile": "Voltar para o perfil", + "connect_required": "Conecte o CLI local para visualizar suas organizações.", + "connect_hint_prefix": "Execute", + "connect_hint_suffix": "para começar.", + "own_orgs_only": "Você só pode visualizar suas próprias organizações.", + "view_your_orgs": "Visualizar suas organizações", + "loading": "Carregando organizações...", + "empty": "Nenhuma organização encontrada.", + "empty_hint": "As organizações são detectadas a partir de seus pacotes com escopo.", + "count": "{count} Organização | {count} Organizações", + "packages_count": "{count} pacote | {count} pacotes" } }, "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.", - "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": "Reivindicar Nome de Pacote", + "success": "Pacote reivindicado!", + "success_detail": "{name}{'@'}0.0.0 foi publicado no npm.", + "success_hint": "Agora você pode publicar novas versões para este pacote usando npm publish.", + "view_package": "Ver Pacote", + "invalid_name": "Nome de pacote inválido:", + "available": "Este nome está disponível!", + "taken": "Este nome já foi reivindicado.", + "similar_warning": "Pacotes similares existem - npm pode rejeitar este nome:", + "related": "Pacotes relacionados:", + "scope_warning_title": "Considere usar um pacote com escopo em vez disso", + "scope_warning_text": "Nomes de pacotes sem escopo são um recurso compartilhado. Reivindicar um nome apenas se você pretende publicar e manter um pacote. Para projetos pessoais ou organizacionais, use um nome com escopo como {'@'}{username}/{name}.", + "connect_required": "Conecte ao conector local para reivindicar este nome de pacote.", + "connect_button": "Conectar ao Conector", + "publish_hint": "Isso publicará um pacote espaçador mínimo.", + "preview_json": "Visualizar package.json", + "claim_button": "Reivindicar Nome de Pacote", + "publishing": "Publicando...", + "checking": "Verificando disponibilidade...", + "failed_to_check": "Falha ao verificar disponibilidade de nome", + "failed_to_claim": "Falha ao reivindicar pacote" } }, "code": { From 2d927b5997d8f48c2e8ffd4b781a9c87eebfa272 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:32:53 -0300 Subject: [PATCH 08/14] feat(i18n): update Brazilian Portuguese translations for code and badges sections --- i18n/locales/pt-BR.json | 58 ++++++++++++++++++++--------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 8978f356ec..724afd84c6 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -547,44 +547,44 @@ } }, "code": { - "files_label": "Files", - "no_files": "No files in this directory", - "select_version": "Select version", - "root": "root", - "lines": "{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", - "load_anyway": "Load anyway", - "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": "Arquivos", + "no_files": "Nenhum arquivo neste diretório", + "select_version": "Selecionar versão", + "root": "raiz", + "lines": "{count} linhas", + "toggle_tree": "Alternar árvore de arquivos", + "close_tree": "Fechar árvore de arquivos", + "copy_link": "Copiar link", + "raw": "Bruto", + "view_raw": "Ver arquivo bruto", + "file_too_large": "Arquivo muito grande para visualizar", + "file_size_warning": "{size} excede o limite de 500KB para destaque de sintaxe", + "load_anyway": "Carregar mesmo assim", + "failed_to_load": "Falha ao carregar arquivo", + "unavailable_hint": "O arquivo pode ser muito grande ou indisponível", + "version_required": "Versão é obrigatória para navegar pelo código", + "go_to_package": "Ir para pacote", + "loading_tree": "Carregando árvore de arquivos...", + "failed_to_load_tree": "Falha ao carregar arquivos para esta versão do pacote", + "back_to_package": "Voltar para pacote", "table": { - "name": "Name", - "size": "Size" + "name": "Nome", + "size": "Tamanho" }, "markdown_view_mode": { - "preview": "preview", - "code": "code" + "preview": "visualizar", + "code": "código" }, - "file_path": "File path" + "file_path": "Caminho do arquivo" }, "badges": { "provenance": { - "verified": "verified", - "verified_title": "Verified provenance", - "verified_via": "Verified: published via {provider}" + "verified": "verificado", + "verified_title": "Proveniência verificada", + "verified_via": "Verificado: publicado via {provider}" }, "jsr": { - "title": "also available on JSR", + "title": "também disponível no JSR", "label": "jsr" } }, From bd5847e5dd64898663021dbf3dbdf1ab631c5853 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:34:18 -0300 Subject: [PATCH 09/14] feat(i18n): update Brazilian Portuguese translations for filters section --- i18n/locales/pt-BR.json | 162 ++++++++++++++++++++-------------------- 1 file changed, 81 insertions(+), 81 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 724afd84c6..2b8e3ae044 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -589,30 +589,30 @@ } }, "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": "Filtros", + "search": "Pesquisar", + "search_scope": "Escopo de pesquisa", + "search_placeholder_name": "Filtrar por nome de pacote...", + "search_placeholder_description": "Filtrar por descrição...", + "search_placeholder_keywords": "Filtrar por palavras-chave...", + "search_placeholder_all": "Pesquisar tudo ou usar name: desc: kw:", + "scope_name": "Nome", + "scope_name_description": "Pesquisar apenas nomes de pacotes", + "scope_description": "Descrição", + "scope_description_description": "Pesquisar apenas descrições", + "scope_keywords": "Palavras-chave", + "scope_keywords_description": "Pesquisar apenas palavras-chave", + "scope_all": "Tudo", + "scope_all_description": "Pesquisar todos os campos, suporta operadores name: desc: kw:", + "weekly_downloads": "Downloads semanais", + "updated_within": "Atualizado em", + "security": "Segurança", + "keywords": "Palavras-chave", + "more_keywords": "+{count} mais", + "clear_all": "Limpar tudo", + "remove_filter": "Remover filtro {label}", "download_range": { - "any": "Any", + "any": "Qualquer", "lt100": "< 100", "100_1k": "100 - 1K", "1k_10k": "1K - 10K", @@ -620,78 +620,78 @@ "gt100k": "> 100K" }, "updated": { - "any": "Any time", - "week": "Past week", - "month": "Past month", - "quarter": "Past 3 months", - "year": "Past year" + "any": "Qualquer momento", + "week": "Semana passada", + "month": "Mês passado", + "quarter": "Últimos 3 meses", + "year": "Ano passado" }, "security_options": { - "all": "All packages", - "secure": "Without warnings", - "insecure": "With warnings" + "all": "Todos os pacotes", + "secure": "Sem avisos", + "insecure": "Com avisos" }, "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", - "updated": "Last Updated", - "name": "Name", - "quality": "Quality", - "popularity": "Popularity", - "maintenance": "Maintenance", - "score": "Score" + "label": "Ordenar pacotes", + "toggle_direction": "Alternar direção de classificação", + "ascending": "Ascendente", + "descending": "Descendente", + "relevance": "Relevância", + "downloads_week": "Downloads/sem", + "downloads_day": "Downloads/dia", + "downloads_month": "Downloads/mês", + "downloads_year": "Downloads/ano", + "updated": "Última Atualização", + "name": "Nome", + "quality": "Qualidade", + "popularity": "Popularidade", + "maintenance": "Manutenção", + "score": "Pontuação" }, "columns": { - "title": "Columns", - "show": "Show columns", - "reset": "Reset to defaults", - "coming_soon": "Coming soon", - "name": "Name", - "version": "Version", - "description": "Description", - "downloads": "Downloads/wk", - "updated": "Last Updated", - "maintainers": "Maintainers", - "keywords": "Keywords", - "quality_score": "Quality score", - "popularity_score": "Popularity score", - "maintenance_score": "Maintenance score", - "combined_score": "Combined score", - "security": "Security" + "title": "Colunas", + "show": "Mostrar colunas", + "reset": "Redefinir para padrões", + "coming_soon": "Em breve", + "name": "Nome", + "version": "Versão", + "description": "Descrição", + "downloads": "Downloads/sem", + "updated": "Última Atualização", + "maintainers": "Mantenedores", + "keywords": "Palavras-chave", + "quality_score": "Pontuação de qualidade", + "popularity_score": "Pontuação de popularidade", + "maintenance_score": "Pontuação de manutenção", + "combined_score": "Pontuação combinada", + "security": "Segurança" }, "view_mode": { - "label": "View mode", - "cards": "Card view", - "table": "Table view" + "label": "Modo de exibição", + "cards": "Visualização de cartão", + "table": "Visualização de tabela" }, "pagination": { - "mode_label": "Pagination mode", - "infinite": "Infinite", - "paginated": "Paginated", - "items_per_page": "Items per page", - "per_page": "{count} / page", - "all_yolo": "All (YOLO)", - "showing": "{start}-{end} of {total}", - "previous": "Previous page", - "next": "Next page", - "nav_label": "Pagination" + "mode_label": "Modo de paginação", + "infinite": "Infinita", + "paginated": "Paginada", + "items_per_page": "Itens por página", + "per_page": "{count} / página", + "all_yolo": "Todos (YOLO)", + "showing": "{start}-{end} de {total}", + "previous": "Página anterior", + "next": "Próxima página", + "nav_label": "Paginação" }, "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" + "showing_filtered": "{filtered} de {count} pacote | {filtered} de {count} pacotes", + "showing_all": "{count} pacote | {count} pacotes", + "showing_paginated": "{pageSize} de {count} pacote | {pageSize} de {count} pacotes" }, "table": { - "security_warning": "Security warning", - "secure": "Secure", - "no_packages": "No packages found" + "security_warning": "Aviso de segurança", + "secure": "Seguro", + "no_packages": "Nenhum pacote encontrado" } }, "about": { From f999a4fdb5158fa61f33e14d4ad2d94887caebba Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:38:34 -0300 Subject: [PATCH 10/14] feat(i18n): update Brazilian Portuguese translations for about and account menu sections --- i18n/locales/pt-BR.json | 86 ++++++++++++++++++++--------------------- 1 file changed, 43 insertions(+), 43 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 2b8e3ae044..7cb9f9061c 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -695,71 +695,71 @@ } }, "about": { - "title": "About", - "heading": "about", - "meta_description": "npmx is a fast, modern browser for the npm registry. A better UX/DX for exploring npm packages.", - "back_home": "back to home", + "title": "Sobre", + "heading": "sobre", + "meta_description": "npmx é um navegador rápido e moderno para o registro npm. Uma melhor UX/DX para explorar pacotes npm.", + "back_home": "voltar para a página inicial", "what_we_are": { - "title": "What we are", - "better_ux_dx": "better UX/DX", - "admin_ui": "admin UI", - "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We 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 better {adminUi} for managing your packages, teams, and organizations — all from the browser, powered by your local npm CLI." + "title": "O que somos", + "better_ux_dx": "melhor UX/DX", + "admin_ui": "interface de administrador", + "description": "npmx é uma {betterUxDx} para o registro de pacotes npm e ferramentas. Fornecemos uma interface rápida e moderna para explorar pacotes, com recursos como modo escuro, navegação por teclado, navegação de código e conexões para registros alternativos como {jsr}.", + "admin_description": "Também visamos fornecer uma {adminUi} melhor para gerenciar seus pacotes, equipes e organizações — tudo do navegador, alimentado pelo seu CLI npm local." }, "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 better way to browse them.", + "title": "O que não somos", + "not_package_manager": "Não é um gerenciador de pacotes.", + "not_registry": "Não é um registro.", + "registry_description": "Não hospedamos pacotes. Somos apenas uma forma melhor de navegá-los.", "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" + "already": "Existem", + "people": "já", + "building": "pessoas", + "really": "construindo", + "cool": "realmente", + "package": "incríveis", + "managers": "gerenciadores de pacotes" } }, "contributors": { - "title": "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" + "title": "Contribuidores", + "description": "npmx é totalmente de código aberto, construído por uma comunidade incrível de contribuidores. Junte-se a nós e vamos construir juntos a experiência de navegação npm que sempre quisemos.", + "loading": "Carregando contribuidores...", + "error": "Falha ao carregar contribuidores", + "view_profile": "Ver perfil do GitHub de {name}" }, "get_involved": { - "title": "Get involved", + "title": "Envolva-se", "contribute": { - "title": "Contribute", - "description": "Help us build a better npm experience.", - "cta": "View on GitHub" + "title": "Contribuir", + "description": "Ajude-nos a construir uma melhor experiência npm.", + "cta": "Ver no GitHub" }, "community": { - "title": "Join the community", - "description": "Chat, ask questions, and share ideas.", - "cta": "Join Discord" + "title": "Junte-se à comunidade", + "description": "Converse, faça perguntas e compartilhe ideias.", + "cta": "Junte-se ao Discord" }, "follow": { - "title": "Stay updated", - "description": "Find out the latest on npmx.", - "cta": "Follow on Bluesky" + "title": "Mantenha-se atualizado", + "description": "Descubra as novidades sobre npmx.", + "cta": "Siga no Bluesky" } } }, "account_menu": { - "connect": "connect", - "account": "Account", + "connect": "conectar", + "account": "Conta", "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...", + "npm_cli_desc": "Gerenciar pacotes e organizações", + "atmosphere_desc": "Recursos sociais e identidade", + "connect_npm_cli": "Conectar ao CLI npm", + "connect_atmosphere": "Conectar ao Atmosphere", + "connecting": "Conectando...", "ops": "{count} op | {count} ops", - "disconnect": "Disconnect" + "disconnect": "Desconectar" }, "auth": { "modal": { From 3d876ae013b53a5ba7067ce1707f52b4e6fc4e16 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:40:23 -0300 Subject: [PATCH 11/14] feat(i18n): update Brazilian Portuguese translations for authentication modal --- i18n/locales/pt-BR.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 7cb9f9061c..397725f623 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -764,16 +764,16 @@ "auth": { "modal": { "title": "Atmosphere", - "connected_as": "Connected as {'@'}{handle}", - "disconnect": "Disconnect", - "connect_prompt": "Connect with your Atmosphere account", - "handle_label": "Handle", + "connected_as": "Conectado como {'@'}{handle}", + "disconnect": "Desconectar", + "connect_prompt": "Conecte-se com sua conta Atmosphere", + "handle_label": "Nome de identificação", "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." + "connect": "Conectar", + "create_account": "Criar uma nova conta", + "connect_bluesky": "Conectar com Bluesky", + "what_is_atmosphere": "O que é uma conta Atmosphere?", + "atmosphere_explanation": "{npmx} usa o {atproto} para alimentar muitos de seus recursos sociais, permitindo que os usuários possuam seus dados e usem uma conta para todos os aplicativos compatíveis. Depois de criar uma conta, você pode usar outros aplicativos como {bluesky} e {tangled} com a mesma conta." } }, "header": { From b33246dfb89f16f7bad31459fceec87795b37df4 Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:43:04 -0300 Subject: [PATCH 12/14] feat(i18n): update Brazilian Portuguese translations for header section --- i18n/locales/pt-BR.json | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 397725f623..9e995e2a68 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -777,23 +777,23 @@ } }, "header": { - "home": "npmx home", + "home": "página inicial npmx", "github": "GitHub", - "packages": "packages", + "packages": "pacotes", "packages_dropdown": { - "title": "Your Packages", - "loading": "Loading...", - "error": "Failed to load packages", - "empty": "No packages found", - "view_all": "View all" + "title": "Seus Pacotes", + "loading": "Carregando...", + "error": "Falha ao carregar pacotes", + "empty": "Nenhum pacote encontrado", + "view_all": "Ver tudo" }, - "orgs": "orgs", + "orgs": "organizações", "orgs_dropdown": { - "title": "Your Organizations", - "loading": "Loading...", - "error": "Failed to load organizations", - "empty": "No organizations found", - "view_all": "View all" + "title": "Suas Organizações", + "loading": "Carregando...", + "error": "Falha ao carregar organizações", + "empty": "Nenhuma organização encontrada", + "view_all": "Ver tudo" } }, "compare": { From 08ccd8ffcd9d3c93d64122bebadf232dd6361b6e Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:43:46 -0300 Subject: [PATCH 13/14] feat(i18n): update Brazilian Portuguese translations for compare section --- i18n/locales/pt-BR.json | 66 ++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 33 deletions(-) diff --git a/i18n/locales/pt-BR.json b/i18n/locales/pt-BR.json index 9e995e2a68..0191a2502c 100644 --- a/i18n/locales/pt-BR.json +++ b/i18n/locales/pt-BR.json @@ -798,45 +798,45 @@ }, "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", - "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." + "title": "comparar pacotes", + "tagline": "compare pacotes npm lado a lado para ajudá-lo a escolher o certo.", + "meta_title": "Comparar {packages} - npmx", + "meta_title_empty": "Comparar Pacotes - npmx", + "meta_description": "Comparação lado a lado de {packages}", + "meta_description_empty": "Comparar pacotes npm lado a lado", + "section_packages": "Pacotes", + "section_facets": "Aspectos", + "section_comparison": "Comparação", + "loading": "Carregando dados do pacote...", + "error": "Falha ao carregar dados do pacote. Por favor, tente novamente.", + "empty_title": "Selecione pacotes para comparar", + "empty_description": "Pesquise e adicione pelo menos 2 pacotes acima para ver uma comparação lado a lado de suas métricas." }, "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.", - "loading_versions": "Loading versions...", - "select_version": "Select version" + "search_label": "Pesquisar por pacotes", + "search_first": "Pesquisar por um pacote...", + "search_add": "Adicionar outro pacote...", + "searching": "Pesquisando...", + "remove_package": "Remover {package}", + "packages_selected": "{count}/{max} pacotes selecionados.", + "add_hint": "Adicione pelo menos 2 pacotes para comparar.", + "loading_versions": "Carregando versões...", + "select_version": "Selecionar versão" }, "facets": { - "group_label": "Comparison facets", - "all": "all", - "none": "none", - "coming_soon": "Coming soon", - "select_all": "Select all facets", - "deselect_all": "Deselect all facets", - "select_category": "Select all {category} facets", - "deselect_category": "Deselect all {category} facets", + "group_label": "Aspectos de comparação", + "all": "todos", + "none": "nenhum", + "coming_soon": "Em breve", + "select_all": "Selecionar todos os aspectos", + "deselect_all": "Desselecionar todos os aspectos", + "select_category": "Selecionar todos os aspectos {category}", + "deselect_category": "Desselecionar todos os aspectos {category}", "categories": { "performance": "Performance", - "health": "Health", - "compatibility": "Compatibility", - "security": "Security & Compliance" + "health": "Saúde", + "compatibility": "Compatibilidade", + "security": "Segurança e Conformidade" } } } From 8f505d831352cda35bc1f74bae80ec016efc788d Mon Sep 17 00:00:00 2001 From: brenoepics Date: Sat, 31 Jan 2026 18:49:01 -0300 Subject: [PATCH 14/14] feat(i18n): update lunaria Brazilian Portuguese translations --- lunaria/files/pt-BR.json | 1070 +++++++++++++++++++------------------- 1 file changed, 535 insertions(+), 535 deletions(-) diff --git a/lunaria/files/pt-BR.json b/lunaria/files/pt-BR.json index 97248ba1a9..0191a2502c 100644 --- a/lunaria/files/pt-BR.json +++ b/lunaria/files/pt-BR.json @@ -113,506 +113,506 @@ "scroll_to_top": "Rolar para o topo" }, "package": { - "not_found": "Package Not Found", - "not_found_message": "The package could not be found.", - "no_description": "No description provided", - "show_full_description": "Show full description", - "not_latest": "(not latest)", - "verified_provenance": "Verified provenance", - "view_permalink": "View permalink for this version", - "navigation": "Package", - "copy_name": "Copy package name", + "not_found": "Pacote não encontrado", + "not_found_message": "O pacote não pôde ser encontrado.", + "no_description": "Nenhuma descrição fornecida", + "show_full_description": "Mostrar descrição completa", + "not_latest": "(não é a mais recente)", + "verified_provenance": "Proveniência verificada", + "view_permalink": "Ver link permanente para esta versão", + "navigation": "Pacote", + "copy_name": "Copiar nome do pacote", "deprecation": { - "package": "This package has been deprecated.", - "version": "This version has been deprecated.", - "no_reason": "No reason provided" + "package": "Este pacote foi descontinuado.", + "version": "Esta versão foi descontinuada.", + "no_reason": "Nenhum motivo fornecido" }, "replacement": { - "title": "You might not need this dependency.", - "native": "This can be replaced with {replacement}, available since Node {nodeVersion}.", - "simple": "The {community} has flagged this package as redundant, with the advice: {replacement}.", - "documented": "The {community} has flagged this package as having more performant alternatives.", - "none": "This package has been flagged as no longer needed, and its functionality is likely available natively in all engines.", - "learn_more": "Learn more", + "title": "Você pode não precisar desta dependência.", + "native": "Isso pode ser substituído por {replacement}, disponível desde Node {nodeVersion}.", + "simple": "A {community} marcou este pacote como redundante, com o conselho: {replacement}.", + "documented": "A {community} marcou este pacote como tendo alternativas mais performáticas.", + "none": "Este pacote foi marcado como não mais necessário, e sua funcionalidade provavelmente está disponível nativamente em todas as engines.", + "learn_more": "Saiba mais", "mdn": "MDN", - "community": "community" + "community": "comunidade" }, "stats": { - "license": "License", + "license": "Licença", "deps": "Deps", - "install_size": "Install Size", - "vulns": "Vulns", - "updated": "Updated", - "view_dependency_graph": "View dependency graph", - "inspect_dependency_tree": "Inspect dependency tree", + "install_size": "Tamanho de Instalação", + "vulns": "Vulnerabilidades", + "updated": "Atualizado", + "view_dependency_graph": "Ver gráfico de dependências", + "inspect_dependency_tree": "Inspecionar árvore de dependências", "size_tooltip": { - "unpacked": "{size} unpacked size (this package)", - "total": "{size} total unpacked size (including all {count} dependencies for linux-x64)" + "unpacked": "{size} tamanho descompactado (este pacote)", + "total": "{size} tamanho total descompactado (incluindo todas as {count} dependências para linux-x64)" } }, "links": { - "repo": "repo", - "homepage": "homepage", - "issues": "issues", + "repo": "repositório", + "homepage": "página inicial", + "issues": "problemas", "jsr": "jsr", - "code": "code", - "docs": "docs", - "fund": "fund", - "compare": "compare" + "code": "código", + "docs": "documentação", + "fund": "financiar", + "compare": "comparar" }, "docs": { - "not_available": "Docs not available", - "not_available_detail": "We could not generate docs for this version." + "not_available": "Documentação não disponível", + "not_available_detail": "Não conseguimos gerar documentação para esta versão." }, "get_started": { - "title": "Get started", - "pm_label": "Package manager", - "copy_command": "Copy install command", - "view_types": "View {package}" + "title": "Comece agora", + "pm_label": "Gerenciador de pacotes", + "copy_command": "Copiar comando de instalação", + "view_types": "Ver {package}" }, "create": { - "title": "Create new project", - "copy_command": "Copy create command" + "title": "Criar novo projeto", + "copy_command": "Copiar comando de criação" }, "run": { - "title": "Run", - "locally": "Run locally" + "title": "Executar", + "locally": "Executar localmente" }, "readme": { "title": "Readme", - "no_readme": "No README available.", - "view_on_github": "View on GitHub" + "no_readme": "README não disponível.", + "view_on_github": "Ver no GitHub" }, - "keywords_title": "Keywords", - "compatibility": "Compatibility", + "keywords_title": "Palavras-chave", + "compatibility": "Compatibilidade", "card": { - "publisher": "Publisher", - "updated": "Updated", - "weekly_downloads": "Weekly downloads", - "keywords": "Keywords", - "license": "License" + "publisher": "Publicador", + "updated": "Atualizado", + "weekly_downloads": "Downloads semanais", + "keywords": "Palavras-chave", + "license": "Licença" }, "versions": { - "title": "Versions", - "collapse": "Collapse {tag}", - "expand": "Expand {tag}", - "collapse_other": "Collapse other versions", - "expand_other": "Expand other versions", - "collapse_major": "Collapse major {major}", - "expand_major": "Expand major {major}", - "other_versions": "Other versions", - "more_tagged": "{count} more tagged", - "all_covered": "All versions are covered by tags above", - "deprecated_title": "{version} (deprecated)", - "view_all": "View {count} version | View all {count} versions" + "title": "Versões", + "collapse": "Recolher {tag}", + "expand": "Expandir {tag}", + "collapse_other": "Recolher outras versões", + "expand_other": "Expandir outras versões", + "collapse_major": "Recolher versão principal {major}", + "expand_major": "Expandir versão principal {major}", + "other_versions": "Outras versões", + "more_tagged": "{count} mais marcadas", + "all_covered": "Todas as versões estão cobertas pelas tags acima", + "deprecated_title": "{version} (descontinuada)", + "view_all": "Ver {count} versão | Ver todas as {count} versões" }, "dependencies": { - "title": "Dependencies ({count})", - "list_label": "Package dependencies", - "show_all": "show {count} dep | show all {count} deps", - "optional": "optional", - "view_vulnerabilities": "View vulnerabilities", - "outdated_major": "{count} major version behind (latest: {latest}) | {count} major versions behind (latest: {latest})", - "outdated_minor": "{count} minor version behind (latest: {latest}) | {count} minor versions behind (latest: {latest})", - "outdated_patch": "Patch update available (latest: {latest})" + "title": "Dependências ({count})", + "list_label": "Dependências do pacote", + "show_all": "mostrar {count} dep | mostrar todas as {count} deps", + "optional": "opcional", + "view_vulnerabilities": "Ver vulnerabilidades", + "outdated_major": "{count} versão principal desatualizada (mais recente: {latest}) | {count} versões principais desatualizadas (mais recente: {latest})", + "outdated_minor": "{count} versão secundária desatualizada (mais recente: {latest}) | {count} versões secundárias desatualizadas (mais recente: {latest})", + "outdated_patch": "Atualização de patch disponível (mais recente: {latest})" }, "peer_dependencies": { - "title": "Peer Dependencies ({count})", - "list_label": "Package peer dependencies", - "show_all": "show {count} peer dep | show all {count} peer deps" + "title": "Dependências Pares ({count})", + "list_label": "Dependências pares do pacote", + "show_all": "mostrar {count} dep par | mostrar todas as {count} deps pares" }, "optional_dependencies": { - "title": "Optional Dependencies ({count})", - "list_label": "Package optional dependencies", - "show_all": "show {count} optional dep | show all {count} optional deps" + "title": "Dependências Opcionais ({count})", + "list_label": "Dependências opcionais do pacote", + "show_all": "mostrar {count} dep opcional | mostrar todas as {count} deps opcionais" }, "maintainers": { - "title": "Maintainers", - "list_label": "Package maintainers", - "you": "(you)", + "title": "Mantenedores", + "list_label": "Mantenedores do pacote", + "you": "(você)", "via": "via {teams}", - "remove_owner": "Remove {name} as owner", - "username_to_add": "Username to add as owner", - "username_placeholder": "username...", - "add_button": "add", - "cancel_add": "Cancel adding owner", - "add_owner": "+ Add owner", - "show_more": "(show {count} more)", - "show_less": "(show fewer)" + "remove_owner": "Remover {name} como proprietário", + "username_to_add": "Nome de usuário para adicionar como proprietário", + "username_placeholder": "nome de usuário...", + "add_button": "adicionar", + "cancel_add": "Cancelar adição de proprietário", + "add_owner": "+ Adicionar proprietário", + "show_more": "(mostrar {count} mais)", + "show_less": "(mostrar menos)" }, "downloads": { - "title": "Weekly Downloads", - "date_range": "{start} to {end}", - "date_range_multiline": "{start}\nto {end}", - "analyze": "Analyze downloads", + "title": "Downloads Semanais", + "date_range": "{start} a {end}", + "date_range_multiline": "{start}\npara {end}", + "analyze": "Analisar downloads", "modal_title": "Downloads", - "granularity": "Granularity", - "granularity_daily": "Daily", - "granularity_weekly": "Weekly", - "granularity_monthly": "Monthly", - "granularity_yearly": "Yearly", - "start_date": "Start", - "end_date": "End", - "no_data": "No download data available", - "loading": "Loading...", - "y_axis_label": "{granularity} downloads", - "download_file": "Download {fileType}", - "toggle_annotator": "Toggle annotator" + "granularity": "Granularidade", + "granularity_daily": "Diária", + "granularity_weekly": "Semanal", + "granularity_monthly": "Mensal", + "granularity_yearly": "Anual", + "start_date": "Início", + "end_date": "Fim", + "no_data": "Nenhum dado de download disponível", + "loading": "Carregando...", + "y_axis_label": "downloads {granularity}", + "download_file": "Baixar {fileType}", + "toggle_annotator": "Alternar anotador" }, "install_scripts": { - "title": "Install Scripts", + "title": "Scripts de Instalação", "script_label": "(script)", - "npx_packages": "{count} npx package | {count} npx packages", - "currently": "currently {version}" + "npx_packages": "{count} pacote npx | {count} pacotes npx", + "currently": "atualmente {version}" }, "playgrounds": { - "title": "Try it out", - "choose": "choose playground" + "title": "Experimente", + "choose": "escolher playground" }, "metrics": { - "esm": "ES Modules supported", - "cjs": "CommonJS supported", - "no_esm": "No ES Modules support", - "types_label": "Types", - "types_included": "Types included", - "types_available": "Types available via {package}", - "no_types": "No TypeScript types" + "esm": "ES Modules suportados", + "cjs": "CommonJS suportado", + "no_esm": "Sem suporte a ES Modules", + "types_label": "Tipos", + "types_included": "Tipos inclusos", + "types_available": "Tipos disponíveis via {package}", + "no_types": "Sem tipos TypeScript" }, "license": { - "view_spdx": "View license text on SPDX" + "view_spdx": "Ver texto da licença no SPDX" }, "vulnerabilities": { - "no_description": "No description available", - "found": "{count} vulnerability found | {count} vulnerabilities found", - "deps_found": "{count} vulnerability found | {count} vulnerabilities found", - "deps_affected": "{count} dependency affected | {count} dependencies affected", - "tree_found": "{vulns} vulnerability in {packages}/{total} packages | {vulns} vulnerabilities in {packages}/{total} packages", - "scanning_tree": "Scanning dependency tree...", - "show_all_packages": "show all {count} affected packages", - "no_summary": "No summary", - "view_details": "View vulnerability details", - "path": "path", - "more": "+{count} more", - "packages_failed": "{count} package could not be checked | {count} packages could not be checked", - "no_known": "No known vulnerabilities in {count} packages", - "scan_failed": "Could not scan for vulnerabilities", + "no_description": "Nenhuma descrição disponível", + "found": "{count} vulnerabilidade encontrada | {count} vulnerabilidades encontradas", + "deps_found": "{count} vulnerabilidade encontrada | {count} vulnerabilidades encontradas", + "deps_affected": "{count} dependência afetada | {count} dependências afetadas", + "tree_found": "{vulns} vulnerabilidade em {packages}/{total} pacotes | {vulns} vulnerabilidades em {packages}/{total} pacotes", + "scanning_tree": "Verificando árvore de dependências...", + "show_all_packages": "mostrar todos os {count} pacotes afetados", + "no_summary": "Sem resumo", + "view_details": "Ver detalhes da vulnerabilidade", + "path": "caminho", + "more": "+{count} mais", + "packages_failed": "{count} pacote não pôde ser verificado | {count} pacotes não puderam ser verificados", + "no_known": "Nenhuma vulnerabilidade conhecida em {count} pacotes", + "scan_failed": "Não foi possível verificar vulnerabilidades", "depth": { - "root": "This package", - "direct": "Direct dependency", - "transitive": "Transitive dependency (indirect)" + "root": "Este pacote", + "direct": "Dependência direta", + "transitive": "Dependência transitória (indireta)" }, "severity": { - "critical": "critical", - "high": "high", - "moderate": "moderate", - "low": "low" + "critical": "crítica", + "high": "alta", + "moderate": "moderada", + "low": "baixa" } }, "deprecated": { - "label": "Deprecated", - "tree_found": "{count} deprecated dependency | {count} deprecated dependencies", - "show_all": "show {count} deprecated package | show all {count} deprecated packages" + "label": "Descontinuado", + "tree_found": "{count} dependência descontinuada | {count} dependências descontinuadas", + "show_all": "mostrar {count} pacote descontinuado | mostrar todos os {count} pacotes descontinuados" }, "access": { - "title": "Team Access", - "refresh": "Refresh team access", - "list_label": "Team access list", - "owner": "owner", + "title": "Acesso da Equipe", + "refresh": "Atualizar acesso da equipe", + "list_label": "Lista de acesso da equipe", + "owner": "proprietário", "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": "Revogar acesso de {name}", + "no_access": "Nenhum acesso de equipe configurado", + "select_team_label": "Selecionar equipe", + "loading_teams": "Carregando equipes...", + "select_team": "Selecionar equipe", + "permission_label": "Nível de permissão", "permission": { - "read_only": "read-only", - "read_write": "read-write" + "read_only": "somente leitura", + "read_write": "leitura-escrita" }, - "grant_button": "grant", - "cancel_grant": "Cancel granting access", - "grant_access": "+ Grant team access" + "grant_button": "conceder", + "cancel_grant": "Cancelar concessão de acesso", + "grant_access": "+ Conceder acesso da equipe" }, "list": { - "filter_label": "Filter packages", - "filter_placeholder": "Filter packages...", - "sort_label": "Sort packages", - "showing_count": "Showing {filtered} of {total} packages" + "filter_label": "Filtrar pacotes", + "filter_placeholder": "Filtrar pacotes...", + "sort_label": "Ordenar pacotes", + "showing_count": "Mostrando {filtered} de {total} pacotes" }, "skeleton": { - "loading": "Loading package details", - "license": "License", - "weekly": "Weekly", - "size": "Size", + "loading": "Carregando detalhes do pacote", + "license": "Licença", + "weekly": "Semanal", + "size": "Tamanho", "deps": "Deps", - "updated": "Updated", - "get_started": "Get started", + "updated": "Atualizado", + "get_started": "Comece agora", "readme": "Readme", - "maintainers": "Maintainers", - "keywords": "Keywords", - "versions": "Versions", - "dependencies": "Dependencies" + "maintainers": "Mantenedores", + "keywords": "Palavras-chave", + "versions": "Versões", + "dependencies": "Dependências" }, "sort": { - "downloads": "Most downloaded", - "updated": "Recently updated", - "name_asc": "Name (A-Z)", - "name_desc": "Name (Z-A)" + "downloads": "Mais baixados", + "updated": "Recentemente atualizado", + "name_asc": "Nome (A-Z)", + "name_desc": "Nome (Z-A)" } }, "connector": { "status": { - "connecting": "connecting...", - "connected_as": "connected as ~{user}", - "connected": "connected", - "connect_cli": "connect local CLI", - "aria_connecting": "Connecting to local connector", - "aria_connected": "Connected to local connector", - "aria_click_to_connect": "Click to connect to local connector", - "avatar_alt": "{user}'s avatar" + "connecting": "conectando...", + "connected_as": "conectado como ~{user}", + "connected": "conectado", + "connect_cli": "conectar CLI local", + "aria_connecting": "Conectando ao conector local", + "aria_connected": "Conectado ao conector local", + "aria_click_to_connect": "Clique para conectar ao conector local", + "avatar_alt": "Avatar de {user}" }, "modal": { - "title": "Local Connector", - "contributor_badge": "Contributors only", - "contributor_notice": "The connector is not yet published to npm. See the {link} for how to run locally.", - "contributor_link": "contributing guide", - "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": "Conector Local", + "contributor_badge": "Apenas contribuidores", + "contributor_notice": "O conector ainda não foi publicado no npm. Veja o {link} para saber como executar localmente.", + "contributor_link": "guia de contribuição", + "connected": "Conectado", + "connected_as_user": "Conectado como ~{user}", + "connected_hint": "Agora você pode gerenciar pacotes e organizações a partir da interface web.", + "disconnect": "Desconectar", + "run_hint": "Execute o conector na sua máquina para ativar recursos de administrador.", + "copy_command": "Copiar comando", + "copied": "Copiado", + "paste_token": "Em seguida, cole o token abaixo para conectar:", "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..." + "token_placeholder": "cole o token aqui...", + "advanced": "Opções avançadas", + "port_label": "Porta", + "warning": "AVISO", + "warning_text": "Isso permite que npmx acesse seu CLI do npm. Conecte-se apenas a sites em que você confia.", + "connect": "Conectar", + "connecting": "Conectando..." } }, "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", - "retrying": "Retrying...", - "approve_operation": "Approve operation", - "remove_operation": "Remove operation", - "approve_all": "Approve All", - "execute": "Execute", - "executing": "Executing...", + "title": "Fila de Operações", + "clear_all": "limpar tudo", + "refresh": "Atualizar operações", + "empty": "Nenhuma operação na fila", + "empty_hint": "Adicione operações a partir das páginas de pacote ou organização", + "active_label": "Operações ativas", + "otp_required": "OTP obrigatório", + "otp_prompt": "Digite OTP para continuar", + "otp_placeholder": "Digite o código OTP...", + "otp_label": "Senha de um único uso", + "retry_otp": "Tentar novamente com OTP", + "retrying": "Tentando novamente...", + "approve_operation": "Aprovar operação", + "remove_operation": "Remover operação", + "approve_all": "Aprovar Tudo", + "execute": "Executar", + "executing": "Executando...", "log": "Log", - "log_label": "Completed operations log", - "remove_from_log": "Remove from log" + "log_label": "Log de operações concluídas", + "remove_from_log": "Remover do 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" + "title": "Equipes", + "refresh": "Atualizar equipes", + "filter_label": "Filtrar equipes", + "filter_placeholder": "Filtrar equipes...", + "sort_by": "Ordenar por", + "loading": "Carregando equipes...", + "no_teams": "Nenhuma equipe encontrada", + "list_label": "Equipes da organização", + "delete_team": "Excluir equipe {name}", + "member_count": "{count} membro | {count} membros", + "members_of": "Membros de {team}", + "no_members": "Nenhum membro", + "remove_user": "Remover {user} da equipe", + "username_to_add": "Nome de usuário para adicionar a {team}", + "username_placeholder": "nome de usuário...", + "add_button": "adicionar", + "cancel_add_user": "Cancelar adição de usuário", + "add_member": "+ Adicionar membro", + "team_name_label": "Nome da equipe", + "team_name_placeholder": "nome-da-equipe...", + "create_button": "criar", + "no_match": "Nenhuma equipe corresponde a \"{query}\"", + "cancel_create": "Cancelar criação de equipe", + "create_team": "+ Criar equipe" }, "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": "Membros", + "refresh": "Atualizar membros", + "filter_label": "Filtrar membros", + "filter_placeholder": "Filtrar membros...", + "filter_by_role": "Filtrar por função", + "filter_by_team": "Filtrar por equipe", + "all_teams": "todas as equipes", + "sort_by": "Ordenar por", + "loading": "Carregando membros...", + "no_members": "Nenhum membro encontrado", + "list_label": "Membros da organização", + "change_role_for": "Alterar função para {name}", + "remove_from_org": "Remover {name} da organização", + "view_team": "Ver equipe {team}", + "no_match": "Nenhum membro corresponde aos seus filtros", + "username_label": "Nome de usuário", + "username_placeholder": "nome de usuário...", + "role_label": "Função", "role": { - "all": "all", - "developer": "developer", - "admin": "admin", - "owner": "owner" + "all": "todos", + "developer": "desenvolvedor", + "admin": "administrador", + "owner": "proprietário" }, - "team_label": "Team", - "no_team": "no team", - "add_button": "add", - "cancel_add": "Cancel adding member", - "add_member": "+ Add member" + "team_label": "Equipe", + "no_team": "sem equipe", + "add_button": "adicionar", + "cancel_add": "Cancelar adição de membro", + "add_member": "+ Adicionar membro" }, - "public_packages": "{count} public package | {count} public packages", + "public_packages": "{count} pacote público | {count} pacotes públicos", "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", - "filter_placeholder": "Filter {count} packages..." + "packages_title": "Pacotes", + "members_tab": "Membros", + "teams_tab": "Equipes", + "no_packages": "Nenhum pacote público encontrado para", + "no_packages_hint": "Esta organização pode não existir ou não tem pacotes públicos.", + "failed_to_load": "Falha ao carregar pacotes da organização", + "no_match": "Nenhum pacote corresponde a \"{query}\"", + "not_found": "Organização não encontrada", + "not_found_message": "A organização \"{'@'}{name}\" não existe no npm", + "filter_placeholder": "Filtrar {count} pacotes..." } }, "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": "(também será adicionado à organização)", + "press_enter_to_add": "Pressione Enter para adicionar {'@'}{username}", + "default_placeholder": "nome de usuário...", + "suggestions_label": "Sugestões de usuários" }, "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} packages..." + "packages_title": "Pacotes", + "no_packages": "Nenhum pacote público encontrado para", + "no_packages_hint": "Este usuário pode não existir ou não tem pacotes públicos.", + "failed_to_load": "Falha ao carregar pacotes do usuário", + "no_match": "Nenhum pacote corresponde a \"{query}\"", + "filter_placeholder": "Filtrar {count} pacotes..." }, "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": "Organizações", + "back_to_profile": "Voltar para o perfil", + "connect_required": "Conecte o CLI local para visualizar suas organizações.", + "connect_hint_prefix": "Execute", + "connect_hint_suffix": "para começar.", + "own_orgs_only": "Você só pode visualizar suas próprias organizações.", + "view_your_orgs": "Visualizar suas organizações", + "loading": "Carregando organizações...", + "empty": "Nenhuma organização encontrada.", + "empty_hint": "As organizações são detectadas a partir de seus pacotes com escopo.", + "count": "{count} Organização | {count} Organizações", + "packages_count": "{count} pacote | {count} pacotes" } }, "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.", - "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": "Reivindicar Nome de Pacote", + "success": "Pacote reivindicado!", + "success_detail": "{name}{'@'}0.0.0 foi publicado no npm.", + "success_hint": "Agora você pode publicar novas versões para este pacote usando npm publish.", + "view_package": "Ver Pacote", + "invalid_name": "Nome de pacote inválido:", + "available": "Este nome está disponível!", + "taken": "Este nome já foi reivindicado.", + "similar_warning": "Pacotes similares existem - npm pode rejeitar este nome:", + "related": "Pacotes relacionados:", + "scope_warning_title": "Considere usar um pacote com escopo em vez disso", + "scope_warning_text": "Nomes de pacotes sem escopo são um recurso compartilhado. Reivindicar um nome apenas se você pretende publicar e manter um pacote. Para projetos pessoais ou organizacionais, use um nome com escopo como {'@'}{username}/{name}.", + "connect_required": "Conecte ao conector local para reivindicar este nome de pacote.", + "connect_button": "Conectar ao Conector", + "publish_hint": "Isso publicará um pacote espaçador mínimo.", + "preview_json": "Visualizar package.json", + "claim_button": "Reivindicar Nome de Pacote", + "publishing": "Publicando...", + "checking": "Verificando disponibilidade...", + "failed_to_check": "Falha ao verificar disponibilidade de nome", + "failed_to_claim": "Falha ao reivindicar pacote" } }, "code": { - "files_label": "Files", - "no_files": "No files in this directory", - "select_version": "Select version", - "root": "root", - "lines": "{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", - "load_anyway": "Load anyway", - "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": "Arquivos", + "no_files": "Nenhum arquivo neste diretório", + "select_version": "Selecionar versão", + "root": "raiz", + "lines": "{count} linhas", + "toggle_tree": "Alternar árvore de arquivos", + "close_tree": "Fechar árvore de arquivos", + "copy_link": "Copiar link", + "raw": "Bruto", + "view_raw": "Ver arquivo bruto", + "file_too_large": "Arquivo muito grande para visualizar", + "file_size_warning": "{size} excede o limite de 500KB para destaque de sintaxe", + "load_anyway": "Carregar mesmo assim", + "failed_to_load": "Falha ao carregar arquivo", + "unavailable_hint": "O arquivo pode ser muito grande ou indisponível", + "version_required": "Versão é obrigatória para navegar pelo código", + "go_to_package": "Ir para pacote", + "loading_tree": "Carregando árvore de arquivos...", + "failed_to_load_tree": "Falha ao carregar arquivos para esta versão do pacote", + "back_to_package": "Voltar para pacote", "table": { - "name": "Name", - "size": "Size" + "name": "Nome", + "size": "Tamanho" }, "markdown_view_mode": { - "preview": "preview", - "code": "code" + "preview": "visualizar", + "code": "código" }, - "file_path": "File path" + "file_path": "Caminho do arquivo" }, "badges": { "provenance": { - "verified": "verified", - "verified_title": "Verified provenance", - "verified_via": "Verified: published via {provider}" + "verified": "verificado", + "verified_title": "Proveniência verificada", + "verified_via": "Verificado: publicado via {provider}" }, "jsr": { - "title": "also available on JSR", + "title": "também disponível no JSR", "label": "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": "Filtros", + "search": "Pesquisar", + "search_scope": "Escopo de pesquisa", + "search_placeholder_name": "Filtrar por nome de pacote...", + "search_placeholder_description": "Filtrar por descrição...", + "search_placeholder_keywords": "Filtrar por palavras-chave...", + "search_placeholder_all": "Pesquisar tudo ou usar name: desc: kw:", + "scope_name": "Nome", + "scope_name_description": "Pesquisar apenas nomes de pacotes", + "scope_description": "Descrição", + "scope_description_description": "Pesquisar apenas descrições", + "scope_keywords": "Palavras-chave", + "scope_keywords_description": "Pesquisar apenas palavras-chave", + "scope_all": "Tudo", + "scope_all_description": "Pesquisar todos os campos, suporta operadores name: desc: kw:", + "weekly_downloads": "Downloads semanais", + "updated_within": "Atualizado em", + "security": "Segurança", + "keywords": "Palavras-chave", + "more_keywords": "+{count} mais", + "clear_all": "Limpar tudo", + "remove_filter": "Remover filtro {label}", "download_range": { - "any": "Any", + "any": "Qualquer", "lt100": "< 100", "100_1k": "100 - 1K", "1k_10k": "1K - 10K", @@ -620,223 +620,223 @@ "gt100k": "> 100K" }, "updated": { - "any": "Any time", - "week": "Past week", - "month": "Past month", - "quarter": "Past 3 months", - "year": "Past year" + "any": "Qualquer momento", + "week": "Semana passada", + "month": "Mês passado", + "quarter": "Últimos 3 meses", + "year": "Ano passado" }, "security_options": { - "all": "All packages", - "secure": "Without warnings", - "insecure": "With warnings" + "all": "Todos os pacotes", + "secure": "Sem avisos", + "insecure": "Com avisos" }, "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", - "updated": "Last Updated", - "name": "Name", - "quality": "Quality", - "popularity": "Popularity", - "maintenance": "Maintenance", - "score": "Score" + "label": "Ordenar pacotes", + "toggle_direction": "Alternar direção de classificação", + "ascending": "Ascendente", + "descending": "Descendente", + "relevance": "Relevância", + "downloads_week": "Downloads/sem", + "downloads_day": "Downloads/dia", + "downloads_month": "Downloads/mês", + "downloads_year": "Downloads/ano", + "updated": "Última Atualização", + "name": "Nome", + "quality": "Qualidade", + "popularity": "Popularidade", + "maintenance": "Manutenção", + "score": "Pontuação" }, "columns": { - "title": "Columns", - "show": "Show columns", - "reset": "Reset to defaults", - "coming_soon": "Coming soon", - "name": "Name", - "version": "Version", - "description": "Description", - "downloads": "Downloads/wk", - "updated": "Last Updated", - "maintainers": "Maintainers", - "keywords": "Keywords", - "quality_score": "Quality score", - "popularity_score": "Popularity score", - "maintenance_score": "Maintenance score", - "combined_score": "Combined score", - "security": "Security" + "title": "Colunas", + "show": "Mostrar colunas", + "reset": "Redefinir para padrões", + "coming_soon": "Em breve", + "name": "Nome", + "version": "Versão", + "description": "Descrição", + "downloads": "Downloads/sem", + "updated": "Última Atualização", + "maintainers": "Mantenedores", + "keywords": "Palavras-chave", + "quality_score": "Pontuação de qualidade", + "popularity_score": "Pontuação de popularidade", + "maintenance_score": "Pontuação de manutenção", + "combined_score": "Pontuação combinada", + "security": "Segurança" }, "view_mode": { - "label": "View mode", - "cards": "Card view", - "table": "Table view" + "label": "Modo de exibição", + "cards": "Visualização de cartão", + "table": "Visualização de tabela" }, "pagination": { - "mode_label": "Pagination mode", - "infinite": "Infinite", - "paginated": "Paginated", - "items_per_page": "Items per page", - "per_page": "{count} / page", - "all_yolo": "All (YOLO)", - "showing": "{start}-{end} of {total}", - "previous": "Previous page", - "next": "Next page", - "nav_label": "Pagination" + "mode_label": "Modo de paginação", + "infinite": "Infinita", + "paginated": "Paginada", + "items_per_page": "Itens por página", + "per_page": "{count} / página", + "all_yolo": "Todos (YOLO)", + "showing": "{start}-{end} de {total}", + "previous": "Página anterior", + "next": "Próxima página", + "nav_label": "Paginação" }, "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" + "showing_filtered": "{filtered} de {count} pacote | {filtered} de {count} pacotes", + "showing_all": "{count} pacote | {count} pacotes", + "showing_paginated": "{pageSize} de {count} pacote | {pageSize} de {count} pacotes" }, "table": { - "security_warning": "Security warning", - "secure": "Secure", - "no_packages": "No packages found" + "security_warning": "Aviso de segurança", + "secure": "Seguro", + "no_packages": "Nenhum pacote encontrado" } }, "about": { - "title": "About", - "heading": "about", - "meta_description": "npmx is a fast, modern browser for the npm registry. A better UX/DX for exploring npm packages.", - "back_home": "back to home", + "title": "Sobre", + "heading": "sobre", + "meta_description": "npmx é um navegador rápido e moderno para o registro npm. Uma melhor UX/DX para explorar pacotes npm.", + "back_home": "voltar para a página inicial", "what_we_are": { - "title": "What we are", - "better_ux_dx": "better UX/DX", - "admin_ui": "admin UI", - "description": "npmx is a {betterUxDx} for the npm package registry and tooling. We 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 better {adminUi} for managing your packages, teams, and organizations — all from the browser, powered by your local npm CLI." + "title": "O que somos", + "better_ux_dx": "melhor UX/DX", + "admin_ui": "interface de administrador", + "description": "npmx é uma {betterUxDx} para o registro de pacotes npm e ferramentas. Fornecemos uma interface rápida e moderna para explorar pacotes, com recursos como modo escuro, navegação por teclado, navegação de código e conexões para registros alternativos como {jsr}.", + "admin_description": "Também visamos fornecer uma {adminUi} melhor para gerenciar seus pacotes, equipes e organizações — tudo do navegador, alimentado pelo seu CLI npm local." }, "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 better way to browse them.", + "title": "O que não somos", + "not_package_manager": "Não é um gerenciador de pacotes.", + "not_registry": "Não é um registro.", + "registry_description": "Não hospedamos pacotes. Somos apenas uma forma melhor de navegá-los.", "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" + "already": "Existem", + "people": "já", + "building": "pessoas", + "really": "construindo", + "cool": "realmente", + "package": "incríveis", + "managers": "gerenciadores de pacotes" } }, "contributors": { - "title": "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" + "title": "Contribuidores", + "description": "npmx é totalmente de código aberto, construído por uma comunidade incrível de contribuidores. Junte-se a nós e vamos construir juntos a experiência de navegação npm que sempre quisemos.", + "loading": "Carregando contribuidores...", + "error": "Falha ao carregar contribuidores", + "view_profile": "Ver perfil do GitHub de {name}" }, "get_involved": { - "title": "Get involved", + "title": "Envolva-se", "contribute": { - "title": "Contribute", - "description": "Help us build a better npm experience.", - "cta": "View on GitHub" + "title": "Contribuir", + "description": "Ajude-nos a construir uma melhor experiência npm.", + "cta": "Ver no GitHub" }, "community": { - "title": "Join the community", - "description": "Chat, ask questions, and share ideas.", - "cta": "Join Discord" + "title": "Junte-se à comunidade", + "description": "Converse, faça perguntas e compartilhe ideias.", + "cta": "Junte-se ao Discord" }, "follow": { - "title": "Stay updated", - "description": "Find out the latest on npmx.", - "cta": "Follow on Bluesky" + "title": "Mantenha-se atualizado", + "description": "Descubra as novidades sobre npmx.", + "cta": "Siga no Bluesky" } } }, "account_menu": { - "connect": "connect", - "account": "Account", + "connect": "conectar", + "account": "Conta", "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...", + "npm_cli_desc": "Gerenciar pacotes e organizações", + "atmosphere_desc": "Recursos sociais e identidade", + "connect_npm_cli": "Conectar ao CLI npm", + "connect_atmosphere": "Conectar ao Atmosphere", + "connecting": "Conectando...", "ops": "{count} op | {count} ops", - "disconnect": "Disconnect" + "disconnect": "Desconectar" }, "auth": { "modal": { "title": "Atmosphere", - "connected_as": "Connected as {'@'}{handle}", - "disconnect": "Disconnect", - "connect_prompt": "Connect with your Atmosphere account", - "handle_label": "Handle", + "connected_as": "Conectado como {'@'}{handle}", + "disconnect": "Desconectar", + "connect_prompt": "Conecte-se com sua conta Atmosphere", + "handle_label": "Nome de identificação", "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." + "connect": "Conectar", + "create_account": "Criar uma nova conta", + "connect_bluesky": "Conectar com Bluesky", + "what_is_atmosphere": "O que é uma conta Atmosphere?", + "atmosphere_explanation": "{npmx} usa o {atproto} para alimentar muitos de seus recursos sociais, permitindo que os usuários possuam seus dados e usem uma conta para todos os aplicativos compatíveis. Depois de criar uma conta, você pode usar outros aplicativos como {bluesky} e {tangled} com a mesma conta." } }, "header": { - "home": "npmx home", + "home": "página inicial npmx", "github": "GitHub", - "packages": "packages", + "packages": "pacotes", "packages_dropdown": { - "title": "Your Packages", - "loading": "Loading...", - "error": "Failed to load packages", - "empty": "No packages found", - "view_all": "View all" + "title": "Seus Pacotes", + "loading": "Carregando...", + "error": "Falha ao carregar pacotes", + "empty": "Nenhum pacote encontrado", + "view_all": "Ver tudo" }, - "orgs": "orgs", + "orgs": "organizações", "orgs_dropdown": { - "title": "Your Organizations", - "loading": "Loading...", - "error": "Failed to load organizations", - "empty": "No organizations found", - "view_all": "View all" + "title": "Suas Organizações", + "loading": "Carregando...", + "error": "Falha ao carregar organizações", + "empty": "Nenhuma organização encontrada", + "view_all": "Ver tudo" } }, "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", - "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." + "title": "comparar pacotes", + "tagline": "compare pacotes npm lado a lado para ajudá-lo a escolher o certo.", + "meta_title": "Comparar {packages} - npmx", + "meta_title_empty": "Comparar Pacotes - npmx", + "meta_description": "Comparação lado a lado de {packages}", + "meta_description_empty": "Comparar pacotes npm lado a lado", + "section_packages": "Pacotes", + "section_facets": "Aspectos", + "section_comparison": "Comparação", + "loading": "Carregando dados do pacote...", + "error": "Falha ao carregar dados do pacote. Por favor, tente novamente.", + "empty_title": "Selecione pacotes para comparar", + "empty_description": "Pesquise e adicione pelo menos 2 pacotes acima para ver uma comparação lado a lado de suas métricas." }, "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.", - "loading_versions": "Loading versions...", - "select_version": "Select version" + "search_label": "Pesquisar por pacotes", + "search_first": "Pesquisar por um pacote...", + "search_add": "Adicionar outro pacote...", + "searching": "Pesquisando...", + "remove_package": "Remover {package}", + "packages_selected": "{count}/{max} pacotes selecionados.", + "add_hint": "Adicione pelo menos 2 pacotes para comparar.", + "loading_versions": "Carregando versões...", + "select_version": "Selecionar versão" }, "facets": { - "group_label": "Comparison facets", - "all": "all", - "none": "none", - "coming_soon": "Coming soon", - "select_all": "Select all facets", - "deselect_all": "Deselect all facets", - "select_category": "Select all {category} facets", - "deselect_category": "Deselect all {category} facets", + "group_label": "Aspectos de comparação", + "all": "todos", + "none": "nenhum", + "coming_soon": "Em breve", + "select_all": "Selecionar todos os aspectos", + "deselect_all": "Desselecionar todos os aspectos", + "select_category": "Selecionar todos os aspectos {category}", + "deselect_category": "Desselecionar todos os aspectos {category}", "categories": { "performance": "Performance", - "health": "Health", - "compatibility": "Compatibility", - "security": "Security & Compliance" + "health": "Saúde", + "compatibility": "Compatibilidade", + "security": "Segurança e Conformidade" } } }