@object-ui/i18n 17.6.0 → 18.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/CHANGELOG.md +5408 -0
  2. package/README.md +255 -13
  3. package/dist/LocalizationContext.d.ts +32 -9
  4. package/dist/LocalizationContext.js +32 -10
  5. package/dist/builtinAggregateLabels.d.ts +40 -0
  6. package/dist/builtinAggregateLabels.js +23 -0
  7. package/dist/currency.d.ts +27 -3
  8. package/dist/currency.js +28 -4
  9. package/dist/fallbackInterpolation.d.ts +79 -0
  10. package/dist/fallbackInterpolation.js +124 -0
  11. package/dist/i18n.d.ts +27 -1
  12. package/dist/i18n.js +99 -16
  13. package/dist/index.d.ts +8 -13
  14. package/dist/index.js +45 -17
  15. package/dist/locales/ar.d.ts +1504 -188
  16. package/dist/locales/ar.js +1711 -281
  17. package/dist/locales/de.d.ts +1080 -188
  18. package/dist/locales/de.js +1248 -261
  19. package/dist/locales/en.d.ts +1141 -249
  20. package/dist/locales/en.js +1714 -295
  21. package/dist/locales/es.d.ts +1186 -188
  22. package/dist/locales/es.js +1350 -255
  23. package/dist/locales/fr.d.ts +1186 -188
  24. package/dist/locales/fr.js +1351 -258
  25. package/dist/locales/index.d.ts +11940 -2033
  26. package/dist/locales/index.js +48 -9
  27. package/dist/locales/ja.d.ts +1080 -188
  28. package/dist/locales/ja.js +1240 -254
  29. package/dist/locales/ko.d.ts +1080 -188
  30. package/dist/locales/ko.js +1244 -258
  31. package/dist/locales/pt.d.ts +1186 -188
  32. package/dist/locales/pt.js +1350 -255
  33. package/dist/locales/registry.d.ts +102 -0
  34. package/dist/locales/registry.js +220 -0
  35. package/dist/locales/rtl.d.ts +24 -0
  36. package/dist/locales/rtl.js +26 -0
  37. package/dist/locales/ru.d.ts +1292 -188
  38. package/dist/locales/ru.js +1479 -272
  39. package/dist/locales/zh.d.ts +1144 -252
  40. package/dist/locales/zh.js +1245 -259
  41. package/dist/pickLocalized.d.ts +30 -0
  42. package/dist/pickLocalized.js +39 -0
  43. package/dist/provider.d.ts +101 -12
  44. package/dist/provider.js +335 -50
  45. package/dist/translateFn.d.ts +29 -0
  46. package/dist/translateFn.js +8 -0
  47. package/dist/useDisplayLocale.d.ts +11 -0
  48. package/dist/useDisplayLocale.js +11 -0
  49. package/dist/useObjectLabel.d.ts +143 -100
  50. package/dist/useObjectLabel.js +129 -82
  51. package/dist/useSafeTranslation.js +40 -42
  52. package/dist/utils/first-day-of-week.d.ts +71 -0
  53. package/dist/utils/first-day-of-week.js +61 -0
  54. package/dist/utils/formatting.d.ts +23 -1
  55. package/dist/utils/formatting.js +34 -5
  56. package/dist/utils/index.d.ts +1 -0
  57. package/dist/utils/index.js +1 -0
  58. package/dist/utils/spec-formatters.d.ts +13 -23
  59. package/dist/utils/spec-formatters.js +41 -2
  60. package/dist/utils/spec-translations.d.ts +16 -3
  61. package/dist/utils/spec-translations.js +52 -13
  62. package/package.json +12 -6
@@ -13,16 +13,19 @@ const pt = {
13
13
  notRestored: 'O servidor aceitou a solicitação, mas não restaurou sua sessão de administrador — você ainda está personificando {{user}}. Saia e entre novamente para encerrar.',
14
14
  },
15
15
  },
