iachat/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json
Cayo P. R. Oliveira a06354c6b2
feat: scheduled message shortcuts (#238)
* feat(scheduled-messages): add predefined time shortcuts for scheduling

Replace the manual date/time picker with predefined day and time period
chip selectors for faster message scheduling.

Day shortcuts: Today, Tomorrow, This weekend (Sat), Next week (Mon),
Next weekend (next Sat), Next month (1st), Custom (date picker fallback).

Time period shortcuts: Morning (8:00), Afternoon (13:00), Evening (18:00).

Each day chip shows the corresponding date (dd/MM) in secondary color.
Past time periods for 'Today' are automatically disabled.
The existing date picker is preserved as the 'Custom' option.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor(scheduled-messages): use dropdown selectors and remove header

Replace chip/button selectors with native <select> dropdowns for day
and time period selection. Remove the 'Date and time to send' header
from the modal since the dropdown labels serve as placeholders.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): close datepicker on confirm and click-outside

Removed manual open/close state management and @click.stop that was
blocking click-outside detection. Added confirm prop so the picker
has an explicit OK button and auto-closes properly.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): initialize custom mode when editing existing schedule

When editing a scheduled message, the ScheduleDateShortcuts component
now detects the pre-existing datetime and opens in Custom mode with
the datepicker pre-filled, preserving the original date and time.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): use locale-aware date format in shortcuts

Replace hardcoded dd/MM format with Intl.DateTimeFormat using
navigator.language, matching the existing locale-aware pattern
in DatePickerHelper.js. Removes unused date-fns format import.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): use app locale for date formatting

Replace navigator.language with the i18n app locale for shortcut date
labels and datepicker calendar. Add getDatePickerLang helper that
generates locale-aware day/month names via Intl.DateTimeFormat.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): normalize locale tag to BCP 47 format

Chatwoot uses underscore locale tags (pt_BR) but Intl.DateTimeFormat
requires BCP 47 hyphens (pt-BR). Add toBcp47 normalizer to prevent
RangeError: invalid language tag.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): locale-aware time period display

Add formatHour helper using Intl.DateTimeFormat so time periods
show 8:00/13:00/18:00 in pt-BR and 8:00 AM/1:00 PM/6:00 PM in en.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* test(scheduled-messages): add unit tests for scheduleDateShortcutHelpers

Cover getShortcutDate (weekday/Saturday/Sunday edge cases),
applyTimePeriod, isTimePeriodPast, formatShortDate, formatHour,
getDatePickerLang, and getDayShortcutOptions including locale
normalization for underscore tags like pt_BR.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): sync customDateTime when modelValue changes in custom mode

Keep DatePicker in sync when the parent changes modelValue while
already in Custom mode (e.g. switching between scheduled messages).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): add aria-labels to schedule dropdown selects

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(scheduled-messages): use empty string instead of null for dateTimeError

Avoids Vue prop validation warning since ScheduleDateShortcuts
declares dateTimeError as a String prop.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor(scheduled-messages): simplify to 3 fixed schedule shortcuts

Replace two dropdown selectors (6 day options × 3 time periods) with
3 pre-computed clickable shortcut buttons:
- Tomorrow morning (08:00)
- Tomorrow afternoon (13:00)
- Monday morning (08:00)

Each shortcut shows the exact calendar date and time for clarity.

Special Sunday rule: 'Monday' points to next week's Monday since
'Tomorrow' already covers the immediate Monday.

The 'Custom' option with full DatePicker is preserved.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(scheduled-messages): Gmail-style list design for schedule shortcuts

Replace chip buttons with full-width clickable rows in a bordered
container, matching Gmail's 'Schedule send' dialog pattern:
- Label on left, formatted date/time on right in gray
- Calendar icon for the custom date/time option
- Subtle border separators between rows
- Selected state with blue highlight

Also improves date formatting from '15/03' to '15 de mar.' using
month short names for better readability.

Updates i18n:
- PT_BR: 'Amanhã à tarde', 'Escolher data e hora'
- EN: 'Choose date and time'

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(scheduled-messages): improve modal layout and datepicker positioning

- Add 'Schedule send' / 'Programar envio' section header above the
  schedule shortcuts for clear visual identification
- Move attachment/template controls next to the message editor so
  content-related actions stay grouped together
- Move datepicker outside the bordered shortcut container to avoid
  cramped positioning; add rounded-xl and proper text sizing
- Add i18n key SCHEDULE_LABEL (en: 'Schedule send', pt_BR: 'Programar envio')

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* refactor(schedule): replace popup datepicker with inline calendar

Replace the popup-style vue-datepicker-next with an inline calendar
(same approach used by the snooze feature), rendering the calendar
directly within the modal for a more intuitive UX.

- Switch DatePicker to inline mode (no popup/z-index issues)
- Add disablePastTimes validation (prevents selecting past times)
- Full-width responsive calendar with scoped deep styles
- Remove unused DATETIME_PLACEHOLDER and DATETIME_FORMAT i18n keys

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(schedule): replace datepicker with natural language input

