Three-model review (astra, sol, fable), round 2: 29 of 30 findings
applied, one of them in part.
- pt: FIRMS «mais recente há», CCTV «cruzamentos», degraded radio
directory, «{layers}: ativação recente» for any layer list, «Sem
imagem», NIVELADO, AJUSTA-SE, quoted Provider Settings, V/S kept on
the ADS-B card, no-break space in «(24 h)» / «(30 d)», and more
(see docs/translations/pt.md).
- Malformed cyclone snapshot is now a catalog message (all locales).
- Markup supports data-i18n-context; the radio STATION TAG option uses
"radio tag|All", so it no longer flips gender when the list loads.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
@@ -35,7 +35,7 @@ A module the server, tools or other portable code also imports must not load the
<inputplaceholder="Search any location..."data-i18n-placeholder/>
<inputplaceholder="Search any location..."data-i18n-placeholder/>
```
```
`data-i18n` replaces the element's text, so put it on the element that directly holds the text, never on a parent with child elements. `data-i18n-title`, `data-i18n-aria-label` and `data-i18n-placeholder` translate that attribute. Markup is translated once at boot, and switching language reloads the page. A module that holds work a reload would lose (an unsaved edit, an open session) registers it with `registerUnsavedWork(() => busy ? msg('unsaved …') : null)` from `src/i18n/index.js`, and the language picker asks before reloading.
`data-i18n` replaces the element's text, so put it on the element that directly holds the text, never on a parent with child elements. `data-i18n-title`, `data-i18n-aria-label` and `data-i18n-placeholder` translate that attribute.`data-i18n-context="radio tag"` gives the element's text a context, the catalog entry `radio tag|All`, as `t('All', { context: 'radio tag' })` does in code. Markup is translated once at boot, and switching language reloads the page. A module that holds work a reload would lose (an unsaved edit, an open session) registers it with `registerUnsavedWork(() => busy ? msg('unsaved …') : null)` from `src/i18n/index.js`, and the language picker asks before reloading.
- Brazilian Portuguese (pt-BR): câmera, tela, compartilhar, arquivo, baixar, ônibus, metrô. Every `pt` tag, `pt-PT` included, gets this catalog, so avoid slang and regionalisms.
- Brazilian Portuguese (pt-BR): câmera, tela, compartilhar, arquivo, baixar, ônibus, metrô. Every `pt` tag, `pt-PT` included, gets this catalog, so avoid slang and regionalisms.
- Address the user with «você» imperatives: «Clique no mapa», «Ative o CCTV», «Tente novamente». Tooltips that name an action use the infinitive: «Expandir painel», «Redefinir a câmera».
- Address the user with «você» imperatives: «Clique no mapa», «Ative o CCTV», «Tente novamente». Tooltips that name an action use the infinitive: «Expandir painel», «Redefinir a câmera».
- Sentence case, not Title Case: "Live Flights" → «Voos ao vivo». UPPERCASE English stays UPPERCASE: «AO VIVO», «SEM DADOS».
- Sentence case, not Title Case: "Live Flights" → «Voos ao vivo». UPPERCASE English stays UPPERCASE: «AO VIVO», «SEM DADOS».
- Quotes inside Portuguese text are straight double quotes: «Excluir o plano "{shot}"?». A sentence that names a panel uses «o painel "Configurações de provedores"», so the verb agrees.
- Quotes inside Portuguese text are straight double quotes: «Excluir o plano "{shot}"?». A sentence that names a panel quotes it: «o painel "Configurações de provedores"» as the subject, so the verb agrees, and «adicione em "Configurações de provedores"» after a preposition.
- A dash between clauses is a spaced em dash « — », even where the English runs it in.
- A dash between clauses is a spaced em dash « — », even where the English runs it in.
- A date or time after a participle takes a preposition: «emitido em {time}», «válida para {valid}», «Posição em {time}».
- A date or time after a participle takes a preposition: «emitido em {time}», «válida para {valid}», «Posição em {time}», «onde estava em {time}». Use «em», not «às», wherever {time} can include a date.
- Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: ANT., PRÓX., DESLIG., EXCL., INCL., ALT., VEL., câm.
- Short labels, chips and HUD readouts stay short. A standard abbreviation with a period beats a wrapped line: ANT., PRÓX., DESLIG., EXCL., INCL., ALT., VEL., câm.
- The HUD codes HDG, BRG, CRS, FOV, DEST, SPD, RANGE, ALT, GS and TRK stay in English, as in cockpit avionics («ALT {altitude} FT · GS {speed} KT · TRK {track}»), and so does the HUD recording mark REC. Words used in a sentence are translated: heading → «rumo», range → «alcance».
- The HUD codes HDG, BRG, CRS, FOV, DEST, SPD, RANGE, ALT, GS, TRK and V/S stay in English, as in cockpit avionics («ALT {altitude} FT · GS {speed} KT · TRK {track}», «V/S {rate} FT/MIN»), and so does the HUD recording mark REC. Words used in a sentence are translated: heading → «rumo», range → «alcance».
- Keyboard keys stay in English: Space, Esc, Enter, Tab, Shift, Backspace, H, 1–9 («Segure Space para falar»).
- Keyboard keys stay in English: Space, Esc, Enter, Tab, Shift, Backspace, H, 1–9 («Segure Space para falar»).
- Common English tech words used in Brazil stay: feed, stream, snapshot, briefing, dock, layout, bloom, status, app, link, token.
- Common English tech words used in Brazil stay: feed, stream, snapshot, briefing, dock, layout, bloom, status, app, link, token.
- Units: km, m, km/h, m/s, kt (knots), ft (feet), h, min, s, always spaced from the number («Terremotos (24 h)», «Missões espaciais (30 d)»); in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («há 5 min»). MW stays MW. `°` and `%` stay. Decimal comma in written numbers («M4,4»).
- Units: km, m, km/h, m/s, kt (knots), ft (feet), h, min, s, always spaced from the number («Terremotos (24 h)», «Missões espaciais (30 d)»; in the layer names the space is a no-break space, U+00A0, so the unit never wraps away from the number); in UPPERCASE text KM, KM/S, KT, FT, MIN, H. "m" is always metres, so minutes are «min» («há 5 min»). MW stays MW. `°` and `%` stay. Decimal comma in written numbers («M4,4»).
- "ago" goes before the time: «há {count} min». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «há» again.
- "ago" goes before the time: «há {count} min», «mais recente há {value}». When a placeholder already holds a localized "ago" text (`{age}`, `{ago}`), do not add «há» again.
- Money: «US$ {amount} mil / mi / bi» for thousands, millions and billions.
- Money: «US$ {amount} mil / mi / bi» for thousands, millions and billions.
- Compass points use Leste/Oeste: N, NNE, NE, ENE, L, ESE, SE, SSE, S, SSO, SO, OSO, O, ONO, NO, NNO; hemisphere letters N, S, L, O.
- Compass points use Leste/Oeste: N, NNE, NE, ENE, L, ESE, SE, SSE, S, SSO, SO, OSO, O, ONO, NO, NNO; hemisphere letters N, S, L, O.
@@ -84,6 +84,7 @@ The `many` form is the `other` text with «de» after the number: «{count} de c
"Source configured; file checked when loaded":"Fonte configurada; o arquivo será verificado ao carregar",
"Source configured; file checked when loaded":"Fonte configurada; o arquivo será verificado ao carregar",
"Source unavailable":"Fonte indisponível",
"Source unavailable":"Fonte indisponível",
"ENVIRONMENTAL":"AMBIENTAL",
"ENVIRONMENTAL":"AMBIENTAL",
"EARTH WATCH":"VIGIA DA TERRA",
"EARTH WATCH":"VIGILÂNCIA DA TERRA",
"ACTIVE EVENTS":"EVENTOS ATIVOS",
"ACTIVE EVENTS":"EVENTOS ATIVOS",
"Starting live contacts…":"Iniciando contatos ao vivo…",
"Starting live contacts…":"Iniciando contatos ao vivo…",
"Opening space missions…":"Abrindo missões espaciais…",
"Opening space missions…":"Abrindo missões espaciais…",
"Scanning active events…":"Varrendo eventos ativos…",
"Scanning active events…":"Varrendo eventos ativos…",
"Live earthquakes and active fires, from USGS and NASA":"Terremotos e incêndios ativos ao vivo, de USGS e NASA",
"Live earthquakes and active fires, from USGS and NASA":"Terremotos e incêndios ativos ao vivo, do USGS e da NASA",
"It feels like a forbidden cockpit—then you realize the sources are public and the data is real.":"Parece uma cabine proibida — até você perceber que as fontes são públicas e os dados são reais.",
"It feels like a forbidden cockpit—then you realize the sources are public and the data is real.":"Parece uma cabine proibida — até você perceber que as fontes são públicas e os dados são reais.",
"Working…":"Processando…",
"Working…":"Processando…",
"Could not open that mission{detail}. Retry or explore manually.":"Não foi possível abrir essa missão{detail}. Tente novamente ou explore manualmente.",
"Could not open that mission{detail}. Retry or explore manually.":"Não foi possível abrir essa missão{detail}. Tente novamente ou explore manualmente.",
@@ -376,7 +376,7 @@
"{name} is longer than any real key ({limit} max)":"{name}: o valor é mais longo que qualquer chave real (máximo {limit})",
"{name} is longer than any real key ({limit} max)":"{name}: o valor é mais longo que qualquer chave real (máximo {limit})",
"{name} may only contain printable characters with no spaces":"{name}: só são aceitos caracteres imprimíveis, sem espaços",
"{name} may only contain printable characters with no spaces":"{name}: só são aceitos caracteres imprimíveis, sem espaços",
"{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)":"{name}: há um caractere inválido para uma chave (#, aspas, $, \\ ou crase)",
"{name} contains a character that is not valid in a key (#, quotes, $, \\, or backtick)":"{name}: há um caractere inválido para uma chave (#, aspas, $, \\ ou crase)",
"{name} is configured outside Provider Settings and can only be changed where it was set":"{name} foi configurada fora de Configurações de provedores e só pode ser alterada onde foi definida",
"{name} is configured outside Provider Settings and can only be changed where it was set":"{name} foi configurada fora de \"Configurações de provedores\" e só pode ser alterada onde foi definida",
"The key was not saved: could not restrict the credential file to your account; nothing was saved":"A chave não foi salva: não foi possível restringir o arquivo de credenciais à sua conta; nada foi salvo",
"The key was not saved: could not restrict the credential file to your account; nothing was saved":"A chave não foi salva: não foi possível restringir o arquivo de credenciais à sua conta; nada foi salvo",
"The key was not saved: the existing configuration could not be read, so nothing was changed":"A chave não foi salva: não foi possível ler a configuração existente, então nada foi alterado",
"The key was not saved: the existing configuration could not be read, so nothing was changed":"A chave não foi salva: não foi possível ler a configuração existente, então nada foi alterado",
"Could not write the {store} store":"Não foi possível gravar no armazenamento {store}",
"Could not write the {store} store":"Não foi possível gravar no armazenamento {store}",
@@ -430,7 +430,7 @@
"Live active-fire detections":"Detecções de incêndios ativos ao vivo",
"Live active-fire detections":"Detecções de incêndios ativos ao vivo",
"Real live traffic (keyless runs a simulation)":"Trânsito real ao vivo (sem chave, roda uma simulação)",
"Real live traffic (keyless runs a simulation)":"Trânsito real ao vivo (sem chave, roda uma simulação)",
"Bing imagery map stacks + world terrain":"Pilhas de mapas com imagens do Bing + relevo mundial",
"Bing imagery map stacks + world terrain":"Pilhas de mapas com imagens do Bing + relevo mundial",
"More flight-polling credits (anonymous works without)":"Mais créditos de consulta de voos (o acesso anônimo funciona sem)",
"More flight-polling credits (anonymous works without)":"Mais créditos de consulta de voos (opcional: o acesso anônimo também funciona)",
"Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token":"Imagens e cobertura no nível da rua na camada \"Nível da rua\". Grátis: registre um app no painel de desenvolvedores do Mapillary e cole o token de cliente (Client Token)",
"Street-level imagery and coverage in the Street Level layer. Free: register an app in the Mapillary developer dashboard and paste its Client Token":"Imagens e cobertura no nível da rua na camada \"Nível da rua\". Grátis: registre um app no painel de desenvolvedores do Mapillary e cole o token de cliente (Client Token)",
"Public space-missions access needs no key. Leave blank for standard use; paid tokens only raise request limits.":"O acesso público às missões espaciais não precisa de chave. Deixe em branco para o uso padrão; tokens pagos só aumentam os limites de requisições.",
"Public space-missions access needs no key. Leave blank for standard use; paid tokens only raise request limits.":"O acesso público às missões espaciais não precisa de chave. Deixe em branco para o uso padrão; tokens pagos só aumentam os limites de requisições.",
"Air quality request failed":"Falha na requisição de qualidade do ar",
"Air quality request failed":"Falha na requisição de qualidade do ar",
@@ -716,7 +716,7 @@
"FIRE":"INCÊNDIO",
"FIRE":"INCÊNDIO",
"FIRES":"INCÊNDIOS",
"FIRES":"INCÊNDIOS",
"max {value} MW":"máx {value} MW",
"max {value} MW":"máx {value} MW",
"new {value}":"novo {value}",
"new {value}":"mais recente há {value}",
"{value}°N":"{value}°N",
"{value}°N":"{value}°N",
"{value}°S":"{value}°S",
"{value}°S":"{value}°S",
"{value}°E":"{value}°L",
"{value}°E":"{value}°L",
@@ -822,7 +822,7 @@
"FLIGHT {count}":"VOO {count}",
"FLIGHT {count}":"VOO {count}",
"REUSED":"REUTILIZADO",
"REUSED":"REUTILIZADO",
"NO STAGE RE-ENTRY / RECOVERY DATA":"SEM DADOS DE REENTRADA / RECUPERAÇÃO DE ESTÁGIO",
"NO STAGE RE-ENTRY / RECOVERY DATA":"SEM DADOS DE REENTRADA / RECUPERAÇÃO DE ESTÁGIO",
"{count} / 30D":"{count} / 30D",
"{count} / 30D":"{count} / 30D",
"NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW":"NENHUMA MISSÃO DISPONÍVEL NA JANELA ATUAL DE 30 DIAS",
"NO MISSIONS AVAILABLE IN THE CURRENT 30-DAY WINDOW":"NENHUMA MISSÃO DISPONÍVEL NA JANELA ATUAL DE 30 DIAS",
"DATE UNAVAILABLE":"DATA INDISPONÍVEL",
"DATE UNAVAILABLE":"DATA INDISPONÍVEL",
"UNSPECIFIED OPERATOR":"OPERADOR NÃO ESPECIFICADO",
"UNSPECIFIED OPERATOR":"OPERADOR NÃO ESPECIFICADO",
@@ -881,8 +881,8 @@
"Your RTL-SDR receiver":"Seu receptor RTL-SDR",
"Your RTL-SDR receiver":"Seu receptor RTL-SDR",
"NO CALLSIGN":"SEM INDICATIVO",
"NO CALLSIGN":"SEM INDICATIVO",
"ALT {altitude} FT · GS {speed} KT · TRK {track}":"ALT {altitude} FT · GS {speed} KT · TRK {track}",
"ALT {altitude} FT · GS {speed} KT · TRK {track}":"ALT {altitude} FT · GS {speed} KT · TRK {track}",
"V/S {rate}":"VEL. VERT. {rate}",
"V/S {rate}":"V/S {rate}",
"V/S {rate} FPM":"VEL. VERT. {rate} FT/MIN",
"V/S {rate} FPM":"V/S {rate} FT/MIN",
"POSITION {age}":"POSIÇÃO {age}",
"POSITION {age}":"POSIÇÃO {age}",
"POSITION {seconds} S AGO":"POSIÇÃO HÁ {seconds} S",
"POSITION {seconds} S AGO":"POSIÇÃO HÁ {seconds} S",
"{count} MSGS":{
"{count} MSGS":{
@@ -954,8 +954,8 @@
"Traffic / Transit":"Trânsito / Transporte",
"Traffic / Transit":"Trânsito / Transporte",
"Music":"Música",
"Music":"Música",
"Other":"Outras",
"Other":"Outras",
"Directory refresh degraded; showing the previous station catalog.":"A atualização do diretório foi parcial; mostrando o catálogo de estações anterior.",
"Directory refresh degraded; showing the previous station catalog.":"A atualização do diretório retornou dados degradados; mostrando o catálogo de estações anterior.",
"Radio directory coverage is degraded.":"O diretório de rádio está funcionando com falhas.",
"Radio directory coverage is degraded.":"A cobertura do diretório de rádio está degradada.",
"Directory refresh failed; showing the previous station catalog.":"A atualização do diretório falhou; mostrando o catálogo de estações anterior.",
"Directory refresh failed; showing the previous station catalog.":"A atualização do diretório falhou; mostrando o catálogo de estações anterior.",
"Radio directory is temporarily unavailable.":"O diretório de rádio está temporariamente indisponível.",
"Radio directory is temporarily unavailable.":"O diretório de rádio está temporariamente indisponível.",
"radio|NEWS":"NOTÍCIAS",
"radio|NEWS":"NOTÍCIAS",
@@ -1069,7 +1069,7 @@
"KartaView sent too much data":"O KartaView enviou dados demais",
"KartaView sent too much data":"O KartaView enviou dados demais",
"KartaView is rate-limiting requests — try again in a moment":"O KartaView está limitando as requisições — tente novamente em instantes",
"KartaView is rate-limiting requests — try again in a moment":"O KartaView está limitando as requisições — tente novamente em instantes",
"KartaView has no such photo":"O KartaView não tem essa foto",
"KartaView has no such photo":"O KartaView não tem essa foto",
"Mapillary rejected MAPILLARY_CLIENT_TOKEN — replace it in Provider Settings":"O Mapillary recusou o MAPILLARY_CLIENT_TOKEN — substitua-o em Configurações de provedores",
"Mapillary rejected MAPILLARY_CLIENT_TOKEN — replace it in Provider Settings":"O Mapillary recusou o MAPILLARY_CLIENT_TOKEN — substitua-o em \"Configurações de provedores\"",
"Coverage requests are being rate-limited — they resume on their own":"As requisições de cobertura estão sendo limitadas — elas são retomadas sozinhas",
"Coverage requests are being rate-limited — they resume on their own":"As requisições de cobertura estão sendo limitadas — elas são retomadas sozinhas",
"The Panoramax photo could not be loaded":"Não foi possível carregar a foto do Panoramax",
"The Panoramax photo could not be loaded":"Não foi possível carregar a foto do Panoramax",
"Panoramax is busy — coverage resumes on its own":"O Panoramax está sobrecarregado — a cobertura volta sozinha",
"Panoramax is busy — coverage resumes on its own":"O Panoramax está sobrecarregado — a cobertura volta sozinha",
"Google 3D tiles unavailable — check the key's API restrictions, quota, or network":"Google 3D Tiles indisponível — verifique as restrições de API da chave, a cota ou a rede",
"Google 3D tiles unavailable — check the key's API restrictions, quota, or network":"Google 3D Tiles indisponível — verifique as restrições de API da chave, a cota ou a rede",
"Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route":"Requer {envVars} — adicione em Configurações de provedores — ou um token do Cesium ion para a rota hospedada no ion",
"Needs {envVars} — add it in Provider Settings — or a Cesium ion token for the ion-hosted route":"Requer {envVars} — adicione em \"Configurações de provedores\" — ou um token do Cesium ion para a rota hospedada no ion",
"Exit cockpit to fly to a camera":"Saia da cabine para voar até uma câmera",
"Exit cockpit to fly to a camera":"Saia da cabine para voar até uma câmera",
"Exit cockpit to fly to a location":"Saia da cabine para voar até um local",
"Exit cockpit to fly to a location":"Saia da cabine para voar até um local",
"Exit cockpit to fly to a photo":"Saia da cabine para voar até uma foto",
"Exit cockpit to fly to a photo":"Saia da cabine para voar até uma foto",
@@ -1384,7 +1385,7 @@
"many":"{count} de planos adicionados: {scene}",
"many":"{count} de planos adicionados: {scene}",
"other":"{count} planos adicionados: {scene}"
"other":"{count} planos adicionados: {scene}"
},
},
"Cannot capture shot: camera not ready":"Não foi possível capturar o plano: câmera não está pronta",
"Cannot capture shot: camera not ready":"Não foi possível capturar o plano: a câmera não está pronta",
"{requirement}, or {offer}":"{requirement}, ou {offer}",
"{requirement}, or {offer}":"{requirement}, ou {offer}",
"Live Flights":"Voos ao vivo",
"Live Flights":"Voos ao vivo",
"Military Flights":"Voos militares",
"Military Flights":"Voos militares",
"Earthquakes (24h)":"Terremotos (24h)",
"Earthquakes (24h)":"Terremotos (24h)",
"Satellites":"Satélites",
"Satellites":"Satélites",
"Space Missions (30d)":"Missões espaciais (30d)",
"Space Missions (30d)":"Missões espaciais (30d)",
"Street Traffic":"Trânsito urbano",
"Street Traffic":"Trânsito urbano",
"CCTV":"CCTV",
"CCTV":"CCTV",
"Radio":"Rádio",
"Radio":"Rádio",
@@ -1909,7 +1910,7 @@
"📍 Location: --":"📍 Local: --",
"📍 Location: --":"📍 Local: --",
"Landmark: --":"Ponto de referência: --",
"Landmark: --":"Ponto de referência: --",
"Searched location":"Local pesquisado",
"Searched location":"Local pesquisado",
"ORBIT":"ÓRBITA",
"ORBIT":"ORBITANDO",
"Location not found":"Local não encontrado",
"Location not found":"Local não encontrado",
"Check the spelling and press Enter to search again.":"Verifique a grafia e pressione Enter para buscar de novo.",
"Check the spelling and press Enter to search again.":"Verifique a grafia e pressione Enter para buscar de novo.",
"Search failed":"Falha na busca",
"Search failed":"Falha na busca",
@@ -2084,7 +2085,7 @@
"Every day is empty here":"Todos os dias estão vazios aqui",
"Every day is empty here":"Todos os dias estão vazios aqui",
"Sources off":"Fontes desativadas",
"Sources off":"Fontes desativadas",
"VS":"VS",
"VS":"VS",
"Not set":"Não definido",
"Not set":"Sem imagem",
"Basemap":"Mapa base",
"Basemap":"Mapa base",
"Source off":"Fonte desativada",
"Source off":"Fonte desativada",
"Unpin {slot}":"Desafixar {slot}",
"Unpin {slot}":"Desafixar {slot}",
@@ -2149,7 +2150,7 @@
"Shared {subject} could not be restored — feed unavailable":"Não foi possível restaurar o compartilhamento de {subject} — feed indisponível",
"Shared {subject} could not be restored — feed unavailable":"Não foi possível restaurar o compartilhamento de {subject} — feed indisponível",
"Shared {subject} is unavailable":"O compartilhamento de {subject} está indisponível",
"Shared {subject} is unavailable":"O compartilhamento de {subject} está indisponível",
"{id} isn't reporting now — showing where it was last seen":"{id} não está transmitindo agora — mostrando onde foi visto pela última vez",
"{id} isn't reporting now — showing where it was last seen":"{id} não está transmitindo agora — mostrando onde foi visto pela última vez",
"{id} isn't reporting now — showing where it was at {time}":"{id} não está transmitindo agora — mostrando onde estava às {time}",
"{id} isn't reporting now — showing where it was at {time}":"{id} não está transmitindo agora — mostrando onde estava em {time}",
"This share link can't be opened":"Não é possível abrir este link de compartilhamento",
"This share link can't be opened":"Não é possível abrir este link de compartilhamento",
"Shared vessel is unavailable":"A embarcação compartilhada está indisponível",
"Shared vessel is unavailable":"A embarcação compartilhada está indisponível",
"ACQUIRING":"ADQUIRINDO",
"ACQUIRING":"ADQUIRINDO",
@@ -2358,7 +2359,7 @@
"Invalid Gemini connection endpoint":"Endpoint de conexão do Gemini inválido",
"Invalid Gemini connection endpoint":"Endpoint de conexão do Gemini inválido",
"Gemini voice could not connect. Try again.":"Não foi possível conectar a voz do Gemini. Tente novamente.",
"Gemini voice could not connect. Try again.":"Não foi possível conectar a voz do Gemini. Tente novamente.",
"Gemini voice requires a same-origin app request":"A voz do Gemini exige uma requisição da mesma origem do app",
"Gemini voice requires a same-origin app request":"A voz do Gemini exige uma requisição da mesma origem do app",
"Add a Gemini API key in Provider Settings":"Adicione uma chave de API do Gemini em Configurações de provedores",
"Add a Gemini API key in Provider Settings":"Adicione uma chave de API do Gemini em \"Configurações de provedores\"",
"The Gemini Live model configuration is invalid":"A configuração do modelo do Gemini Live é inválida",
"The Gemini Live model configuration is invalid":"A configuração do modelo do Gemini Live é inválida",
"Gemini voice is starting too often. Try again shortly.":"A voz do Gemini está sendo iniciada com frequência demais. Tente novamente em breve.",
"Gemini voice is starting too often. Try again shortly.":"A voz do Gemini está sendo iniciada com frequência demais. Tente novamente em breve.",
"Gemini quota is unavailable. Try again later.":"A cota do Gemini está indisponível. Tente novamente mais tarde.",
"Gemini quota is unavailable. Try again later.":"A cota do Gemini está indisponível. Tente novamente mais tarde.",
@@ -2529,7 +2530,7 @@
"{label} error":"{label}: erro",
"{label} error":"{label}: erro",
"counted the first {returned} loaded records":"foram contados os primeiros {returned} registros carregados",
"counted the first {returned} loaded records":"foram contados os primeiros {returned} registros carregados",
"counted {returned} of {total} loaded records":"foram contados {returned} de {total} registros carregados",
"counted {returned} of {total} loaded records":"foram contados {returned} de {total} registros carregados",
"{layers} just turned on — still loading, counts will rise":"{layers}: acabou de ser ativado — ainda carregando, as contagens vão subir",
"{layers} just turned on — still loading, counts will rise":"{layers}: ativação recente — ainda carregando, as contagens vão subir",
"Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory":"Snapshot do painel Contatos ({time}) — o mesmo grupo retido alimenta o cartão, a fala e a memória de acompanhamento",
"Contacts panel snapshot at {time} — the same retained cohort supplies the card, speech, and follow-up memory":"Snapshot do painel Contatos ({time}) — o mesmo grupo retido alimenta o cartão, a fala e a memória de acompanhamento",
"Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory":"Snapshot do painel Contatos — o mesmo grupo retido alimenta o cartão, a fala e a memória de acompanhamento",
"Contacts panel snapshot — the same retained cohort supplies the card, speech, and follow-up memory":"Snapshot do painel Contatos — o mesmo grupo retido alimenta o cartão, a fala e a memória de acompanhamento",
"Fly below {km} km to a covered region":"Desça abaixo de {km} km sobre uma região com cobertura",
"Fly below {km} km to a covered region":"Desça abaixo de {km} km sobre uma região com cobertura",
@@ -2662,7 +2663,7 @@
"Next satellite pass":"Próxima passagem do satélite",
"Next satellite pass":"Próxima passagem do satélite",
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.