integrations keyed, and the Google guide's foreign labels marked (163 -> 96)
Applies the rule added to docs/localization.md in 91b9bec9: a label quoted from
another product's interface is an identifier, so the prose around it is translated
and the label itself is left in English and NOT keyed.
Gives that decision a name in the code. <Untranslated reason="foreign-ui-label">
states it at each of the ~30 call sites, where whoever next edits the sentence will
see it, and gives the scanner something exact to skip -- without which labels that
MUST stay English count as debt forever and the area can never be held at zero. That
is the same trap as counting new Error() messages. `reason` is a closed union so a
second excuse has to be argued for rather than smuggled in as free text.
The sentences needed rephrasing, not just splitting. "Go to the [New Project] page."
decomposes into "Go to the" + link + "page." -- and the Portuguese value of that
second key is "." A key that holds a full stop is the fragmentation smell, so the
English now puts the label at a clause boundary ("Open the project creation page:"
then the link), which reads naturally in both languages and needs no node-level
interpolation. Worth knowing for phase 3: sentences with an inline link are the one
shape this catalog format cannot express, and rephrasing is the cheap way out.
Scanner: the existing SCREAMING_CONSTANT rule now allows . and - so Google's
client-secret prefix example GOCSPX-... falls under it. Same rule, wider class.
This commit is contained in:
@@ -375,6 +375,80 @@
|
||||
"deleteFailed": "Could not delete",
|
||||
"copyField": "Copy {{field}}",
|
||||
"copied": "{{what}} copied"
|
||||
},
|
||||
"google": {
|
||||
"guideToggle": "Step-by-step setup guide",
|
||||
"step1": {
|
||||
"title": "Create a Google Cloud project",
|
||||
"body": "Open the project creation page, give it a name (for example “Officer”), and click:",
|
||||
"link": "New Project"
|
||||
},
|
||||
"step2": {
|
||||
"title": "Enable the APIs",
|
||||
"body": "Open the API library and search for each of these, then click:",
|
||||
"link": "API Library"
|
||||
},
|
||||
"step3": {
|
||||
"title": "Configure the OAuth consent screen",
|
||||
"link": "OAuth Branding",
|
||||
"appName": "Set your organization name, or “Officer”, as:",
|
||||
"supportEmail": "Set your admin email as:",
|
||||
"devContact": "Add your admin email under:",
|
||||
"save": "Then click:"
|
||||
},
|
||||
"step4": {
|
||||
"title": "Set the audience",
|
||||
"link": "OAuth Audience",
|
||||
"internal": "If your team uses Google Workspace, choose — no verification needed:",
|
||||
"external": "Otherwise choose, and add your team’s emails under Test users (required while the app is unverified; limit of 100 test users):"
|
||||
},
|
||||
"step5": {
|
||||
"title": "Add scopes",
|
||||
"link": "Data Access",
|
||||
"body": "Open data access and search for and add the scopes below, then click:",
|
||||
"note": "Google classifies the calendar scope as sensitive and the Gmail scope as restricted. That is fine for Internal apps (Google Workspace) and for External apps in testing mode; publishing to production with restricted scopes requires Google verification."
|
||||
},
|
||||
"step6": {
|
||||
"title": "Create OAuth credentials",
|
||||
"link": "Clients",
|
||||
"body": "Open the clients page and click:",
|
||||
"appType": "Application type:",
|
||||
"nameAnything": "Name: anything (for example “Officer”)",
|
||||
"redirectUris": "Authorized redirect URIs — add:",
|
||||
"thenClick": "Then click:"
|
||||
},
|
||||
"step7": {
|
||||
"title": "Copy the credentials",
|
||||
"body": "A dialog shows your client ID and client secret. Copy both and paste them into the fields below."
|
||||
},
|
||||
"scopeGmail": "Read emails",
|
||||
"scopeCalendar": "Read calendar events",
|
||||
"verifying": "Verifying credentials…",
|
||||
"valid": "Credentials valid",
|
||||
"invalid": "Invalid credentials",
|
||||
"verifyFailed": "Verification request failed",
|
||||
"clientId": "Client ID",
|
||||
"clientSecret": "Client Secret",
|
||||
"redirectUri": "Redirect URI",
|
||||
"redirectUriHint": "Add this URI to your Google OAuth client’s authorized redirect URIs",
|
||||
"saved": "Google OAuth configuration saved",
|
||||
"saveFailed": "Failed to save Google OAuth configuration"
|
||||
},
|
||||
"googleAccount": {
|
||||
"title": "Google Account",
|
||||
"hint": "Connect your Google account for Calendar, Contacts, and other Google services.",
|
||||
"connected": "Connected",
|
||||
"disconnect": "Disconnect",
|
||||
"connect": "Connect Google Account",
|
||||
"connectedToast": "Google account connected",
|
||||
"connectFailed": "Failed to connect Google account",
|
||||
"disconnectedToast": "Google account disconnected",
|
||||
"disconnectFailed": "Failed to disconnect Google account"
|
||||
},
|
||||
"apify": {
|
||||
"token": "API Token",
|
||||
"saved": "Apify API token saved",
|
||||
"saveFailed": "Failed to save Apify API token"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
|
||||
@@ -375,6 +375,80 @@
|
||||
"deleteFailed": "Não foi possível eliminar",
|
||||
"copyField": "Copiar {{field}}",
|
||||
"copied": "{{what}} copiado"
|
||||
},
|
||||
"google": {
|
||||
"guideToggle": "Guia de configuração passo a passo",
|
||||
"step1": {
|
||||
"title": "Criar um projeto Google Cloud",
|
||||
"body": "Abra a página de criação de projeto, dê-lhe um nome (por exemplo “Officer”) e clique em:",
|
||||
"link": "New Project"
|
||||
},
|
||||
"step2": {
|
||||
"title": "Ativar as APIs",
|
||||
"body": "Abra a biblioteca de APIs, procure cada uma destas e clique em:",
|
||||
"link": "API Library"
|
||||
},
|
||||
"step3": {
|
||||
"title": "Configurar o ecrã de consentimento OAuth",
|
||||
"link": "OAuth Branding",
|
||||
"appName": "Defina o nome da sua organização, ou “Officer”, como:",
|
||||
"supportEmail": "Defina o email do administrador como:",
|
||||
"devContact": "Adicione o email do administrador em:",
|
||||
"save": "Depois clique em:"
|
||||
},
|
||||
"step4": {
|
||||
"title": "Definir o público",
|
||||
"link": "OAuth Audience",
|
||||
"internal": "Se a sua equipa usa Google Workspace, escolha — não é necessária verificação:",
|
||||
"external": "Caso contrário escolha, e adicione os emails da sua equipa em Test users (obrigatório enquanto a aplicação não estiver verificada; limite de 100 utilizadores de teste):"
|
||||
},
|
||||
"step5": {
|
||||
"title": "Adicionar âmbitos",
|
||||
"link": "Data Access",
|
||||
"body": "Abra o acesso a dados, procure e adicione os âmbitos abaixo e depois clique em:",
|
||||
"note": "A Google classifica o âmbito do calendário como sensível e o do Gmail como restrito. Isso não é problema para aplicações Internal (Google Workspace) nem para aplicações External em modo de teste; publicar em produção com âmbitos restritos exige verificação pela Google."
|
||||
},
|
||||
"step6": {
|
||||
"title": "Criar credenciais OAuth",
|
||||
"link": "Clients",
|
||||
"body": "Abra a página de clientes e clique em:",
|
||||
"appType": "Tipo de aplicação:",
|
||||
"nameAnything": "Nome: qualquer um (por exemplo “Officer”)",
|
||||
"redirectUris": "URIs de redirecionamento autorizados — adicione:",
|
||||
"thenClick": "Depois clique em:"
|
||||
},
|
||||
"step7": {
|
||||
"title": "Copiar as credenciais",
|
||||
"body": "Uma caixa de diálogo mostra o seu client ID e client secret. Copie ambos e cole-os nos campos abaixo."
|
||||
},
|
||||
"scopeGmail": "Ler emails",
|
||||
"scopeCalendar": "Ler eventos do calendário",
|
||||
"verifying": "A verificar credenciais…",
|
||||
"valid": "Credenciais válidas",
|
||||
"invalid": "Credenciais inválidas",
|
||||
"verifyFailed": "O pedido de verificação falhou",
|
||||
"clientId": "Client ID",
|
||||
"clientSecret": "Client Secret",
|
||||
"redirectUri": "URI de redirecionamento",
|
||||
"redirectUriHint": "Adicione este URI aos URIs de redirecionamento autorizados do seu cliente OAuth da Google",
|
||||
"saved": "Configuração OAuth da Google guardada",
|
||||
"saveFailed": "Falha ao guardar a configuração OAuth da Google"
|
||||
},
|
||||
"googleAccount": {
|
||||
"title": "Conta Google",
|
||||
"hint": "Ligue a sua conta Google para o Calendário, Contactos e outros serviços Google.",
|
||||
"connected": "Ligada",
|
||||
"disconnect": "Desligar",
|
||||
"connect": "Ligar conta Google",
|
||||
"connectedToast": "Conta Google ligada",
|
||||
"connectFailed": "Falha ao ligar a conta Google",
|
||||
"disconnectedToast": "Conta Google desligada",
|
||||
"disconnectFailed": "Falha ao desligar a conta Google"
|
||||
},
|
||||
"apify": {
|
||||
"token": "Token de API",
|
||||
"saved": "Token de API do Apify guardado",
|
||||
"saveFailed": "Falha ao guardar o token de API do Apify"
|
||||
}
|
||||
},
|
||||
"header": {
|
||||
|
||||
Reference in New Issue
Block a user