Replace the broken inline datepicker with a natural language text input
powered by chrono-node, similar to Chatwoot's upcoming snooze UX.

Users can now type dates naturally:
- EN: 'tomorrow at 2pm', 'next friday morning', 'in 3 hours'
- PT: 'amanhã às 14h', 'próxima sexta de manhã', '20 de março às 10h'

Changes:
- Add chrono-node dependency for natural language date parsing
- Add preProcessDateInput() to normalize PT time expressions (8h→8:00,
  de manhã→8:00, à tarde→13:00, de noite→18:00)
- Add parseNaturalDate() with locale-aware parsing (PT/EN)
- Add formatFullDateTime() for parsed date preview display
- Replace DatePicker with text input + real-time parsed date preview
- Show green checkmark when date is valid, amber warning if in the past,
  hint text if input is unrecognizable
- Remove unused getDatePickerLang() and vue-datepicker-next import
- Remove unused DATETIME_PLACEHOLDER/DATETIME_FORMAT i18n keys
- Update i18n: CUSTOM label, placeholder, hint, and past-date warning
- Update tests: 40 tests covering new functions (was 29)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): improve PT natural language preprocessing

Normalize accent-less input common in casual Brazilian Portuguese:
- 'amanha' → 'amanhã', 'sabado' → 'sábado', 'proxima' → 'próxima'
- 'as' → 'às' before digits or time-of-day words (e.g. 'as 19h')
- Support 'pela manhã/tarde/noite' and 'no período da manhã/tarde/noite'

Previously 'Amanhã as 19h' failed because chrono-node requires 'às'
(with accent) as a time connector. Now all common casual PT patterns
work reliably.

Tests: 50 passing (was 40)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): use forwardDate to always parse weekdays as upcoming

chrono-node defaults to the *most recent* occurrence of a weekday,
so 'sexta' on Monday returned last Friday (past). Adding
{ forwardDate: true } makes it always return the next occurrence.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* feat(schedule): add datepicker fallback and dual-language parsing

- Add discrete calendar icon button next to text input that toggles
  an inline vue-datepicker-next with date+time selection
- Try both chrono.pt and chrono (EN) parsers, pick the one that
  matches more of the input text — supports mixed-language input
  like 'quarta 10am' or 'friday às 14h'
- Insert 'às' connector between PT weekday names and bare numbers
  so 'quarta 10' parses correctly (chrono.pt requires the connector)
- Add DATEPICKER_TOOLTIP i18n key (EN + PT_BR)

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): toggle between text input and datepicker views

When calendar button is clicked, hide the natural language text input
and show the inline datepicker full-width. A small 'Type a date and
time' link below the calendar lets users switch back to text input.
Calendar button is vertically centered with the input field (size-[34px]
matches input height).

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): align calendar button with text input height

Use self-stretch instead of fixed size so the button stretches to
match the input height in the flex row, eliminating misalignment.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): adjust margin for custom text input in date shortcuts

* fix(schedule): use popup datepicker with datetime and confirm

Replace the inline datepicker toggle with a popup DatePicker that
opens directly from the calendar button. Uses type='datetime' with
confirm mode so users can pick both date and time. On confirm, the
selected datetime populates the natural language text field. The text
input and calendar button are always visible side by side.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): hide seconds column in datepicker

Add :show-second='false' to only show hour and minute selection.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* fix(schedule): adjust DatePicker width for better responsiveness

* refactor(schedule): use locale for parser priority and add aria-label

- parseNaturalDate now uses locale to call the matching parser first
  (chrono.pt for PT, chrono for EN) before falling back to the other,
  removing the eslint-disable comment for unused locale param
- Add aria-label to the natural language date input for screen readers

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>

* chore: remove leftover planning files

---------

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: gabrieljablonski <contact@gabrieljablonski.com>
2026-03-19 22:43:51 -03:00

554 lines
24 KiB
JSON