16
- // objectui#2600 B5 — capability picker scope group headers (labels come from the sys_capability registry).
16
+ // objectui#2600 B5 — capability picker scope group headers (labels come from the capability registry).
17
17
  capability: {
18
18
  label: {
19
19
  manage_users: "Gerenciar usuários",
20
20
  manage_org_users: "Gerenciar usuários da organização",
21
21
  manage_metadata: "Gerenciar metadados",
22
+ manage_mailboxes: "Gerenciar caixas de correio",
22
23
  manage_platform_settings: "Gerenciar configurações da plataforma",
23
24
  setup_access: "Acesso à configuração",
24
25
  setup_write: "Gravação de configurações",
25
26
  studio_access: "Acesso ao Studio",
27
+ manage_sharing: "Gerenciar compartilhamento",
28
+ view_all_audit_log: "Ver todo o registro de auditoria",
26
29
  },
27
30
  group: {
28
31
  platform: 'Plataforma',
@@ -30,25 +33,6 @@ const pt = {
30
33
  other: 'Outro',
31
34
  },
32
35
  },
33
- // objectui#3546 slice six — o resumo somente leitura das facetas de
34
- // autorização de PermissionFacetLink. "aba" como em list.tabs.
35
- perm: {
36
- facet: {
37
- none: "Nenhum",
38
- more: "+{{count}} mais",
39
- objects: "{{count}} objetos",
40
- objects_one: "{{count}} objeto",
41
- fields: "{{count}} regras de campo",
42
- fields_one: "{{count}} regra de campo",
43
- rls: "{{count}} políticas RLS",
44
- rls_one: "{{count}} política RLS",
45
- tabs: "{{count}} regras de aba",
46
- tabs_one: "{{count}} regra de aba",
47
- adminScope: "Administração delegada configurada",
48
- designInStudio: "Projetar no Studio →",
49
- designInStudioHint: "Projetar no Studio",
50
- },
51
- },
52
36
  lookup: {
53
37
  recentlyUsed: 'Usados recentemente',
54
38
  allResults: 'Todos os resultados',
@@ -62,7 +46,9 @@ const pt = {
62
46
  selectFirst: 'Selecione primeiro {{fields}}',
63
47
  selectRecord: 'Selecionar registro',
64
48
  recordCount: '{{count}} registros',
65
- recordCountOne: '1 registro',
49
+ recordCount_one: '{{count}} registro',
50
+ recordCount_many: '{{count}} de registros',
51
+ recordCount_other: '{{count}} registros',
66
52
  pageOf: 'Página {{current}} de {{total}}',
67
53
  filters: 'Filtros',
68
54
  clear: 'Limpar',
@@ -115,14 +101,27 @@ const pt = {
115
101
  closePanel: "Fechar painel",
116
102
  resizeDrawer: "Redimensionar painel",
117
103
  itemCount: "{{count}} itens",
118
- itemCountOne: "{{count}} item",
104
+ itemCount_one: "{{count}} item",
105
+ itemCount_many: "{{count}} de itens",
106
+ itemCount_other: "{{count}} itens",
119
107
  toggleSidebar: "Alternar barra lateral",
108
+ breadcrumb: "Trilha de navegação",
120
109
  package: "Pacote",
121
110
  done: "Concluído",
122
111
  editInStudio: "Editar no Studio",
123
112
  record: "Registro",
124
113
  retry: "Tentar novamente",
125
114
  printDialogHint: "Abre a caixa de diálogo de impressão do navegador (não é uma exportação para PDF)",
115
+ // The non-grid row ceiling's footnote (objectui#7210). Two keys because
116
+ // there are two conditions: a reported `total` states the fact with BOTH
117
+ // numbers, a missing one cannot name how many. Kept terse deliberately —
118
+ // this copy is eagerly loaded, and since objectui#7399 these bytes are
119
+ // budgeted by the `i18n-locales` chunk, not `framework`. ⛔ That ceiling's
120
+ // headroom is deliberately NOT restated here — it moves on every
121
+ // re-baseline, and the figure that was here went stale.
122
+ // `pnpm check:eager-closure` prints it.
123
+ rowCeilingNote: "Mostrando os primeiros {{shown}} de {{total}} registros. Restrinja o filtro.",
124
+ rowCeilingNoteUnknownTotal: "Mostrando os primeiros {{shown}} registros. Restrinja o filtro.",
126
125
  },
127
126
  actions: {
128
127
  decisionOutput: {
@@ -134,6 +133,15 @@ const pt = {
134
133
  acknowledge: 'Eu o salvei',
135
134
  copyAll: 'Copiar tudo',
136
135
  },
136
+ notAvailableHere: '"{{action}}" não está disponível na página atual.',
137
+ notAvailableForRecord: 'Não disponível para este registro',
138
+ completedSuccessfully: 'A ação foi concluída com sucesso',
139
+ failed: 'A ação falhou',
140
+ parallelFailed: 'Uma ou mais ações paralelas falharam',
141
+ undo: 'Desfazer',
142
+ undone: 'Alteração desfeita',
143
+ undoneOperation: 'Desfazer: {{description}}',
144
+ redoneOperation: 'Refazer: {{description}}',
137
145
  },
138
146
  validation: {
139
147
  required: "{{field}} é obrigatório",
@@ -151,19 +159,47 @@ const pt = {
151
159
  },
152
160
  form: {
153
161
  noPermissionToSave: "Você não tem permissão para salvar este registro.",
162
+ noPermissionToCreate: "Você não tem permissão para criar registros de {{object}}. Os campos são somente leitura.",
163
+ noPermissionToEdit: "Você não tem permissão para editar registros de {{object}}. Os campos são somente leitura.",
154
164
  submitFailed: "Não foi possível salvar. Tente novamente.",
165
+ uploadInFlight: "Aguarde a conclusão do upload antes de salvar.",
166
+ clearedOnHide: "O que não se aplica mais aos valores atuais foi limpo: {{fields}}",
167
+ visibleWhenFaulted: "Não é possível enviar: não foi possível avaliar a regra visibleWhen de {{fields}}. A regra precisa ser corrigida antes que este formulário possa ser enviado.",
155
168
  discardTitle: "Descartar as alterações?",
156
169
  discardMessage: "Você tem alterações não salvas. Se fechar este formulário agora, suas edições serão perdidas.",
157
170
  // objectui#4024 — the create/edit dialog's `sr-only` accessible
158
171
  // description, used when the form declares no `description` of its own.
159
172
  dialogDescriptionFallback: "Preencha os campos do formulário e depois envie ou cancele.",
173
+ deniedDescription: "Você não tem permissão para editar este campo.",
174
+ serverDefaultHint: "Definido automaticamente ao salvar.",
175
+ maxFileSize: "Tamanho máximo: {{size}}",
176
+ masterDetail: {
177
+ loadingColumns: "Carregando colunas…",
178
+ subtotal: "Subtotal",
179
+ tax: "Imposto ({{rate}}%)",
180
+ total: "Total",
181
+ lineItem: "Item de linha",
182
+ rowTitle: "{{title}} — linha {{row}}",
183
+ applyRow: "Aplicar",
184
+ editorDescription: "Preencha o registro e seus itens de linha e depois salve.",
185
+ noChildObject: "Esta coleção não tem nenhum objeto filho configurado: defina {{property}} como o objeto cujas linhas ela lista.",
186
+ schemaUnavailable: "Não foi possível carregar o esquema de {{object}}, portanto esta coleção não tem colunas para mostrar. Verifique se o objeto existe e pode ser lido e depois recarregue.",
187
+ noRelationshipField: "Não foi possível determinar como {{object}} se vincula a {{parent}}: nenhum campo lookup ou master_detail dele faz referência ao pai. Defina {{property}} nesta coleção como o campo que contém o registro pai.",
188
+ },
189
+ lineItems: {
190
+ title: "Itens de linha",
191
+ saveRecordFirst: "Salve o registro primeiro para adicionar itens de linha.",
192
+ notLoaded: "Os itens de linha deste registro não foram carregados.",
193
+ loadFailed: "Falha ao carregar os itens de linha",
194
+ saveFailed: "Falha ao salvar os itens de linha",
195
+ noChildObject: "Este painel não tem nenhum objeto filho configurado: defina {{property}} como o objeto cujas linhas ele lista.",
196
+ },
160
197
  keepEditing: "Continuar editando",
161
198
  discard: "Descartar",
162
199
  conflictTitle: "Conflito ao salvar",
163
200
  conflictMessage: "Outra pessoa alterou este registro enquanto você editava. Sobrescrever substituirá as alterações dela pelas suas.",
164
201
  conflictLatestVersion: "Salvamento dela: {{time}}",
165
202
  conflictOverwrite: "Sobrescrever",
166
- addItem: "Adicionar item",
167
203
  removeItem: "Remover item",
168
204
  fieldRequired: "Este campo é obrigatório",
169
205
  invalidFormat: "Formato inválido",
@@ -181,6 +217,12 @@ const pt = {
181
217
  createSuccess: "{{object}} criado",
182
218
  updateSuccess: "{{object}} atualizado",
183
219
  deleteSuccess: "{{object}} excluído",
220
+ created: "Criado",
221
+ saved: "Salvo",
222
+ savedNamed: "{{title}} salvo",
223
+ submitted: "Enviado",
224
+ errorLoading: "Erro ao carregar formulário",
225
+ navigateRefused: "O destino `navigateOnSuccess` declarado para este formulário foi recusado, então a navegação não aconteceu.",
184
226
  fullscreen: {
185
227
  title: "Editar texto",
186
228
  description: "Edite o valor de texto completo e depois salve ou cancele as alterações.",
@@ -199,12 +241,19 @@ const pt = {
199
241
  remove: "Remover a imagem {{index}}",
200
242
  enlarge: "Ampliar {{name}}",
201
243
  preview: "Pré-visualização da imagem",
244
+ cropPreview: "Pré-visualização do recorte da imagem",
202
245
  previous: "Imagem anterior",
203
246
  next: "Próxima imagem",
204
247
  counter: "{{current}} / {{total}}",
205
248
  },
249
+ percent: {
250
+ slider: "Porcentagem",
251
+ },
206
252
  relativeDate: {
207
253
  overdue: "Atrasado {{count}} d",
254
+ overdue_one: "Atrasado {{count}} d",
255
+ overdue_many: "Atrasado {{count}} d",
256
+ overdue_other: "Atrasado {{count}} d",
208
257
  },
209
258
  file: {
210
259
  dragDropHere: 'Arraste e solte arquivos aqui',
@@ -221,6 +270,9 @@ const pt = {
221
270
  remove: 'Remover {{name}}',
222
271
  exceedsMaxSize: '"{{name}}" excede o tamanho máximo ({{max}} MB)',
223
272
  uploadFailed: 'Falha ao enviar "{{name}}": {{error}}',
273
+ uploadIncomplete: 'O envio de "{{name}}" não foi concluído: nenhum ID de arquivo foi retornado, então nada foi salvo',
274
+ restricted: 'Arquivo restrito',
275
+ restrictedHint: 'Você não tem acesso aos detalhes deste arquivo',
224
276
  },
225
277
  richText: {
226
278
  format: "Formato: {{format}}",
@@ -237,6 +289,10 @@ const pt = {
237
289
  search: "Pesquisar objetos…",
238
290
  empty: "Nenhum objeto encontrado",
239
291
  },
292
+ registryRef: {
293
+ loadFailed: "Não foi possível carregar a lista. Você ainda pode digitar o nome.",
294
+ notFound: "{{name}} (não encontrado)",
295
+ },
240
296
  recipient: {
241
297
  selectTypeFirst: "Selecione primeiro um tipo de destinatário.",
242
298
  loading: "Carregando…",
@@ -248,6 +304,9 @@ const pt = {
248
304
  selectBusinessUnit: "Selecionar uma unidade de negócio",
249
305
  selectPosition: "Selecionar um cargo",
250
306
  selectUnitAndSubordinates: "Selecionar uma unidade de negócio",
307
+ selectField: "Selecionar um campo de usuário",
308
+ noUserFields: "Este objeto não tem campos de usuário",
309
+ fieldNotUserTyped: "{{name}} — não é um campo de usuário",
251
310
  },
252
311
  filterCondition: {
253
312
  selectObjectFirst: "Selecione primeiro um objeto.",
@@ -258,6 +317,33 @@ const pt = {
258
317
  editAsJson: "Editar como JSON",
259
318
  useVisualBuilder: "Usar o construtor visual",
260
319
  },
320
+ object: {
321
+ invalidJson: "JSON inválido",
322
+ },
323
+ location: {
324
+ refusedFormat: "Não salvo: informe um par latitude, longitude (exemplo: 30.2741, 120.1551).",
325
+ refusedRange: "Não salvo: {{detail}}",
326
+ latitude: "latitude",
327
+ longitude: "longitude",
328
+ refusedResidueOne: "Não salvo: {{name}} “{{text}}” não é um número. Informe decimais simples (exemplo: 30.2741, 120.1551).",
329
+ refusedResidue: "Não salvo: {{name}} “{{text}}” e {{otherName}} “{{otherText}}” não são números. Informe decimais simples (exemplo: 30.2741, 120.1551).",
330
+ },
331
+ date: {
332
+ impossibleDay: "O valor salvo “{{value}}” não é uma data real. Escolha uma data para substituí-lo.",
333
+ },
334
+ dateTime: {
335
+ impossibleDay: "O valor salvo “{{value}}” não é uma data real. Escolha uma data e uma hora para substituí-lo.",
336
+ },
337
+ datePicker: {
338
+ today: "Hoje",
339
+ tomorrow: "Amanhã",
340
+ clear: "Limpar data",
341
+ openCalendar: "Abrir calendário",
342
+ invalid: "Não salvo: “{{value}}” não é uma data. Digite no formato {{format}} ou escolha no calendário.",
343
+ },
344
+ number: {
345
+ badInput: "Não salvo: o texto deste campo não é um número. Informe um decimal simples (exemplo: {{example}}).",
346
+ },
261
347
  tags: {
262
348
  placeholder: "Digite e pressione Enter para adicionar…",
263
349
  },
@@ -269,10 +355,25 @@ const pt = {
269
355
  postalCode: "Código postal",
270
356
  country: "País",
271
357
  },
358
+ boolean: {
359
+ offBadge: "{{label}} — Desativado",
360
+ completed: "Concluído",
361
+ notCompleted: "Não concluído",
362
+ },
272
363
  textarea: {
273
364
  characterCount: "Contagem de caracteres: {{count}} de {{max}}",
274
365
  charactersRemaining: "Caracteres restantes: {{count}}",
275
366
  },
367
+ grid: {
368
+ addLine: "Adicionar linha",
369
+ noItems: "Nenhum item",
370
+ noItemsAddHint: "Ainda não há itens — clique em “{{label}}” para começar.",
371
+ optionalColumns: "Colunas opcionais",
372
+ computed: "Calculado",
373
+ openRow: "Abrir linha",
374
+ duplicateRow: "Duplicar linha",
375
+ removeRow: "Remover linha",
376
+ },
276
377
  },
277
378
  table: {
278
379
  rowsPerPage: "Linhas por página",
@@ -288,10 +389,15 @@ const pt = {
288
389
  selectAllRows: "Selecionar todas as linhas",
289
390
  expandRow: "Expandir linha",
290
391
  collapseRow: "Recolher linha",
392
+ rowActions: "Ações da linha",
291
393
  hideColumn: "Ocultar coluna",
292
394
  freezeColumn: "Fixar coluna",
293
395
  unfreezeColumn: "Soltar coluna",
294
396
  pageInfo: "Página {{current}} de {{total}}",
397
+ firstPage: "Primeira página",
398
+ previousPage: "Página anterior",
399
+ nextPage: "Próxima página",
400
+ lastPage: "Última página",
295
401
  totalRecords: "{{count}} no total",
296
402
  noResults: "Sem resultados",
297
403
  noResultsHint: "Tente ajustar seus filtros ou termos de pesquisa.",
@@ -301,23 +407,46 @@ const pt = {
301
407
  open: "Abrir",
302
408
  search: "Pesquisar…",
303
409
  modified: "{{count}} linha(s) modificada(s)",
410
+ modified_one: "{{count}} linha modificada",
411
+ modified_many: "{{count}} de linhas modificadas",
412
+ modified_other: "{{count}} linhas modificadas",
413
+ saved: "{{count}} linha(s) salva(s)",
414
+ saved_one: "{{count}} linha salva",
415
+ saved_many: "{{count}} de linhas salvas",
416
+ saved_other: "{{count}} linhas salvas",
304
417
  saveFailed: 'Falha ao salvar',
305
418
  selected: "{{count}} selecionado(s)",
419
+ selected_one: "{{count}} selecionado",
420
+ selected_many: "{{count}} selecionados",
421
+ selected_other: "{{count}} selecionados",
306
422
  edit: "Editar",
307
423
  delete: "Excluir",
308
424
  },
309
425
  grid: {
310
426
  bulkSelected: "{{count}} selecionados",
427
+ bulkSelected_one: "{{count}} selecionado",
428
+ bulkSelected_many: "{{count}} selecionados",
429
+ bulkSelected_other: "{{count}} selecionados",
311
430
  bulkSelectedAllMatches: "{{count}} selecionados (todas as correspondências)",
312
431
  bulkClear: "Limpar seleção",
313
432
  bulkAllOnPage: "Os {{count}} desta página estão selecionados.",
433
+ bulkAllOnPage_one: "{{count}} registro desta página está selecionado.",
434
+ bulkAllOnPage_many: "Os {{count}} desta página estão selecionados.",
435
+ bulkAllOnPage_other: "Os {{count}} desta página estão selecionados.",
314
436
  bulkSelectAllMatching: "Selecionar todas as {{count}} correspondências",
315
437
  bulkAllMatchingSelected: "Todos os {{count}} registros correspondentes estão selecionados.",
438
+ bulkActions: "Ações em massa",
316
439
  bulk: {
317
440
  confirmDefault: "Isto será aplicado a {{count}} registro(s).",
441
+ confirmDefault_one: "Isto será aplicado a {{count}} registro.",
442
+ confirmDefault_many: "Isto será aplicado a {{count}} de registros.",
443
+ confirmDefault_other: "Isto será aplicado a {{count}} registros.",
318
444
  overLimit: "A seleção ({{count}}) excede o limite da ação ({{limit}}). Reduza a seleção para prosseguir.",
319
445
  affectedRecords: "Registros afetados ({{count}}):",
320
446
  skippedIneligible: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
447
+ skippedIneligible_one: '{{count}} dos registros selecionados não é elegível para esta ação e será ignorado.',
448
+ skippedIneligible_many: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
449
+ skippedIneligible_other: '{{count}} dos registros selecionados não são elegíveis para esta ação e serão ignorados.',
321
450
  rowFallback: "Linha {{index}}",
322
451
  andMore: "… e mais {{count}}",
323
452
  processed: "{{count}} / {{total}} processados",
@@ -335,7 +464,6 @@ const pt = {
335
464
  undo: "Desfazer",
336
465
  undoing: "Desfazendo…",
337
466
  done: "Concluído",
338
- selectPlaceholder: "Selecionar…",
339
467
  loading: "Carregando…",
340
468
  },
341
469
  actions: "Ações",
@@ -348,17 +476,27 @@ const pt = {
348
476
  pullToRefresh: "Puxe para atualizar",
349
477
  refreshing: "Atualizando…",
350
478
  openRecord: "Abrir registro",
479
+ recordUnavailable: "{{object}} · registro indisponível",
351
480
  rowHeight: "Altura da linha: {{mode}}",
352
481
  openMenu: "Abrir menu",
353
482
  empty: "Vazio",
354
483
  yes: "Sim",
355
484
  no: "Não",
356
485
  systemFields: "Sistema",
486
+ // objectui#10881 — the grouped grid's two refusals: over a data source
487
+ // that cannot answer the group header query, and over rows a host
488
+ // handed in while declaring them one page of more. `queryGroupHeaders`
489
+ // is the member's name and stays untranslated.
490
+ grouping: {
491
+ needsHeaderQuery: "Esta visão está agrupada, mas sua fonte de dados não implementa queryGroupHeaders, portanto os grupos não podem ser contados. Remova o agrupamento para mostrar os registros.",
492
+ needsWholeRows: "O agrupamento precisa de todos os registros, mas esta grade recebeu apenas uma página deles, portanto os grupos não podem ser contados. Entregue todos os registros ou deixe a grade buscá-los em uma fonte de dados que implemente queryGroupHeaders.",
493
+ },
357
494
  // objectui#4024 — column-footer aggregate prefixes, keyed by the spec's
358
495
  // `ColumnSummary` vocabulary. `pattern` owns the label/value join so this
359
496
  // pack controls its own separator and word order.
360
497
  summary: {
361
498
  pattern: "{{label}}: {{value}}",
499
+ pagePattern: "{{label}} (esta página): {{value}}",
362
500
  count: "Contagem",
363
501
  countEmpty: "Vazios",
364
502
  countFilled: "Preenchidos",
@@ -380,10 +518,15 @@ const pt = {
380
518
  },
381
519
  import: {
382
520
  downloadTemplate: "Baixar modelo",
383
- downloadTemplateHint: "Obtenha um CSV com as colunas corretas (campos obrigatórios marcados com *).",
521
+ downloadTemplateHint: "Obtenha um arquivo Excel com as colunas que você pode importar (campos obrigatórios marcados com *) e instruções de preenchimento.",
384
522
  templateFileName: "{{object}}-import-template",
523
+ templateDownloadFailed: "Não foi possível baixar o modelo. Tente novamente.",
524
+ templateNotPermitted: "Você não tem permissão para criar registros deste objeto, portanto o modelo de importação não está disponível.",
385
525
  autoMatched: "Correspondência automática",
386
526
  autoMatchedSummary: "{{count}} coluna(s) com correspondência automática — revise e ajuste abaixo.",
527
+ autoMatchedSummary_one: "{{count}} coluna com correspondência automática — revise e ajuste abaixo.",
528
+ autoMatchedSummary_many: "{{count}} de colunas com correspondência automática — revise e ajuste abaixo.",
529
+ autoMatchedSummary_other: "{{count}} colunas com correspondência automática — revise e ajuste abaixo.",
387
530
  confidence: {
388
531
  high: "Confiança alta",
389
532
  medium: "Confiança média",
@@ -396,8 +539,17 @@ const pt = {
396
539
  cancelImport: "Cancelar a importação",
397
540
  importCancelled: "Importação cancelada",
398
541
  resultsTruncated: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
542
+ resultsTruncated_one: "Mostrando o primeiro resultado de linha ({{count}} de {{total}}).",
543
+ resultsTruncated_many: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
544
+ resultsTruncated_other: "Mostrando os primeiros {{count}} resultados de linhas (de {{total}}).",
399
545
  createdCount: "{{count}} criados",
546
+ createdCount_one: "{{count}} criado",
547
+ createdCount_many: "{{count}} criados",
548
+ createdCount_other: "{{count}} criados",
400
549
  updatedCount: "{{count}} atualizados",
550
+ updatedCount_one: "{{count}} atualizado",
551
+ updatedCount_many: "{{count}} atualizados",
552
+ updatedCount_other: "{{count}} atualizados",
401
553
  downloadFailed: "Baixar as linhas com falha",
402
554
  options: "Opções de importação",
403
555
  writeMode: "Quando uma linha corresponde a um registro existente",
@@ -412,9 +564,6 @@ const pt = {
412
564
  needMatchFields: "Selecione pelo menos um campo de correspondência.",
413
565
  matchOnlyField: "(somente correspondência)",
414
566
  optCreateOptions: "Manter valores de opção desconhecidos",
415
- optRunAutomations: "Executar automações e gatilhos",
416
- optTreatHistorical: "Importar como dados históricos",
417
- optTreatHistoricalHint: "(importa registros concluídos como estão — ignora as verificações da máquina de estados e mantém os carimbos de data/hora e o autor originais em vez de carimbar agora)",
418
567
  optSkipBlankKey: "Ignorar linhas com valor de correspondência em branco",
419
568
  optBackground: "Importar em segundo plano",
420
569
  optBackgroundHint: "(executa como um trabalho reversível)",
@@ -429,6 +578,7 @@ const pt = {
429
578
  invalidBoolean: "\"{{value}}\" não é um valor verdadeiro/falso válido",
430
579
  invalidNumber: "\"{{value}}\" não é um número válido",
431
580
  invalidDate: "\"{{value}}\" não é uma data válida",
581
+ invalidTime: "\"{{value}}\" não é uma hora válida",
432
582
  invalidOption: "\"{{value}}\" não está entre as opções permitidas",
433
583
  requiredValue: "Este campo é obrigatório",
434
584
  matchAmbiguous: "Corresponde a mais de um registro existente — use um valor único ou o id do registro",
@@ -445,10 +595,17 @@ const pt = {
445
595
  historyColResult: "Resultado",
446
596
  historyColTime: "Quando",
447
597
  errorCount: "{{count}} erros",
598
+ errorCount_one: "{{count}} erro",
599
+ errorCount_many: "{{count}} de erros",
600
+ errorCount_other: "{{count}} erros",
448
601
  undoImport: "Desfazer a importação",
449
602
  undoing: "Desfazendo…",
450
603
  undoConfirm: "Desfazer esta importação? Os registros criados serão excluídos e os registros atualizados voltarão aos valores anteriores.",
451
604
  reverted: "Desfeita",
605
+ undoPartial: "{{count}} linhas não foram desfeitas. Ao desfazer novamente, só essas linhas serão tentadas de novo.",
606
+ undoPartial_one: "{{count}} linha não foi desfeita. Ao desfazer novamente, só essa linha será tentada de novo.",
607
+ undoPartial_many: "{{count}} de linhas não foram desfeitas. Ao desfazer novamente, só essas linhas serão tentadas de novo.",
608
+ undoPartial_other: "{{count}} linhas não foram desfeitas. Ao desfazer novamente, só essas linhas serão tentadas de novo.",
452
609
  jobStatus: {
453
610
  pending: "Pendente",
454
611
  running: "Em execução",
@@ -505,19 +662,33 @@ const pt = {
505
662
  mapped: "Mapeado",
506
663
  skipped: "Pulado",
507
664
  rowsWithErrors: "{{count}} linha(s) com erros",
665
+ rowsWithErrors_one: "{{count}} linha com erros",
666
+ rowsWithErrors_many: "{{count}} de linhas com erros",
667
+ rowsWithErrors_other: "{{count}} linhas com erros",
508
668
  rowsCorrected: "{{count}} linha(s) corrigida(s)",
669
+ rowsCorrected_one: "{{count}} linha corrigida",
670
+ rowsCorrected_many: "{{count}} de linhas corrigidas",
671
+ rowsCorrected_other: "{{count}} linhas corrigidas",
509
672
  clickToFix: "— clique em uma célula destacada para editar em linha.",
510
673
  showingRows: "Mostrando {{shown}} de {{total}} linhas",
511
674
  importing: "Importando… {{progress}}%",
512
675
  importComplete: "Importação concluída",
676
+ importPartial: "Importação concluída com erros",
677
+ importFailed: "Falha na importação",
513
678
  imported: "{{count}} importado(s)",
514
679
  skippedCount: "{{count}} pulado(s)",
515
680
  moreErrors: "…e {{count}} erro(s) a mais",
681
+ moreErrors_one: "…e {{count}} erro a mais",
682
+ moreErrors_many: "…e {{count}} de erros a mais",
683
+ moreErrors_other: "…e {{count}} erros a mais",
516
684
  cancel: "Cancelar",
517
685
  back: "Voltar",
518
686
  next: "Próximo",
519
687
  close: "Fechar",
520
688
  importNRows: "Importar {{count}} linhas",
689
+ importNRows_one: "Importar {{count}} linha",
690
+ importNRows_many: "Importar {{count}} de linhas",
691
+ importNRows_other: "Importar {{count}} linhas",
521
692
  importingProgress: "Importando…",
522
693
  requiredMark: "*",
523
694
  required: "Obrigatório",
@@ -529,17 +700,45 @@ const pt = {
529
700
  month: "Mês",
530
701
  week: "Semana",
531
702
  day: "Dia",
532
- agenda: "Agenda",
533
703
  allDay: "Dia inteiro",
534
- noEvents: "Sem eventos",
535
704
  newEvent: "Novo evento",
536
705
  moreEvents: "+{{count}} mais",
706
+ unscheduled: "Sem agendamento ({{count}})",
707
+ loading: "Carregando calendário…",
708
+ loadError: "Erro: {{message}}",
709
+ configRequired: "Configuração do calendário necessária. Informe startDateField, a única chave obrigatória do calendário; o título do evento é resolvido sem titleField.",
710
+ configRequiredHint: "Ela pertence ao bloco calendar da visão. Uma página de interface não tem espaço de calendário próprio: aponte o sourceView dela para uma visão que declare um.",
711
+ eventDetails: "Detalhes do evento",
712
+ pullToRefresh: "Puxe para atualizar",
713
+ refreshing: "Atualizando…",
714
+ onDate: "Em {{date}}",
715
+ eventTitle: "Título",
716
+ eventTitlePlaceholder: "Sobre o que é este evento?",
717
+ creating: "Criando…",
718
+ titleRequired: "O título é obrigatório",
719
+ a11y: {
720
+ region: "Calendário",
721
+ grid: "Grade do calendário",
722
+ goToToday: "Ir para hoje",
723
+ previousPeriod: "Período anterior",
724
+ nextPeriod: "Período seguinte",
725
+ currentDate: "Data atual: {{date}}",
726
+ dayCell: "{{date}}, {{count}} eventos",
727
+ dayCell_one: "{{date}}, {{count}} evento",
728
+ dayCell_many: "{{date}}, {{count}} de eventos",
729
+ dayCell_other: "{{date}}, {{count}} eventos",
730
+ resizeEventEnd: "Alterar o fim do evento",
731
+ resizeEventEndHint: "Arraste para alterar a data de término",
732
+ resizeStart: "Alterar o início",
733
+ resizeEnd: "Alterar o fim",
734
+ },
537
735
  },
538
736
  list: {
539
737
  firstRunTitle: "Ainda não há nada aqui",
540
738
  firstRunMessage: "Crie seu primeiro registro para começar.",
541
739
  noMatches: "Nenhum registro correspondente",
542
740
  noMatchesMessage: "Nenhum registro corresponde aos seus filtros ou à sua busca atuais. Tente ajustá-los ou limpá-los.",
741
+ viewFilterNoMatchesMessage: "Nenhum registro corresponde ao filtro desta visualização.",
543
742
  loadErrorTitle: "Não foi possível carregar os registros",
544
743
  loadErrorMessage: "Algo deu errado ao carregar estes dados. Verifique sua conexão e tente novamente.",
545
744
  loadErrorForbiddenTitle: "Você não tem acesso",
@@ -576,17 +775,26 @@ const pt = {
576
775
  refresh: "Atualizar",
577
776
  loading: "Carregando registros…",
578
777
  recordCount: "{{count}} registros",
579
- recordCountOne: "{{count}} registro",
778
+ recordCount_one: "{{count}} registro",
779
+ recordCount_many: "{{count}} de registros",
780
+ recordCount_other: "{{count}} registros",
580
781
  addRecord: "Adicionar registro",
782
+ // objectui#12703 — the compact list's footer link to the object's list or the block's view.
783
+ viewAll: "Ver tudo",
581
784
  tabs: "Abas",
582
785
  allRecords: "Todos os registros",
583
786
  search: "Pesquisar",
584
787
  filter: "Filtrar",
585
788
  filterRecords: "Filtrar registros",
789
+ filterActive: "Filtrar, {{count}} ativos",
790
+ filterActive_one: "Filtrar, {{count}} ativo",
791
+ filterActive_many: "Filtrar, {{count}} ativos",
792
+ filterActive_other: "Filtrar, {{count}} ativos",
586
793
  sort: "Ordenar",
587
794
  sortRecords: "Ordenar registros",
588
795
  sortByIdSuffix: "(por ID)",
589
796
  sortRelationalHint: "As colunas que apontam para outro registro não são listadas: elas só podem ser ordenadas pelo ID armazenado, não pelo nome exibido na célula. Para ordenar por esse nome, desnormalize-o neste objeto como um campo armazenado, gravado quando a origem muda, e ordene por ele. Não um campo de fórmula: ele é virtual, nenhuma coluna é armazenada para ele e o servidor recusa ordenar por ele.",
797
+ sortRelationalPicked: "Uma coluna vinculada é ordenada pelo ID armazenado, não pelo nome exibido.",
590
798
  resetSortToDefault: "Restaurar o padrão da exibição",
591
799
  group: "Agrupar",
592
800
  groupBy: "Agrupar por",
@@ -607,14 +815,15 @@ const pt = {
607
815
  print: "Imprimir",
608
816
  hideFieldsTitle: "Ocultar campos",
609
817
  dataLimitReached: "Os primeiros {{limit}} registros estão sendo exibidos. Pode haver mais dados disponíveis.",
610
- viewSettings: "Configurações de exibição",
611
- viewSettingsHint: "Agrupamento, cor, densidade e campos visíveis.",
818
+ display: "Exibição",
819
+ layout: "Layout",
820
+ rowNumbers: "Números de linha",
821
+ resetToViewDefault: "Restaurar o padrão da exibição",
612
822
  addGroup: "Adicionar campo de grupo",
613
823
  collapsedByDefault: "Recolhido por padrão",
614
824
  removeGroup: "Remover",
615
825
  inlineEditShort: "Edição em linha",
616
826
  inlineEditLabel: "Editar registros em linha (clique em uma célula para editar)",
617
- recordEditingTitle: "Edição de registros",
618
827
  },
619
828
  managedByBadge: {
620
829
  systemWritable: {
@@ -645,6 +854,7 @@ const pt = {
645
854
  },
646
855
  kanban: {
647
856
  uncategorized: "Sem categoria",
857
+ loadMore: "Carregar mais",
648
858
  columns: "colunas",
649
859
  addCard: "Adicionar cartão",
650
860
  addColumn: "Adicionar coluna",
@@ -652,13 +862,28 @@ const pt = {
652
862
  deleteCard: "Excluir cartão",
653
863
  deleteColumn: "Excluir coluna",
654
864
  noCards: "Sem cartões",
865
+ columnCards: "Cartões da coluna {{column}}",
866
+ laneCards: "Cartões de {{column}} - {{lane}}",
655
867
  cardTitlePlaceholder: "Digite o título do cartão…",
656
868
  requiredFieldsTitle: "Preencha os campos obrigatórios",
657
869
  requiredFieldsDescription: "Esta movimentação torna os campos abaixo obrigatórios. Preencha-os para continuar.",
870
+ dnd: {
871
+ start: "Cartão {{card}} levantado na coluna {{column}}.",
872
+ overCard: "Cartão {{card}} sobre o cartão {{target}} na coluna {{column}}.",
873
+ overColumn: "Cartão {{card}} sobre a coluna {{column}}.",
874
+ overNone: "O cartão {{card}} não está sobre nenhuma coluna.",
875
+ moved: "Cartão {{card}} movido para a coluna {{column}}.",
876
+ dropped: "Cartão {{card}} solto. Continua na coluna {{column}}.",
877
+ cancelled: "Arrasto cancelado. O cartão {{card}} continua na coluna {{column}}.",
878
+ untitledCard: "sem título",
879
+ unnamedColumn: "sem nome",
880
+ instructions: "Para mover este cartão para outra coluna, arraste-o com o mouse ou pelo toque.",
881
+ dragging: "Arrastando o cartão {{card}}",
882
+ },
658
883
  },
659
884
  timeline: {
660
885
  bucket: {
661
- overdue: "Atrasado",
886
+ earlier: "Antes",
662
887
  today: "Hoje",
663
888
  tomorrow: "Amanhã",
664
889
  thisWeek: "Esta semana",
@@ -673,6 +898,17 @@ const pt = {
673
898
  },
674
899
  gantt: {
675
900
  rowLabel: "Itens",
901
+ unusableRange: {
902
+ malformedDate: "Intervalo de datas do gantt inutilizável: {{path}} é {{value}}, que não é uma data válida. Todas as datas do gantt têm de ser analisáveis: startDate e endDate de cada item de linha, além de qualquer minDate / maxDate fixado no esquema.",
903
+ malformedRow: "Linhas do gantt inutilizáveis: {{path}} é {{value}}, que não tem a forma de uma linha. Um gantt lê items como uma lista de linhas, cada linha como um objeto com label e os seus próprios items, e os items de cada linha como uma lista de barras; um null, um número, uma cadeia ou um objeto simples em qualquer dessas posições não pode ser desenhado.",
904
+ inverted: "Intervalo de datas do gantt inutilizável: minDate {{minDate}} é posterior a maxDate {{maxDate}}. Um minDate / maxDate fixado prevalece sobre o intervalo calculado a partir das linhas, pelo que este eixo não tem colunas e nenhuma barra pode ser colocada; troque os dois valores.",
905
+ },
906
+ },
907
+ unsupported: {
908
+ objectBoundGantt: "Variante \"gantt\" não suportada: uma linha do tempo vinculada a um objeto renderiza as variantes de feed ({{variants}}). O gantt precisa de linhas literais, cada uma com os seus próprios items aninhados, por isso o eixo gantt (scale) não tem efeito aqui.",
909
+ },
910
+ unconfigured: {
911
+ noDateAxis: "Eixo de datas da linha do tempo necessário: esta vista não declara nenhum campo de data e uma linha do tempo vinculada a um objeto não inventa nenhum. Declare um de: {{fields}}. O primeiro é a grafia da spec; os restantes são aliases legados.",
676
912
  },
677
913
  },
678
914
  gantt: {
@@ -690,6 +926,7 @@ const pt = {
690
926
  },
691
927
  aria: {
692
928
  taskList: "Lista de tarefas",
929
+ refreshing: "Atualizando…",
693
930
  },
694
931
  tooltip: {
695
932
  days: "d",
@@ -735,13 +972,22 @@ const pt = {
735
972
  conflict: {
736
973
  title: "Conflito de agendamento",
737
974
  body: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa(s) afetada(s)?",
975
+ body_one: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefa afetada?",
976
+ body_many: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} de tarefas afetadas?",
977
+ body_other: "Esta movimentação conflita com as restrições de dependência. Reagendar automaticamente {{count}} tarefas afetadas?",
738
978
  confirm: "Reagendar automaticamente",
739
979
  cancel: "Manter como está",
740
980
  },
741
981
  autoScheduleDlg: {
742
982
  title: "Agendamento automático",
743
983
  body: "Adiar {{count}} tarefa(s) para atender aos vínculos de dependência?",
984
+ body_one: "Adiar {{count}} tarefa para atender aos vínculos de dependência?",
985
+ body_many: "Adiar {{count}} de tarefas para atender aos vínculos de dependência?",
986
+ body_other: "Adiar {{count}} tarefas para atender aos vínculos de dependência?",
744
987
  skipped: "{{count}} tarefa(s) bloqueada(s) também violam os vínculos e foram ignoradas.",
988
+ skipped_one: "{{count}} tarefa bloqueada também viola os vínculos e foi ignorada.",
989
+ skipped_many: "{{count}} de tarefas bloqueadas também violam os vínculos e foram ignoradas.",
990
+ skipped_other: "{{count}} tarefas bloqueadas também violam os vínculos e foram ignoradas.",
745
991
  confirm: "Aplicar",
746
992
  cancel: "Cancelar",
747
993
  none: "Todas as dependências foram atendidas — nada a reagendar.",
@@ -820,10 +1066,14 @@ const pt = {
820
1066
  tabActionsFor: "Ações de exibição para {{name}}",
821
1067
  readonlyAriaLabel: "Exibição somente leitura",
822
1068
  readonlyTooltip: "Exibição do sistema — definida no código, somente leitura.",
1069
+ malformedFilter: "O filtro desta exibição é inválido, por isso nenhum registro é exibido: a condição {{subject}} não pode ser aplicada.",
1070
+ noObject: "Nenhum objeto indicado: defina {{property}} ou dataSource.object.",
823
1071
  },
824
1072
  designer: {
825
1073
  undo: "Desfazer",
826
1074
  redo: "Refazer",
1075
+ canvasMinimap: "Minimapa da tela",
1076
+ versionHistory: "Histórico de versões",
827
1077
  },
828
1078
  detail: {
829
1079
  editInlineHint: "Clique duas vezes para editar",
@@ -847,7 +1097,9 @@ const pt = {
847
1097
  pageHeaderActions: "Ações do cabeçalho da página",
848
1098
  emojiPicker: "Seletor de emojis",
849
1099
  reactionCount: "{{emoji}} {{count}} reações",
850
- reactionCountOne: "{{emoji}} {{count}} reação",
1100
+ reactionCount_one: "{{emoji}} {{count}} reação",
1101
+ reactionCount_many: "{{emoji}} {{count}} de reações",
1102
+ reactionCount_other: "{{emoji}} {{count}} reações",
851
1103
  recordDetail: "Detalhe do registro",
852
1104
  recordDetailWithLabel: "Detalhe de {{label}}",
853
1105
  openAsFullPage: "Abrir como página inteira",
@@ -874,7 +1126,6 @@ const pt = {
874
1126
  viewAll: "Ver tudo",
875
1127
  new: "Novo",
876
1128
  add: "Adicionar",
877
- emptyValue: "—",
878
1129
  comments: "Comentários",
879
1130
  searchComments: "Pesquisar comentários…",
880
1131
  addCommentPlaceholder: "Adicionar comentário… (Ctrl+Enter para enviar)",
@@ -885,11 +1136,22 @@ const pt = {
885
1136
  unpin: "Desfixar",
886
1137
  justNow: "agora mesmo",
887
1138
  minutesAgo: "há {{count}} min",
1139
+ minutesAgo_one: "há {{count}} min",
1140
+ minutesAgo_many: "há {{count}} min",
1141
+ minutesAgo_other: "há {{count}} min",
888
1142
  hoursAgo: "há {{count}} h",
1143
+ hoursAgo_one: "há {{count}} h",
1144
+ hoursAgo_many: "há {{count}} h",
1145
+ hoursAgo_other: "há {{count}} h",
889
1146
  daysAgo: "há {{count}} d",
1147
+ daysAgo_one: "há {{count}} d",
1148
+ daysAgo_many: "há {{count}} d",
1149
+ daysAgo_other: "há {{count}} d",
890
1150
  dropFilesToUpload: "Arraste arquivos aqui ou clique para enviar",
891
1151
  attachmentCount: "{{count}} anexo",
892
- attachmentCountPlural: "{{count}} anexos",
1152
+ attachmentCount_one: "{{count}} anexo",
1153
+ attachmentCount_many: "{{count}} de anexos",
1154
+ attachmentCount_other: "{{count}} anexos",
893
1155
  removeAttachment: "Remover anexo",
894
1156
  // Record Attachments panel (enable.files, objectstack#4358)
895
1157
  attachments: "Anexos",
@@ -898,6 +1160,7 @@ const pt = {
898
1160
  noAttachments: "Ainda não há anexos. Envie um arquivo para começar.",
899
1161
  downloadAttachment: "Baixar",
900
1162
  deleteAttachment: "Excluir anexo",
1163
+ deleteAttachmentConfirm: "Tem certeza de que deseja excluir o anexo \"{{name}}\"?",
901
1164
  attachmentDeleteDenied: "Somente quem enviou ou alguém que pode editar este registro pode excluir este anexo.",
902
1165
  attachmentParentAccessDenied: "Você não tem acesso para anexar arquivos a este registro.",
903
1166
  attachmentDownloadDenied: "Você não tem acesso para baixar este anexo.",
@@ -907,11 +1170,6 @@ const pt = {
907
1170
  attachmentsLoadFailed: "Não foi possível carregar os anexos deste registro.",
908
1171
  attachmentsApiUnavailable: "A lista de anexos não está disponível neste objeto.",
909
1172
  retryLoadAttachments: "Tentar novamente",
910
- unifiedDiff: "Visualização unificada",
911
- sideBySideDiff: "Visualização lado a lado",
912
- noChanges: "Sem alterações",
913
- previousVersion: "Anterior",
914
- currentVersion: "Atual",
915
1173
  discussion: "Discussão",
916
1174
  showDiscussion: "Mostrar discussão ({{count}})",
917
1175
  hideDiscussion: "Ocultar discussão",
@@ -926,25 +1184,36 @@ const pt = {
926
1184
  writeComment: "Escreva um comentário…",
927
1185
  subscribedTooltip: "Inscrito — clique para cancelar inscrição",
928
1186
  unsubscribedTooltip: "Inscrever-se para notificações",
929
- firstRecord: "Primeiro registro (Home)",
930
- previousRecordKey: "Registro anterior (←)",
931
- nextRecordKey: "Próximo registro (→)",
932
- lastRecord: "Último registro (End)",
933
1187
  noRecords: "Sem registros",
934
- searchWhileNavigating: "Pesquisar durante a navegação",
935
- searchRecords: "Pesquisar registros…",
936
1188
  allActivity: "Toda atividade",
937
1189
  commentsOnly: "Apenas comentários",
938
1190
  fieldChangesFilter: "Alterações de campo",
939
1191
  tasksOnly: "Apenas tarefas",
940
1192
  leaveCommentPlaceholder: "Deixar um comentário… (Ctrl+Enter para enviar)",
941
1193
  noActivity: "Nenhuma atividade registrada",
1194
+ activityAccessDenied: "Você não tem permissão para ver a atividade deste registro.",
1195
+ commentsAccessDenied: "Você não tem permissão para ver os comentários deste registro.",
1196
+ // objectui#7149 — the rest of `ActivityTimeline`. The four chip labels the
1197
+ // `detail.*` pack did not already name, and the `formatFieldChange`
1198
+ // sentences, which are assembled in code and so need interpolation holes.
1199
+ allFilter: 'Tudo',
1200
+ createsFilter: 'Criações',
1201
+ deletesFilter: 'Exclusões',
1202
+ statusChangesFilter: 'Alterações de status',
1203
+ activityEmptyValue: '(vazio)',
1204
+ activityFieldChanged: 'Alterou {{field}} de "{{old}}" para "{{new}}"',
1205
+ activityCreated: 'Criou este registro',
1206
+ activityDeleted: 'Excluiu este registro',
1207
+ activityStatusChanged: 'Alterou o status para "{{value}}"',
1208
+ activityUpdated: 'Atualizou o registro',
942
1209
  loadMore: "Carregar mais",
943
1210
  edited: "(editado)",
944
1211
  via: "via {{source}}",
945
1212
  viewSource: "Ver origem",
946
1213
  replyCount: "{{count}} resposta",
947
- replyCountPlural: "{{count}} respostas",
1214
+ replyCount_one: "{{count}} resposta",
1215
+ replyCount_many: "{{count}} de respostas",
1216
+ replyCount_other: "{{count}} respostas",
948
1217
  replyPlaceholder: "Responder…",
949
1218
  filterActivity: "Filtrar atividade",
950
1219
  openDiscussion: "Abrir painel de discussão",
@@ -956,9 +1225,12 @@ const pt = {
956
1225
  lockedByApproval: "Bloqueado para aprovação",
957
1226
  lockedTooltip: "Este registro tem uma solicitação de aprovação pendente; a edição está bloqueada",
958
1227
  writeStrippedTitle: "Salvo, mas alguns campos não foram aplicados",
1228
+ writeWarningsTitle: "Salvo, com avisos",
959
1229
  writeStrippedReadonly: "Somente leitura, portanto não foi aplicado: {{fields}}",
960
1230
  writeStrippedByState: "Não editável no estado atual deste registro, portanto não foi aplicado: {{fields}}",
961
1231
  writeStrippedPrimaryKey: "O identificador do registro não pode ser alterado ao salvar, portanto não foi aplicado: {{fields}}",
1232
+ writeStrippedComputed: "Calculado pelo servidor a partir de uma fórmula, portanto o valor enviado não foi aplicado: {{fields}}",
1233
+ writeStrippedStoredExpression: "Calculado a partir do registro, portanto o valor calculado foi salvo no lugar do enviado: {{fields}}",
962
1234
  writeStrippedUnknownReason: "Não aplicado pelo servidor: {{fields}}",
963
1235
  approvalPendingEditable: "Em aprovação · editável",
964
1236
  approvalPendingTooltip: "Este registro tem uma solicitação de aprovação pendente; esta etapa ainda permite a edição",
@@ -980,6 +1252,13 @@ const pt = {
980
1252
  pathStageLostUpcoming: '{{stage}}, perdida, não alcançada',
981
1253
  pathStageWonUpcoming: '{{stage}}, etapa objetivo, não alcançada',
982
1254
  linkCopied: "Link copiado para a área de transferência",
1255
+ commentFailed: "Seu comentário não foi publicado. Nada foi salvo — tente novamente.",
1256
+ reactionFailed: "Sua reação não foi salva. Tente novamente.",
1257
+ editComment: "Editar comentário",
1258
+ deleteComment: "Excluir comentário",
1259
+ deleteCommentConfirm: "Tem certeza de que deseja excluir este comentário?",
1260
+ commentEditFailed: "Sua edição não foi salva. O comentário mantém o texto anterior.",
1261
+ commentDeleteFailed: "O comentário não foi excluído. Tente novamente.",
983
1262
  linkCopyFailed: "Falha ao copiar o link",
984
1263
  cancel: "Cancelar",
985
1264
  cancelEdit: "Descartar alterações",
@@ -1009,37 +1288,67 @@ const pt = {
1009
1288
  sortBy: "Ordenar por",
1010
1289
  filterPlaceholder: "Filtrar…",
1011
1290
  highlightFields: "Campos principais",
1291
+ highlightsLabel: "Campos principais do registro",
1012
1292
  createdBy: "Criado por",
1013
1293
  updatedBy: "Atualizado por",
1014
- // objectui#3863 — base key. pt's third category `many` starts at a million, where
1015
- // the plural form is correct, so the base repeats `_other`.
1294
+ // objectui#3863 — base key, answering only a call made without a count. pt's
1295
+ // `many` (exact millions) has its own slot since objectui#11432; it repeats
1296
+ // `_other` here because the count governs no noun complement.
1016
1297
  showEmptyRelated: "+ {{count}} vazios",
1017
1298
  showEmptyRelated_one: "+ {{count}} vazio",
1299
+ showEmptyRelated_many: "+ {{count}} vazios",
1018
1300
  showEmptyRelated_other: "+ {{count}} vazios",
1019
1301
  copyEmail: "Copiar e-mail",
1020
1302
  copyPhone: "Copiar telefone",
1021
1303
  copyRecordId: "Copiar ID do registro",
1022
1304
  showEmptyFields: "Mostrar {{count}} campos vazios",
1305
+ showEmptyFields_one: "Mostrar {{count}} campo vazio",
1306
+ showEmptyFields_many: "Mostrar {{count}} de campos vazios",
1307
+ showEmptyFields_other: "Mostrar {{count}} campos vazios",
1023
1308
  hideEmptyFields: "Ocultar campos vazios",
1024
1309
  noValue: "Sem valor",
1310
+ unresolvedReference: "Referência não resolvida: {{value}} não foi resolvida como um usuário",
1311
+ unresolvedLookupReference: "Referência não resolvida: {{value}} não foi resolvida como um registro nesta tela",
1312
+ repeaterItemCount: "{{count}} itens",
1313
+ repeaterItemCount_one: "{{count}} item",
1314
+ repeaterItemCount_many: "{{count}} de itens",
1315
+ repeaterItemCount_other: "{{count}} itens",
1316
+ fileCount: "{{count}} arquivos",
1317
+ fileCount_one: "{{count}} arquivo",
1318
+ fileCount_many: "{{count}} de arquivos",
1319
+ fileCount_other: "{{count}} arquivos",
1025
1320
  },
1026
1321
  chart: {
1027
- noData: "Nenhum dado de gráfico disponível",
1028
1322
  loading: "Carregando gráfico…",
1323
+ refreshing: "Atualizando…",
1029
1324
  nullCategory: "(Não especificado)",
1030
- },
1031
- map: {
1032
- searchLocations: "Pesquisar locais…",
1033
- locationDetails: "Detalhes do local",
1034
- markersCount: "{{count}} marcadores",
1035
- invalidCoordinates: "{{count}} registro com coordenadas ausentes ou inválidas excluído do mapa.",
1036
- invalidCoordinatesPlural: "{{count}} registros com coordenadas ausentes ou inválidas excluídos do mapa.",
1325
+ scatterOneMeasure: "Um gráfico de dispersão traça uma única medida. Mantenha apenas uma série:",
1326
+ unconfigured: {
1327
+ noCategoryAxis: "Eixo de categorias do gráfico obrigatório — um gráfico vinculado a um objeto não o inventa. Declare um destes:",
1328
+ },
1037
1329
  },
1038
1330
  dashboard: {
1039
- noRows: "Sem linhas",
1331
+ // objectui#7063 — the DEFAULT empty state every dashboard widget renders
1332
+ // when its query SUCCEEDED and returned nothing. It replaced the terse
1333
+ // per-widget `noRows` / `noDataAvailable` fragments at the render site;
1334
+ // objectui#7125 deleted those two keys from all ten packs once nothing
1335
+ // read them. The copy here has to read as a state rather than a failure,
1336
+ // which is why it says the widget loaded. `sourceLabel` carries its own
1337
+ // punctuation so the call site concatenates no separator (see
1338
+ // `WidgetEmptyState`).
1339
+ empty: {
1340
+ title: "Ainda sem dados",
1341
+ message: "Este widget foi carregado com sucesso, mas a consulta ainda não retornou nenhum registro.",
1342
+ sourceLabel: "Fonte de dados:",
1343
+ },
1040
1344
  loading: "Carregando…",
1345
+ refreshing: "Atualizando…",
1346
+ refreshAll: "Atualizar tudo",
1347
+ refreshDashboard: "Atualizar painel",
1041
1348
  pickMeasures: "Escolha medidas (valores) para este widget de dataset.",
1042
1349
  datasetUnsupported: "Esta fonte de dados não oferece suporte a consultas de dataset.",
1350
+ widgetForbiddenTitle: "Sem acesso",
1351
+ widgetForbiddenMessage: "Você não tem permissão para ver os dados deste widget.",
1043
1352
  details: "Detalhes",
1044
1353
  exportCsv: "Exportar CSV",
1045
1354
  openInList: "Abrir na lista",
@@ -1067,12 +1376,10 @@ const pt = {
1067
1376
  },
1068
1377
  },
1069
1378
  addWidget: "Adicionar widget",
1070
- removeWidget: "Remover widget",
1071
1379
  editLayout: "Editar layout",
1072
1380
  saveLayout: "Salvar layout",
1073
1381
  resetLayout: "Redefinir layout",
1074
1382
  total: "Total",
1075
- noDataAvailable: "Sem dados disponíveis",
1076
1383
  noDataSourceFor: "Sem fonte de dados para",
1077
1384
  config: {
1078
1385
  breadcrumb: {
@@ -1194,10 +1501,6 @@ const pt = {
1194
1501
  appDescription: "Descrição",
1195
1502
  appIcon: "Ícone",
1196
1503
  template: "Modelo",
1197
- layout: "Layout",
1198
- layoutSidebar: "Barra lateral",
1199
- layoutHeader: "Cabeçalho",
1200
- layoutEmpty: "Vazio",
1201
1504
  selectObjects: "Selecionar objetos",
1202
1505
  searchObjects: "Pesquisar objetos…",
1203
1506
  selectAll: "Selecionar todos",
@@ -1206,7 +1509,6 @@ const pt = {
1206
1509
  addGroup: "Adicionar grupo",
1207
1510
  addUrl: "Adicionar URL",
1208
1511
  addSeparator: "Adicionar separador",
1209
- noNavItems: "Nenhum item de navegação ainda.",
1210
1512
  logoUrl: "Logo URL",
1211
1513
  primaryColor: "Cor primária",
1212
1514
  faviconUrl: "Favicon URL",
@@ -1233,13 +1535,12 @@ const pt = {
1233
1535
  appearance: "Aparência",
1234
1536
  rowHeight: "Altura da linha",
1235
1537
  livePreview: "Pré-visualização em tempo real",
1236
- stepBasicDesc: "Nome, título e layout",
1538
+ stepBasicDesc: "Nome, título e ícone",
1237
1539
  stepObjectsDesc: "Selecionar objetos de negócio",
1238
1540
  stepNavigationDesc: "Construir árvore de navegação",
1239
1541
  stepBrandingDesc: "Logo, cores e favicon",
1240
1542
  noObjectsFound: "Nenhum objeto encontrado.",
1241
1543
  noNavItemsHint: "Sem itens de navegação. Selecione objetos na etapa anterior ou adicione manualmente.",
1242
- separator: "Separador",
1243
1544
  separatorLabel: "— Separador —",
1244
1545
  newGroup: "Novo grupo",
1245
1546
  newLink: "Novo link",
@@ -1273,6 +1574,7 @@ const pt = {
1273
1574
  navTypeSeparator: "Separador",
1274
1575
  navTypeAction: "Ação",
1275
1576
  navTypeComponent: "Componente",
1577
+ navTypeDoc: "Documento",
1276
1578
  navEditIcon: "Editar ícone",
1277
1579
  navToggleVisible: "Alternar visibilidade",
1278
1580
  navHidden: "Oculto",
@@ -1350,11 +1652,8 @@ const pt = {
1350
1652
  defaultValue: "Valor padrão",
1351
1653
  placeholder: "Espaço reservado",
1352
1654
  referenceTo: "Referência a",
1353
- formula: "Fórmula",
1354
1655
  options: "Opções",
1355
1656
  addOption: "Adicionar opção",
1356
- validationRules: "Regras de validação",
1357
- addRule: "Adicionar regra",
1358
1657
  systemBadge: "Sistema",
1359
1658
  ungrouped: "Geral",
1360
1659
  deleteConfirmTitle: "Excluir campo?",
@@ -1373,16 +1672,33 @@ const pt = {
1373
1672
  },
1374
1673
  },
1375
1674
  console: {
1675
+ studio: {
1676
+ title: "Studio",
1677
+ accessRequired: "Você precisa de acesso ao Studio para abrir o Studio.",
1678
+ },
1376
1679
  saveAdvisoryTitle: "Salvo — a verificação de criação gerou {{count}} recomendação(ões)",
1680
+ saveAdvisoryTitle_one: "Salvo — a verificação de criação gerou {{count}} recomendação",
1681
+ saveAdvisoryTitle_many: "Salvo — a verificação de criação gerou {{count}} de recomendações",
1682
+ saveAdvisoryTitle_other: "Salvo — a verificação de criação gerou {{count}} recomendações",
1683
+ publishAdvisoryTitle: "Publicado — a verificação de criação gerou {{count}} recomendação(ões)",
1684
+ publishAdvisoryTitle_one: "Publicado — a verificação de criação gerou {{count}} recomendação",
1685
+ publishAdvisoryTitle_many: "Publicado — a verificação de criação gerou {{count}} de recomendações",
1686
+ publishAdvisoryTitle_other: "Publicado — a verificação de criação gerou {{count}} recomendações",
1687
+ importMappingsUnavailable: "Não foi possível carregar os mapeamentos de importação salvos de {{object}}",
1688
+ importMappingsRefused: "O servidor recusou esta solicitação, portanto esta lista está vazia porque não pôde ser lida, não porque nada esteja registrado. Entre novamente ou peça acesso a um administrador.",
1689
+ importMappingsUnreadable: "Esta lista está vazia porque não pôde ser lida, não porque nada esteja registrado. Tente novamente e relate o problema se ele persistir.",
1690
+ savedViewsUnavailable: "Não foi possível carregar as exibições salvas de {{object}}",
1691
+ savedViewsRefused: "O servidor recusou esta solicitação, portanto esta lista está vazia porque não pôde ser lida, não porque este objeto não tenha exibições salvas. Entre novamente ou peça acesso a um administrador.",
1692
+ savedViewsUnreadable: "Esta lista está vazia porque não pôde ser lida, não porque este objeto não tenha exibições salvas. Tente novamente e relate o problema se ele persistir.",
1377
1693
  settingsHub: {
1378
1694
  title: "Configurações",
1379
- subtitle: "Configure seu workspace, integrações e sinalizadores de recursos.",
1695
+ subtitle: "Configure seu sistema, integrações e sinalizadores de recursos.",
1380
1696
  loadError: "Falha ao carregar as configurações",
1381
1697
  empty: "Nenhuma configuração registrada. Os plugins podem registrar manifestos de configuração pelo SettingsService.",
1382
1698
  settingsCount: "{{n}} configurações",
1383
1699
  beta: "Beta",
1384
1700
  categories: {
1385
- Workspace: "Workspace",
1701
+ Workspace: "Geral",
1386
1702
  Communication: "Comunicação",
1387
1703
  Security: "Segurança",
1388
1704
  Infrastructure: "Infraestrutura",
@@ -1427,13 +1743,20 @@ const pt = {
1427
1743
  },
1428
1744
  usage: {
1429
1745
  title: "Uso de IA",
1430
- meterBuild: "Criar",
1431
- meterAsk: "Perguntar",
1746
+ poolUsed: "{{percent}} usado",
1432
1747
  statusOk: "Ainda há bastante",
1433
1748
  statusLow: "Está acabando",
1434
1749
  statusFull: "Limite atingido",
1435
1750
  resetsDaily: "Redefine hoje à noite",
1436
1751
  resetsMonthly: "Redefine no próximo ciclo",
1752
+ resetsWeeklyDays: "Redefine em {{count}} dias",
1753
+ resetsWeeklyDays_one: "Redefine em {{count}} dia",
1754
+ resetsWeeklyDays_many: "Redefine em {{count}} de dias",
1755
+ resetsWeeklyDays_other: "Redefine em {{count}} dias",
1756
+ resetsWeeklyHours: "Redefine em {{count}} horas",
1757
+ resetsWeeklyHours_one: "Redefine em {{count}} hora",
1758
+ resetsWeeklyHours_many: "Redefine em {{count}} de horas",
1759
+ resetsWeeklyHours_other: "Redefine em {{count}} horas",
1437
1760
  ctaUpgrade: "Faça upgrade para continuar",
1438
1761
  ctaTopUp: "Adicione créditos para continuar",
1439
1762
  ariaLabel: "Uso de IA: {{status}}",
@@ -1446,6 +1769,31 @@ const pt = {
1446
1769
  share: "Compartilhar",
1447
1770
  shareTitle: "Compartilhar esta conversa",
1448
1771
  shareDisabledTitle: "Comece a conversar para habilitar o compartilhamento",
1772
+ buildDoctor: "Diagnóstico de build",
1773
+ buildDoctorTitle: "Diagnóstico de build — o que foi realmente aplicado?",
1774
+ buildDoctorDisabledTitle: "Envie uma mensagem primeiro",
1775
+ buildDoctorDrawer: {
1776
+ description: 'O que o agente afirmou versus o que está realmente ativo. Diagnóstico somente leitura.',
1777
+ reconciling: 'Conciliando…',
1778
+ notAvailable: 'Indisponível — a conversa não foi encontrada ou você não tem autorização.',
1779
+ untitled: '(sem título)',
1780
+ summary: '{{turns}} turno(s) · {{messages}} msgs · {{tokens}} tok · {{seconds}} s LLM',
1781
+ allLive: 'Todas as {{count}} alteração(ões) tentada(s) estão ativas — nada se perdeu.',
1782
+ discrepancies: '{{count}} discrepância(s) — o que o chat disse não corresponde ao que está ativo.',
1783
+ orphanedTitle: 'Proposto, mas nunca aplicado',
1784
+ orphanedHint: 'Um cartão de confirmação que o agente propôs, mas que nenhum turno posterior aplicou — a alteração se perdeu silenciosamente.',
1785
+ missingTitle: 'Declarado, mas ausente',
1786
+ missingHint: 'Um resultado de ferramenta disse que foi aplicado, mas o artefato não está ativo em sys_metadata.',
1787
+ toolErrorsTitle: 'Erros de ferramentas',
1788
+ toolErrorsHint: 'Chamadas de ferramentas que retornaram um erro durante o build.',
1789
+ verifyTitle: 'Verificação do build (verify_build)',
1790
+ yourApp: 'Seu aplicativo:',
1791
+ noIssues: '0 problemas',
1792
+ issueCount: '{{count}} problema(s)',
1793
+ platformNoise: '{{count}} achado(s) sys_* da plataforma oculto(s)',
1794
+ pendingActions: 'Ações pendentes',
1795
+ timeline: 'Linha do tempo ({{count}})',
1796
+ },
1449
1797
  newChat: "Nova",
1450
1798
  searchChats: "Pesquisar conversas…",
1451
1799
  noChatsYet: "Ainda não há conversas",
@@ -1468,6 +1816,8 @@ const pt = {
1468
1816
  liveCanvasUnlisted: "Aplicativo ao vivo — {{app}} (não listado até ser publicado)",
1469
1817
  loadingAgents: "Carregando agentes…",
1470
1818
  askAnything: "Pergunte qualquer coisa…",
1819
+ askOrChangeApp: "Pergunte sobre seus dados ou peça para eu alterar este app…",
1820
+ describeAppToBuild: "Descreva o app que você quer criar ou o que mudar…",
1471
1821
  emptyTitle: "Iniciar uma conversa",
1472
1822
  emptyDescription: "Pergunte qualquer coisa — o assistente tem acesso ao contexto do seu aplicativo atual.",
1473
1823
  switchAssistant: "Trocar de assistente",
@@ -1475,7 +1825,7 @@ const pt = {
1475
1825
  empty: {
1476
1826
  build: {
1477
1827
  title: "Criar com IA",
1478
- description: "Descreva um aplicativo ou fluxo de trabalho em linguagem simples — eu rascunho os objetos, telas e automações, e então você revisa e publica.",
1828
+ description: "Descreva um aplicativo em linguagem simples — eu rascunho os objetos, telas e dados de exemplo, e então você revisa e publica.",
1479
1829
  },
1480
1830
  ask: {
1481
1831
  title: "Pergunte aos seus dados",
@@ -1484,17 +1834,22 @@ const pt = {
1484
1834
  editApp: {
1485
1835
  title: "Editando “{{app}}”",
1486
1836
  titleGeneric: "Editar este aplicativo",
1487
- description: "O que você quer mudar? Eu altero este aplicativo no lugar — adicionar um campo, objeto, visão ou automação, ou ajustar o que já existe.",
1837
+ description: "O que você quer mudar? Eu altero este aplicativo no lugar — adicionar um campo, objeto, visão ou painel, ou ajustar o que já existe.",
1488
1838
  },
1489
1839
  },
1490
1840
  clearConversation: "Limpar",
1491
1841
  sendHint: "para enviar",
1842
+ newlineHint: "para uma nova linha",
1492
1843
  agentActivity: "Atividade do agente",
1493
1844
  toolCompleted: "Concluído",
1494
1845
  toolRunning: "Em execução",
1495
1846
  toolAwaitingApproval: "Aguardando aprovação",
1496
1847
  toolFailed: "Falhou",
1497
1848
  toolDetailsHidden: "As entradas das ferramentas e os resultados brutos estão ocultos nesta visão.",
1849
+ toolDenyReason: "Rejeitado pelo operador no chat",
1850
+ builderHandoffTitle: "Criar no construtor",
1851
+ builderHandoffOpen: "Abrir no construtor →",
1852
+ builderHandoffSuperseded: "Há uma solicitação mais recente",
1498
1853
  copy: "Copiar",
1499
1854
  copied: "Copiado",
1500
1855
  regenerate: "Gerar novamente",
@@ -1509,7 +1864,7 @@ const pt = {
1509
1864
  publishOk: "Publicado — os objetos já estão ativos.",
1510
1865
  seedWarn: "Publicado, mas alguns dados de exemplo não puderam ser carregados.",
1511
1866
  openBuiltApp: "Abrir o aplicativo",
1512
- designBuiltApp: "Projetar no Studio",
1867
+ viewBuiltAppInStudio: "Ver no Studio",
1513
1868
  previewDraft: "Pré-visualizar",
1514
1869
  previewApp: "Pré-visualizar o aplicativo",
1515
1870
  resizeSplit: "Redimensionar a conversa e a pré-visualização",
@@ -1537,23 +1892,41 @@ const pt = {
1537
1892
  recentRecords: "Liste os 5 registros criados mais recentemente.",
1538
1893
  recordCounts: "Conte os registros de cada objeto.",
1539
1894
  },
1895
+ // cloud#1984 — these five chips are the maker's own recommendations, so
1896
+ // they may only ask for what ADR-0112 v1 BUILDS: objects, fields, views
1897
+ // (grid/kanban/calendar/gallery), pages, dashboards and sample data. No
1898
+ // wording that promises autonomous behaviour (alert / remind / notify /
1899
+ // automate / status workflow) — v1 has no flows, actions or schedules, and
1900
+ // the model silently degrades such a request into a board or a filtered
1901
+ // view, so the chip would promise an alert and deliver a page. REVERT to
1902
+ // the automation wording when ADR-0112 v2 re-adds flows and actions.
1540
1903
  metadataAssistant: {
1541
- buildCrm: "Crie um CRM de vendas — clientes, contatos e um funil de negócios que eu possa totalizar por etapa.",
1542
- buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, e um quadro por status.",
1543
- buildFlow: "Projete uma central de suporte — chamados com prioridade, um fluxo de status e vínculos com clientes.",
1544
- buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e visibilidade de estoque baixo.",
1545
- buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, etapas de entrevista e anotações.",
1904
+ buildCrm: "Crie um CRM de vendas — clientes, contatos e negócios com um campo de etapa, e um painel que some o valor por etapa.",
1905
+ buildApp: "Crie um controle de projetos — projetos, tarefas com responsáveis e prazos, um quadro por status e um calendário de prazos.",
1906
+ buildFlow: "Projete uma central de suporte — chamados com campos de prioridade e status, um quadro por status e vínculos com clientes.",
1907
+ buildInventory: "Crie um aplicativo de estoque — produtos, níveis de estoque, fornecedores e uma visão que filtre os itens abaixo do ponto de reposição.",
1908
+ buildRecruiting: "Crie um controle de candidaturas — candidatos, vagas abertas, um campo de etapa de entrevista e um quadro por etapa.",
1546
1909
  },
1547
1910
  generic: {
1548
1911
  help: "Com o que você pode me ajudar?",
1549
1912
  availableObjects: "Liste os objetos de dados disponíveis.",
1550
1913
  recentActivity: "Resuma minha atividade recente.",
1551
1914
  },
1915
+ // objectui#7709 — the edit-mode starters, shown when the maker is bound
1916
+ // to an EXISTING app (`?package=`). Same rule as the five above: they
1917
+ // may only ask for what ADR-0112 v1 BUILDS. The fourth chip used to be
1918
+ // `addAutomation` ("an approval, a status flow, or a notification") and
1919
+ // every capability it named is refused by v1 (cloud#1956 / PR #1970), so
1920
+ // it now asks for sample data — `seed` IS on v1's whitelist, and having
1921
+ // no data is what an existing app most often lacks. REVERT: when
1922
+ // ADR-0112 v2 re-adds flows and actions, THIS chip's automation wording
1923
+ // comes back as `addAutomation`; the retired string is pinned for every
1924
+ // pack in `packages/i18n/src/__tests__/makerEditChips-v1-scope-7709.test.ts`.
1552
1925
  editApp: {
1553
1926
  addField: "Adicione um campo a um dos objetos.",
1554
1927
  addObject: "Adicione um novo objeto e relacione-o a um existente.",
1555
1928
  addDashboard: "Adicione um painel para as métricas principais.",
1556
- addAutomation: "Adicione uma automação — uma aprovação, um fluxo de status ou uma notificação.",
1929
+ addSampleData: "Preencha os objetos existentes com registros de exemplo realistas para eu poder demonstrar o aplicativo.",
1557
1930
  },
1558
1931
  },
1559
1932
  changesTitle: "Confirmar alterações",
@@ -1618,6 +1991,7 @@ const pt = {
1618
1991
  collapse: "Recolher a conversa",
1619
1992
  maximize: "Abrir como página inteira",
1620
1993
  open: "Abrir o assistente",
1994
+ planAwaitingApproval: "Um plano proposto aguarda sua aprovação",
1621
1995
  },
1622
1996
  group: {
1623
1997
  today: "Hoje",
@@ -1628,13 +2002,17 @@ const pt = {
1628
2002
  },
1629
2003
  },
1630
2004
  title: "Console ObjectStack",
1631
- initializing: "Inicializando aplicação…",
1632
- loadingHint: "Configurar um novo ambiente pode levar alguns instantes.",
2005
+ initializing: "Abrindo seu console…",
2006
+ skipToContent: "Pular para o conteúdo",
1633
2007
  breadcrumb: {
1634
- dashboards: "Painéis",
1635
- pages: "Páginas",
1636
- reports: "Relatórios",
1637
2008
  system: "Sistema",
2009
+ marketplace: "Marketplace",
2010
+ settings: 'Configurações',
2011
+ apps: 'Aplicativos',
2012
+ profile: 'Perfil',
2013
+ approvals: 'Aprovações',
2014
+ aiApprovals: 'Aprovações de IA',
2015
+ auditLog: 'Log de auditoria',
1638
2016
  },
1639
2017
  // objectui#4024 — the single-namespace settings screen. Its sibling
1640
2018
  // `settingsHub` above already resolved through this pack; the view was the
@@ -1654,17 +2032,33 @@ const pt = {
1654
2032
  saveChanges: "Salvar alterações",
1655
2033
  unsavedCount: "{{count}} alterações não salvas",
1656
2034
  unsavedCount_one: "{{count}} alteração não salva",
2035
+ unsavedCount_many: "{{count}} de alterações não salvas",
1657
2036
  unsavedCount_other: "{{count}} alterações não salvas",
2037
+ fieldErrorsToast: "{{count}} configurações precisam de atenção: {{settings}}",
2038
+ fieldErrorsToast_one: "{{count}} configuração precisa de atenção: {{settings}}",
2039
+ fieldErrorsToast_many: "{{count}} de configurações precisam de atenção: {{settings}}",
2040
+ fieldErrorsToast_other: "{{count}} configurações precisam de atenção: {{settings}}",
1658
2041
  cryptoRefusalTitle: "Esta implantação não consegue criptografar segredos",
1659
2042
  cryptoRefusalSubjectSuffix: "está declarado como criptografado, portanto nada foi gravado.",
1660
2043
  cryptoRefusalNoSubject: "O valor declarado como criptografado foi recusado, portanto nada foi gravado.",
1661
2044
  cryptoRefusalToast: "Não é possível criptografar segredos: {{subject}}",
1662
2045
  cryptoRefusalToastNoSubject: "Não é possível criptografar segredos",
1663
- },
1664
- loadingSteps: {
1665
- connecting: "Conectando à fonte de dados",
1666
- loadingConfig: "Carregando configuração",
1667
- preparingWorkspace: "Preparando espaço de trabalho",
2046
+ sourceBadgeInherited: "Herdado de {{source}}",
2047
+ sourceBadgeOverrides: "Substitui {{source}}",
2048
+ resetToDefault: "Restaurar padrão",
2049
+ envLockBadge: "Bloqueado pelo ambiente",
2050
+ envLockBadgeTitle: "Fixado por uma variável de ambiente — não pode ser editado pela interface.",
2051
+ deprecatedBadge: "Obsoleto",
2052
+ deprecatedBadgeReplacedBy: "Obsoleto → {{replacedBy}}",
2053
+ unsupportedSpecifierType: "Tipo de configuração não suportado: {{type}}",
2054
+ },
2055
+ workspaceTimezonePrompt: {
2056
+ title: "Definir o fuso horário do sistema",
2057
+ description: "Este sistema ainda usa o fuso horário padrão da plataforma, {{current}}. O fuso horário do sistema define o que \"hoje\" significa nas fórmulas, como os relatórios agrupam por data e como datas e horas são exibidas, para todos no sistema. O fuso horário do seu navegador foi preenchido abaixo.",
2058
+ laterHint: "Você pode alterá-lo a qualquer momento na página de Configurações.",
2059
+ decline: "Manter o padrão",
2060
+ confirm: "Definir fuso horário",
2061
+ saved: "Fuso horário do sistema definido como {{zone}}",
1668
2062
  },
1669
2063
  error: {
1670
2064
  connectionFailed: "Não é possível conectar ao servidor",
@@ -1689,27 +2083,28 @@ const pt = {
1689
2083
  groups: {
1690
2084
  general: "Geral",
1691
2085
  navigation: "Navegação",
1692
- dataViews: "Visualizações de dados",
1693
2086
  aiChat: "Assistente de IA",
1694
- preferences: "Preferências",
1695
2087
  },
1696
2088
  openCommandPalette: "Abrir paleta de comandos",
1697
2089
  showShortcuts: "Mostrar atalhos de teclado",
1698
2090
  closeDialog: "Fechar diálogo / painel",
1699
2091
  toggleSidebar: "Alternar barra lateral",
1700
- focusSearch: "Focar na pesquisa",
1701
- createRecord: "Criar novo registro",
1702
- refreshData: "Atualizar dados",
1703
- editRecord: "Editar registro selecionado",
1704
2092
  newChat: "Nova conversa",
1705
2093
  toggleChatsList: "Alternar lista de conversas",
1706
- toggleDarkMode: "Alternar modo escuro",
2094
+ goHome: "Voltar ao início",
2095
+ },
2096
+ reportIndex: {
2097
+ title: "Relatórios",
2098
+ emptyTitle: "Nenhum relatório",
2099
+ emptyDescription: "Este aplicativo não tem relatórios que você possa abrir.",
1707
2100
  },
1708
2101
  commandPalette: {
1709
2102
  title: "Paleta de comandos",
1710
2103
  placeholder: "Digite um comando ou pesquise…",
1711
2104
  noResults: "Nenhum resultado encontrado.",
1712
2105
  objects: "Objetos",
2106
+ packages: "Pacotes",
2107
+ flows: "Fluxos",
1713
2108
  dashboards: "Painéis",
1714
2109
  pages: "Páginas",
1715
2110
  reports: "Relatórios",
@@ -1726,6 +2121,21 @@ const pt = {
1726
2121
  records: "Registros",
1727
2122
  recentRecords: "Vistos recentemente",
1728
2123
  },
2124
+ // objectui#9954 — see the `en` pack for what raises each case.
2125
+ readRate: {
2126
+ ratioTitle: 'Volume de leitura incomum neste sistema',
2127
+ ratio: 'São lidas {{ratio}} linhas para cada linha gravada. A plataforma sinaliza tudo acima de {{threshold}}. Nada está sendo limitado ou bloqueado; este é um relatório para que o padrão de leitura possa ser revisado.',
2128
+ noWritesTitle: 'Leituras sem nenhuma gravação neste sistema',
2129
+ noWrites: 'Linhas estão sendo lidas sem que nenhuma seja gravada, portanto a taxa de leitura não tem limite superior. Esta é a leitura mais grave. A plataforma sinaliza tudo acima de {{threshold}}. Nada está sendo limitado ou bloqueado; este é um relatório para que o padrão de leitura possa ser revisado.',
2130
+ },
2131
+ // objectui#10439 — see the `en` pack for what raises each case.
2132
+ storageUsage: {
2133
+ warningTitle: 'O armazenamento está quase cheio',
2134
+ warning: '{{used}} MB de {{limit}} MB usados. Envios e importações são pausados quando o armazenamento fica cheio.',
2135
+ blockedTitle: 'Armazenamento cheio: envios e importações estão pausados',
2136
+ blocked: '{{used}} MB de {{limit}} MB usados. Os dados existentes não são alterados, e a leitura, a exportação e a edição de registros individuais continuam funcionando.',
2137
+ upgrade: 'Faça upgrade para continuar',
2138
+ },
1729
2139
  errors: {
1730
2140
  somethingWentWrong: "Algo deu errado",
1731
2141
  unexpectedError: "Ocorreu um erro inesperado ao renderizar esta visualização.",
@@ -1756,22 +2166,27 @@ const pt = {
1756
2166
  viewNameInvalid: "Use letras minúsculas, números e sublinhados; comece com uma letra ou sublinhado.",
1757
2167
  systemViewReadonly: "Exibição do sistema definida no código — somente leitura.",
1758
2168
  cannotEditMetaView: "Esta exibição é integrada e definida no código — não é possível alterá-la.",
2169
+ resetView: "Redefinir exibição",
2170
+ resetViewTitle: "Retornar esta exibição à sua própria ordenação, filtros e larguras de coluna. Apenas as suas configurações mudam.",
1759
2171
  cannotDeleteMetaView: "Esta exibição é integrada e definida no código — não é possível excluí-la.",
1760
2172
  expandToPage: "Abrir como página inteira",
1761
2173
  objectNotFound: "Objeto não encontrado",
1762
2174
  objectNotFoundDescription: "O objeto \"{{objectName}}\" não existe na configuração atual.",
1763
2175
  objectNotFoundHint: "Verifique as configurações de navegação do seu aplicativo ou selecione um objeto diferente na barra lateral.",
2176
+ objectPackageDisabled: "O objeto \"{{objectName}}\" pertence a um pacote desativado e, por isso, não está sendo servido.",
1764
2177
  filterOrNotSavable: "Este filtro une as condições com OU, algo que uma visão salva ainda não consegue armazenar. Ele continua aplicado a esta lista — remova o agrupamento OU para salvá-lo na visão.",
1765
2178
  filterNestedNotSavable: "Este filtro usa grupos de condições aninhados, que uma visão salva não consegue armazenar. Transforme-o em uma única lista de condições para salvá-lo na visão.",
1766
2179
  allRecords: "Todos os registros",
1767
2180
  new: "Novo",
1768
2181
  configureView: "Configurar visualização",
1769
- toolbar: "Barra de ferramentas",
1770
2182
  toolbarEnabledCount: "{{count}} de {{total}} habilitados",
1771
2183
  searchFields: "Pesquisar campos…",
1772
2184
  title: "Título",
1773
2185
  viewType: "Tipo de visualização",
1774
2186
  recordCount: "{{count}} registros",
2187
+ recordCount_one: "{{count}} registro",
2188
+ recordCount_many: "{{count}} de registros",
2189
+ recordCount_other: "{{count}} registros",
1775
2190
  save: "Salvar",
1776
2191
  discard: "Descartar",
1777
2192
  createView: "Criar visualização",
@@ -1783,11 +2198,13 @@ const pt = {
1783
2198
  longitudeField: "Campo de longitude",
1784
2199
  imageField: "Campo de imagem",
1785
2200
  selectField: "Selecionar campo…",
1786
- groupBy: "Agrupar por",
1787
2201
  endDateField: "Campo de data de término",
1788
2202
  import: "Importar",
1789
2203
  importTitle: "Importar do CSV",
1790
2204
  importedToast: "{{count}} linha(s) importada(s).",
2205
+ importedToast_one: "{{count}} linha importada.",
2206
+ importedToast_many: "{{count}} de linhas importadas.",
2207
+ importedToast_other: "{{count}} linhas importadas.",
1791
2208
  importedWithSkipped: "{{ok}} linha(s) importada(s); {{skipped}} pulada(s).",
1792
2209
  createViewDesc: "Escolha um tipo de exibição e dê um nome a ela. Todas as configurações podem ser alteradas depois.",
1793
2210
  cancel: "Cancelar",
@@ -1796,6 +2213,9 @@ const pt = {
1796
2213
  deleteViewTitle: "Excluir exibição",
1797
2214
  deleteViewConfirm: "Excluir a exibição \"{{name}}\"? Isso não pode ser desfeito.",
1798
2215
  bulkDeleteConfirm: "Excluir {{count}} registros selecionados? Isso não pode ser desfeito.",
2216
+ bulkDeleteConfirm_one: "Excluir {{count}} registro selecionado? Isso não pode ser desfeito.",
2217
+ bulkDeleteConfirm_many: "Excluir {{count}} de registros selecionados? Isso não pode ser desfeito.",
2218
+ bulkDeleteConfirm_other: "Excluir {{count}} registros selecionados? Isso não pode ser desfeito.",
1799
2219
  duplicateViewName: "Já existe uma exibição com esse nome.",
1800
2220
  viewTypeGrid: "Grade",
1801
2221
  viewTypeGridDesc: "Tabela de registros no estilo planilha.",
@@ -1832,14 +2252,22 @@ const pt = {
1832
2252
  chartTypePie: "Gráfico de pizza",
1833
2253
  chartTypeArea: "Gráfico de área",
1834
2254
  chartTypeScatter: "Gráfico de dispersão",
1835
- xAxisField: "Campo do eixo X",
1836
- xAxisFieldHelp: "A dimensão categórica ou temporal.",
1837
- yAxisField: "Campo do eixo Y",
1838
- yAxisFieldHelp: "O campo numérico para agregar.",
2255
+ dataset: "Conjunto de dados",
2256
+ datasetHelp: "O gráfico lê seus valores deste conjunto de dados do objeto.",
2257
+ chartMeasure: "Medida",
2258
+ chartMeasureHelp: "A medida do conjunto de dados exibida no eixo de valores.",
2259
+ chartDimension: "Dimensão",
2260
+ chartDimensionHelp: "A dimensão do conjunto de dados pela qual os valores são agrupados (opcional).",
2261
+ viewTypeUnavailableDataset: "Este objeto não expõe nenhum conjunto de dados para o gráfico.",
2262
+ noDatasetMeasure: "Este conjunto de dados não declara nenhuma medida para o gráfico.",
1839
2263
  ufTabs: "Abas",
1840
2264
  ufAddField: "+ Adicionar campo de filtro…",
1841
2265
  ufShowAllRecords: "Mostrar aba \"Todos os registros\"",
1842
2266
  },
2267
+ runtimeDraft: {
2268
+ publishFailed: "Falha ao publicar",
2269
+ discardFailed: "Falha ao descartar o rascunho",
2270
+ },
1843
2271
  localeSwitcher: {
1844
2272
  label: "Idioma",
1845
2273
  },
@@ -1847,14 +2275,22 @@ const pt = {
1847
2275
  nav: {
1848
2276
  pinItem: "Fixar {{name}}",
1849
2277
  unpinItem: "Desafixar {{name}}",
1850
- dragToReorder: "Arrastar para reordenar",
1851
2278
  favorites: "Favoritos",
2279
+ launcherLabel: "Iniciador de aplicativos",
2280
+ menuLabel: "Navegação do aplicativo",
2281
+ menuEmpty: "Este aplicativo não tem entradas de navegação que você possa abrir.",
2282
+ itemMenu: "Mais ações para {{name}}",
2283
+ openInNewTab: "Abrir em nova aba",
2284
+ copyLink: "Copiar link",
2285
+ linkCopied: "Link copiado para a área de transferência",
2286
+ linkCopyFailed: "Falha ao copiar o link",
2287
+ design: "Projetar",
1852
2288
  },
1853
2289
  },
1854
2290
  auth: {
1855
2291
  setPassword: {
1856
2292
  title: "Definir uma senha de recuperação",
1857
- description: "Você entrou por logon único. Defina uma senha local para continuar conseguindo acessar este ambiente diretamente caso o SSO fique indisponível.",
2293
+ description: "Você entrou por logon único. Defina uma senha local para continuar conseguindo entrar diretamente caso o SSO fique indisponível.",
1858
2294
  email: "E-mail",
1859
2295
  newPassword: "Nova senha",
1860
2296
  confirmPassword: "Confirmar a senha",
@@ -1870,9 +2306,8 @@ const pt = {
1870
2306
  signingIn: "Entrando…",
1871
2307
  ssoHandoff: "Continuar para {{target}}",
1872
2308
  devAdminHint: {
1873
- title: "Instância de desenvolvimento",
1874
- body: "Entre com o administrador de desenvolvimento pré-configurado:",
1875
- dismiss: "Dispensar",
2309
+ title: "Instância de desenvolvimento local",
2310
+ signIn: "Entrar como administrador de desenvolvimento",
1876
2311
  },
1877
2312
  title: "Entre na sua conta",
1878
2313
  description: "Digite seu e-mail e senha para continuar",
@@ -1902,6 +2337,22 @@ const pt = {
1902
2337
  resendOtpCountdownText: "Reenviar em {seconds} s",
1903
2338
  usePhoneOtpText: "Entrar com código de verificação",
1904
2339
  usePasswordSignInText: "Entrar com senha em vez disso",
2340
+ socialButton: "Continuar com {provider}",
2341
+ orText: "ou continue com e-mail",
2342
+ ssoButton: "Entrar com SSO",
2343
+ ssoOnlyDescription: "Entre com o logon único da sua organização",
2344
+ usePasswordText: "Usar uma senha em vez disso",
2345
+ backToSsoText: "Voltar ao logon único",
2346
+ // objectui#12600 — the console login card's own header, the password
2347
+ // field's reveal toggle, and the footer's legal links.
2348
+ welcomeTitle: "Bem-vindo de volta",
2349
+ welcomeDescription: "Entre para continuar seu trabalho",
2350
+ showPasswordText: "Mostrar senha",
2351
+ hidePasswordText: "Ocultar senha",
2352
+ footer: {
2353
+ privacy: "Privacidade",
2354
+ terms: "Termos",
2355
+ },
1905
2356
  },
1906
2357
  register: {
1907
2358
  title: "Criar uma conta",
@@ -1920,8 +2371,12 @@ const pt = {
1920
2371
  submittingButton: "Criando conta…",
1921
2372
  hasAccountText: "Já tem uma conta?",
1922
2373
  signInText: "Entrar",
2374
+ socialButton: "Cadastre-se com {provider}",
2375
+ orText: "ou continue com e-mail",
1923
2376
  errors: {
1924
2377
  userExists: "Já existe uma conta com esse e-mail. Tente fazer login.",
2378
+ selfRegistrationClosed: "O cadastro por conta própria não está aberto neste sistema. Peça um convite a um administrador.",
2379
+ emailDomainNotAllowed: "O domínio deste e-mail não tem permissão para se cadastrar aqui. Use o e-mail da sua organização ou peça um convite a um administrador.",
1925
2380
  },
1926
2381
  verifyInbox: {
1927
2382
  title: "Verifique sua caixa de entrada",
@@ -1997,7 +2452,7 @@ const pt = {
1997
2452
  checkSpam: "Não recebeu o e-mail? Verifique sua pasta de spam ou entre em contato com o suporte.",
1998
2453
  or: "Ou",
1999
2454
  // objectui#3546 slice three.
2000
- resendUnavailable: "O envio de e-mails pode não estar configurado neste ambiente. Entre em contato com o suporte se o problema persistir.",
2455
+ resendUnavailable: "O envio de e-mails pode não estar configurado neste sistema. Entre em contato com o suporte se o problema persistir.",
2001
2456
  },
2002
2457
  setup: {
2003
2458
  welcomeTitle: "Bem-vindo ao ObjectStack",
@@ -2041,7 +2496,7 @@ const pt = {
2041
2496
  disabledDescription: "Esta implantação não tem a autorização de dispositivo habilitada, por isso este dispositivo não pode ser aprovado aqui.",
2042
2497
  },
2043
2498
  shell: {
2044
- tenantHostHint: "Você está fazendo login neste espaço de trabalho",
2499
+ tenantHostHint: "Você está fazendo login neste sistema",
2045
2500
  },
2046
2501
  layout: {
2047
2502
  headline: "Crie aplicativos de negócios poderosos, com mais rapidez.",
@@ -2051,6 +2506,7 @@ const pt = {
2051
2506
  signOut: "Sair da conta",
2052
2507
  password: {
2053
2508
  title: "Sua senha expirou",
2509
+ resetTitle: "Você precisa alterar sua senha",
2054
2510
  fallbackMessage: "Defina uma nova senha para continuar.",
2055
2511
  current: "Senha atual",
2056
2512
  next: "Nova senha",
@@ -2076,6 +2532,11 @@ const pt = {
2076
2532
  verifying: "Verificando…",
2077
2533
  invalidCode: "Código inválido. Tente novamente.",
2078
2534
  },
2535
+ impersonation: {
2536
+ passwordTitle: "{{user}} precisa alterar a senha",
2537
+ mfaTitle: "{{user}} precisa configurar a autenticação em duas etapas",
2538
+ body: "Você está personificando {{user}}, e somente essa pessoa pode fazer isso. Pare a personificação para voltar à sua própria conta.",
2539
+ },
2079
2540
  },
2080
2541
  },
2081
2542
  // objectui#3546 slice three — the /oauth/consent screen.
@@ -2084,12 +2545,17 @@ const pt = {
2084
2545
  title: "{{appName}} quer acessar sua conta",
2085
2546
  request: "{{appName}} está solicitando permissão{{suffix}}.",
2086
2547
  unknownApp: "um aplicativo",
2548
+ unidentified: "Não foi possível identificar este aplicativo.",
2549
+ clientId: "ID do cliente",
2087
2550
  willAllow: "Este aplicativo poderá:",
2088
2551
  scope: {
2089
2552
  openid: "Confirmar sua identidade",
2090
2553
  profile: "Ler seu perfil básico (nome, foto)",
2091
2554
  email: "Ler seu endereço de e-mail",
2092
2555
  offlineAccess: "Manter a sessão ativa (renovar o acesso)",
2556
+ dataRead: "Ler registros (dentro das suas próprias permissões)",
2557
+ dataWrite: "Criar, alterar e excluir registros (dentro das suas próprias permissões)",
2558
+ actionsExecute: "Executar ações em seu nome (dentro das suas próprias permissões)",
2093
2559
  },
2094
2560
  deny: "Negar",
2095
2561
  authorize: "Autorizar",
@@ -2120,11 +2586,20 @@ const pt = {
2120
2586
  role: "Função",
2121
2587
  save: "Salvar alterações",
2122
2588
  },
2589
+ language: {
2590
+ title: "Idioma",
2591
+ description: "O idioma usado nas notificações e mensagens enviadas para você. O idioma da interface é escolhido separadamente, no menu do globo.",
2592
+ label: "Idioma preferido",
2593
+ systemDefault: "Usar o padrão da implantação",
2594
+ save: "Salvar",
2595
+ saved: "Preferência de idioma atualizada.",
2596
+ readOnly: "O idioma da sua conta é gerenciado pelo seu administrador.",
2597
+ },
2123
2598
  password: {
2124
2599
  changeTitle: "Alterar senha",
2125
2600
  setTitle: "Definir senha local",
2126
- changeDescription: "Atualize a senha que você usa para entrar neste ambiente.",
2127
- setDescription: "Você entrou via logon único (SSO). Defina uma senha local para também poder entrar com e-mail e senha neste ambiente.",
2601
+ changeDescription: "Atualize a senha que você usa para entrar.",
2602
+ setDescription: "Você entrou via logon único (SSO). Defina uma senha local para também poder entrar com e-mail e senha.",
2128
2603
  current: "Senha atual",
2129
2604
  new: "Nova senha",
2130
2605
  password: "Senha",
@@ -2133,7 +2608,7 @@ const pt = {
2133
2608
  mismatch: "As senhas não coincidem",
2134
2609
  enterCurrent: "Digite sua senha atual",
2135
2610
  changed: "Senha alterada.",
2136
- localSet: "Senha local definida. Agora você pode entrar com e-mail e senha neste ambiente.",
2611
+ localSet: "Senha local definida. Agora você pode entrar com e-mail e senha.",
2137
2612
  changeAction: "Alterar senha",
2138
2613
  setAction: "Definir senha",
2139
2614
  },
@@ -2148,22 +2623,21 @@ const pt = {
2148
2623
  unknown: "Ocorreu um erro inesperado.",
2149
2624
  },
2150
2625
  workspace: {
2151
- label: "Espaços de trabalho",
2152
- default: "Meu espaço de trabalho",
2153
- switch: "Trocar de espaço de trabalho",
2154
- create: "Criar espaço de trabalho",
2155
- createTitle: "Criar um espaço de trabalho",
2156
- createDescription: "Um espaço de trabalho é um espaço compartilhado para colaboração da equipe.",
2157
- createButton: "Criar espaço de trabalho",
2158
- nameLabel: "Nome do espaço de trabalho",
2626
+ label: "Organizações",
2627
+ default: "Minha organização",
2628
+ switch: "Trocar de organização",
2629
+ createTitle: "Criar uma organização",
2630
+ createDescription: "Uma organização é um espaço compartilhado para colaboração da equipe.",
2631
+ createButton: "Criar organização",
2632
+ nameLabel: "Nome da organização",
2159
2633
  namePlaceholder: "p.ex., Acme Inc",
2160
2634
  slugLabel: "Slug de URL",
2161
2635
  slugHint: "Usado em URLs. Apenas letras minúsculas, números e hifens.",
2162
2636
  invite: "Convidar membro",
2163
2637
  members: "Membros",
2164
- settings: "Configurações do espaço de trabalho",
2638
+ settings: "Configurações da organização",
2165
2639
  multiOrgDisabled: "A criação de novas organizações está desativada nesta instância.",
2166
- createFailed: 'Falha ao criar o espaço de trabalho',
2640
+ createFailed: 'Falha ao criar a organização',
2167
2641
  },
2168
2642
  help: {
2169
2643
  onThisPage: "Nesta página",
@@ -2171,12 +2645,17 @@ const pt = {
2171
2645
  appDocs: 'Documentação deste app',
2172
2646
  allDocs: 'Toda a documentação',
2173
2647
  onlineDocs: 'Documentação online',
2648
+ loadingDocumentation: 'Carregando documentação',
2649
+ about: 'Sobre',
2650
+ aboutTitle: 'Sobre este console',
2651
+ aboutDescription: 'A build a partir da qual este console foi compilado.',
2652
+ aboutBuild: 'Build do console',
2653
+ aboutBuildUnknown: 'Build desconhecida (nenhuma versão foi definida ao compilar este console)',
2174
2654
  },
2175
2655
  sidebar: {
2176
2656
  packageManagement: "Gerenciamento de pacotes",
2177
2657
  searchNavigation: "Pesquisar na navegação…",
2178
2658
  settings: "Configurações",
2179
- help: "Ajuda",
2180
2659
  helpTooltip: "Ajuda e documentação",
2181
2660
  activityFeed: "Feed de atividades",
2182
2661
  notifications: "Notificações",
@@ -2186,18 +2665,16 @@ const pt = {
2186
2665
  area: "Área",
2187
2666
  scope: "Escopo",
2188
2667
  recent: "Recente",
2189
- favorites: "Favoritos",
2190
2668
  starred: "Favoritos",
2191
2669
  removeFromFavorites: "Remover {{name}} dos favoritos",
2670
+ allReports: "Todos os relatórios",
2192
2671
  },
2193
2672
  topbar: {
2194
2673
  openAssistant: "Abrir o assistente {{name}}",
2195
2674
  offline: "Off-line",
2196
2675
  usersOnline: "Usuários on-line no momento",
2197
2676
  switchView: "Trocar de visão",
2198
- switchObject: "Trocar de objeto",
2199
2677
  connection: {
2200
- connected: "Conectado",
2201
2678
  connecting: "Conectando…",
2202
2679
  reconnecting: "Reconectando…",
2203
2680
  disconnected: "Desconectado",
@@ -2210,23 +2687,22 @@ const pt = {
2210
2687
  },
2211
2688
  aiAssistant: "Assistente de IA",
2212
2689
  designInStudio: "Projetar no Studio",
2690
+ editApp: "Editar aplicativo",
2213
2691
  },
2214
2692
  home: {
2215
2693
  build: {
2216
2694
  title: "Criar um aplicativo",
2217
- subtitle: "Comece do zero — projete objetos, formulários, automações e interfaces.",
2218
- noCapability: "A criação de aplicativos não está disponível neste espaço de trabalho — ela exige a permissão “Gerenciar metadados”, que sua conta não possui.",
2695
+ noCapability: "A criação de aplicativos não está disponível neste sistema — ela exige a permissão “Gerenciar metadados”, que sua conta não possui.",
2219
2696
  },
2220
2697
  template: {
2221
2698
  title: "Comece com um modelo",
2222
- subtitle: "Instale um aplicativo modelo do marketplace e personalize-o.",
2223
2699
  marketplaceDisabled: "Este runtime não tem um marketplace de aplicativos configurado, portanto não há modelos para instalar aqui.",
2224
2700
  },
2225
2701
  welcomeAdminDescription: "Descreva seu negócio em uma frase — a IA gera os objetos, as telas, as APIs e as ferramentas do agente. Ou configure você mesmo pelo menu à esquerda.",
2226
2702
  welcomeAdminDescriptionNoBuild: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda. Quando houver dados, o assistente de IA poderá ajudar a explorá-los.",
2227
2703
  welcomeAdminDescriptionNoAi: "Configure seu primeiro aplicativo pelo menu de Administração à esquerda.",
2228
2704
  noAppsTitle: "Ainda não há aplicativos",
2229
- noAppsDescription: "Seu workspace está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui.",
2705
+ noAppsDescription: "O sistema está sendo preparado — os aplicativos que seu administrador compartilhar aparecerão aqui.",
2230
2706
  buildWithAI: "Criar com IA",
2231
2707
  askAI: "Perguntar à IA",
2232
2708
  recoveryReminder: {
@@ -2235,7 +2711,16 @@ const pt = {
2235
2711
  dismiss: "Dispensar",
2236
2712
  },
2237
2713
  pendingDrafts: {
2238
- message: "Você tem {{count}} alteração(ões) não publicada(s) — publique para ativá-las.",
2714
+ // objectui#12602 — the drafts row in Home's "My work" section: the
2715
+ // count, then the first draft names joined by `nameSeparator`, in
2716
+ // their package when they share one.
2717
+ title: "{{count}} alteração(ões) não publicada(s)",
2718
+ title_one: "{{count}} alteração não publicada",
2719
+ title_many: "{{count}} alterações não publicadas",
2720
+ title_other: "{{count}} alterações não publicadas",
2721
+ inPackage: "{{names}} aguardando publicação em {{package}}",
2722
+ waiting: "{{names}} aguardando publicação",
2723
+ nameSeparator: ", ",
2239
2724
  cta: "Publicar",
2240
2725
  publishing: "Publicando…",
2241
2726
  published: "Publicado! Suas alterações estão ativas.",
@@ -2250,20 +2735,24 @@ const pt = {
2250
2735
  capabilityWarn: "Verificação de autoria: {{count}} referência(s) de capacidade não apontam para nada.",
2251
2736
  },
2252
2737
  title: "Início",
2253
- subtitle: "Painel do seu espaço de trabalho",
2254
2738
  nav: "Início",
2255
2739
  allApps: "Todas as aplicações",
2256
2740
  yourApps: "As suas aplicações",
2257
2741
  showMoreApps: "Mais",
2258
2742
  showLess: "Mostrar menos",
2259
2743
  continueEmpty: "Os itens que abrir aparecerão aqui.",
2260
- actionCenter: {
2261
- title: "Requer a sua atenção",
2262
- empty: "Está tudo em dia",
2744
+ // objectui#12602 — Home's "My work" section: its heading, the link to the
2745
+ // full inbox, each column's title, "view all" link and empty line.
2746
+ myWork: {
2747
+ title: "Meu trabalho",
2748
+ openInbox: "Abrir caixa de entrada",
2749
+ viewAll: "Ver tudo",
2750
+ approvals: "Aguardando aprovação",
2751
+ approvalsEmpty: "Nada aguardando sua aprovação",
2752
+ notifications: "Notificações",
2753
+ notificationsEmpty: "Nenhuma notificação não lida",
2263
2754
  },
2264
- loading: "Carregando espaço de trabalho…",
2265
- recent: "Recentes",
2266
- starred: "Favoritos",
2755
+ loading: "Carregando…",
2267
2756
  welcome: "Bem-vindo ao ObjectUI",
2268
2757
  welcomeDescription: "Comece criando sua primeira aplicação ou configurando as preferências do sistema.",
2269
2758
  createFirstApp: "Crie sua primeira app",
@@ -2271,12 +2760,10 @@ const pt = {
2271
2760
  browseMarketplace: "Explorar marketplace de apps",
2272
2761
  quickActions: {
2273
2762
  title: "Ações rápidas",
2274
- createApp: "Criar app",
2275
- createAppDesc: "Comece com uma nova aplicação",
2276
2763
  manageObjects: "Gerenciar objetos",
2277
2764
  manageObjectsDesc: "Configure modelos de dados",
2278
2765
  systemSettings: "Configurações do sistema",
2279
- systemSettingsDesc: "Configure seu espaço de trabalho",
2766
+ systemSettingsDesc: "Configure seu sistema",
2280
2767
  },
2281
2768
  appCard: {
2282
2769
  noDescription: "Sem descrição",
@@ -2286,20 +2773,30 @@ const pt = {
2286
2773
  greetingAfternoon: "Boa tarde",
2287
2774
  greetingEvening: "Boa noite",
2288
2775
  greetingNight: "Turno da noite",
2289
- heroTagline: "Continue de onde parou ou descubra algo novo.",
2776
+ greetingSeparator: ", ",
2777
+ greetingEnd: ".",
2778
+ search: "Pesquisar aplicativos, registros, páginas…",
2779
+ summary: {
2780
+ approvals: "Hoje você tem {{count}} aprovações pendentes",
2781
+ approvals_one: "Hoje você tem {{count}} aprovação pendente",
2782
+ approvals_many: "Hoje você tem {{count}} aprovações pendentes",
2783
+ approvals_other: "Hoje você tem {{count}} aprovações pendentes",
2784
+ none: "Nada aguardando você hoje",
2785
+ },
2786
+ addApp: "Adicionar aplicativo",
2787
+ appOpened: "{{time}}",
2290
2788
  open: "Abrir",
2291
- stats: {
2292
- apps: "Aplicativos",
2293
- starred: "Favoritos",
2294
- recent: "Recentes",
2295
- },
2296
2789
  recentApps: {
2297
2790
  title: "Abertos recentemente",
2298
2791
  itemType: {
2299
2792
  object: "Objeto",
2300
2793
  dashboard: "Painel",
2301
2794
  page: "Página",
2795
+ report: "Relatório",
2796
+ package: "Pacote",
2797
+ view: "Visualização de lista",
2302
2798
  record: "Registro",
2799
+ metadata: "Metadados",
2303
2800
  },
2304
2801
  },
2305
2802
  starredApps: {
@@ -2321,7 +2818,6 @@ const pt = {
2321
2818
  organizations: "Organizações",
2322
2819
  roles: "Perfis",
2323
2820
  configuration: "Configuração",
2324
- createApp: "Criar aplicativo",
2325
2821
  administration: "Administração",
2326
2822
  datasources: "Fontes de dados",
2327
2823
  documentation: "Documentação",
@@ -2336,16 +2832,23 @@ const pt = {
2336
2832
  manageAllApps: "Gerenciar todos os aplicativos",
2337
2833
  systemConsole: "Console do sistema",
2338
2834
  noAppsConfigured: "Nenhum aplicativo configurado",
2835
+ allApps: "Todos os aplicativos",
2836
+ editAppInStudio: "Editar {{app}} no Studio",
2837
+ backToHome: "Voltar ao início",
2838
+ settings: "Configurações",
2839
+ productHome: "Início do {{product}}",
2339
2840
  },
2340
2841
  activityFeed: {
2341
2842
  title: "Atividade recente",
2342
2843
  filter: "Filtrar",
2343
2844
  empty: "Sem atividade recente",
2845
+ accessDenied: "Você não tem permissão para ver a atividade.",
2344
2846
  ariaLabel: "Feed de atividade",
2345
2847
  typeCreate: "Criar",
2346
2848
  typeUpdate: "Atualizar",
2347
2849
  typeDelete: "Excluir",
2348
2850
  typeComment: "Comentário",
2851
+ typeSystem: "Sistema",
2349
2852
  relativeJustNow: "agora mesmo",
2350
2853
  relativeSecondsAgo: "há {{count}}s",
2351
2854
  relativeMinutesAgo: "há {{count}}m",
@@ -2367,8 +2870,13 @@ const pt = {
2367
2870
  placeholder: "Pesquisar objetos, painéis, páginas, relatórios…",
2368
2871
  inputAriaLabel: "Pesquisar objetos, painéis, páginas, relatórios",
2369
2872
  resultsCount: "{{count}} resultado para \"{{query}}\"",
2370
- resultsCountPlural: "{{count}} resultados para \"{{query}}\"",
2873
+ resultsCount_one: "{{count}} resultado para \"{{query}}\"",
2874
+ resultsCount_many: "{{count}} de resultados para \"{{query}}\"",
2875
+ resultsCount_other: "{{count}} resultados para \"{{query}}\"",
2371
2876
  itemsAvailable: "{{count}} itens disponíveis",
2877
+ itemsAvailable_one: "{{count}} item disponível",
2878
+ itemsAvailable_many: "{{count}} de itens disponíveis",
2879
+ itemsAvailable_other: "{{count}} itens disponíveis",
2372
2880
  noResults: "Nenhum resultado encontrado",
2373
2881
  noResultsHint: "Tente ajustar seus termos de pesquisa",
2374
2882
  typeObjects: "Objetos",
@@ -2393,26 +2901,38 @@ const pt = {
2393
2901
  noAppsConfigured: "Nenhum aplicativo configurado",
2394
2902
  noAppsConfiguredDescription: "Nenhum aplicativo está registrado. Crie seu primeiro aplicativo ou visite as configurações do sistema.",
2395
2903
  appNotAvailable: "Aplicativo indisponível",
2396
- appNotAvailableDescription: "Este aplicativo ainda não está disponível — a publicação pode estar em andamento. Tente novamente em instantes.",
2904
+ appNotAvailableDescription: "Este aplicativo não está disponível — tente novamente em instantes.",
2905
+ appNotFound: "Não é possível abrir este aplicativo",
2906
+ appNotFoundDescription: "O servidor não retornou este aplicativo para a sua conta.",
2907
+ appUnreachable: "Não foi possível acessar o servidor",
2908
+ appUnreachableDescription: "Não foi possível verificar este aplicativo. Tente novamente em instantes.",
2397
2909
  appAccessDenied: "Você não tem acesso a este aplicativo",
2398
2910
  appAccessDeniedDescription: "Este aplicativo existe, mas sua conta não tem autorização para abri-lo. Peça acesso a um administrador.",
2399
2911
  appAccessDeniedHome: "Voltar ao início",
2912
+ appNothingAvailable: "Ainda não há nada disponível para você em {{app}}",
2913
+ appNothingAvailableDescription: "Este aplicativo não tem páginas que sua conta possa abrir. Peça acesso a um administrador.",
2914
+ appNothingAvailableGrantDescription: "Este aplicativo não tem páginas que sua conta possa abrir. Você pode conceder acesso na configuração.",
2915
+ openSetup: "Abrir a configuração",
2400
2916
  createFirstApp: "Criar primeiro aplicativo",
2401
2917
  systemSettings: "Configurações do sistema",
2402
2918
  back: "Voltar",
2403
2919
  recordNotFound: "Registro não encontrado",
2404
2920
  recordNotFoundDescription: "O registro que você está procurando não existe ou pode ter sido excluído.",
2921
+ recordAccessDenied: "Você não tem acesso aos registros de {{object}}",
2922
+ recordAccessDeniedDescription: "Você não tem permissão para ver registros deste tipo. Contate seu administrador se acha que deveria ter acesso.",
2923
+ recordLoadFailed: "Não foi possível carregar este registro",
2924
+ recordLoadFailedDescription: "Algo deu errado ao carregá-lo. Verifique sua conexão e tente novamente.",
2405
2925
  },
2406
2926
  actionDialog: {
2407
2927
  title: "Parâmetros de ação",
2408
2928
  description: "Insira as informações necessárias para continuar.",
2409
2929
  selectPlaceholder: "Selecionar {{label}}",
2410
2930
  requiredError: "{{label}} é obrigatório",
2931
+ unresolvedParam: 'Não é possível exibir este parâmetro: o campo em que ele se baseia não está nos metadados do objeto, portanto o controle necessário não pode ser construído. Peça a um administrador para corrigir a definição da ação.',
2932
+ carryOverHint: 'Mantido sem alterações (somente leitura)',
2411
2933
  cancel: "Cancelar",
2412
2934
  confirm: "Confirmar",
2413
2935
  uploading: "Enviando…",
2414
- defaultActionTitle: "Ação",
2415
- ok: "OK",
2416
2936
  lookupPlaceholder: "ID do registro para {{label}}",
2417
2937
  lookupHelpText: "Este parâmetro não tem um objeto de referência configurado, portanto o seletor de registros não está disponível. Insira um ID de registro ou peça a um administrador para corrigir o parâmetro da ação.",
2418
2938
  },
@@ -2421,11 +2941,6 @@ const pt = {
2421
2941
  confirm: "Continuar",
2422
2942
  cancel: "Cancelar",
2423
2943
  },
2424
- rowAction: {
2425
- openMenu: "Abrir menu",
2426
- edit: "Editar",
2427
- delete: "Excluir",
2428
- },
2429
2944
  navigationSync: {
2430
2945
  addedPage: "Navegação atualizada: página \"{{name}}\" adicionada",
2431
2946
  addedDashboard: "Navegação atualizada: painel \"{{name}}\" adicionado",
@@ -2439,13 +2954,20 @@ const pt = {
2439
2954
  updateFailed: "Não foi possível atualizar a navegação",
2440
2955
  },
2441
2956
  objectActions: {
2442
- resetPackageSetConfirm: "Este conjunto de permissões acompanha um pacote instalado e não pode ser removido. Excluí-lo o redefine para a versão original do pacote e descarta suas personalizações neste ambiente. Continuar?",
2443
- resetPackageSetSuccess: "Conjunto de permissões redefinido para a versão original do pacote",
2444
2957
  deleteSuccess: "{{label}} excluído com sucesso",
2445
2958
  deleteFailed: "Não foi possível excluir {{label}}",
2446
2959
  noRecordId: "Nenhum ID de registro fornecido",
2447
2960
  deleteConfirm: "Excluir este registro?",
2961
+ deleteConfirmTitle: "Excluir {{label}} \"{{name}}\"?",
2962
+ bulkDeleteConfirmTitle: "Excluir {{count}} registros de {{label}}?",
2963
+ bulkDeleteConfirmTitle_one: "Excluir {{count}} registro de {{label}}?",
2964
+ bulkDeleteConfirmTitle_many: "Excluir {{count}} de registros de {{label}}?",
2965
+ bulkDeleteConfirmTitle_other: "Excluir {{count}} registros de {{label}}?",
2966
+ deleteConfirmButton: "Excluir",
2448
2967
  bulkDeleteSuccess: "{{count}} registros de {{label}} excluídos",
2968
+ bulkDeleteSuccess_one: "{{count}} registro de {{label}} excluído",
2969
+ bulkDeleteSuccess_many: "{{count}} de registros de {{label}} excluídos",
2970
+ bulkDeleteSuccess_other: "{{count}} registros de {{label}} excluídos",
2449
2971
  bulkDeletePartial: "{{succeeded}} excluídos, {{failed}} com falha",
2450
2972
  },
2451
2973
  objectViewActions: {
@@ -2457,15 +2979,6 @@ const pt = {
2457
2979
  exportFailed: "Falha na exportação: {{message}}",
2458
2980
  forecastSoon: "A exibição de previsão está chegando em breve",
2459
2981
  },
2460
- recordDetail: {
2461
- viewersTooltip: "Usuários visualizando este registro agora",
2462
- },
2463
- cellRender: {
2464
- empty: "Vazio",
2465
- yes: "Sim",
2466
- no: "Não",
2467
- systemFields: "Sistema",
2468
- },
2469
2982
  user: {
2470
2983
  profile: "Perfil",
2471
2984
  settings: "Configurações",
@@ -2487,6 +3000,7 @@ const pt = {
2487
3000
  loading: "Carregando…",
2488
3001
  failedToLoad: "Falha ao carregar a matriz: {{message}}",
2489
3002
  needsAcross: "O relatório de matriz requer pelo menos um campo `groupingsAcross`.",
3003
+ forbiddenMessage: "Você não tem permissão para ver os dados deste relatório.",
2490
3004
  aggregate: {
2491
3005
  count: "Contar",
2492
3006
  countDistinct: "Contar distintos",
@@ -2501,18 +3015,18 @@ const pt = {
2501
3015
  },
2502
3016
  },
2503
3017
  organizations: {
2504
- create: "Criar workspace",
2505
- mine: "Meus workspaces",
2506
- title: "Workspaces",
2507
- heading: "Seus workspaces",
2508
- subtitle: "Selecione um workspace para continuar ou crie um novo.",
2509
- searchPlaceholder: "Pesquisar um workspace",
2510
- new: "Novo workspace",
2511
- current: "Workspace atual",
3018
+ create: "Criar organização",
3019
+ mine: "Minhas organizações",
3020
+ title: "Organizações",
3021
+ heading: "Suas organizações",
3022
+ subtitle: "Selecione uma organização para continuar ou crie uma nova.",
3023
+ searchPlaceholder: "Pesquisar uma organização",
3024
+ new: "Nova organização",
3025
+ current: "Organização atual",
2512
3026
  manage: "Gerenciar",
2513
- emptyTitle: "Nenhum workspace ainda",
2514
- emptyDescription: "Crie seu primeiro workspace para começar.",
2515
- noMatches: "Nenhum workspace corresponde à sua pesquisa.",
3027
+ emptyTitle: "Nenhuma organização ainda",
3028
+ emptyDescription: "Crie sua primeira organização para começar.",
3029
+ noMatches: "Nenhuma organização corresponde à sua pesquisa.",
2516
3030
  },
2517
3031
  organization: {
2518
3032
  roles: {
@@ -2597,6 +3111,7 @@ const pt = {
2597
3111
  readOnlyNote: "Somente proprietários podem alterar as configurações.",
2598
3112
  nameLabel: "Nome da organização",
2599
3113
  slugLabel: "Slug",
3114
+ slugLockedNote: "Esta organização tem ambientes ativos, por isso o slug não pode ser alterado aqui: renomeá-la também move os subdomínios deles.",
2600
3115
  logoLabel: "Logo",
2601
3116
  logoUpload: "Enviar",
2602
3117
  logoReplace: "Substituir",
@@ -2655,18 +3170,43 @@ const pt = {
2655
3170
  regionLabel: "Notificações",
2656
3171
  groupCount: "{{count}} notificações",
2657
3172
  groupUnread: "{{count}} não lidas",
3173
+ groupUnread_one: "{{count}} não lida",
3174
+ groupUnread_many: "{{count}} não lidas",
3175
+ groupUnread_other: "{{count}} não lidas",
2658
3176
  groupMarkRead: "Marcar como lidas",
2659
3177
  groupMarkReadTitle: "Marcar todas deste tipo como lidas",
2660
3178
  empty: "Sem notificações",
2661
3179
  markAllRead: "Marcar tudo como lido",
2662
3180
  viewAll: "Ver todas as notificações",
2663
3181
  approvalsPending: "{{count}} aprovações pendentes",
3182
+ approvalsPending_one: "{{count}} aprovação pendente",
3183
+ approvalsPending_many: "{{count}} de aprovações pendentes",
3184
+ approvalsPending_other: "{{count}} aprovações pendentes",
2664
3185
  viewApprovals: "Ver aprovações",
2665
3186
  noPendingApprovals: "Sem aprovações pendentes",
2666
3187
  openApprovalsInbox: "Abrir caixa de aprovações",
2667
3188
  badgeTotal: "{{total}} no total",
2668
- badgeNotifications: "{{unread}} notificações",
2669
- badgeApprovals: "{{approvals}} aprovações pendentes",
3189
+ badgeNotifications: "{{count}} notificações",
3190
+ badgeNotifications_one: "{{count}} notificação",
3191
+ badgeNotifications_many: "{{count}} de notificações",
3192
+ badgeNotifications_other: "{{count}} notificações",
3193
+ badgeApprovals: "{{count}} aprovações pendentes",
3194
+ badgeApprovals_one: "{{count}} aprovação pendente",
3195
+ badgeApprovals_many: "{{count}} de aprovações pendentes",
3196
+ badgeApprovals_other: "{{count}} aprovações pendentes",
3197
+ arrivalMany: "{{count}} novas mensagens",
3198
+ arrivalMany_one: "{{count}} nova mensagem",
3199
+ arrivalMany_many: "{{count}} de novas mensagens",
3200
+ arrivalMany_other: "{{count}} novas mensagens",
3201
+ arrivalRepeats: "{{count}} novas mensagens sobre este tópico",
3202
+ arrivalRepeats_one: "{{count}} nova mensagem sobre este tópico",
3203
+ arrivalRepeats_many: "{{count}} de novas mensagens sobre este tópico",
3204
+ arrivalRepeats_other: "{{count}} novas mensagens sobre este tópico",
3205
+ arrivalOpen: "Ver",
3206
+ toastEnabled: "Avisos no aplicativo",
3207
+ desktopEnabled: "Notificações da área de trabalho",
3208
+ desktopBlocked: "Bloqueado. Permita notificações deste site nas configurações do navegador.",
3209
+ desktopUnsupported: "Este navegador não oferece suporte a notificações da área de trabalho.",
2670
3210
  emptyUnread: "Tudo lido",
2671
3211
  filterUnread: "Não lidos",
2672
3212
  filterAll: "Todos",
@@ -2680,12 +3220,14 @@ const pt = {
2680
3220
  thankYouTitle: "Obrigado!",
2681
3221
  thankYouMessage: "Seu envio foi recebido com sucesso.",
2682
3222
  redirecting: "Redirecionando em {{seconds}} segundo(s)…",
3223
+ redirectPending: "Redirecionando…",
2683
3224
  unavailableTitle: "Formulário indisponível",
2684
3225
  unavailableDescription: "Nenhum formulário público está disponível nesta URL. Certifique-se de que a exibição subjacente tenha o compartilhamento anônimo ativado.",
2685
3226
  tryDemo: "Experimentar demo",
2686
3227
  retry: "Tentar novamente",
2687
3228
  loading: "Carregando formulário…",
2688
3229
  requiredHint: "* Campo obrigatório",
3230
+ requiredFields: "Campos obrigatórios: {{fields}}",
2689
3231
  consentLabelDefault: "Aceito a política de privacidade e consinto com o processamento dos meus dados para esta solicitação.",
2690
3232
  consentLink: "Política de privacidade",
2691
3233
  consentRequired: "Por favor, aceite a política de privacidade para continuar.",
@@ -2698,10 +3240,10 @@ const pt = {
2698
3240
  body: 'A superfície MCP está desligada (OS_MCP_SERVER_ENABLED=false). Peça ao operador para reativá-la.',
2699
3241
  },
2700
3242
  url: {
2701
- title: 'Endpoint MCP deste ambiente',
3243
+ title: 'Endpoint MCP deste sistema',
2702
3244
  body: 'Qualquer cliente de IA compatível com MCP conecta-se com esta URL. A identidade é autosserviço: a implantação é seu próprio servidor de autorização OAuth 2.1 — você entra como você mesmo e cada chamada corre sob suas permissões e segurança em nível de linha.',
2703
3245
  downloadSkill: 'Baixar SKILL.md',
2704
- skillHint: 'A skill portátil do agente: ensina qualquer agente compatível a trabalhar com este ambiente.',
3246
+ skillHint: 'A skill portátil do agente: ensina qualquer agente compatível a trabalhar com este sistema.',
2705
3247
  },
2706
3248
  claude: {
2707
3249
  body: 'Configurações → Conectores → Adicionar conector personalizado, cole esta URL e faça login no navegador.',
@@ -2736,18 +3278,86 @@ const pt = {
2736
3278
  noImportableFields: "Esse objeto não tem campos importáveis.",
2737
3279
  schemaReadFailed: "Não foi possível ler o esquema do objeto.",
2738
3280
  imported: "{{count}} linha(s) importada(s) para {{object}}.",
3281
+ imported_one: "{{count}} linha importada para {{object}}.",
3282
+ imported_many: "{{count}} de linhas importadas para {{object}}.",
3283
+ imported_other: "{{count}} linhas importadas para {{object}}.",
2739
3284
  importFrom: "Importar as linhas reais de",
2740
3285
  into: "para",
2741
3286
  opening: "Abrindo…",
2742
3287
  importAction: "Importar",
2743
3288
  dismiss: "Dispensar",
2744
3289
  },
2745
- cloudOnboarding: {
2746
- hintCreate: "Crie seu primeiro ambiente — um espaço de trabalho privado com URL, banco de dados e plano próprios. A construção acontece dentro dele.",
2747
- hintReady: "Seu ambiente de produção está pronto. Abra-o para criar e executar seus aplicativos — tudo acontece dentro do ambiente.",
2748
- createEnvironment: "Crie seu ambiente",
2749
- openProduction: "Abrir produção",
2750
- manageEnvironments: "Gerenciar ambientes",
3290
+ cloudWorkspaceTimezoneNotice: {
3291
+ seeded: "O fuso horário do ambiente foi definido como {{zone}} com base no seu navegador quando ele foi criado. Você pode alterá-lo em Configurações → Localização.",
3292
+ },
3293
+ ai: {
3294
+ nlQuery: {
3295
+ placeholder: "Faça uma pergunta sobre seus dados…",
3296
+ ask: "Perguntar",
3297
+ results: "Resultados",
3298
+ match: "Correspondência: {{percent}}",
3299
+ simulatedSummary: "Resultados para: {{query}}",
3300
+ noResults: "Nenhum registro correspondente encontrado",
3301
+ recentQueries: "Consultas recentes",
3302
+ },
3303
+ formAssist: {
3304
+ title: "Sugestões de IA",
3305
+ suggestionCount: "{{count}} sugestões",
3306
+ suggestionCount_one: "{{count}} sugestão",
3307
+ suggestionCount_many: "{{count}} de sugestões",
3308
+ suggestionCount_other: "{{count}} sugestões",
3309
+ applyAll: "Aplicar tudo",
3310
+ confidence: "Confiança: {{percent}}",
3311
+ appliedCount: "{{count}} sugestões aplicadas",
3312
+ appliedCount_one: "{{count}} sugestão aplicada",
3313
+ appliedCount_many: "{{count}} de sugestões aplicadas",
3314
+ appliedCount_other: "{{count}} sugestões aplicadas",
3315
+ },
3316
+ recommendations: {
3317
+ title: "Recomendações",
3318
+ generating: "Gerando recomendações…",
3319
+ empty: "Nenhuma recomendação disponível",
3320
+ },
3321
+ },
3322
+ aiApprovals: {
3323
+ title: "Aprovações de IA",
3324
+ description: "Ações propostas por um agente de IA que precisam de revisão humana antes da execução.",
3325
+ tabPending: "Pendentes",
3326
+ tabDecided: "Decididas",
3327
+ tabAll: "Todas",
3328
+ statusPending: "Pendente",
3329
+ statusApproved: "Aprovada",
3330
+ statusExecuted: "Executada",
3331
+ statusFailed: "Falhou",
3332
+ statusRejected: "Rejeitada",
3333
+ colTool: "Ferramenta",
3334
+ colAction: "Ação",
3335
+ colObject: "Objeto",
3336
+ colStatus: "Status",
3337
+ colProposed: "Proposta",
3338
+ colDecision: "Decisão",
3339
+ emptyTitle: "Nenhuma ação aguardando",
3340
+ emptyDescription: "Quando a IA propuser uma ação sensível, ela aparecerá aqui para revisão.",
3341
+ view: "Ver",
3342
+ approve: "Aprovar",
3343
+ reject: "Rejeitar",
3344
+ working: "Processando…",
3345
+ approveAndExecute: "Aprovar e executar",
3346
+ outcomeApprove: "Aprovação de {{id}}: {{message}}",
3347
+ outcomeReject: "Rejeição de {{id}}: {{message}}",
3348
+ outcomeExecuteFailed: "A ação falhou durante a execução",
3349
+ drawerFallbackTitle: "Ação pendente",
3350
+ drawerSubtitle: "Ferramenta {{tool}} em {{object}}",
3351
+ fieldProposedBy: "Proposta por",
3352
+ fieldDecidedBy: "Decidida por",
3353
+ fieldConversation: "Conversa",
3354
+ fieldToolInput: "Entrada da ferramenta",
3355
+ fieldResult: "Resultado",
3356
+ fieldError: "Erro",
3357
+ fieldRejectionReason: "Motivo da rejeição",
3358
+ rejectTitle: "Rejeitar esta ação?",
3359
+ rejectBody: "O motivo é devolvido à IA para que ela ajuste a próxima resposta.",
3360
+ rejectPlaceholder: "Motivo opcional (ex.: «ID de registro incorreto — confirme antes com a pessoa usuária.»)",
2751
3361
  },
2752
3362
  aiModelStatus: {
2753
3363
  summary: "Criar / Perguntar usa {{conversational}} ({{conversationalSource}}); estruturado usa {{structured}} ({{structuredSource}}).",
@@ -2757,8 +3367,8 @@ const pt = {
2757
3367
  rowConversational: "Modelo Build / Ask",
2758
3368
  rowStructured: "Estruturado (blueprint / seed)",
2759
3369
  rowReasoning: "Esforço de raciocínio",
2760
- readFailed: "Não foi possível ler o modelo de IA efetivo. Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
2761
- readFailedWithStatus: "Não foi possível ler o modelo de IA efetivo (HTTP {{status}}). Este ambiente pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
3370
+ readFailed: "Não foi possível ler o modelo de IA efetivo. Este sistema pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
3371
+ readFailedWithStatus: "Não foi possível ler o modelo de IA efetivo (HTTP {{status}}). Este sistema pode não executar um serviço de IA, ou você pode não ter a permissão ai:read.",
2762
3372
  overridesInEffect: "Substituições em vigor: ",
2763
3373
  noOverrides: "nenhuma — usando os padrões do código implantado.",
2764
3374
  adapter: "Adaptador: ",
@@ -2766,6 +3376,181 @@ const pt = {
2766
3376
  sourceInherits: "igual a build/ask",
2767
3377
  sourcePinned: "fixado por {{source}}",
2768
3378
  },
3379
+ // objectui#7254 — the AI copilot's tool cards. Three families, all of them
3380
+ // English-only until this landed while every other string on the same screen
3381
+ // was translated:
3382
+ //
3383
+ // `tool.*` — one entry per PLATFORM-PROVIDED tool name
3384
+ // (@objectstack/spec `PLATFORM_TOOLS_BY_PACKAGE`, the
3385
+ // closed registry those runtimes are conformance-tested
3386
+ // against). `humanizeToolName` looks each up as
3387
+ // `chatbot.tool.<tool_name>` and falls back to its English
3388
+ // title-caser for a custom / third-party tool, so a name
3389
+ // missing here is degraded, never broken. Every value, `en`
3390
+ // included, is a short sentence in the pack's language
3391
+ // saying what the step does (cloud#2927 Target 3, ruled
3392
+ // 「同意」; objectui#12724): never the tool id, and never
3393
+ // the title-caser's output for it, which is how the step
3394
+ // reads for a tool the pack has no entry for.
3395
+ // `toolLabels-locale-parity-7481` holds both.
3396
+ // `toolState.*` — the card-header badge + activity-chip vocabulary. ONE
3397
+ // set for both surfaces (they used to carry separate
3398
+ // tables and disagreed on casing).
3399
+ // `plan.*` — the "N objects · N views · N dashboards" strip. Plural
3400
+ // FAMILIES: one slot per CLDR category the pack's language
3401
+ // selects (objectui#11432), plus the base key for a call
3402
+ // made without a count. `all-locales-key-parity.test.ts`
3403
+ // derives the required slots from `Intl.PluralRules`.
3404
+ //
3405
+ // objectui#7481 — five `tool.*` entries are NEWER than the registry above:
3406
+ // `get_authoring_rules` (cloud#1837), `load_tools`, `open_record`, `test_flow`
3407
+ // and `toggle_flow` are registered by cloud `service-ai-studio` but the pinned
3408
+ // `@objectstack/spec` snapshot does not list them yet. They are kept here on
3409
+ // purpose: a step label the user reads must not wait on a pin bump. When the
3410
+ // pin advances, `chatbotToolLabels-locale-parity-7481` starts checking them
3411
+ // against the registry instead of against its own hand-held list.
3412
+ chatbot: {
3413
+ answer: {
3414
+ showFull: 'Mostrar resposta completa',
3415
+ collapse: 'Recolher',
3416
+ expandTable: 'Expandir',
3417
+ exitExpandedTable: 'Fechar',
3418
+ },
3419
+ tool: {
3420
+ aggregate_data: "Resumir os dados",
3421
+ get_record: "Ler o registro",
3422
+ query_data: "Consultar os dados necessários",
3423
+ query_records: "Buscar os registros",
3424
+ search_knowledge: "Consultar a base de conhecimento",
3425
+ visualize_data: "Mostrar os dados em um gráfico",
3426
+ add_field: "Adicionar um campo",
3427
+ apply_blueprint: "Construir o aplicativo conforme o plano",
3428
+ apply_edit: "Aplicar a alteração",
3429
+ create_metadata: "Criar um item de metadados",
3430
+ create_object: "Criar um objeto",
3431
+ create_package: "Criar um pacote",
3432
+ create_seed: "Gerar dados de exemplo para os objetos",
3433
+ delete_field: "Excluir um campo",
3434
+ describe_metadata: "Revisar os metadados",
3435
+ describe_object: "Revisar a estrutura do objeto",
3436
+ get_active_package: "Verificar o pacote ativo",
3437
+ get_authoring_rules: "Consultar as regras de autoria",
3438
+ get_metadata_schema: "Consultar o formato dos metadados",
3439
+ get_package: "Revisar o pacote",
3440
+ list_metadata: "Listar os metadados existentes",
3441
+ list_objects: "Listar os objetos existentes",
3442
+ list_packages: "Listar os pacotes existentes",
3443
+ load_tools: "Carregar mais ferramentas",
3444
+ modify_field: "Modificar um campo",
3445
+ open_record: "Abrir o registro",
3446
+ propose_blueprint: "Redigir o plano do aplicativo",
3447
+ set_active_package: "Mudar para o pacote de destino",
3448
+ suggest_builder: "Sugerir construir com IA",
3449
+ test_flow: "Fazer um teste do fluxo",
3450
+ todo_write: "Anotar verificações pendentes",
3451
+ toggle_flow: "Ligar ou desligar o fluxo",
3452
+ update_metadata: "Atualizar um item de metadados",
3453
+ validate_expression: "Verificar a expressão",
3454
+ verify_build: "Verificar o resultado da construção",
3455
+ },
3456
+ toolState: {
3457
+ agentActivity: "Atividade do agente",
3458
+ pending: "Pendente",
3459
+ running: "Em execução",
3460
+ awaitingApproval: "Aguardando aprovação",
3461
+ responded: "Respondido",
3462
+ completed: "Concluído",
3463
+ error: "Erro",
3464
+ denied: "Negado",
3465
+ failed: "Falhou",
3466
+ },
3467
+ phase: {
3468
+ build: "Criação",
3469
+ design: "Desenho do plano",
3470
+ stepCount: "{{count}} etapas",
3471
+ stepCount_one: "{{count}} etapa",
3472
+ stepCount_many: "{{count}} de etapas",
3473
+ stepCount_other: "{{count}} etapas",
3474
+ expand: "Mostrar etapas",
3475
+ collapse: "Ocultar etapas",
3476
+ },
3477
+ plan: {
3478
+ countObjects: "{{count}} objetos",
3479
+ countObjects_one: "{{count}} objeto",
3480
+ countObjects_many: "{{count}} de objetos",
3481
+ countObjects_other: "{{count}} objetos",
3482
+ countViews: "{{count}} visões",
3483
+ countViews_one: "{{count}} visão",
3484
+ countViews_many: "{{count}} de visões",
3485
+ countViews_other: "{{count}} visões",
3486
+ countDashboards: "{{count}} painéis",
3487
+ countDashboards_one: "{{count}} painel",
3488
+ countDashboards_many: "{{count}} de painéis",
3489
+ countDashboards_other: "{{count}} painéis",
3490
+ countSeedData: "dados de exemplo",
3491
+ extendTarget: "Adicionando ao app existente: {{app}}",
3492
+ awaitingConfirm: "Aguardando confirmação",
3493
+ objectsAndFields: "Objetos e campos",
3494
+ views: "Visões",
3495
+ suggestedField: "sugerido",
3496
+ nameField: "Nome: {{field}}",
3497
+ },
3498
+ build: {
3499
+ building: "Criando {{app}}…",
3500
+ built: "Criação de {{app}} concluída",
3501
+ builtAndLive: "Criado e publicado · {{app}}",
3502
+ appFallback: "seu aplicativo",
3503
+ addingSampleData: "adicionando dados de exemplo",
3504
+ group: {
3505
+ object: "Objetos",
3506
+ view: "Visões",
3507
+ dashboard: "Painéis",
3508
+ app: "Aplicativo",
3509
+ seed: "Dados de exemplo",
3510
+ },
3511
+ moreArtifacts: "+{{n}} mais",
3512
+ verifying: "Verificando a alteração…",
3513
+ verifyStep: "etapa {{n}}",
3514
+ verified: "Alteração verificada",
3515
+ unknownPhase: "Fase de criação desconhecida",
3516
+ nextStepsLead: "Em seguida, você pode dizer: {{steps}}",
3517
+ nextStepQuote: "“{{step}}”",
3518
+ draftPosture: "As alterações seguintes ficam salvas como rascunho, e você as publica no Studio.",
3519
+ checksPassed: "Verificações aprovadas {{passed}}/{{total}}",
3520
+ },
3521
+ changes: {
3522
+ planTitle: "Plano de alterações · {{count}} alterações",
3523
+ planTitle_one: "Plano de alterações · {{count}} alteração",
3524
+ planTitle_many: "Plano de alterações · {{count}} de alterações",
3525
+ planTitle_other: "Plano de alterações · {{count}} alterações",
3526
+ saveDraft: "Salvar como rascunho",
3527
+ reviewAndPublish: "Revisar alterações e publicar",
3528
+ undo: "Desfazer",
3529
+ undoWithOthers: "Desfazer (e mais {{count}} rascunhos)",
3530
+ undoWithOthers_one: "Desfazer (e mais {{count}} rascunho)",
3531
+ undoWithOthers_many: "Desfazer (e mais {{count}} de rascunhos)",
3532
+ undoWithOthers_other: "Desfazer (e mais {{count}} rascunhos)",
3533
+ undoConfirm: "Desfazer descarta todos os {{total}} rascunhos não publicados deste pacote, incluindo {{count}} que não fazem parte desta alteração.",
3534
+ undoConfirm_one: "Desfazer descarta todos os {{total}} rascunhos não publicados deste pacote, incluindo {{count}} que não faz parte desta alteração.",
3535
+ undoConfirm_many: "Desfazer descarta todos os {{total}} rascunhos não publicados deste pacote, incluindo {{count}} de rascunhos que não fazem parte desta alteração.",
3536
+ undoConfirm_other: "Desfazer descarta todos os {{total}} rascunhos não publicados deste pacote, incluindo {{count}} que não fazem parte desta alteração.",
3537
+ undoConfirmUnknown: "Desfazer descarta todos os rascunhos não publicados deste pacote, não só esta alteração.",
3538
+ undoConfirmAction: "Desfazer tudo",
3539
+ undoCancel: "Cancelar",
3540
+ undoing: "Desfazendo…",
3541
+ undone: "Desfeito",
3542
+ undoFailed: "Não foi possível desfazer",
3543
+ kind: {
3544
+ field: "Campo",
3545
+ object: "Objeto",
3546
+ view: "Visão",
3547
+ dashboard: "Painel",
3548
+ app: "Aplicativo",
3549
+ seed: "Dados de exemplo",
3550
+ package: "Pacote do aplicativo",
3551
+ },
3552
+ },
3553
+ },
2769
3554
  chatbotError: {
2770
3555
  title: "Falha na resposta",
2771
3556
  fallbackDetail: "Algo deu errado. Tente novamente.",
@@ -2779,10 +3564,13 @@ const pt = {
2779
3564
  buyCredits: "Comprar um pacote de créditos",
2780
3565
  upgradePlan: "Fazer upgrade do plano",
2781
3566
  },
3567
+ planTier: {
3568
+ teamAndUp: "A partir do plano Team",
3569
+ },
2782
3570
  environment: {
2783
- addEnvironment: "Adicionar ambiente",
2784
3571
  setUpProduction: "Configure seu ambiente de produção",
2785
3572
  addDevelopment: "Adicionar ambiente de desenvolvimento",
3573
+ developmentLocked: "Ambientes de desenvolvimento · {{tier}}",
2786
3574
  // Plan/capacity dialog (EnvironmentEntitlementDialog) — cloud#959.
2787
3575
  entitlement: {
2788
3576
  productionLimitTitle: "Você já tem seu ambiente de produção",
@@ -2830,7 +3618,7 @@ const pt = {
2830
3618
  },
2831
3619
  unbound: {
2832
3620
  title: "Não conectado",
2833
- body: "Conecte este runtime a um plano de controle do ObjectStack para explorar os pacotes privados da sua organização e instalá-los aqui. A aprovação é um único clique na sua conta da nuvem — nenhum id ou credencial é digitado nesta página.",
3621
+ body: "Este runtime não está conectado a nenhum plano de controle. “Conectar” abre sua conta da nuvem em uma nova janela, onde um único clique aprova a conexão — nenhum id ou credencial é digitado nesta página.",
2834
3622
  connect: "Conectar",
2835
3623
  },
2836
3624
  },
@@ -2843,10 +3631,17 @@ const pt = {
2843
3631
  dismiss: "Dispensar",
2844
3632
  confirmedToast: "\"{{set}}\" agora está concedido a {{anchor}}.",
2845
3633
  dismissedToast: "Sugestão de \"{{set}}\" dispensada.",
3634
+ guestUnsupported: "Não é possível conceder aqui: os conjuntos da posição Guest não são derivados de sugestões aceitas.",
3635
+ acceptedState: "\"{{set}}\" foi aceito para todos os usuários autenticados (a posição Everyone).",
3636
+ notInForceState: "\"{{set}}\" foi aceito, mas ainda não está em vigor: a posição Everyone não mudou nesta solicitação. O log do servidor informa o motivo.",
3637
+ dismissedState: "\"{{set}}\" não está concedido: a sugestão foi dispensada ou revogada.",
3638
+ revoke: "Revogar",
3639
+ revoking: "Revogando…",
3640
+ revokedToast: "Aceitação de \"{{set}}\" revogada.",
2846
3641
  },
2847
3642
  title: "Marketplace de aplicativos",
2848
3643
  subtitle: "Explore aplicativos aprovados publicados no catálogo ObjectStack. Clique em um aplicativo para ver os detalhes e instalá-lo em um de seus ambientes.",
2849
- searchPlaceholder: "Pesquisar aplicativos por nome ou ID de manifesto…",
3644
+ searchPlaceholder: 'Pesquisar aplicativos por nome ou ID do aplicativo…',
2850
3645
  searchAria: "Pesquisar aplicativos do marketplace",
2851
3646
  installed: "Instalado",
2852
3647
  installedCount: "Instalados ({{count}})",
@@ -2856,21 +3651,26 @@ const pt = {
2856
3651
  noMatchFilters: "Nenhum aplicativo corresponde aos seus filtros.",
2857
3652
  noDescription: "Sem descrição disponível.",
2858
3653
  back: "Voltar ao marketplace",
2859
- installedTitle: "Aplicativos instalados",
2860
- installedSubtitle: "Pacotes do marketplace atualmente instalados no kernel deste runtime.",
2861
- installedEmpty: "Nenhum aplicativo do marketplace instalado neste runtime ainda.",
2862
3654
  browseLink: "Explorar marketplace →",
2863
- installedAdditiveNote: "<strong>Nota:</strong> A API do kernel é apenas aditiva — desinstalar remove o manifesto do disco para que o pacote não seja carregado na próxima inicialização, mas o kernel em execução mantém o aplicativo registrado até reiniciar.",
2864
- installedAt: "Instalado {{when}}",
2865
- installedBy: "por {{user}}",
2866
- installedPackageId: "Pacote",
2867
- cachedAs: "Armazenado em cache como <code>{{path}}</code>",
3655
+ installedAdditiveNote: "A desinstalação remove o aplicativo do kernel em execução imediatamente, junto com seus conjuntos de permissões e as respectivas atribuições, e exclui o manifesto em cache para que o pacote não seja carregado na próxima inicialização. Os registros armazenados em seus objetos permanecem no banco de dados.",
2868
3656
  versionBadge: "v{{version}}",
2869
3657
  installedBadge: "Instalado v{{version}}",
3658
+ // objectui#11645 — an install-local entry this runtime refused to load at
3659
+ // startup (the listing's `notLoaded` marker), read on Installed Apps.
3660
+ notLoaded: {
3661
+ badge: "Não carregado",
3662
+ protocolIncompatible: "Este runtime não carregou este pacote: ele é destinado ao protocolo {{requiredRange}}, que este runtime não suporta.",
3663
+ otherReason: "Este runtime não carregou este pacote ({{code}}).",
3664
+ },
2870
3665
  load: {
2871
3666
  failed: "Não foi possível carregar o marketplace",
2872
3667
  failedHintConfigured: "Este runtime acessa o marketplace através do plano de controle em {{url}}. Verifique se ele está online e acessível a partir daqui.",
2873
- failedHintSameOrigin: "Este runtime serve o catálogo do marketplace por conta própria. Verifique se o runtime está online.",
3668
+ failedHintSameOrigin: "O catálogo do marketplace é acessado através deste runtime. Verifique se o runtime está online e consegue acessar o catálogo.",
3669
+ loading: "Carregando o catálogo do marketplace…",
3670
+ slow: "Ainda carregando — o catálogo do marketplace está demorando para responder.",
3671
+ retry: "Tentar novamente",
3672
+ unreachable: "Não foi possível acessar o catálogo do marketplace.",
3673
+ answeredError: "O catálogo do marketplace respondeu com um erro (HTTP {{status}}).",
2874
3674
  packageFailed: "Não foi possível carregar o pacote",
2875
3675
  notFound: "Não encontrado.",
2876
3676
  },
@@ -2894,10 +3694,17 @@ const pt = {
2894
3694
  purgeSampleData: 'Remover dados de exemplo',
2895
3695
  purgeConfirm: 'Excluir todos os registros de exemplo criados por este pacote? Os registros adicionados pelo usuário NÃO serão afetados.',
2896
3696
  purgeSuccess: '{{count}} registro(s) de exemplo removido(s).',
3697
+ purgeSuccess_one: '{{count}} registro de exemplo removido.',
3698
+ purgeSuccess_many: '{{count}} de registros de exemplo removidos.',
3699
+ purgeSuccess_other: '{{count}} registros de exemplo removidos.',
2897
3700
  purgeNoData: 'Nenhum registro de exemplo encontrado para remover.',
2898
3701
  reseedQueued: 'Os dados de exemplo serão recarregados no próximo acesso ao ambiente.',
2899
3702
  reseedLocalSuccess: 'Dados de exemplo recarregados: {{inserted}} inseridos, {{updated}} atualizados.',
2900
3703
  reseedPartialErrors: '({{count}} registro(s) não puderam ser gravados)',
3704
+ reseedPartialErrors_one: '({{count}} registro não pôde ser gravado)',
3705
+ reseedPartialErrors_many: '({{count}} de registros não puderam ser gravados)',
3706
+ reseedPartialErrors_other: '({{count}} registros não puderam ser gravados)',
3707
+ sampleDataKernelUnavailable: 'Este plano de controle não tem um kernel de ambiente, portanto os dados de exemplo não podem ser recarregados nem removidos aqui. Faça isso no runtime do próprio ambiente.',
2901
3708
  updateAvailable: 'Atualização disponível',
2902
3709
  },
2903
3710
  action: {
@@ -2907,6 +3714,7 @@ const pt = {
2907
3714
  working: "Processando…",
2908
3715
  installToCloud: "Instalar na nuvem…",
2909
3716
  installing: "Instalando…",
3717
+ updating: "Atualizando…",
2910
3718
  uninstall: "Desinstalar",
2911
3719
  uninstalling: "Desinstalando…",
2912
3720
  details: "Detalhes",
@@ -2924,15 +3732,45 @@ const pt = {
2924
3732
  environmentPlaceholder: "Selecionar ambiente",
2925
3733
  includeSampleData: "Incluir dados de amostra",
2926
3734
  noEnvs: "Nenhum ambiente encontrado em sua organização ativa.",
2927
- noPermission: "Você não tem permissão para instalar aplicativos em um ambiente. Somente proprietários e administradores da organização podem instalar.",
3735
+ noPermission: "Você não tem permissão para instalar aplicativos em um ambiente. Somente proprietários e administradores da organização podem instalar — fale com o administrador da sua organização.",
2928
3736
  signInFirst: "Você deve primeiro fazer login no ObjectStack Cloud.",
2929
3737
  success: "Instalado com sucesso. Abra o ambiente para ver o novo aplicativo.",
2930
3738
  localSuccess: "v{{version}} instalado neste runtime. \"{{name}}\" deve aparecer no seletor de aplicativos agora.",
3739
+ localLoadsAtRestart: "v{{version}} instalado neste runtime. \"{{name}}\" será carregado na próxima reinicialização do runtime e não aparecerá no seletor de aplicativos até lá.",
2931
3740
  localManifestConflict: "{{message}}\nNota: Um aplicativo local já possui este manifest_id. Remova-o primeiro de objectstack.config.ts.",
2932
3741
  localUnauthorized: "Faça login neste runtime primeiro.",
2933
3742
  localMarketplaceUnavailable: "Este runtime não tem OS_CLOUD_URL configurado.",
2934
3743
  updateTo: "Atualizar → v{{version}}",
2935
3744
  installedVersion: "Instalado v{{version}}",
3745
+ deploying: "Implantando o aplicativo…",
3746
+ deployed: "O aplicativo foi implantado e está pronto.",
3747
+ openApp: "Abrir {{name}}",
3748
+ deployTimeout: "A instalação foi registrada, mas este ambiente ainda não está servindo o aplicativo. Ele pode ainda estar sendo implantado — verifique novamente em instantes. Se nunca aparecer, o pacote pode não ter sido carregado, pode não incluir nenhum aplicativo ou o aplicativo pode exigir uma permissão que você não tem.",
3749
+ checkAgain: "Verificar novamente",
3750
+ // ADR-0131 D6 — the install modes a package's manifest permits, and
3751
+ // what an unmanaged install answers (MarketplacePackagePage).
3752
+ mode: {
3753
+ label: "Modo de instalação",
3754
+ managed: "Gerenciado",
3755
+ managedHint: "O pacote continua sendo a autoridade: é registrado como código, recebe suas atualizações e seus itens não são editados aqui.",
3756
+ unmanaged: "Cópia não gerenciada",
3757
+ unmanagedHint: "Copiado uma única vez para este runtime como seus próprios metadados: cada item pode ser editado aqui, e a cópia não recebe atualizações.",
3758
+ required: "Escolha um modo de instalação para instalar este pacote.",
3759
+ },
3760
+ unmanagedSuccess: "v{{version}} de \"{{name}}\" copiado para este runtime como seus próprios metadados, na base {{base}}. A cópia pode ser editada e não recebe atualizações.",
3761
+ unmanagedStrippedLocks: "O pacote bloqueava estes itens. A cópia pode ser editada, então seus bloqueios não foram copiados:",
3762
+ unmanagedIgnored: "Este runtime não oferece suporte a instalações não gerenciadas, então \"{{name}}\" foi instalado como gerenciado (registrado como código) em vez de copiado. Atualize o runtime, depois desinstale o pacote e instale-o novamente como cópia não gerenciada.",
3763
+ },
3764
+ // objectui#12146 — the install dialog opened as an UPDATE of the copy
3765
+ // this environment holds (MarketplacePackagePage).
3766
+ update: {
3767
+ dialogTitle: "Atualizar {{name}}",
3768
+ dialogDescCurrent: "Atualizar a cópia instalada neste ambiente ({{host}}).",
3769
+ dialogDescPicker: "Escolha o ambiente cuja cópia instalada deseja atualizar. Você deve estar conectado ao ObjectStack Cloud.",
3770
+ majorNotice: "Esta é uma atualização de versão principal (v{{fromMajor}} → v{{toMajor}}), que pode incluir alterações incompatíveis.",
3771
+ releaseNotes: "Ler as notas da versão v{{version}}",
3772
+ success: "Atualizado para a v{{version}}.",
3773
+ deployTimeout: "A atualização foi registrada, mas este ambiente ainda não está servindo a v{{version}}. Ela pode ainda estar sendo implantada — verifique novamente em instantes.",
2936
3774
  },
2937
3775
  // objectui#3546 — the MarketplacePage "Your organization" strip.
2938
3776
  org: {
@@ -2950,7 +3788,8 @@ const pt = {
2950
3788
  reviewed: "Revisado e aprovado",
2951
3789
  unreviewed: "Ainda não revisado",
2952
3790
  signed: "Assinado",
2953
- grantsIntro: "Na instalação, este pacote receberá:",
3791
+ grantsIntro: "Este pacote solicita:",
3792
+ notEnforced: "Esta lista é registada na instalação e reconfirmada se uma versão posterior pedir mais, mas o runtime ainda não restringe o pacote a ela.",
2954
3793
  services: "Serviços da plataforma",
2955
3794
  hooks: "Hooks de ciclo de vida",
2956
3795
  network: "Acesso à rede",
@@ -2964,9 +3803,11 @@ const pt = {
2964
3803
  },
2965
3804
  },
2966
3805
  uninstall: {
2967
- confirm: "Desinstalar {{manifestId}} v{{version}} deste runtime?\n\nO manifesto em cache será removido.",
2968
- successInList: "{{manifestId}} removido. Reinicie o runtime para descarregá-lo completamente.",
2969
- successInDetail: "Manifesto em cache para {{manifestId}} removido.",
3806
+ confirm: "Desinstalar {{manifestId}} v{{version}} deste runtime?\n\nO aplicativo será removido do kernel em execução imediatamente, junto com seus conjuntos de permissões e as respectivas atribuições, e o manifesto em cache será removido. Os registros armazenados em seus objetos permanecem no banco de dados.",
3807
+ successInList: "{{manifestId}} removido: o aplicativo saiu do kernel em execução, junto com seus conjuntos de permissões e as respectivas atribuições. Os registros armazenados em seus objetos permanecem no banco de dados.",
3808
+ successInDetail: "{{manifestId}} e seu manifesto em cache removidos: o aplicativo saiu do kernel em execução, junto com seus conjuntos de permissões e as respectivas atribuições. Os registros armazenados em seus objetos permanecem no banco de dados.",
3809
+ confirmNotLoaded: "Desinstalar {{manifestId}} v{{version}} deste runtime?\n\nO manifesto em cache será removido. Este runtime não carregou o pacote, então nenhuma parte dele está em execução.",
3810
+ successNotLoaded: "{{manifestId}} removido. Não estava carregado, então não é necessário reiniciar.",
2970
3811
  },
2971
3812
  accessDenied: {
2972
3813
  title: "Marketplace somente para administradores",
@@ -2989,30 +3830,21 @@ const pt = {
2989
3830
  storage: "Armazenamento",
2990
3831
  other: "Outro",
2991
3832
  },
2992
- pricing: {
2993
- free: "Grátis",
2994
- freemium: "Freemium",
2995
- paid: "Pago",
2996
- subscription: "Assinatura",
2997
- "usage-based": "Por uso",
2998
- "contact-sales": "Contatar vendas",
2999
- },
3000
3833
  relativeTime: {
3001
3834
  today: "hoje",
3002
3835
  daysAgo: "há {{count}}d",
3003
3836
  monthsAgo: "há {{count}} meses",
3837
+ monthsAgo_one: "há {{count}} mês",
3838
+ monthsAgo_many: "há {{count}} meses",
3839
+ monthsAgo_other: "há {{count}} meses",
3004
3840
  yearsAgo: "há {{count}} anos",
3841
+ yearsAgo_one: "há {{count}} ano",
3842
+ yearsAgo_many: "há {{count}} anos",
3843
+ yearsAgo_other: "há {{count}} anos",
3005
3844
  },
3006
3845
  },
3007
- approvals: {
3008
- approve: 'Aprovar',
3009
- reject: 'Rejeitar',
3010
- comment: 'Comentário (opcional)',
3011
- approveSuccess: 'Aprovado',
3012
- rejectSuccess: 'Rejeitado',
3013
- rejectConfirm: 'Rejeitar esta solicitação de aprovação?',
3014
- },
3015
3846
  approvalsInbox: {
3847
+ recordUnresolvable: 'Este registro não pode ser aberto',
3016
3848
  loadMore: 'Carregar mais',
3017
3849
  loadingMore: 'Carregando…',
3018
3850
  loadedOf: '{{loaded}} de {{total}} carregadas',
@@ -3031,6 +3863,9 @@ const pt = {
3031
3863
  requestInfoSent: 'Devolvida ao solicitante para complemento',
3032
3864
  remindBtn: 'Lembrar',
3033
3865
  remindSuccess: 'Lembrete enviado a {{count}} aprovador(es)',
3866
+ remindSuccess_one: 'Lembrete enviado a {{count}} aprovador',
3867
+ remindSuccess_many: 'Lembrete enviado a {{count}} de aprovadores',
3868
+ remindSuccess_other: 'Lembrete enviado a {{count}} aprovadores',
3034
3869
  remindThrottled: 'Um lembrete já foi enviado há pouco — tente mais tarde.',
3035
3870
  replyPlaceholder: 'Responder nesta solicitação…',
3036
3871
  slaRemaining: 'SLA: faltam {{dur}}',
@@ -3047,8 +3882,12 @@ const pt = {
3047
3882
  progressApprovals: 'Aprovações — {{got}} de {{need}}',
3048
3883
  progressGroups: 'Progresso de assinaturas — {{got}} de {{need}} grupos',
3049
3884
  progressEligible: '{{count}} aprovador(es) elegível(eis)',
3885
+ progressEligible_one: '{{count}} aprovador elegível',
3886
+ progressEligible_many: '{{count}} de aprovadores elegíveis',
3887
+ progressEligible_other: '{{count}} aprovadores elegíveis',
3050
3888
  progressBar: 'Progresso da decisão',
3051
3889
  declaredActions: 'Ações',
3890
+ decisionPanelOffRequestPage: 'O painel de decisão de aprovação só funciona nas páginas de solicitações de aprovação.',
3052
3891
  attachmentChip: 'Anexo',
3053
3892
  attachmentOpenFailed: 'Não foi possível abrir o anexo — tente novamente',
3054
3893
  approveOneTitle: 'Aprovar "{{title}}"?',
@@ -3078,6 +3917,9 @@ const pt = {
3078
3917
  filterCount: '{{shown}} de {{total}}',
3079
3918
  selected: 'selecionadas',
3080
3919
  actionableCount: '({{count}} acionáveis)',
3920
+ actionableCount_one: '({{count}} acionável)',
3921
+ actionableCount_many: '({{count}} acionáveis)',
3922
+ actionableCount_other: '({{count}} acionáveis)',
3081
3923
  selectAll: 'Selecionar tudo',
3082
3924
  selectRow: 'Selecionar solicitação',
3083
3925
  colRequest: 'Solicitação',
@@ -3112,6 +3954,10 @@ const pt = {
3112
3954
  emptyPending: 'Tudo em dia — nada aguarda sua aprovação.',
3113
3955
  emptyOther: 'Nada por aqui ainda.',
3114
3956
  emptyViewAll: 'Ver todas as solicitações',
3957
+ waitingOnOthers: "{{count}} solicitações aguardam outros aprovadores",
3958
+ waitingOnOthers_one: "{{count}} solicitação aguarda outros aprovadores",
3959
+ waitingOnOthers_many: "{{count}} de solicitações aguardam outros aprovadores",
3960
+ waitingOnOthers_other: "{{count}} solicitações aguardam outros aprovadores",
3115
3961
  noMatches: 'Nenhum resultado com os filtros atuais.',
3116
3962
  keyboardHint: 'Teclado: j/k mover · Enter abrir · x selecionar · a aprovar · r rejeitar',
3117
3963
  drawerTitle: 'Solicitação de aprovação',
@@ -3129,12 +3975,12 @@ const pt = {
3129
3975
  overrideActionLabel: '{{action}} (substituição)',
3130
3976
  overrideNotice: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa é finalizada imediatamente e qualquer aprovador que ainda não agiu é ignorado. A decisão é registrada como substituição de administrador.',
3131
3977
  overrideNoticeWho: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa é finalizada imediatamente e os aprovadores que ainda não agiram são ignorados — {{who}}. A decisão é registrada como substituição de administrador.',
3978
+ overrideReassignNotice: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa passa para o novo aprovador que você escolher, que substitui qualquer aprovador que ainda não agiu. A solicitação continua pendente, aguardando o novo aprovador. A reatribuição é registrada como substituição de administrador.',
3979
+ overrideReassignNoticeWho: 'Você não ocupa nenhuma vaga de aprovador nesta etapa. Ao continuar, será usada a sua substituição de administrador: a etapa passa para o novo aprovador que você escolher, que substitui os aprovadores que ainda não agiram — {{who}}. A solicitação continua pendente, aguardando o novo aprovador. A reatribuição é registrada como substituição de administrador.',
3980
+ overrideRecallNotice: 'Você não enviou esta solicitação. Ao continuar, será usada a sua substituição de administrador: a solicitação é retirada, nenhum aprovador que ainda não agiu poderá mais agir sobre ela e o registro é desbloqueado.',
3981
+ overrideRecallNoticeWho: 'Você não enviou esta solicitação. Ao continuar, será usada a sua substituição de administrador: a solicitação é retirada, o registro é desbloqueado e os aprovadores que ainda não agiram não poderão mais agir sobre ela — {{who}}.',
3132
3982
  viaOverrideChip: 'Substituição de administrador',
3133
3983
  viaOverrideHint: 'Quem agiu não ocupava vaga de aprovador nesta etapa — admitido pela via de substituição de administrador.',
3134
- rawData: 'Dados brutos (JSON)',
3135
- copy: 'Copiar',
3136
- copied: 'Copiado',
3137
- copyFailed: 'Falha ao copiar',
3138
3984
  overrideActor: 'Agir como outra identidade (admin)',
3139
3985
  actor: 'Ator',
3140
3986
  auto: 'Auto',
@@ -3151,11 +3997,23 @@ const pt = {
3151
3997
  approveN: 'Aprovar {{count}}',
3152
3998
  rejectN: 'Rejeitar {{count}}',
3153
3999
  bulkApproveTitle: 'Aprovar {{count}} solicitações?',
4000
+ bulkApproveTitle_one: 'Aprovar {{count}} solicitação?',
4001
+ bulkApproveTitle_many: 'Aprovar {{count}} de solicitações?',
4002
+ bulkApproveTitle_other: 'Aprovar {{count}} solicitações?',
3154
4003
  bulkApproveBody: 'Cada solicitação é aprovada com sua identidade e o fluxo segue pelo ramo de aprovação.',
3155
4004
  bulkRejectTitle: 'Rejeitar {{count}} solicitações?',
4005
+ bulkRejectTitle_one: 'Rejeitar {{count}} solicitação?',
4006
+ bulkRejectTitle_many: 'Rejeitar {{count}} de solicitações?',
4007
+ bulkRejectTitle_other: 'Rejeitar {{count}} solicitações?',
3156
4008
  bulkRejectBody: 'As solicitações selecionadas serão rejeitadas e os solicitantes notificados.',
3157
4009
  bulkApproved: '{{count}} solicitações aprovadas',
4010
+ bulkApproved_one: '{{count}} solicitação aprovada',
4011
+ bulkApproved_many: '{{count}} de solicitações aprovadas',
4012
+ bulkApproved_other: '{{count}} solicitações aprovadas',
3158
4013
  bulkRejected: '{{count}} solicitações rejeitadas',
4014
+ bulkRejected_one: '{{count}} solicitação rejeitada',
4015
+ bulkRejected_many: '{{count}} de solicitações rejeitadas',
4016
+ bulkRejected_other: '{{count}} solicitações rejeitadas',
3159
4017
  bulkPartial: '{{ok}} com sucesso, {{fail}} falharam: {{which}}',
3160
4018
  rejectOneTitle: 'Rejeitar "{{title}}"?',
3161
4019
  rejectOneBody: 'A solicitação será rejeitada e o solicitante notificado.',
@@ -3180,8 +4038,17 @@ const pt = {
3180
4038
  alreadyDecided: 'Esta solicitação já foi decidida. Atualize a lista.',
3181
4039
  justNow: 'agora mesmo',
3182
4040
  minutesAgo: 'há {{count}} min',
4041
+ minutesAgo_one: 'há {{count}} min',
4042
+ minutesAgo_many: 'há {{count}} min',
4043
+ minutesAgo_other: 'há {{count}} min',
3183
4044
  hoursAgo: 'há {{count}} h',
4045
+ hoursAgo_one: 'há {{count}} h',
4046
+ hoursAgo_many: 'há {{count}} h',
4047
+ hoursAgo_other: 'há {{count}} h',
3184
4048
  daysAgo: 'há {{count}} dias',
4049
+ daysAgo_one: 'há {{count}} dia',
4050
+ daysAgo_many: 'há {{count}} dias',
4051
+ daysAgo_other: 'há {{count}} dias',
3185
4052
  },
3186
4053
  preview: {
3187
4054
  empty: {
@@ -3202,6 +4069,10 @@ const pt = {
3202
4069
  publishing: 'Publicando…',
3203
4070
  exit: 'Sair da pré-visualização',
3204
4071
  changes: 'Alterações',
4072
+ pendingHere: 'Pré-visualização do rascunho · {{count}} alterações não publicadas nesta página',
4073
+ pendingHere_one: 'Pré-visualização do rascunho · {{count}} alteração não publicada nesta página',
4074
+ pendingHere_many: 'Pré-visualização do rascunho · {{count}} de alterações não publicadas nesta página',
4075
+ pendingHere_other: 'Pré-visualização do rascunho · {{count}} alterações não publicadas nesta página',
3205
4076
  },
3206
4077
  changes: {
3207
4078
  title: 'Alterações pendentes',
@@ -3216,11 +4087,81 @@ const pt = {
3216
4087
  detailNone: 'Nenhuma diferença detectada — o rascunho corresponde à versão publicada.',
3217
4088
  detailChangedKeys: 'Também alterado:',
3218
4089
  confirmNote: 'Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.',
4090
+ confirmNote_one: 'Publicar libera atomicamente {{count}} rascunho pendente deste pacote.',
4091
+ confirmNote_many: 'Publicar libera atomicamente todos os {{count}} de rascunhos pendentes deste pacote.',
4092
+ confirmNote_other: 'Publicar libera atomicamente todos os {{count}} rascunhos pendentes deste pacote.',
4093
+ // objectui#11591 — the package-less sheet: no package to batch, so each
4094
+ // draft publishes by itself and one that fails stays pending.
4095
+ confirmNoteSeparate: 'Publicar libera os {{count}} rascunhos pendentes um a um: o que falhar continua pendente e os demais são publicados mesmo assim.',
4096
+ confirmNoteSeparate_one: 'Publicar libera {{count}} rascunho pendente isoladamente: se falhar, continua pendente.',
4097
+ confirmNoteSeparate_many: 'Publicar libera os {{count}} de rascunhos pendentes um a um: o que falhar continua pendente e os demais são publicados mesmo assim.',
4098
+ confirmNoteSeparate_other: 'Publicar libera os {{count}} rascunhos pendentes um a um: o que falhar continua pendente e os demais são publicados mesmo assim.',
3219
4099
  publishConfirm: 'Publicar tudo',
3220
- // [objectui#5418] Pre-publish security-posture findings, shown next to
4100
+ summaryItems: '{{count}} itens',
4101
+ summaryItems_one: '{{count}} item',
4102
+ summaryItems_many: '{{count}} de itens',
4103
+ summaryItems_other: '{{count}} itens',
4104
+ summaryType: '{{n}} {{type}}',
4105
+ typeCount: {
4106
+ object: '{{count}} objetos',
4107
+ object_one: '{{count}} objeto',
4108
+ object_many: '{{count}} de objetos',
4109
+ object_other: '{{count}} objetos',
4110
+ view: '{{count}} visualizações',
4111
+ view_one: '{{count}} visualização',
4112
+ view_many: '{{count}} de visualizações',
4113
+ view_other: '{{count}} visualizações',
4114
+ page: '{{count}} páginas',
4115
+ page_one: '{{count}} página',
4116
+ page_many: '{{count}} de páginas',
4117
+ page_other: '{{count}} páginas',
4118
+ dashboard: '{{count}} painéis',
4119
+ dashboard_one: '{{count}} painel',
4120
+ dashboard_many: '{{count}} de painéis',
4121
+ dashboard_other: '{{count}} painéis',
4122
+ app: '{{count}} aplicativos',
4123
+ app_one: '{{count}} aplicativo',
4124
+ app_many: '{{count}} de aplicativos',
4125
+ app_other: '{{count}} aplicativos',
4126
+ action: '{{count}} ações',
4127
+ action_one: '{{count}} ação',
4128
+ action_many: '{{count}} de ações',
4129
+ action_other: '{{count}} ações',
4130
+ report: '{{count}} relatórios',
4131
+ report_one: '{{count}} relatório',
4132
+ report_many: '{{count}} de relatórios',
4133
+ report_other: '{{count}} relatórios',
4134
+ flow: '{{count}} fluxos',
4135
+ flow_one: '{{count}} fluxo',
4136
+ flow_many: '{{count}} de fluxos',
4137
+ flow_other: '{{count}} fluxos',
4138
+ permission: '{{count}} conjuntos de permissões',
4139
+ permission_one: '{{count}} conjunto de permissões',
4140
+ permission_many: '{{count}} de conjuntos de permissões',
4141
+ permission_other: '{{count}} conjuntos de permissões',
4142
+ agent: '{{count}} agentes',
4143
+ agent_one: '{{count}} agente',
4144
+ agent_many: '{{count}} de agentes',
4145
+ agent_other: '{{count}} agentes',
4146
+ email_template: '{{count}} modelos de e-mail',
4147
+ email_template_one: '{{count}} modelo de e-mail',
4148
+ email_template_many: '{{count}} de modelos de e-mail',
4149
+ email_template_other: '{{count}} modelos de e-mail',
4150
+ },
4151
+ // objectui#12929 — the unchecked choice under an added object field whose
4152
+ // literal default the batch publish can write into the existing records.
4153
+ backfillOption: 'Preencher o valor padrão ({{count}} registros existentes)',
4154
+ backfillOption_one: 'Preencher o valor padrão ({{count}} registro existente)',
4155
+ backfillOption_many: 'Preencher o valor padrão ({{count}} de registros existentes)',
4156
+ backfillOption_other: 'Preencher o valor padrão ({{count}} registros existentes)',
4157
+ backfillOptionNoCount: 'Preencher o valor padrão',
4158
+ // [`7a90afdf9`] Pre-publish security-posture findings, shown next to
3221
4159
  // the confirm button so a refusal the door would issue is read BEFORE
3222
4160
  // the click rather than as a toast after the batch rolled back.
3223
4161
  securityBlockTitle: 'A publicação será recusada — {{count}} item(ns) precisam de uma decisão primeiro',
4162
+ securityBlockTitle_one: 'A publicação será recusada — {{count}} item precisa de uma decisão primeiro',
4163
+ securityBlockTitle_many: 'A publicação será recusada — {{count}} de itens precisam de uma decisão primeiro',
4164
+ securityBlockTitle_other: 'A publicação será recusada — {{count}} itens precisam de uma decisão primeiro',
3224
4165
  securityBlockWhere: 'Corrija no objeto em Configurações → Compartilhamento de registros e publique novamente.',
3225
4166
  },
3226
4167
  // ADR-0045 — the materialized-but-unlisted app banner
@@ -3245,7 +4186,7 @@ const pt = {
3245
4186
  revertLabel: 'Uma alteração foi desfeita',
3246
4187
  applyLabel: 'Alteração de compilação',
3247
4188
  revert: 'desfazer',
3248
- items: 'itens',
4189
+ items: 'Itens: {{count}}',
3249
4190
  revertAction: 'Desfazer',
3250
4191
  reverted: 'Desfeito — a alteração foi revertida.',
3251
4192
  revertFailed: 'Falha ao desfazer',
@@ -3274,28 +4215,32 @@ const pt = {
3274
4215
  rangeEnd: "Até",
3275
4216
  operators: {
3276
4217
  equals: "Igual a",
3277
- notEquals: "Diferente de",
4218
+ not_equals: "Diferente de",
3278
4219
  contains: "Contém",
3279
- containsCaseInsensitive: "Contém (ignorar maiúsculas)",
3280
- notContains: "Não contém",
3281
- isEmpty: "Está vazio",
3282
- isNotEmpty: "Não está vazio",
3283
- greaterThan: "Maior que",
3284
- lessThan: "Menor que",
3285
- greaterOrEqual: "Maior ou igual",
3286
- lessOrEqual: "Menor ou igual",
4220
+ icontains: "Contém (ignorar maiúsculas)",
4221
+ not_contains: "Não contém",
4222
+ is_empty: "Está vazio",
4223
+ is_not_empty: "Não está vazio",
4224
+ greater_than: "Maior que",
4225
+ less_than: "Menor que",
4226
+ greater_than_or_equal: "Maior ou igual",
4227
+ less_than_or_equal: "Menor ou igual",
3287
4228
  before: "Antes de",
3288
4229
  after: "Depois de",
3289
4230
  between: "Entre",
3290
4231
  in: "Em",
3291
- notIn: "Não em",
3292
- startsWith: "Começa com",
3293
- endsWith: "Termina com",
3294
- isNull: "É null",
3295
- isNotNull: "Não é null",
4232
+ not_in: "Não em",
4233
+ starts_with: "Começa com",
4234
+ ends_with: "Termina com",
4235
+ is_null: "É null",
4236
+ is_not_null: "Não é null",
3296
4237
  exists: "Está definido",
3297
4238
  notExists: "Não está definido",
3298
4239
  },
4240
+ emptyCheckHint: {
4241
+ text: '"{{isEmpty}}" também corresponde a texto em branco; "{{isNull}}" apenas a um valor ausente.',
4242
+ list: '"{{isEmpty}}" também corresponde a uma lista vazia; "{{isNull}}" apenas a um valor ausente.',
4243
+ },
3299
4244
  },
3300
4245
  sortBuilder: {
3301
4246
  sortBy: "Ordenar por",
@@ -3308,7 +4253,9 @@ const pt = {
3308
4253
  },
3309
4254
  collaboration: {
3310
4255
  commentCount: "{{count}} comentários",
3311
- commentCountOne: "{{count}} comentário",
4256
+ commentCount_one: "{{count}} comentário",
4257
+ commentCount_many: "{{count}} de comentários",
4258
+ commentCount_other: "{{count}} comentários",
3312
4259
  resolvedSuffix: " · Resolvido",
3313
4260
  sortComments: "Ordenar comentários",
3314
4261
  sortOldest: "Mais antigos",
@@ -3317,11 +4264,22 @@ const pt = {
3317
4264
  reopen: "Reabrir",
3318
4265
  justNow: "agora mesmo",
3319
4266
  minutesAgo: "há {{count}} min",
4267
+ minutesAgo_one: "há {{count}} min",
4268
+ minutesAgo_many: "há {{count}} min",
4269
+ minutesAgo_other: "há {{count}} min",
3320
4270
  hoursAgo: "há {{count}} h",
4271
+ hoursAgo_one: "há {{count}} h",
4272
+ hoursAgo_many: "há {{count}} h",
4273
+ hoursAgo_other: "há {{count}} h",
3321
4274
  daysAgo: "há {{count}} d",
4275
+ daysAgo_one: "há {{count}} d",
4276
+ daysAgo_many: "há {{count}} d",
4277
+ daysAgo_other: "há {{count}} d",
3322
4278
  edited: "(editado)",
3323
4279
  reactionCount: "{{count}} reações",
3324
- reactionCountOne: "{{count}} reação",
4280
+ reactionCount_one: "{{count}} reação",
4281
+ reactionCount_many: "{{count}} de reações",
4282
+ reactionCount_other: "{{count}} reações",
3325
4283
  addThumbsUp: "Adicionar curtida",
3326
4284
  reply: "Responder",
3327
4285
  reactThumbsUp: "Reagir com curtida",
@@ -3332,9 +4290,13 @@ const pt = {
3332
4290
  commentPlaceholder: "Adicionar um comentário… (use @ para mencionar)",
3333
4291
  send: "Enviar",
3334
4292
  presentUserCount: "{{count}} usuários presentes",
3335
- presentUserCountOne: "{{count}} usuário presente",
4293
+ presentUserCount_one: "{{count}} usuário presente",
4294
+ presentUserCount_many: "{{count}} de usuários presentes",
4295
+ presentUserCount_other: "{{count}} usuários presentes",
3336
4296
  moreUserCount: "mais {{count}} usuários",
3337
- moreUserCountOne: "mais {{count}} usuário",
4297
+ moreUserCount_one: "mais {{count}} usuário",
4298
+ moreUserCount_many: "mais {{count}} de usuários",
4299
+ moreUserCount_other: "mais {{count}} usuários",
3338
4300
  userStatusTitle: "{{name}} ({{status}})",
3339
4301
  statusActive: "ativo",
3340
4302
  statusIdle: "inativo",
@@ -3342,6 +4304,11 @@ const pt = {
3342
4304
  },
3343
4305
  wizard: {
3344
4306
  missingRequired: "Preencha os campos obrigatórios: {{fields}}",
4307
+ back: "Voltar",
4308
+ submitting: "Enviando…",
4309
+ stepFallback: "Etapa {{n}}",
4310
+ progressLabel: "Progresso",
4311
+ emptyStep: "Nenhum campo configurado para esta etapa",
3345
4312
  },
3346
4313
  flowRunner: {
3347
4314
  title: 'Entrada',
@@ -3391,6 +4358,8 @@ const pt = {
3391
4358
  setDefaultFailed: "Falha ao definir o aplicativo padrão: {{reason}}",
3392
4359
  appDeleted: "{{name}} excluído",
3393
4360
  deleteFailed: "Falha ao excluir o aplicativo: {{reason}}",
4361
+ nothingToDelete: "Nada a excluir para {{name}}: {{reason}}",
4362
+ alreadyAtDefault: "ele já está no padrão do seu pacote",
3394
4363
  bulkEnabled: "{{n}} aplicativos habilitados",
3395
4364
  bulkDisabled: "{{n}} aplicativos desabilitados",
3396
4365
  bulkFailed: "Falha em {{n}}: {{details}}",
@@ -3399,5 +4368,131 @@ const pt = {
3399
4368
  bulkOperationFailed: "Falha na operação em massa: {{reason}}",
3400
4369
  },
3401
4370
  },
4371
+ // objectui#6301 — Configuração › Automação de pacotes (ADR-0126 §7.4).
4372
+ // Terminologia do pack: `common.package` = Pacote, `flowRunner.completed` =
4373
+ // Fluxo, aspas "…". ⛔ Nenhuma formulação de linhagem ou desvio neste
4374
+ // grupo (§9).
4375
+ packagedAutomation: {
4376
+ title: "Automação de pacotes",
4377
+ subtitle: "Fluxos e ações fornecidos pelos pacotes instalados. Desligue um nesta implantação ou clone um fluxo com um novo nome para personalizá-lo. A edição acontece no Studio.",
4378
+ refresh: "Atualizar",
4379
+ flowsHeading: "Fluxos de pacote",
4380
+ actionsHeading: "Ações de pacote",
4381
+ colFlow: "Fluxo",
4382
+ colActivation: "Ativação",
4383
+ colActions: "Ações",
4384
+ toggleLabel: "Ativação de {{label}}",
4385
+ on: "Ativado",
4386
+ off: "Desativado",
4387
+ notRunning: "Não está em execução aqui",
4388
+ clone: "Clonar",
4389
+ cloneTitle: "Clonar fluxo do pacote",
4390
+ cloneBody: "A cópia mantém toda a definição e exige um novo nome de máquina e um novo rótulo. Edite a cópia no Studio.",
4391
+ cloneName: "Novo nome de máquina",
4392
+ cloneLabel: "Novo rótulo",
4393
+ cancel: "Cancelar",
4394
+ cloneConfirm: "Criar clone",
4395
+ cloneCreated: 'Fluxo "{{name}}" criado.',
4396
+ cloneSwitchSourceOff: 'Desativar "{{label}}"',
4397
+ cloneSourceOff: 'O fluxo empacotado "{{label}}" está desativado.',
4398
+ cloneOpen: 'Abrir a cópia no Studio',
4399
+ emptyTitle: "Nenhum fluxo de pacote",
4400
+ emptyBody: "Nenhum pacote instalado fornece um fluxo de automação nesta implantação. Os fluxos que você mesmo cria ficam no Studio.",
4401
+ loadFailed: "Não foi possível carregar a automação de pacotes.",
4402
+ toggleFailedHttp: "Não foi possível alterar a ativação (HTTP {{status}}).",
4403
+ toggleFailed: "Não foi possível alterar a ativação.",
4404
+ cloneFailedHttp: "Não foi possível clonar este fluxo (HTTP {{status}}).",
4405
+ cloneFailed: "Não foi possível clonar este fluxo.",
4406
+ reasonDetails: "Detalhes",
4407
+ actionsSubtitle: "Ações fornecidas pelos pacotes instalados. Desligue uma nesta implantação e ela deixa de ser executada em todos os lugares onde é oferecida. Criar sua própria ação ao lado dela continua disponível no Studio.",
4408
+ colAction: "Ação",
4409
+ colObject: "Objeto",
4410
+ actionToggleLabel: "Ativação de {{label}} em {{object}}",
4411
+ actionsEmptyTitle: "Nenhuma ação de pacote",
4412
+ actionsEmptyBody: "Nenhum pacote instalado declara uma ação nesta implantação. As ações que você mesmo cria ficam no Studio.",
4413
+ actionsLoadFailed: "Não foi possível carregar as ações de pacote.",
4414
+ },
4415
+ element: {
4416
+ number: {
4417
+ noObject: "Nenhum objeto indicado: defina dataSource.object.",
4418
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta métrica",
4419
+ },
4420
+ image: {
4421
+ noSource: "Sem fonte de imagem",
4422
+ },
4423
+ recordPicker: {
4424
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste seletor de registros",
4425
+ },
4426
+ calendar: {
4427
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste calendário",
4428
+ },
4429
+ chart: {
4430
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste gráfico",
4431
+ },
4432
+ pivotTable: {
4433
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta tabela dinâmica",
4434
+ },
4435
+ detailView: {
4436
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta visualização de detalhes",
4437
+ },
4438
+ relatedList: {
4439
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta lista relacionada",
4440
+ parentUnreadable: "Não foi possível ler o registro pai desta lista relacionada",
4441
+ },
4442
+ form: {
4443
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste formulário",
4444
+ },
4445
+ lineItems: {
4446
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste painel de itens",
4447
+ },
4448
+ gantt: {
4449
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste gráfico de Gantt",
4450
+ },
4451
+ grid: {
4452
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta grade",
4453
+ },
4454
+ board: {
4455
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste quadro",
4456
+ },
4457
+ listView: {
4458
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta visualização de lista",
4459
+ },
4460
+ map: {
4461
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste mapa",
4462
+ },
4463
+ timeline: {
4464
+ sourceUnresolved: "Não foi possível resolver a fonte de dados desta linha do tempo",
4465
+ },
4466
+ component: {
4467
+ sourceUnresolved: "Não foi possível resolver a fonte de dados deste componente",
4468
+ noDataSource: "Nenhuma fonte de dados resolvida",
4469
+ apiRefused: "A fonte de dados de API deste componente foi recusada",
4470
+ apiUnreadable: "Não foi possível ler a fonte de dados de API deste componente",
4471
+ },
4472
+ metadataViewer: {
4473
+ missingKey: "Falta {{key}} nesta visualização.",
4474
+ loading: "Carregando {{name}}…",
4475
+ loadFailed: "Falha ao carregar {{name}}: {{message}}",
4476
+ notFound: "{{name}} não encontrado.",
4477
+ stateMachine: "Máquina de estados",
4478
+ flow: "Fluxo",
4479
+ permission: "Permissão",
4480
+ noStateMachine: "Nenhuma máquina de estados em {{object}}.",
4481
+ noStateMachineNamed: "Nenhuma máquina de estados chamada “{{name}}” em {{object}}.",
4482
+ lifecycle: "Ciclo de vida de {{object}}",
4483
+ field: "campo {{field}}",
4484
+ initial: "início",
4485
+ final: "fim",
4486
+ steps: "Etapas: {{count}}",
4487
+ noSteps: "Nenhuma etapa para mostrar.",
4488
+ untitledStep: "(etapa)",
4489
+ hiddenSteps: "Etapas técnicas ocultas: {{count}} · defina {{setting}} para mostrar todas",
4490
+ objectAccess: "Acesso a objetos: {{count}}",
4491
+ noPermissions: "Nenhuma permissão de objeto declarada.",
4492
+ object: "Objeto",
4493
+ unknownType: "Tipo de visualização de metadados desconhecido. Esperado {{a}}, {{b}} ou {{c}}.",
4494
+ unknownTypeNamed: "Tipo de visualização de metadados desconhecido “{{type}}”. Esperado {{a}}, {{b}} ou {{c}}.",
4495
+ },
4496
+ },
3402
4497
  };
3403
4498
  export default pt;