{
"CONVERSATION": {
"SELECT_A_CONVERSATION": "Por favor, selecione uma conversa no painel da esquerda",
"CSAT_REPLY_MESSAGE": "Por favor, classifique a conversa",
"404": "Desculpe, não conseguimos encontrar a conversa. Por favor, tente novamente",
"SWITCH_VIEW_LAYOUT": "Alternar o layout",
"DASHBOARD_APP_TAB_MESSAGES": "Mensagens",
"UNVERIFIED_SESSION": "A identidade deste usuário não foi verificada",
"NO_MESSAGE_1": "Oh oh! Parece que não há mensagens de clientes na sua caixa de entrada.",
"NO_MESSAGE_2": " para enviar uma mensagem para sua página!",
"NO_INBOX_1": "Hola! Parece que você não adicionou nenhuma caixa de entrada ainda.",
"NO_INBOX_2": " para começar",
"NO_INBOX_AGENT": "Uh Oh! Parece que você não faz parte de nenhuma caixa de entrada. Por favor, contate seu administrador",
"SEARCH_MESSAGES": "Pesquisar por mensagens nas conversas",
"VIEW_ORIGINAL": "Ver original",
"VIEW_TRANSLATED": "Ver traduzido",
"EMPTY_STATE": {
"CMD_BAR": "para abrir o menu de comando",
"KEYBOARD_SHORTCUTS": "para ver os atalhos de teclado"
},
"SEARCH": {
"TITLE": "Pesquisar mensagens",
"RESULT_TITLE": "Resultados da Pesquisa",
"LOADING_MESSAGE": "Preparando dados...",
"PLACEHOLDER": "Digite qualquer texto para pesquisar mensagens",
"NO_MATCHING_RESULTS": "Nenhum resultado encontrado."
},
"UNREAD_MESSAGES": "Mensagens não lidas",
"UNREAD_MESSAGE": "Mensagem não lida",
"CLICK_HERE": "Clique aqui",
"LOADING_INBOXES": "Carregando caixas de entrada",
"LOADING_CONVERSATIONS": "Carregando conversas",
"CANNOT_REPLY": "Você não pode responder porque",
"24_HOURS_WINDOW": "Restrições de janela de mensagem de 24 horas",
"48_HOURS_WINDOW": "Restrição de janela de mensagem de 48 horas",
"API_HOURS_WINDOW": "Você só pode responder a esta conversa em {hours} horas",
"NOT_ASSIGNED_TO_YOU": "Esta conversa não está atribuída a você. Gostaria de atribuir esta conversa a você mesmo?",
"ASSIGN_TO_ME": "Atribuir a mim",
"BOT_HANDOFF_MESSAGE": "Você está respondendo a uma conversa que é atualmente tratada por um assistente ou um robô.",
"BOT_HANDOFF_ACTION": "Marcar como aberta e atribuir a você",
"BOT_HANDOFF_REOPEN_ACTION": "Marcar conversa como aberta",
"BOT_HANDOFF_SUCCESS": "Uma conversa foi atribuída a você",
"BOT_HANDOFF_ERROR": "Falha ao resolver conversas. Por favor, tente novamente.",
"TWILIO_WHATSAPP_CAN_REPLY": "Você só pode responder a esta conversa usando um modelo de mensagem devido a",
"TWILIO_WHATSAPP_24_HOURS_WINDOW": "Restrições de janela de mensagem de 24 horas",
"ANNOUNCEMENT_MODE_BANNER": "Apenas administradores têm permissão para enviar mensagens neste grupo",
"GROUP_LEFT_BANNER": "Você não faz mais parte deste grupo e não pode enviar mensagens nele",
"GROUPS_DISABLED_BANNER": "As mensagens de grupo estão desativadas. Ative o suporte completo a grupos (gratuito) para ver e enviar mensagens.",
"GROUPS_DISABLED_CTA": "Saiba como ativar (gratuito)",
"OLD_INSTAGRAM_INBOX_REPLY_BANNER": "Esta conta do Instagram foi migrada para a nova caixa de entrada do canal do Instagram. Todas as novas mensagens serão mostradas lá. Você não poderá mais enviar mensagens desta conversa.",
"REPLYING_TO": "Você está respondendo a:",
"REMOVE_SELECTION": "Remover seleção",
"DOWNLOAD": "Baixar",
"UNKNOWN_FILE_TYPE": "Arquivo desconhecido",
"SAVE_CONTACT": "Salvar contato",
"NO_CONTENT": "Nenhum conteúdo a ser exibido",
"SHARED_ATTACHMENT": {
"CONTACT": "{sender} compartilhou um contato",
"LOCATION": "{sender} compartilhou uma localização",
"FILE": "{sender} compartilhou um arquivo",
"MEETING": "{sender} começou a reunião"
},
"UPLOADING_ATTACHMENTS": "Enviando anexos...",
"REPLIED_TO_STORY": "Respondido ao seu story",
"UNSUPPORTED_MESSAGE": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo.",
"UNSUPPORTED_MESSAGE_WHATSAPP": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo do WhatsApp.",
"UNSUPPORTED_MESSAGE_FACEBOOK": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo Facebook Messenger.",
"UNSUPPORTED_MESSAGE_INSTAGRAM": "Esta mensagem não é suportada. Você pode ver esta mensagem no aplicativo do Instagram.",
"SUCCESS_DELETE_MESSAGE": "Mensagem excluída com sucesso",
"FAIL_DELETE_MESSSAGE": "Não foi possível excluir a mensagem! Tente novamente",
"NO_RESPONSE": "Sem resposta",
"RESPONSE": "Resposta",
"RATING_TITLE": "Classificação",
"FEEDBACK_TITLE": "Feedback",
"REPLY_MESSAGE_NOT_FOUND": "Mensagem não disponível",
"CARD": {
"SHOW_LABELS": "Mostrar etiquetas",
"HIDE_LABELS": "Ocultar as etiquetas"
},
"VOICE_CALL": {
"INCOMING_CALL": "Chamada recebida",
"OUTGOING_CALL": "Chamada realizada",
"CALL_IN_PROGRESS": "Chamada em andamento",
"NO_ANSWER": "Sem resposta",
"MISSED_CALL": "Chamada perdida",
"CALL_ENDED": "Chamada encerrada",
"NOT_ANSWERED_YET": "Ainda não respondido",
"THEY_ANSWERED": "Eles responderam",
"YOU_ANSWERED": "Você respondeu"
},
"HEADER": {
"RESOLVE_ACTION": "Resolver",
"REOPEN_ACTION": "Reabrir",
"OPEN_ACTION": "Abrir",
"MORE_ACTIONS": "Mais ações",
"OPEN": "Mais",
"CLOSE": "Fechar",
"DETAILS": "detalhes",
"SNOOZED_UNTIL": "Adiar até",
"SNOOZED_UNTIL_TOMORROW": "Adiado até amanhã",
"SNOOZED_UNTIL_NEXT_WEEK": "Adiada até a próxima semana",
"SNOOZED_UNTIL_NEXT_REPLY": "Adiado até a próxima resposta",
"SLA_STATUS": {
"FRT": "FRT {status}",
"NRT": "NRT {status}",
"RT": "RT {status}",
"MISSED": "perdidas",
"DUE": "venceu"
}
},
"RESOLVE_DROPDOWN": {
"MARK_PENDING": "Deixar pendente",
"SNOOZE_UNTIL": "Adiar",
"SNOOZE": {
"TITLE": "Suspender até",
"NEXT_REPLY": "Próxima resposta",
"TOMORROW": "Amanhã",
"NEXT_WEEK": "Próxima semana"
}
},
"MENTION": {
"AGENTS": "Agentes",
"TEAMS": "Times"
},
"CUSTOM_SNOOZE": {
"TITLE": "Adiar até",
"APPLY": "Adiar",
"CANCEL": "Cancelar"
},
"PRIORITY": {
"TITLE": "Prioridade",
"OPTIONS": {
"NONE": "Nenhuma",
"URGENT": "Urgente",
"HIGH": "Alta",
"MEDIUM": "Média",
"LOW": "Baixa"
},
"CHANGE_PRIORITY": {
"SELECT_PLACEHOLDER": "Nenhuma",
"INPUT_PLACEHOLDER": "Selecionar prioridade",
"NO_RESULTS": "Nenhum resultado encontrado",
"SUCCESSFUL": "Alterada a prioridade do ID da conversa {conversationId} para {priority}",
"FAILED": "Não foi possível alterar a prioridade. Por favor, tente novamente."
}
},
"DELETE_CONVERSATION": {
"TITLE": "Excluir conversa #{conversationId}",
"DESCRIPTION": "Tem certeza que deseja excluir esta conversa?",
"CONFIRM": "Excluir"
},
"CARD_CONTEXT_MENU": {
"PENDING": "Deixar pendente",
"RESOLVED": "Marcar como resolvida",
"MARK_AS_UNREAD": "Marcar como não lida",
"MARK_AS_READ": "Marcar como lida",
"REOPEN": "Reabrir conversa",
"SNOOZE": {
"TITLE": "Adiar",
"NEXT_REPLY": "Até a próxima resposta",
"TOMORROW": "Até amanhã",
"NEXT_WEEK": "Até a próxima semana"
},
"ASSIGN_AGENT": "Atribuir Agente",
"ASSIGN_LABEL": "Atribuir etiqueta",
"AGENTS_LOADING": "Carregando agentes...",
"ASSIGN_TEAM": "Atribuir time",
"DELETE": "Excluir conversa",
"OPEN_IN_NEW_TAB": "Abrir em nova aba",
"COPY_LINK": "Copiar link da conversa",
"COPY_LINK_SUCCESS": "Link da conversa copiado",
"API": {
"AGENT_ASSIGNMENT": {
"SUCCESFUL": "ID da conversa {conversationId} atribuído para \"{agentName}\"",
"FAILED": "Não foi possível atribuir agente. Por favor, tente novamente."
},
"LABEL_ASSIGNMENT": {
"SUCCESFUL": "Etiqueta #{labelName} atribuída para a conversa {conversationId}",
"FAILED": "Não foi possível atribuir etiqueta. Por favor, tente novamente."
},
"TEAM_ASSIGNMENT": {
"SUCCESFUL": "Time {team} atribuído para o id de conversa {conversationId}",
"FAILED": "Não foi possível atribuir time. Por favor, tente novamente."
}
}
},
"FOOTER": {
"MESSAGE_SIGN_TOOLTIP": "Assinatura de mensagem",
"ENABLE_SIGN_TOOLTIP": "Ativar assinatura",
"DISABLE_SIGN_TOOLTIP": "Desativar assinatura",
"SIGNATURE_LABEL_TOP": "↓ Assinatura",
"SIGNATURE_LABEL_TOP_TOOLTIP": "A assinatura será enviada no início da mensagem",
"SIGNATURE_LABEL_BOTTOM": "↑ Assinatura",
"SIGNATURE_LABEL_BOTTOM_TOOLTIP": "A assinatura será enviada no final da mensagem",
"MSG_INPUT": "Shift + enter para nova linha. Digite '/' para selecionar uma Resposta Pronta.",
"PRIVATE_MSG_INPUT": "A mensagem será visível apenas para agentes",
"MESSAGE_SIGNATURE_NOT_CONFIGURED": "A assinatura da mensagem não está configurada. Por favor, configure-a nas configurações do perfil.",
"CLICK_HERE": "Clique aqui para atualizar",
"WHATSAPP_TEMPLATES": "Templates do Whatsapp",
"ANNOUNCEMENT_MODE_RESTRICTED": "Apenas administradores têm permissão para enviar mensagens neste grupo",
"GROUP_LEFT_RESTRICTED": "Você não faz mais parte deste grupo e não pode enviar mensagens nele",
"GROUPS_DISABLED_RESTRICTED": "As mensagens de grupo estão desativadas — ative gratuitamente"
},
"REPLYBOX": {
"REPLY": "Responder",
"PRIVATE_NOTE": "Mensagem Privada",
"SEND": "Enviar",
"CREATE": "Enviar",
"INSERT_READ_MORE": "Ler mais",
"DISMISS_REPLY": "Dispensar resposta",
"REPLYING_TO": "Respondendo a:",
"TIP_EMOJI_ICON": "Mostrar seletor de emoji",
"TIP_ATTACH_ICON": "Anexar arquivos",
"TIP_AUDIORECORDER_ICON": "Gravar áudio",
"TIP_AUDIORECORDER_PERMISSION": "Permitir acesso ao áudio",
"TIP_AUDIORECORDER_ERROR": "Não foi possível abrir o áudio",
"AUDIO_CONVERSION_FAILED": "Falha na conversão do áudio. Tente novamente.",
"DRAG_DROP": "Arraste e solte aqui para anexar",
"START_AUDIO_RECORDING": "Iniciar gravação de áudio",
"STOP_AUDIO_RECORDING": "Parar gravação de áudio",
"": "",
"EMAIL_HEAD": {
"TO": "Para",
"ADD_BCC": "Adicionar cco",
"CC": {
"LABEL": "CC",
"PLACEHOLDER": "E-mails separados por vírgulas",
"ERROR": "Por favor, insira endereços de e-mail válidos"
},
"BCC": {
"LABEL": "Cco",
"PLACEHOLDER": "E-mails separados por vírgulas",
"ERROR": "Por favor, insira endereços de e-mail válidos"
}
},
"UNDEFINED_VARIABLES": {
"TITLE": "Variáveis não definidas",
"MESSAGE": "Você tem {undefinedVariablesCount} variáveis não definidas em sua mensagem: {undefinedVariables}. Gostaria de enviar a mensagem mesmo assim?",
"CONFIRM": {
"YES": "Enviar",
"CANCEL": "Cancelar"
}
},
"QUOTED_REPLY": {
"ENABLE_TOOLTIP": "Incluir o encadeamento de e-mails citado",
"DISABLE_TOOLTIP": "Não incluir o encadeamento de e-mails citado",
"REMOVE_PREVIEW": "Remover o encadeamento de e-mails citado",
"COLLAPSE": "Recolher a prévia",
"EXPAND": "Expandir a prévia"
},
"SCHEDULE_SEND": "Agendar envio"
},
"VISIBLE_TO_AGENTS": "Mensagem Privada: Apenas visível para você e seu time",
"CHANGE_STATUS": "Estado da conversa mudou",
"CHANGE_STATUS_FAILED": "Mudança de status da conversa falhou",
"CHANGE_AGENT": "Novo agente atribuído",
"CHANGE_AGENT_FAILED": "Falha ao atribuir outro agente",
"ASSIGN_LABEL_SUCCESFUL": "Etiqueta atribuída com sucesso",
"ASSIGN_LABEL_FAILED": "Falha ao atribuir etiqueta",
"CHANGE_TEAM": "Status da conversa mudou",
"SUCCESS_DELETE_CONVERSATION": "Conversa excluída com sucesso",
"FAIL_DELETE_CONVERSATION": "Não foi possível excluir a conversa! Tente novamente",
"FILE_SIZE_LIMIT": "O arquivo excede os {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB do limite para anexos",
"MESSAGE_ERROR": "Não foi possível enviar esta mensagem, por favor, tente novamente mais tarde",
"SENT_BY": "Enviado por:",
"BOT": "Robôs",
"WHATSAPP": "WhatsApp",
"SEND_FAILED": "Não foi possível enviar a mensagem! Tente novamente",
"TRY_AGAIN": "tentar novamente",
"ASSIGNMENT": {
"SELECT_AGENT": "selecionar Agente",
"REMOVE": "Excluir",
"ASSIGN": "Atribuir"
},
"CONTEXT_MENU": {
"COPY": "Copiar",
"REPLY_TO": "Responder mensagem",
"DELETE": "Excluir",
"CREATE_A_CANNED_RESPONSE": "Adicionar às respostas prontas",
"TRANSLATE": "Traduzir",
"COPY_PERMALINK": "Copiar link para a mensagem",
"LINK_COPIED": "URL da mensagem copiada para a área de transferência",
"DELETE_CONFIRMATION": {
"TITLE": "Você tem certeza que deseja excluir esta mensagem?",
"MESSAGE": "Você não pode desfazer essa ação",
"DELETE": "Excluir",
"CANCEL": "Cancelar"
},
"EDIT": {
"LABEL": "Editar",
"TITLE": "Editar mensagem",
"PLACEHOLDER": "Digite o conteúdo da mensagem",
"SAVE": "Salvar",
"CANCEL": "Cancelar",
"SUCCESS": "Mensagem editada com sucesso",
"ERROR": "Falha ao editar mensagem",
"EMPTY_CONTENT": "O conteúdo da mensagem não pode estar vazio"
}
},
"SIDEBAR": {
"CONTACT": "Contatos",
"COPILOT": "Copiloto"
},
"VOICE_WIDGET": {
"INCOMING_CALL": "Chamada recebida",
"OUTGOING_CALL": "Chamada realizada",
"CALL_IN_PROGRESS": "Chamada em andamento",
"NOT_ANSWERED_YET": "Ainda não respondido",
"HANDLED_IN_ANOTHER_TAB": "Sendo atendida em outra aba",
"REJECT_CALL": "Recusar",
"JOIN_CALL": "Entrar na chamada",
"END_CALL": "Encerrar chamada"
},
"INBOX": {
"WHATSAPP_PROVIDER_CONNECTION": {
"NOT_CONNECTED": "O WhatsApp não está conectado. Por favor conecte o seu dispositivo novamente.",
"NOT_CONNECTED_CONTACT_ADMIN": "O WhatsApp não está conectado. Clique no botão ao lado para tentar reconectar, ou contate o seu administrador para conectar o dispositivo novamente.",
"LINK_DEVICE": "Conectar dispositivo",
"RECONNECT_FAILED": "Falha ao reconectar. Por favor, contate o seu administrador para conectar o dispositivo novamente."
}
}
},
"EMAIL_TRANSCRIPT": {
"TITLE": "Enviar transcrição de conversa",
"DESC": "Enviar uma cópia da transcrição da conversa para o endereço de e-mail especificado",
"SUBMIT": "Enviar",
"CANCEL": "Cancelar",
"SEND_EMAIL_SUCCESS": "A transcrição do chat foi enviada com sucesso",
"SEND_EMAIL_ERROR": "Ocorreu um erro, por favor tente novamente",
"FORM": {
"SEND_TO_CONTACT": "Envie a transcrição para o cliente",
"SEND_TO_AGENT": "Envie a transcrição para o agente designado",
"SEND_TO_OTHER_EMAIL_ADDRESS": "Enviar a transcrição para outro endereço de e-mail",
"EMAIL": {
"PLACEHOLDER": "Digite um endereço de e-mail",
"ERROR": "Por favor, insira um endereço de e-mail válido"
}
}
},
"ONBOARDING": {
"TITLE": "Olá, 👋. Bem-vindo ao {installationName}!",
"DESCRIPTION": "Obrigado por se inscrever. Queremos que você aproveite o máximo de {installationName}. Aqui estão algumas coisas que você consegue fazer em {installationName} para que tenha uma experiência agradável.",
"GREETING_MORNING": "👋 Bom dia, {name}. Bem-vindo a {installationName}.",
"GREETING_AFTERNOON": "👋 Boa tarde, {name}. Bem-vindo a {installationName}.",
"GREETING_EVENING": "👋 Boa noite, {name}. Bem-vindo a {installationName}.",
"READ_LATEST_UPDATES": "Leia as últimas atualizações",
"ALL_CONVERSATION": {
"TITLE": "Todas as suas conversas em um só lugar",
"DESCRIPTION": "Veja todas as conversas dos seus clientes em um único painel. Você pode filtrar as conversas pelo canal de entrada, rótulo e status.",
"NEW_LINK": "Clique aqui para criar uma caixa de entrada"
},
"TEAM_MEMBERS": {
"TITLE": "Convidar membros de seu time",
"DESCRIPTION": "Já que você está se preparando para conversar com seu cliente, traga seus colegas para ajudá-lo. Você pode convidar seus colegas adicionando os endereços de e-mail deles na lista de agentes.",
"NEW_LINK": "Clique aqui para convidar um membro do time"
},
"LABELS": {
"TITLE": "Organizar conversas com etiquetas",
"DESCRIPTION": "Etiquetas fornecem uma forma mais fácil de organizar a sua conversa. Criar algumas etiquetas como #solicitação-suporte, #fatura-assunto etc., assim você poderá futuramente utiliza-las em uma conversa posteriormente.",
"NEW_LINK": "Clique aqui para criar etiquetas"
},
"CANNED_RESPONSES": {
"TITLE": "Criar respostas prontas",
"DESCRIPTION": "Os modelos de respostas prontas ajudam você a responder rapidamente a uma conversa. Os agentes podem digitar o caractere '/' seguido pelo atalho para inserir uma resposta.",
"NEW_LINK": "Clique aqui para criar uma resposta pronta"
}
},
"CONVERSATION_SIDEBAR": {
"ASSIGNEE_LABEL": "Agente atribuído",
"SELF_ASSIGN": "Atribuir a mim",
"TEAM_LABEL": "Time atribuído",
"SELECT": {
"PLACEHOLDER": "Nenhuma"
},
"ACCORDION": {
"CONTACT_DETAILS": "Detalhes do contato",
"SCHEDULED_MESSAGES": "Mensagens agendadas",
"CONVERSATION_ACTIONS": "Ações da conversa",
"CONVERSATION_LABELS": "Etiquetas da conversa",
"CONVERSATION_INFO": "Informação da conversa",
"CONTACT_NOTES": "Notas do contato",
"CONTACT_ATTRIBUTES": "Atributos do contato",
"PREVIOUS_CONVERSATION": "Conversas anteriores",
"MACROS": "Macros",
"LINEAR_ISSUES": "Problemas do Linear vinculados",
"SHOPIFY_ORDERS": "Shopify Orders"
},
"SHOPIFY": {
"ORDER_ID": "Order #{id}",
"ERROR": "Error loading orders",
"NO_SHOPIFY_ORDERS": "No orders found",
"FINANCIAL_STATUS": {
"PENDING": "Pendentes",
"AUTHORIZED": "Authorized",
"PARTIALLY_PAID": "Partially Paid",
"PAID": "Paid",
"PARTIALLY_REFUNDED": "Partially Refunded",
"REFUNDED": "Refunded",
"VOIDED": "Voided"
},
"FULFILLMENT_STATUS": {
"FULFILLED": "Fulfilled",
"PARTIALLY_FULFILLED": "Partially Fulfilled",
"UNFULFILLED": "Unfulfilled"
}
}
},
"SCHEDULED_MESSAGES": {
"NEW_BUTTON": "Agendar mensagem",
"PAST_MESSAGES_SECTION": "Enviadas",
"EMPTY_STATE": "Ainda não há mensagens agendadas.",
"STATUS": {
"DRAFT": "Rascunho",
"PENDING": "Pendente",
"SENT": "Enviada",
"FAILED": "Falhou"
},
"ITEM": {
"SCHEDULED_FOR": "Agendada para {time}",
"NO_SCHEDULE": "Sem agendamento",
"TEMPLATE_PREVIEW": "Modelo: {name}",
"TEMPLATE_LABEL": "Modelo: {name}",
"ATTACHMENT_PREVIEW": "Anexo: {filename}",
"ATTACHMENT_LABEL": "Anexo: {filename}",
"EMPTY_PREVIEW": "Sem conteúdo",
"EXPAND": "Expandir",
"COLLAPSE": "Recolher",
"GO_TO_MESSAGE": "Ir para a mensagem",
"SEARCHING_MESSAGE": "Buscando mensagem...",
"MESSAGE_NOT_FOUND": "A mensagem vinculada não foi encontrada. Ela pode ter sido excluída."
},
"MODAL": {
"TITLE_NEW": "Agendar mensagem",
"TITLE_EDIT": "Editar mensagem agendada",
"MESSAGE_LABEL": "Mensagem",
"MESSAGE_PLACEHOLDER": "Escreva sua mensagem...",
"DATETIME_LABEL": "Data e hora de envio",
"ATTACHMENT_LABEL": "Anexo",
"ATTACHMENT_ADD": "Anexar arquivo",
"ATTACHMENT_CURRENT": "Anexo atual: {filename}",
"TEMPLATE_SELECT": "Usar modelo",
"TEMPLATE_SELECTED": "Modelo: {name}",
"TEMPLATE_ACTION": "Agendar mensagem",
"CANCEL": "Cancelar",
"SAVE_DRAFT": "Salvar como rascunho",
"SCHEDULE": "Agendar",
"SHORTCUTS": {
"TOMORROW_MORNING": "Amanhã de manhã",
"TOMORROW_AFTERNOON": "Amanhã à tarde",
"MONDAY_MORNING": "Segunda-feira de manhã",
"CUSTOM": "Digitar data e hora"
},
"CUSTOM_INPUT_PLACEHOLDER": "ex: amanhã às 14h, próxima sexta de manhã",
"CUSTOM_INPUT_HINT": "Tente: amanhã às 15h, próxima segunda, 20 de março às 10h",
"PARSED_DATE_IN_PAST": "Esta data já passou",
"DATEPICKER_TOOLTIP": "Escolher no calendário",
"SCHEDULE_LABEL": "Programar envio"
},
"CONFIRM_CLOSE": {
"TITLE": "Alterações não salvas",
"MESSAGE": "Você tem conteúdo não salvo. Deseja descartar suas alterações?",
"CONTINUE_EDITING": "Continuar editando",
"DISCARD": "Descartar",
"CANCEL": "Cancelar"
},
"CONFIRM_DELETE": {
"TITLE": "Excluir mensagem agendada",
"MESSAGE": "Tem certeza de que deseja excluir esta mensagem agendada? Esta ação não pode ser desfeita.",
"CANCEL": "Cancelar",
"DELETE": "Excluir"
},
"ERRORS": {
"CONTENT_REQUIRED": "Adicione uma mensagem, template ou anexo antes de salvar.",
"CONTENT_TOO_LONG": "A mensagem é muito longa. Máximo de {maxLength} caracteres permitidos.",
"DATETIME_REQUIRED": "Selecione uma data e hora para agendar a mensagem.",
"SCHEDULE_IN_PAST": "O horário agendado deve ser no futuro.",
"SAVE_FAILED": "Não foi possível salvar a mensagem agendada. Por favor, tente novamente.",
"DELETE_FAILED": "Não foi possível excluir a mensagem agendada. Por favor, tente novamente."
},
"META": {
"TOOLTIP": "Agendada em {time} por {author}",
"YOU": "Você",
"AUTHOR_YOU": "{name} (Você)",
"AUTOMATION": "Automação",
"UNKNOWN_AUTHOR": "Desconhecido"
}
},
"CONVERSATION_CUSTOM_ATTRIBUTES": {
"ADD_BUTTON_TEXT": "Criar atributo",
"NO_RECORDS_FOUND": "Nenhum atributo encontrado",
"UPDATE": {
"SUCCESS": "Atributo atualizado com sucesso",
"ERROR": "Não foi possível atualizar o atributo. Por favor, tente mais tarde"
},
"ADD": {
"TITLE": "Adicionar",
"SUCCESS": "Atributo adicionado com sucesso",
"ERROR": "Não foi possível adicionar o atributo. Por favor, tente mais tarde"
},
"DELETE": {
"SUCCESS": "Atributo excluído com sucesso",
"ERROR": "Não foi possível excluir o atributo. Por favor, tente mais tarde"
},
"ATTRIBUTE_SELECT": {
"TITLE": "Adicionar atributos",
"PLACEHOLDER": "Procurar atributos",
"NO_RESULT": "Nenhum atributo encontrado"
}
},
"EMAIL_HEADER": {
"FROM": "De",
"TO": "Para",
"BCC": "CCO",
"CC": "Cc",
"SUBJECT": "Assunto",
"EXPAND": "Expandir e-mail"
},
"CONVERSATION_PARTICIPANTS": {
"SIDEBAR_MENU_TITLE": "Participantes",
"SIDEBAR_TITLE": "Participantes da conversa",
"NO_RECORDS_FOUND": "Nenhum resultado encontrado",
"ADD_PARTICIPANTS": "Selecionar participantes",
"REMANING_PARTICIPANTS_TEXT": "+{count} participantes",
"REMANING_PARTICIPANT_TEXT": "+{count} participante",
"TOTAL_PARTICIPANTS_TEXT": "{count} pessoas estão participando.",
"TOTAL_PARTICIPANT_TEXT": "{count} pessoa está participando.",
"NO_PARTICIPANTS_TEXT": "Ninguém está participando!",
"WATCH_CONVERSATION": "Participar da conversa",
"YOU_ARE_WATCHING": "Você está participando",
"API": {
"ERROR_MESSAGE": "Não foi possível atualizar, tente novamente!",
"SUCCESS_MESSAGE": "Participantes atualizados!"
}
},
"TRANSLATE_MODAL": {
"TITLE": "Ver conteúdo traduzido",
"DESC": "Você pode visualizar o conteúdo traduzido em cada idioma.",
"ORIGINAL_CONTENT": "Conteúdo original",
"TRANSLATED_CONTENT": "Conteúdo traduzido",
"NO_TRANSLATIONS_AVAILABLE": "Nenhuma tradução está disponível para este conteúdo"
},
"TYPING": {
"ONE": "{user} está digitando",
"TWO": "{user} e {secondUser} estão digitando",
"MULTIPLE": "{user} e {count} outros estão digitando"
},
"COPILOT": {
"TRY_THESE_PROMPTS": "Experimente estes comandos"
},
"GALLERY_VIEW": {
"ERROR_DOWNLOADING": "Não foi possível baixar o anexo. Por favor, tente novamente"
}
}