- {{ $t('TRANSLATE_MODAL.ORIGINAL_CONTENT') }} -
- --
-
- {{ $t('TRANSLATE_MODAL.TRANSLATED_CONTENT') }} -
-- {{ language }}: -
- --
- {{ $t('TRANSLATE_MODAL.NO_TRANSLATIONS_AVAILABLE') }} -
-diff --git a/Gemfile.lock b/Gemfile.lock
index 857319fc4..74a59167a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -561,7 +561,7 @@ GEM
activesupport (>= 3.0.0)
raabro (1.4.0)
racc (1.8.1)
- rack (2.2.12)
+ rack (2.2.13)
rack-attack (6.7.0)
rack (>= 1.0, < 4)
rack-contrib (2.5.0)
diff --git a/app/channels/room_channel.rb b/app/channels/room_channel.rb
index 0680f1458..629078229 100644
--- a/app/channels/room_channel.rb
+++ b/app/channels/room_channel.rb
@@ -2,10 +2,9 @@ class RoomChannel < ApplicationCable::Channel
def subscribed
# TODO: should we only do ensure stream if current account is present?
# for now going ahead with guard clauses in update_subscription and broadcast_presence
-
- ensure_stream
current_user
current_account
+ ensure_stream
update_subscription
broadcast_presence
end
@@ -22,12 +21,12 @@ class RoomChannel < ApplicationCable::Channel
data = { account_id: @current_account.id, users: ::OnlineStatusTracker.get_available_users(@current_account.id) }
data[:contacts] = ::OnlineStatusTracker.get_available_contacts(@current_account.id) if @current_user.is_a? User
- ActionCable.server.broadcast(@pubsub_token, { event: 'presence.update', data: data })
+ ActionCable.server.broadcast(pubsub_token, { event: 'presence.update', data: data })
end
def ensure_stream
- @pubsub_token = params[:pubsub_token]
- stream_from @pubsub_token
+ stream_from pubsub_token
+ stream_from "account_#{@current_account.id}" if @current_account.present? && @current_user.is_a?(User)
end
def update_subscription
@@ -36,11 +35,15 @@ class RoomChannel < ApplicationCable::Channel
::OnlineStatusTracker.update_presence(@current_account.id, @current_user.class.name, @current_user.id)
end
+ def pubsub_token
+ @pubsub_token ||= params[:pubsub_token]
+ end
+
def current_user
@current_user ||= if params[:user_id].blank?
- ContactInbox.find_by!(pubsub_token: @pubsub_token).contact
+ ContactInbox.find_by!(pubsub_token: pubsub_token).contact
else
- User.find_by!(pubsub_token: @pubsub_token, id: params[:user_id])
+ User.find_by!(pubsub_token: pubsub_token, id: params[:user_id])
end
end
diff --git a/app/controllers/api/v1/accounts/conversations_controller.rb b/app/controllers/api/v1/accounts/conversations_controller.rb
index 2cd5281ff..138c2bd68 100644
--- a/app/controllers/api/v1/accounts/conversations_controller.rb
+++ b/app/controllers/api/v1/accounts/conversations_controller.rb
@@ -6,6 +6,8 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
before_action :conversation, except: [:index, :meta, :search, :create, :filter]
before_action :inbox, :contact, :contact_inbox, only: [:create]
+ ATTACHMENT_RESULTS_PER_PAGE = 100
+
def index
result = conversation_finder.perform
@conversations = result[:conversations]
@@ -24,7 +26,12 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
end
def attachments
+ @attachments_count = @conversation.attachments.count
@attachments = @conversation.attachments
+ .includes(:message)
+ .order(created_at: :desc)
+ .page(attachment_params[:page])
+ .per(ATTACHMENT_RESULTS_PER_PAGE)
end
def show; end
@@ -124,6 +131,10 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro
params.permit(:priority)
end
+ def attachment_params
+ params.permit(:page)
+ end
+
def update_last_seen_on_conversation(last_seen_at, update_assignee)
# rubocop:disable Rails/SkipsModelValidations
@conversation.update_column(:agent_last_seen_at, last_seen_at)
diff --git a/app/controllers/api/v1/widget/campaigns_controller.rb b/app/controllers/api/v1/widget/campaigns_controller.rb
index cb9b96a38..10a73aa62 100644
--- a/app/controllers/api/v1/widget/campaigns_controller.rb
+++ b/app/controllers/api/v1/widget/campaigns_controller.rb
@@ -2,6 +2,10 @@ class Api::V1::Widget::CampaignsController < Api::V1::Widget::BaseController
skip_before_action :set_contact
def index
- @campaigns = @web_widget.inbox.campaigns.where(enabled: true)
+ @campaigns = @web_widget
+ .inbox
+ .campaigns
+ .where(enabled: true, account_id: @web_widget.inbox.account_id)
+ .includes(:sender)
end
end
diff --git a/app/controllers/api/v1/widget/inbox_members_controller.rb b/app/controllers/api/v1/widget/inbox_members_controller.rb
index c4bc377ea..22934388b 100644
--- a/app/controllers/api/v1/widget/inbox_members_controller.rb
+++ b/app/controllers/api/v1/widget/inbox_members_controller.rb
@@ -2,6 +2,6 @@ class Api::V1::Widget::InboxMembersController < Api::V1::Widget::BaseController
skip_before_action :set_contact
def index
- @inbox_members = @web_widget.inbox.inbox_members.includes(:user)
+ @inbox_members = @web_widget.inbox.inbox_members.includes(user: { avatar_attachment: :blob })
end
end
diff --git a/app/controllers/concerns/switch_locale.rb b/app/controllers/concerns/switch_locale.rb
index 3013ff3cc..a8ea8ae05 100644
--- a/app/controllers/concerns/switch_locale.rb
+++ b/app/controllers/concerns/switch_locale.rb
@@ -5,10 +5,11 @@ module SwitchLocale
def switch_locale(&)
# priority is for locale set in query string (mostly for widget/from js sdk)
- locale ||= locale_from_params
+ locale ||= params[:locale]
+
locale ||= locale_from_custom_domain
# if locale is not set in account, let's use DEFAULT_LOCALE env variable
- locale ||= locale_from_env_variable
+ locale ||= ENV.fetch('DEFAULT_LOCALE', nil)
set_locale(locale, &)
end
@@ -32,26 +33,30 @@ module SwitchLocale
end
def set_locale(locale, &)
- # if locale is empty, use default_locale
- locale ||= I18n.default_locale
+ safe_locale = validate_and_get_locale(locale)
# Ensure locale won't bleed into other requests
# https://guides.rubyonrails.org/i18n.html#managing-the-locale-across-requests
- I18n.with_locale(locale, &)
+ I18n.with_locale(safe_locale, &)
end
- def locale_from_params
- I18n.available_locales.map(&:to_s).include?(params[:locale]) ? params[:locale] : nil
+ def validate_and_get_locale(locale)
+ return I18n.default_locale.to_s if locale.blank?
+
+ available_locales = I18n.available_locales.map(&:to_s)
+ locale_without_variant = locale.split('_')[0]
+
+ if available_locales.include?(locale)
+ locale
+ elsif available_locales.include?(locale_without_variant)
+ locale_without_variant
+ else
+ I18n.default_locale.to_s
+ end
end
def locale_from_account(account)
return unless account
- I18n.available_locales.map(&:to_s).include?(account.locale) ? account.locale : nil
- end
-
- def locale_from_env_variable
- return unless ENV.fetch('DEFAULT_LOCALE', nil)
-
- I18n.available_locales.map(&:to_s).include?(ENV.fetch('DEFAULT_LOCALE')) ? ENV.fetch('DEFAULT_LOCALE') : nil
+ account.locale
end
end
diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb
index f0fcf403d..d07dbcb9d 100644
--- a/app/controllers/public/api/v1/portals/articles_controller.rb
+++ b/app/controllers/public/api/v1/portals/articles_controller.rb
@@ -6,17 +6,25 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B
layout 'portal'
def index
- @articles = @portal.articles.published
+ @articles = @portal.articles.published.includes(:category, :author)
@articles_count = @articles.count
search_articles
order_by_sort_param
- @articles = @articles.page(list_params[:page]) if list_params[:page].present?
+ limit_results
end
def show; end
private
+ def limit_results
+ return if list_params[:per_page].blank?
+
+ per_page = [list_params[:per_page].to_i, 100].min
+ per_page = 25 if per_page < 1
+ @articles = @articles.page(list_params[:page]).per(per_page)
+ end
+
def search_articles
@articles = @articles.search(list_params) if list_params.present?
end
@@ -45,7 +53,7 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B
end
def list_params
- params.permit(:query, :locale, :sort, :status, :page)
+ params.permit(:query, :locale, :sort, :status, :page, :per_page)
end
def permitted_params
diff --git a/app/controllers/public/api/v1/portals/base_controller.rb b/app/controllers/public/api/v1/portals/base_controller.rb
index f6c10f7c4..66b052b1e 100644
--- a/app/controllers/public/api/v1/portals/base_controller.rb
+++ b/app/controllers/public/api/v1/portals/base_controller.rb
@@ -1,4 +1,6 @@
class Public::Api::V1::Portals::BaseController < PublicController
+ include SwitchLocale
+
before_action :show_plain_layout
before_action :set_color_scheme
before_action :set_global_config
@@ -27,14 +29,7 @@ class Public::Api::V1::Portals::BaseController < PublicController
end
def switch_locale_with_portal(&)
- locale_without_variant = params[:locale].split('_')[0]
- is_locale_available = I18n.available_locales.map(&:to_s).include?(params[:locale])
- is_locale_variant_available = I18n.available_locales.map(&:to_s).include?(locale_without_variant)
- if is_locale_available
- @locale = params[:locale]
- elsif is_locale_variant_available
- @locale = locale_without_variant
- end
+ @locale = validate_and_get_locale(params[:locale])
I18n.with_locale(@locale, &)
end
@@ -44,12 +39,12 @@ class Public::Api::V1::Portals::BaseController < PublicController
Rails.logger.info "Article: not found for slug: #{params[:article_slug]}"
render_404 && return if article.blank?
- @locale = if article.category.present?
- article.category.locale
- else
- article.portal.default_locale
- end
-
+ article_locale = if article.category.present?
+ article.category.locale
+ else
+ article.portal.default_locale
+ end
+ @locale = validate_and_get_locale(article_locale)
I18n.with_locale(@locale, &)
end
diff --git a/app/controllers/twilio/callback_controller.rb b/app/controllers/twilio/callback_controller.rb
index 7723e5dd2..ff5db952d 100644
--- a/app/controllers/twilio/callback_controller.rb
+++ b/app/controllers/twilio/callback_controller.rb
@@ -1,6 +1,6 @@
class Twilio::CallbackController < ApplicationController
def create
- ::Twilio::IncomingMessageService.new(params: permitted_params).perform
+ Webhooks::TwilioEventsJob.perform_later(permitted_params.to_unsafe_hash)
head :no_content
end
diff --git a/app/controllers/twilio/delivery_status_controller.rb b/app/controllers/twilio/delivery_status_controller.rb
index cc7afb0fc..1c756a1c2 100644
--- a/app/controllers/twilio/delivery_status_controller.rb
+++ b/app/controllers/twilio/delivery_status_controller.rb
@@ -1,6 +1,6 @@
class Twilio::DeliveryStatusController < ApplicationController
def create
- ::Twilio::DeliveryStatusService.new(params: permitted_params).perform
+ Webhooks::TwilioDeliveryStatusJob.perform_later(permitted_params.to_unsafe_hash)
head :no_content
end
diff --git a/app/controllers/webhooks/whatsapp_controller.rb b/app/controllers/webhooks/whatsapp_controller.rb
index 8f408d2b0..c4c376e5c 100644
--- a/app/controllers/webhooks/whatsapp_controller.rb
+++ b/app/controllers/webhooks/whatsapp_controller.rb
@@ -2,6 +2,12 @@ class Webhooks::WhatsappController < ActionController::API
include MetaTokenVerifyConcern
def process_payload
+ if inactive_whatsapp_number?
+ Rails.logger.warn("Rejected webhook for inactive WhatsApp number: #{params[:phone_number]}")
+ render json: { error: 'Inactive WhatsApp number' }, status: :unprocessable_entity
+ return
+ end
+
Webhooks::WhatsappEventsJob.perform_later(params.to_unsafe_hash)
head :ok
end
@@ -13,4 +19,15 @@ class Webhooks::WhatsappController < ActionController::API
whatsapp_webhook_verify_token = channel.provider_config['webhook_verify_token'] if channel.present?
token == whatsapp_webhook_verify_token if whatsapp_webhook_verify_token.present?
end
+
+ def inactive_whatsapp_number?
+ phone_number = params[:phone_number]
+ return false if phone_number.blank?
+
+ inactive_numbers = GlobalConfig.get_value('INACTIVE_WHATSAPP_NUMBERS').to_s
+ return false if inactive_numbers.blank?
+
+ inactive_numbers_array = inactive_numbers.split(',').map(&:strip)
+ inactive_numbers_array.include?(phone_number)
+ end
end
diff --git a/app/javascript/dashboard/api/liveReports.js b/app/javascript/dashboard/api/liveReports.js
new file mode 100644
index 000000000..1435da258
--- /dev/null
+++ b/app/javascript/dashboard/api/liveReports.js
@@ -0,0 +1,20 @@
+/* global axios */
+import ApiClient from './ApiClient';
+
+class LiveReportsAPI extends ApiClient {
+ constructor() {
+ super('live_reports', { accountScoped: true, apiVersion: 'v2' });
+ }
+
+ getConversationMetric(params = {}) {
+ return axios.get(`${this.url}/conversation_metrics`, { params });
+ }
+
+ getGroupedConversations({ groupBy } = { groupBy: 'assignee_id' }) {
+ return axios.get(`${this.url}/grouped_conversation_metrics`, {
+ params: { group_by: groupBy },
+ });
+ }
+}
+
+export default new LiveReportsAPI();
diff --git a/app/javascript/dashboard/assets/scss/widgets/_base.scss b/app/javascript/dashboard/assets/scss/widgets/_base.scss
index 9367e8b2d..a8da23f3b 100644
--- a/app/javascript/dashboard/assets/scss/widgets/_base.scss
+++ b/app/javascript/dashboard/assets/scss/widgets/_base.scss
@@ -82,7 +82,7 @@ input[type='url']:not(.reset-base) {
}
input[type='file'] {
- @apply bg-white dark:bg-n-solid-1 leading-[1.15] mb-4;
+ @apply bg-n-background leading-[1.15] mb-4;
}
// Select
diff --git a/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue b/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
index 95b368dae..4e3b96259 100644
--- a/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
+++ b/app/javascript/dashboard/components-next/dropdown-menu/DropdownMenu.vue
@@ -29,6 +29,10 @@ const props = defineProps({
type: Boolean,
default: false,
},
+ labelClass: {
+ type: String,
+ default: '',
+ },
});
const emit = defineEmits(['action']);
@@ -97,9 +101,13 @@ onMounted(() => {
- {{ $t('TRANSLATE_MODAL.ORIGINAL_CONTENT') }} -
- -- {{ $t('TRANSLATE_MODAL.TRANSLATED_CONTENT') }} -
-- {{ language }}: -
- -- {{ $t('TRANSLATE_MODAL.NO_TRANSLATIONS_AVAILABLE') }} -
-Agent Bots
Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try.
You can manage your bots from this page or create new ones using the 'Add bot configuraton' button.
Open the Agent bots handbook in another tab for a helping hand.
", + "DESCRIPTION": "Agent Bots are like the most fabulous members of your team. They can handle the small stuff, so you can focus on the stuff that matters. Give them a try.You can manage your bots from this page or create new ones using the 'Configure new bot' button.", + "LEARN_MORE": "Learn about agent bots", "CSML_BOT_EDITOR": { "NAME": { "LABEL": "Bot name", diff --git a/app/javascript/dashboard/i18n/locale/en/agentMgmt.json b/app/javascript/dashboard/i18n/locale/en/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/en/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/en/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/en/automation.json b/app/javascript/dashboard/i18n/locale/en/automation.json index 483965f53..bb4946416 100644 --- a/app/javascript/dashboard/i18n/locale/en/automation.json +++ b/app/javascript/dashboard/i18n/locale/en/automation.json @@ -125,6 +125,7 @@ "ACTION_PARAMETERS_REQUIRED": "Action parameters are required", "ATLEAST_ONE_CONDITION_REQUIRED": "At least one condition is required", "ATLEAST_ONE_ACTION_REQUIRED": "At least one action is required" - } + }, + "NONE_OPTION": "None" } } diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json index faa78c8a7..2847f4821 100644 --- a/app/javascript/dashboard/i18n/locale/en/conversation.json +++ b/app/javascript/dashboard/i18n/locale/en/conversation.json @@ -12,6 +12,8 @@ "NO_INBOX_2": " to get started", "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", "SEARCH_MESSAGES": "Search for messages in conversations", + "VIEW_ORIGINAL": "View original", + "VIEW_TRANSLATED": "View translated", "EMPTY_STATE": { "CMD_BAR": "to open command menu", "KEYBOARD_SHORTCUTS": "to view keyboard shortcuts" diff --git a/app/javascript/dashboard/i18n/locale/en/integrationApps.json b/app/javascript/dashboard/i18n/locale/en/integrationApps.json index 9404e12c2..b91b434f7 100644 --- a/app/javascript/dashboard/i18n/locale/en/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/en/integrationApps.json @@ -56,7 +56,7 @@ "BUTTON_TEXT": "Disconnect" }, "SIDEBAR_DESCRIPTION": { - "DIALOGFLOW": "Dialogflow is a natural language understanding platform that makes it easy to design and integrate a conversational user interface into your mobile app, web application, device, bot, interactive voice response system, and so on.Registros de Auditoria
Registros de Auditoria são trilhas para eventos e ações em um Sistema Chatwoot.
", + "SIDEBAR_TXT": "Logs de Auditoria
Os Logs de Auditoria são rastros para eventos e ações em um Sistema Chatwoot.
", "LIST": { - "404": "Não há Registros de Auditoria disponíveis nesta conta.", - "TITLE": "Gerenciar Registros de Auditoria", - "DESC": "Registros de Auditoria são trilhas para eventos e ações em um Sistema Chatwoot.", + "404": "Não há Logs de Auditoria disponíveis nesta conta.", + "TITLE": "Gerenciar Logs de Auditoria", + "DESC": "Logs de auditoria são rastros para eventos e ações em um Sistema de Chatwoot.", "TABLE_HEADER": { "ACTIVITY": "Usuário", "TIME": "Ação", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json index b39178b39..40b903b54 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json @@ -27,12 +27,12 @@ "ERROR": "Falha ao atualizar etiquetas" }, "CONVERSATION": { - "TITLE": "Marcador da conversa", - "ADD_BUTTON": "Adicionar marcador" + "TITLE": "Etiquetas da conversa", + "ADD_BUTTON": "Adicionar etiquetas" }, "LABEL_SELECT": { - "TITLE": "Adicionar marcador", - "PLACEHOLDER": "Pesquisar marcador ", + "TITLE": "Adicionar etiquetas", + "PLACEHOLDER": "Pesquisar etiquetas", "NO_RESULT": "Nenhuma etiqueta encontrada", "CREATE_LABEL": "Criar etiqueta" } diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json index 4d89bbd0f..f5e62d26c 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json @@ -65,7 +65,7 @@ "HEADER": { "RESOLVE_ACTION": "Resolver", "REOPEN_ACTION": "Reabrir", - "OPEN_ACTION": "Abertas", + "OPEN_ACTION": "Abrir", "OPEN": "Mais", "CLOSE": "Fechar", "DETAILS": "detalhes", @@ -148,7 +148,7 @@ "MESSAGE_SIGN_TOOLTIP": "Assinatura de mensagem", "ENABLE_SIGN_TOOLTIP": "Ativar assinatura", "DISABLE_SIGN_TOOLTIP": "Desativar assinatura", - "MSG_INPUT": "Shift + enter para nova linha. Digite '/' para atalhos.", + "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", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json b/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json index eb1e804d5..5b280a84a 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/customRole.json @@ -15,7 +15,7 @@ }, "ENTERPRISE_PAYWALL": { "AVAILABLE_ON": "O recurso de função personalizada está disponível apenas nos planos pagos.", - "UPGRADE_PROMPT": "Atualize para um plano pago para acessar recursos avançados como registros de auditoria, capacidade do agente e muito mais.", + "UPGRADE_PROMPT": "Atualize para um plano pago para acessar recursos avançados como logs de auditoria, capacidade do agente e muito mais.", "ASK_ADMIN": "Entre em contato com seu administrador para fazer a atualização." }, "LIST": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json b/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json index e20558d3a..ae44e4831 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/generalSettings.json @@ -1,6 +1,6 @@ { "GENERAL_SETTINGS": { - "TITLE": "Configurações da conta", + "TITLE": "Conta", "SUBMIT": "Atualizar configurações", "BACK": "Anterior", "DISMISS": "Recusar", @@ -131,10 +131,10 @@ "GO_TO_INBOX_REPORTS": "Ir para Relatórios da Caixa de Entrada", "GO_TO_TEAM_REPORTS": "Ir para Relatórios da Equipe", "GO_TO_SETTINGS_AGENTS": "Ir para Configurações de Agente", - "GO_TO_SETTINGS_TEAMS": "Ir para as configurações de equipe", - "GO_TO_SETTINGS_INBOXES": "Ir para as configurações da Caixa de Entrada", + "GO_TO_SETTINGS_TEAMS": "Ir para as Configurações de Equipe", + "GO_TO_SETTINGS_INBOXES": "Ir para as Configurações da Caixa de Entrada", "GO_TO_SETTINGS_LABELS": "Ir para as Configurações de Etiqueta", - "GO_TO_SETTINGS_CANNED_RESPONSES": "Ir para as configurações de respostas prontas", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Ir para as Configurações de Respostas Prontas", "GO_TO_SETTINGS_APPLICATIONS": "Vá para Configurações do Aplicativo", "GO_TO_SETTINGS_ACCOUNT": "Ir para as Configurações da Conta", "GO_TO_SETTINGS_PROFILE": "Ir para as Configurações do Perfil", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json index 565307715..f596d25dd 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/inboxMgmt.json @@ -500,7 +500,7 @@ "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "As conversas continuarão sobre o e-mail se o endereço de e-mail de contato estiver disponível.", "LOCK_TO_SINGLE_CONVERSATION": "Bloquear para conversa única", "LOCK_TO_SINGLE_CONVERSATION_SUB_TEXT": "Ativar ou desativar várias conversas para o mesmo contato nesta caixa de entrada", - "INBOX_UPDATE_TITLE": "Configurações da Caixa de entrada", + "INBOX_UPDATE_TITLE": "Configurações da Caixa de Entrada", "INBOX_UPDATE_SUB_TEXT": "Atualize suas configurações de caixa de entrada", "AUTO_ASSIGNMENT_SUB_TEXT": "Ativar ou desativar a atribuição automática de novas conversas aos agentes adicionados a essa caixa de entrada.", "HMAC_VERIFICATION": "Validação de Identidade do Usuário", @@ -695,7 +695,7 @@ "PLACE_HOLDER": "Fale conosco no chat" }, "UPDATE": { - "BUTTON_TEXT": "Atualizar configurações do widget", + "BUTTON_TEXT": "Atualizar Configurações do Widget", "API": { "SUCCESS_MESSAGE": "Configurações do widget atualizadas com sucesso", "ERROR_MESSAGE": "Não é possível atualizar as configurações do widget" diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json index 026a9eeca..140198b5f 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/integrations.json @@ -302,8 +302,8 @@ "ERROR": "Houve um erro ao desvincular o atributo, por favor, tente novamente" }, "DELETE": { - "TITLE": "Are you sure you want to delete the integration?", - "MESSAGE": "Are you sure you want to delete the integration?", + "TITLE": "Tem certeza que deseja excluir esta integração?", + "MESSAGE": "Tem certeza que deseja excluir esta integração?", "CONFIRM": "Sim, excluir", "CANCEL": "Cancelar" } @@ -317,7 +317,7 @@ "YOU": "Você", "USE": "Use isto", "RESET": "Reiniciar", - "SELECT_ASSISTANT": "Select Assistant" + "SELECT_ASSISTANT": "Selecione o Assistente" }, "PAYWALL": { "TITLE": "Atualize para usar o Capitão IA", @@ -440,19 +440,19 @@ "DOCUMENTABLE": { "CONVERSATION": "Conversação #{id}" }, - "SELECTED": "{count} selected", - "BULK_APPROVE_BUTTON": "Approve", + "SELECTED": "{count} selecionado", + "BULK_APPROVE_BUTTON": "Aprovar", "BULK_DELETE_BUTTON": "Excluir", "BULK_APPROVE": { - "SUCCESS_MESSAGE": "FAQs approved successfully", - "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + "SUCCESS_MESSAGE": "Perguntas Frequentes aprovadas com sucesso", + "ERROR_MESSAGE": "Ocorreu um erro ao aprovar as Perguntas Frequentes. Tente novamente." }, "BULK_DELETE": { - "TITLE": "Delete FAQs?", - "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", - "CONFIRM": "Yes, delete all", - "SUCCESS_MESSAGE": "FAQs deleted successfully", - "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + "TITLE": "Excluir as Perguntas Frequentes?", + "DESCRIPTION": "Tem certeza que deseja excluir as Perguntas Frequentes selecionadas? Esta ação não pode ser desfeita.", + "CONFIRM": "Sim, excluir todas", + "SUCCESS_MESSAGE": "Perguntas Frequentes excluídas com sucesso/", + "ERROR_MESSAGE": "Ocorreu um erro ao excluir as Perguntas Frequentes, por favor tente novamente." }, "DELETE": { "TITLE": "Tem certeza que deseja excluir o FAQ?", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/pt_BR/labelsMgmt.json index df50e31b0..57ec75f43 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/labelsMgmt.json @@ -1,7 +1,7 @@ { "LABEL_MGMT": { "HEADER": "Etiquetas", - "HEADER_BTN_TXT": "Adicionar marcador", + "HEADER_BTN_TXT": "Adicionar etiqueta", "LOADING": "Buscando etiquetas", "DESCRIPTION": "As etiquetas ajudam você a categorizar e priorizar conversas e leads. Você pode atribuir uma etiqueta a uma conversa ou contato usando o painel lateral.", "LEARN_MORE": "Aprenda mais sobre etiquetas", @@ -18,21 +18,21 @@ }, "FORM": { "NAME": { - "LABEL": "Nome do marcador", - "PLACEHOLDER": "Nome do marcador", - "REQUIRED_ERROR": "O nome do marcador é obrigatório", + "LABEL": "Nome da Etiqueta", + "PLACEHOLDER": "Nome da etiqueta", + "REQUIRED_ERROR": "O nome da etiqueta é obrigatório", "MINIMUM_LENGTH_ERROR": "Tamanho mínimo 2 é necessário", "VALID_ERROR": "Somente Letras, Números, Hífen e Sublinhado são permitidos" }, "DESCRIPTION": { "LABEL": "Descrição", - "PLACEHOLDER": "Descrição do marcador" + "PLACEHOLDER": "Descrição da etiqueta" }, "COLOR": { "LABEL": "Cor" }, "SHOW_ON_SIDEBAR": { - "LABEL": "Exibir marcador na barra lateral" + "LABEL": "Exibir etiqueta na barra lateral" }, "EDIT": "Alterar", "CREATE": "Criar", @@ -54,10 +54,10 @@ "SUGGESTED_LABELS": "Etiquetas sugeridos" }, "ADD": { - "TITLE": "Adicionar marcador", + "TITLE": "Adicionar etiqueta", "DESC": "Etiquetas permitem agrupar as conversas.", "API": { - "SUCCESS_MESSAGE": "Marcador adicionado com sucesso", + "SUCCESS_MESSAGE": "Etiqueta adicionada com sucesso", "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" } }, @@ -71,7 +71,7 @@ "DELETE": { "BUTTON_TEXT": "Excluir", "API": { - "SUCCESS_MESSAGE": "Marcador excluído com sucesso", + "SUCCESS_MESSAGE": "Etiqueta excluída com sucesso", "ERROR_MESSAGE": "Ocorreu um erro, por favor tente novamente" }, "CONFIRM": { diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/report.json b/app/javascript/dashboard/i18n/locale/pt_BR/report.json index 7f527bfe8..bed10815e 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/report.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/report.json @@ -471,7 +471,7 @@ "NO_AGENTS": "Não há conversas por agentes", "TABLE_HEADER": { "AGENT": "Agente", - "OPEN": "Abertas", + "OPEN": "Abrir", "UNATTENDED": "Não atendidas", "STATUS": "Situação" } @@ -509,7 +509,7 @@ "SLA": "Nome do SLA", "AGENTS": "Nome do Agente", "INBOXES": "Nome da Caixa de Entrada", - "LABELS": "Nome do marcador", + "LABELS": "Nome da etiqueta", "TEAMS": "Nome da equipe" }, "SLA": "Política SLA", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json index e43b52389..ee1d43a81 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json @@ -26,7 +26,7 @@ "UPDATE_SUCCESS": "Suas configurações foram atualizadas com sucesso", "CARD": { "ENTER_KEY": { - "HEADING": "Inserir (↵)", + "HEADING": "Enter (↵)", "CONTENT": "Enviar mensagens pressionando a tecla Enter em vez de clicar no botão de enviar." }, "CMD_ENTER_KEY": { @@ -37,19 +37,19 @@ }, "INTERFACE_SECTION": { "TITLE": "Interface", - "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "NOTE": "Personalize a aparência do seu painel do Chatwoot.", "FONT_SIZE": { - "TITLE": "Font size", - "NOTE": "Adjust the text size across the dashboard based on your preference.", - "UPDATE_SUCCESS": "Your font settings have been updated successfully", - "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "TITLE": "Tamanho da fonte", + "NOTE": "Ajuste o tamanho do texto do painel com base na sua preferência.", + "UPDATE_SUCCESS": "As configurações de sua fonte foram atualizadas com sucesso", + "UPDATE_ERROR": "Ocorreu um erro ao atualizar as configurações de fonte, por favor, tente novamente", "OPTIONS": { - "SMALLER": "Smaller", - "SMALL": "Small", + "SMALLER": "Menor", + "SMALL": "Pequeno", "DEFAULT": "Padrão", - "LARGE": "Large", - "LARGER": "Larger", - "EXTRA_LARGE": "Extra Large" + "LARGE": "Grande", + "LARGER": "Maior", + "EXTRA_LARGE": "Muito Grande" } } }, @@ -287,13 +287,13 @@ "HOME": "Principal", "AGENTS": "Agentes", "AGENT_BOTS": "Robôs", - "AUDIT_LOGS": "Registros de Auditoria", + "AUDIT_LOGS": "Auditoria", "INBOXES": "Caixas de Entrada", "NOTIFICATIONS": "Notificações", "CANNED_RESPONSES": "Respostas Prontas", "INTEGRATIONS": "Integrações", "PROFILE_SETTINGS": "Configurações do Perfil", - "ACCOUNT_SETTINGS": "Configurações da conta", + "ACCOUNT_SETTINGS": "Conta", "APPLICATIONS": "Aplicações", "LABELS": "Etiquetas", "CUSTOM_ATTRIBUTES": "Atributos Personalizados", @@ -322,7 +322,7 @@ "REPORTS_INBOX": "Caixa de Entrada", "REPORTS_TEAM": "Equipe", "SET_AVAILABILITY_TITLE": "Defina como", - "SET_YOUR_AVAILABILITY": "Definir a sua disponibilidade", + "SET_YOUR_AVAILABILITY": "Disponibilidade", "SLA": "SLA", "CUSTOM_ROLES": "Regras Personalizadas", "BETA": "Beta", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/sla.json b/app/javascript/dashboard/i18n/locale/pt_BR/sla.json index 40df585c5..8fd693e63 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/sla.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/sla.json @@ -1,9 +1,9 @@ { "SLA": { - "HEADER": "Termos do Serviço", + "HEADER": "Acordo de Nível de Serviço", "ADD_ACTION": "Adicionar SLA", "ADD_ACTION_LONG": "Criar uma nova Política de SLA", - "DESCRIPTION": "Contratos de Nível de Serviço (SLAs em inglês) são contratos que definem expectativas claras entre sua equipe e os clientes. Estabelecem normas para tempos de resposta e de resolução, criando um quadro de responsabilização e garantindo uma experiência coerente e de qualidade.", + "DESCRIPTION": "Acordo de Nível de Serviço (SLAs em inglês) são acordos que definem expectativas claras entre sua equipe e os clientes. Estabelecem normas para tempos de resposta e de resolução, criando um quadro de responsabilização e garantindo uma experiência coerente e de qualidade.", "LEARN_MORE": "Saiba mais sobre SLA", "LOADING": "Buscando SLAs", "PAYWALL": { @@ -15,7 +15,7 @@ }, "ENTERPRISE_PAYWALL": { "AVAILABLE_ON": "O recurso SLA está disponível apenas nos planos pagos.", - "UPGRADE_PROMPT": "Atualize para um plano pago para acessar recursos avançados como registros de auditoria, capacidade do agente e muito mais.", + "UPGRADE_PROMPT": "Atualize para um plano pago para acessar recursos avançados como logs de auditoria, capacidade do agente e muito mais.", "ASK_ADMIN": "Entre em contato com seu administrador para fazer a atualização." }, "LIST": { diff --git a/app/javascript/dashboard/i18n/locale/ro/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ro/agentMgmt.json index 8f284f678..5871683d4 100644 --- a/app/javascript/dashboard/i18n/locale/ro/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ro/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Selectați agentul", "TEAM": "Selectați echipa" }, + "LIST": { + "NONE": "Nimic" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Niciun agent găsit", diff --git a/app/javascript/dashboard/i18n/locale/ru/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ru/agentMgmt.json index 127357c8a..17eb0f150 100644 --- a/app/javascript/dashboard/i18n/locale/ru/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ru/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Выбрать Агента", "TEAM": "Выберите команду" }, + "LIST": { + "NONE": "Ничего" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Операторы не найдены", diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json index 693f0b1b5..4ca38251f 100644 --- a/app/javascript/dashboard/i18n/locale/ru/contact.json +++ b/app/javascript/dashboard/i18n/locale/ru/contact.json @@ -266,7 +266,7 @@ "ATTRIBUTE_WARNING": "Контактная информация {primaryContactName} будет скопирована в {parentContactName}." }, "SEARCH": { - "ERROR_MESSAGE": "Something went wrong. Please try again later." + "ERROR_MESSAGE": "Что-то пошло не так. Пожалуйста, попробуйте позже." }, "FORM": { "SUBMIT": " Объединить контакты", @@ -563,7 +563,7 @@ "GO_TO_CONVERSATION": "Просмотр", "SUCCESS_MESSAGE": "Сообщение успешно отправлено!", "ERROR_MESSAGE": "Произошла ошибка при создании диалога. Пожалуйста, повторите попытку позже.", - "NO_INBOX_ALERT": "Нет доступных \"входящих\" для начала разговора с этим контактом.", + "NO_INBOX_ALERT": "Нет доступных входящих для начала разговора с этим контактом.", "CONTACT_SELECTOR": { "LABEL": "Кому:", "TAG_INPUT_PLACEHOLDER": "Поиск контакта с именем, email или номером телефона", diff --git a/app/javascript/dashboard/i18n/locale/ru/customRole.json b/app/javascript/dashboard/i18n/locale/ru/customRole.json index 287b561b4..31abacb30 100644 --- a/app/javascript/dashboard/i18n/locale/ru/customRole.json +++ b/app/javascript/dashboard/i18n/locale/ru/customRole.json @@ -31,7 +31,7 @@ }, "PERMISSIONS": { "CONVERSATION_MANAGE": "Управление всеми диалогами", - "CONVERSATION_UNASSIGNED_MANAGE": "Управление неназначенными беседами и теми, которые назначены им", + "CONVERSATION_UNASSIGNED_MANAGE": "Управление неназначенными беседами и теми, которые им назначены", "CONVERSATION_PARTICIPATING_MANAGE": "Управление текущими беседами и теми, которые им назначены", "CONTACT_MANAGE": "Управление контактами", "REPORT_MANAGE": "Управление отчетами", diff --git a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json index a0c4e0ac0..798f17914 100644 --- a/app/javascript/dashboard/i18n/locale/ru/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/ru/generalSettings.json @@ -114,7 +114,7 @@ "CHANGE_PRIORITY": "Изменить приоритет", "CHANGE_TEAM": "Изменить команду", "SNOOZE_CONVERSATION": "Включить звук диалога", - "ADD_LABEL": "Добавить метку в разговор", + "ADD_LABEL": "Добавить метку в диалог", "REMOVE_LABEL": "Удалить метку из диалога", "SETTINGS": "Настройки", "AI_ASSIST": "Помощь ИИ", @@ -128,11 +128,11 @@ "GO_TO_CONVERSATION_REPORTS": "Перейти к отчетам по диалогам", "GO_TO_AGENT_REPORTS": "Перейти к отчетам по сотрудникам", "GO_TO_LABEL_REPORTS": "Перейти к отчетам по меткам", - "GO_TO_INBOX_REPORTS": "Перейти к отчётам по \"Входящим\"", + "GO_TO_INBOX_REPORTS": "Перейти к отчётам по «Входящим»", "GO_TO_TEAM_REPORTS": "Перейти к отчетам по командам", "GO_TO_SETTINGS_AGENTS": "Перейти к настройкам сотрудников", "GO_TO_SETTINGS_TEAMS": "Перейти к настройкам команд", - "GO_TO_SETTINGS_INBOXES": "Перейти к настройкам \"Входящих\"", + "GO_TO_SETTINGS_INBOXES": "Перейти к настройкам «Входящих»", "GO_TO_SETTINGS_LABELS": "Перейти к настройкам меток", "GO_TO_SETTINGS_CANNED_RESPONSES": "Перейти к настройкам шаблонных ответов", "GO_TO_SETTINGS_APPLICATIONS": "Перейти в настройки приложения", diff --git a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json index 6e97dbc47..695c97380 100644 --- a/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ru/inboxMgmt.json @@ -2,7 +2,7 @@ "INBOX_MGMT": { "HEADER": "Источники", "DESCRIPTION": "Канал — это способ коммуникации, который ваш клиент выбирает для связи с вами. Входящие — это место, где вы управляете диалогами для определенного канала. Он может включать диалоги из различных источников, таких как электронная почта, онлайн чат или социальные сети.", - "LEARN_MORE": "Узнать больше о \"Входящих\"", + "LEARN_MORE": "Узнать больше о «Входящих»", "RECONNECTION_REQUIRED": "Входящие сообщения отключены. Вы не будете получать новые сообщения пока не пройдете авторизацию повторно.", "CLICK_TO_RECONNECT": "Нажмите здесь для повторного подключения.", "LIST": { @@ -208,8 +208,8 @@ } }, "WHATSAPP": { - "TITLE": "WhatsApp канал", - "DESC": "Начните поддерживать ваших клиентов через WhatsApp.", + "TITLE": "Канал WhatsApp", + "DESC": "Начните поддерживать своих клиентов через WhatsApp.", "PROVIDERS": { "LABEL": "Поставщик API", "TWILIO": "Twilio", diff --git a/app/javascript/dashboard/i18n/locale/ru/integrations.json b/app/javascript/dashboard/i18n/locale/ru/integrations.json index 28505ea5e..7bad810d8 100644 --- a/app/javascript/dashboard/i18n/locale/ru/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ru/integrations.json @@ -302,8 +302,8 @@ "ERROR": "Произошла ошибка при отвязке задачи, пожалуйста, попробуйте ещё раз" }, "DELETE": { - "TITLE": "Are you sure you want to delete the integration?", - "MESSAGE": "Are you sure you want to delete the integration?", + "TITLE": "Вы уверены, что хотите удалить интеграцию?", + "MESSAGE": "Вы уверены, что хотите удалить интеграцию?", "CONFIRM": "Да, удалить", "CANCEL": "Отменить" } @@ -317,18 +317,18 @@ "YOU": "Вы", "USE": "Использовать это", "RESET": "Сброс", - "SELECT_ASSISTANT": "Select Assistant" + "SELECT_ASSISTANT": "Выбрать ассистента" }, "PAYWALL": { "TITLE": "Обновите тарифный план, чтобы использовать Captain AI", "AVAILABLE_ON": "Капитан недоступен на бесплатном тарифном плане.", - "UPGRADE_PROMPT": "Обновите тарифный план, чтобы получить доступ к помощникам, Captain AI и другому.", + "UPGRADE_PROMPT": "Обновите тарифный план, чтобы получить доступ к нашим ассистентам, copilot и другим функциям.", "UPGRADE_NOW": "Обновить сейчас", "CANCEL_ANYTIME": "Вы можете изменить или отменить ваш тарифный план в любое время" }, "ENTERPRISE_PAYWALL": { "AVAILABLE_ON": "Функция Captain AI доступна только в платном плане.", - "UPGRADE_PROMPT": "Обновите тарифный план, чтобы получить доступ к помощникам, Captain AI и другому.", + "UPGRADE_PROMPT": "Обновите тарифный план, чтобы получить доступ к нашим ассистентам, copilot и другим функциям.", "ASK_ADMIN": "Пожалуйста, обратитесь к вашему администратору для обновления." }, "BANNER": { @@ -341,35 +341,35 @@ "EDIT": "Обновить" }, "ASSISTANTS": { - "HEADER": "Помощники", - "ADD_NEW": "Создать нового помощника", + "HEADER": "Ассистенты", + "ADD_NEW": "Создать нового ассистента", "DELETE": { - "TITLE": "Вы уверены, что хотите удалить помощника?", - "DESCRIPTION": "Это действие необратимо. Удаление этого помощника удалит его из всех подключенных источников и навсегда удалит все сгенерированные знания.", + "TITLE": "Вы уверены, что хотите удалить ассистента?", + "DESCRIPTION": "Это действие необратимо. Удаление этого ассистента удалит его из всех подключенных источников и навсегда удалит все сгенерированные знания.", "CONFIRM": "Да, удалить", - "SUCCESS_MESSAGE": "Помощник успешно удален", - "ERROR_MESSAGE": "При удалении помощника произошла ошибка. Пожалуйста, попробуйте еще раз." + "SUCCESS_MESSAGE": "Ассистент успешно удален", + "ERROR_MESSAGE": "При удалении ассистента произошла ошибка. Пожалуйста, попробуйте еще раз." }, - "FORM_DESCRIPTION": "Заполните приведенные ниже сведения, чтобы назвать своего помощника, описать его цель и указать поддерживаемый продукт.", + "FORM_DESCRIPTION": "Заполните приведенные ниже сведения, чтобы назвать своего ассистента, описать его цель и указать поддерживаемый продукт.", "CREATE": { - "TITLE": "Создать помощника", - "SUCCESS_MESSAGE": "Помощник успешно создан", - "ERROR_MESSAGE": "При создании помощника произошла ошибка, пожалуйста, попробуйте еще раз." + "TITLE": "Создать ассистента", + "SUCCESS_MESSAGE": "Ассистент успешно создан", + "ERROR_MESSAGE": "При создании ассистента произошла ошибка, пожалуйста, попробуйте еще раз." }, "FORM": { "NAME": { - "LABEL": "Имя помощника", - "PLACEHOLDER": "Введите имя помощника", - "ERROR": "Пожалуйста, укажите имя помощника" + "LABEL": "Имя ассистента", + "PLACEHOLDER": "Введите имя ассистента", + "ERROR": "Пожалуйста, укажите имя ассистента" }, "DESCRIPTION": { - "LABEL": "Описание помощника", - "PLACEHOLDER": "Опишите, как и где будет использоваться этот помощник", + "LABEL": "Описание ассистента", + "PLACEHOLDER": "Опишите, как и где будет использоваться этот ассистент", "ERROR": "Необходимо описание" }, "PRODUCT_NAME": { "LABEL": "Название продукта", - "PLACEHOLDER": "Введите название продукта, для которого предназначен этот помощник", + "PLACEHOLDER": "Введите название продукта, для которого предназначен этот ассистент", "ERROR": "Требуется название продукта" }, "FEATURES": { @@ -379,18 +379,18 @@ } }, "EDIT": { - "TITLE": "Обновить помощника", - "SUCCESS_MESSAGE": "Помощник успешно обновлен", - "ERROR_MESSAGE": "При обновлении помощника произошла ошибка, пожалуйста, попробуйте еще раз." + "TITLE": "Обновить ассистента", + "SUCCESS_MESSAGE": "Ассистент успешно обновлен", + "ERROR_MESSAGE": "При обновлении ассистента произошла ошибка, пожалуйста, попробуйте еще раз." }, "OPTIONS": { - "EDIT_ASSISTANT": "Редактировать помощника", - "DELETE_ASSISTANT": "Удалить помощника", + "EDIT_ASSISTANT": "Редактировать ассистента", + "DELETE_ASSISTANT": "Удалить ассистента", "VIEW_CONNECTED_INBOXES": "Просмотр подключенных источников" }, "EMPTY_STATE": { - "TITLE": "Нет доступных помощников", - "SUBTITLE": "Создайте помощника, чтобы дать быстрые и точные ответы пользователям. Он может учиться на ваших статьях из центра поддержки и прошлых диалогах." + "TITLE": "Нет доступных ассистентов", + "SUBTITLE": "Создайте ассистента, чтобы дать быстрые и точные ответы пользователям. Он может учиться на ваших статьях из центра поддержки и прошлых диалогах." } }, "DOCUMENTS": { @@ -413,9 +413,9 @@ "ERROR": "Пожалуйста, укажите корректный URL для документа" }, "ASSISTANT": { - "LABEL": "Помощник", - "PLACEHOLDER": "Выберите помощника", - "ERROR": "Необходимо заполнить поле помощника" + "LABEL": "Ассистент", + "PLACEHOLDER": "Выберите ассистента", + "ERROR": "Необходимо заполнить поле ассистента" } }, "DELETE": { @@ -440,19 +440,19 @@ "DOCUMENTABLE": { "CONVERSATION": "Диалог #{id}" }, - "SELECTED": "{count} selected", - "BULK_APPROVE_BUTTON": "Approve", + "SELECTED": "Выбрано {count}", + "BULK_APPROVE_BUTTON": "Одобрить", "BULK_DELETE_BUTTON": "Удалить", "BULK_APPROVE": { - "SUCCESS_MESSAGE": "FAQs approved successfully", - "ERROR_MESSAGE": "There was an error approving the FAQs, please try again." + "SUCCESS_MESSAGE": "FAQ успешно одобрены", + "ERROR_MESSAGE": "Произошла ошибка при одобрении FAQ, пожалуйста, попробуйте ещё раз." }, "BULK_DELETE": { - "TITLE": "Delete FAQs?", - "DESCRIPTION": "Are you sure you want to delete the selected FAQs? This action cannot be undone.", - "CONFIRM": "Yes, delete all", - "SUCCESS_MESSAGE": "FAQs deleted successfully", - "ERROR_MESSAGE": "There was an error deleting the FAQs, please try again." + "TITLE": "Удалить FAQ?", + "DESCRIPTION": "Вы уверены, что хотите удалить выбранные FAQ? Это действие невозможно отменить.", + "CONFIRM": "Да, удалить всё", + "SUCCESS_MESSAGE": "FAQ успешно удалены", + "ERROR_MESSAGE": "Произошла ошибка при удалении FAQ, пожалуйста, попробуйте ещё раз." }, "DELETE": { "TITLE": "Вы действительно хотите удалить FAQ?", @@ -462,7 +462,7 @@ "ERROR_MESSAGE": "Произошла ошибка при удалении FAQ, попробуйте еще раз." }, "FILTER": { - "ASSISTANT": "Помощник: {selected}", + "ASSISTANT": "Ассистент: {selected}", "STATUS": "Статус: {selected}", "ALL_ASSISTANTS": "Все" }, @@ -472,7 +472,7 @@ "APPROVED": "Одобрено", "ALL": "Все" }, - "FORM_DESCRIPTION": "Добавьте вопрос и соответствующий ему ответ в базу знаний и выберите помощника, с которым он должен связаться.", + "FORM_DESCRIPTION": "Добавьте вопрос и соответствующий ему ответ в базу знаний и выберите ассистента, с которым он должен связаться.", "CREATE": { "TITLE": "Добавить FAQ", "SUCCESS_MESSAGE": "Ответ успешно добавлен.", @@ -487,59 +487,59 @@ "ANSWER": { "LABEL": "Ответ", "PLACEHOLDER": "Введите ответ", - "ERROR": "Please provide a valid answer." + "ERROR": "Пожалуйста, введите корректный ответ." }, "ASSISTANT": { - "LABEL": "Помощник", - "PLACEHOLDER": "Select an assistant", - "ERROR": "Please select an assistant." + "LABEL": "Ассистент", + "PLACEHOLDER": "Выбрать ассистента", + "ERROR": "Выбрать ассистента" } }, "EDIT": { - "TITLE": "Update the FAQ", - "SUCCESS_MESSAGE": "The FAQ has been successfully updated", - "ERROR_MESSAGE": "There was an error updating the FAQ, please try again", - "APPROVE_SUCCESS_MESSAGE": "The FAQ was marked as approved" + "TITLE": "Обновить FAQ", + "SUCCESS_MESSAGE": "FAQ успешно обновлён", + "ERROR_MESSAGE": "Произошла ошибка при обновлении FAQ, пожалуйста, попробуйте ещё раз", + "APPROVE_SUCCESS_MESSAGE": "FAQ был отмечен как одобренный" }, "OPTIONS": { - "APPROVE": "Mark as approved", - "EDIT_RESPONSE": "Edit FAQ", - "DELETE_RESPONSE": "Delete FAQ" + "APPROVE": "Отметить как одобренный", + "EDIT_RESPONSE": "FAQ отмечен как одобренный", + "DELETE_RESPONSE": "Удалить FAQ" }, "EMPTY_STATE": { - "TITLE": "No FAQs Found", - "SUBTITLE": "FAQs help your assistant provide quick and accurate answers to questions from your customers. They can be generated automatically from your content or can be added manually." + "TITLE": "FAQ не найдены", + "SUBTITLE": "FAQ помогают вашему ассистенту быстро и точно отвечать на вопросы клиентов. Их можно генерировать автоматически из вашего контента или добавлять вручную." } }, "INBOXES": { - "HEADER": "Connected Inboxes", - "ADD_NEW": "Connect a new inbox", + "HEADER": "Подключённые источники входящих", + "ADD_NEW": "Подключить новый источник входящих", "OPTIONS": { "DISCONNECT": "Отключиться" }, "DELETE": { - "TITLE": "Are you sure to disconnect the inbox?", + "TITLE": "Вы уверены, что хотите отключить этот источник входящих?", "DESCRIPTION": "", "CONFIRM": "Да, удалить", - "SUCCESS_MESSAGE": "The inbox was successfully disconnected.", - "ERROR_MESSAGE": "There was an error disconnecting the inbox, please try again." + "SUCCESS_MESSAGE": "Источник входящих успешно отключён.", + "ERROR_MESSAGE": "Произошла ошибка при отключении источника входящих, пожалуйста, попробуйте ещё раз." }, - "FORM_DESCRIPTION": "Choose an inbox to connect with the assistant.", + "FORM_DESCRIPTION": "Выберите источник входящих для подключения к ассистенту.", "CREATE": { - "TITLE": "Connect an Inbox", - "SUCCESS_MESSAGE": "The inbox was successfully connected.", - "ERROR_MESSAGE": "An error occurred while connecting the inbox. Please try again." + "TITLE": "Подключить источник входящих", + "SUCCESS_MESSAGE": "Источник входящих успешно подключён.", + "ERROR_MESSAGE": "Произошла ошибка при подключении источника входящих. Пожалуйста, попробуйте ещё раз." }, "FORM": { "INBOX": { "LABEL": "Электронная почта", - "PLACEHOLDER": "Choose the inbox to deploy the assistant.", - "ERROR": "An inbox selection is required." + "PLACEHOLDER": "Выберите источник входящих для развертывания ассистента.", + "ERROR": "Необходимо выбрать источник входящих." } }, "EMPTY_STATE": { - "TITLE": "No Connected Inboxes", - "SUBTITLE": "Connecting an inbox allows the assistant to handle initial questions from your customers before transferring them to you." + "TITLE": "Нет подключённых источников входящих", + "SUBTITLE": "Подключение источника входящих позволяет ассистенту обрабатывать первые вопросы ваших клиентов до их передачи вам." } } } diff --git a/app/javascript/dashboard/i18n/locale/ru/report.json b/app/javascript/dashboard/i18n/locale/ru/report.json index f6418c0f2..d29222118 100644 --- a/app/javascript/dashboard/i18n/locale/ru/report.json +++ b/app/javascript/dashboard/i18n/locale/ru/report.json @@ -124,7 +124,7 @@ }, "AGENT_REPORTS": { "HEADER": "Обзор агентов", - "DESCRIPTION": "Easily track agent performance with key metrics such as conversations, response times, resolution times, and resolved cases. Click an agent’s name to learn more.", + "DESCRIPTION": "Легко отслеживайте эффективность работы агентов с помощью ключевых метрик, таких как количество бесед, время ответа, время решения проблем и количество решённых случаев. Нажмите на имя агента, чтобы узнать подробности.", "LOADING_CHART": "Загрузка данных графика...", "NO_ENOUGH_DATA": "Недостаточно данных для создания отчета, пожалуйста, повторите попытку позже.", "DOWNLOAD_AGENT_REPORTS": "Сказать отчёт по агентам", @@ -259,7 +259,7 @@ }, "INBOX_REPORTS": { "HEADER": "Обзор входящих", - "DESCRIPTION": "Quickly view your inbox performance with key metrics like conversations, response times, resolution times, and resolved cases—all in one place. Click an inbox name for more details.", + "DESCRIPTION": "Быстро просматривайте эффективность источника входящих с основными метриками — количеством бесед, временем ответа, временем решения проблем и количеством решённых случаев — всё в одном месте. Нажмите на имя источника для получения подробной информации.", "LOADING_CHART": "Загрузка данных графика...", "NO_ENOUGH_DATA": "Недостаточно данных для создания отчета, пожалуйста, повторите попытку позже.", "DOWNLOAD_INBOX_REPORTS": "Скачать отчет по входящим", @@ -327,7 +327,7 @@ }, "TEAM_REPORTS": { "HEADER": "Обзор команды", - "DESCRIPTION": "Get a snapshot of your team’s performance with essential metrics, including conversations, response times, resolution times, and resolved cases. Click a team name for more details.", + "DESCRIPTION": "Получите обзор работы вашей команды с основными метриками, такими как количество бесед, время ответа, время решения проблем и количество решённых случаев. Нажмите на имя команды для подробностей.", "LOADING_CHART": "Загрузка данных графика...", "NO_ENOUGH_DATA": "Недостаточно данных для создания отчета, пожалуйста, повторите попытку позже.", "DOWNLOAD_TEAM_REPORTS": "Скачать отчет по команде", @@ -546,9 +546,9 @@ "INBOX": "Электронная почта", "AGENT": "Оператор", "TEAM": "Команда", - "AVG_RESOLUTION_TIME": "Avg. Resolution Time", - "AVG_FIRST_RESPONSE_TIME": "Avg. First Response Time", - "AVG_REPLY_TIME": "Avg. Customer Waiting Time", + "AVG_RESOLUTION_TIME": "Среднее время решения", + "AVG_FIRST_RESPONSE_TIME": "Среднее время первого ответа", + "AVG_REPLY_TIME": "Среднее время ожидания клиента", "RESOLUTION_COUNT": "Количество завершенных", "CONVERSATIONS": "Количество диалогов" } diff --git a/app/javascript/dashboard/i18n/locale/ru/search.json b/app/javascript/dashboard/i18n/locale/ru/search.json index 5fc9c6bd2..c1a363f6c 100644 --- a/app/javascript/dashboard/i18n/locale/ru/search.json +++ b/app/javascript/dashboard/i18n/locale/ru/search.json @@ -11,8 +11,8 @@ "CONVERSATIONS": "Диалоги", "MESSAGES": "Сообщения" }, - "VIEW_MORE": "View more", - "LOAD_MORE": "Load more", + "VIEW_MORE": "Посмотреть больше", + "LOAD_MORE": "Загрузить ещё", "SEARCHING_DATA": "Идёт поиск", "LOADING_DATA": "Загрузка", "EMPTY_STATE": "Не найдено {item} для запроса '{query}'", diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json index 2c9a65207..624b6efcd 100644 --- a/app/javascript/dashboard/i18n/locale/ru/settings.json +++ b/app/javascript/dashboard/i18n/locale/ru/settings.json @@ -36,20 +36,20 @@ } }, "INTERFACE_SECTION": { - "TITLE": "Interface", - "NOTE": "Customize the look and feel of your Chatwoot dashboard.", + "TITLE": "Интерфейс", + "NOTE": "Настройте внешний вид и оформление вашей панели Chatwoot.", "FONT_SIZE": { - "TITLE": "Font size", - "NOTE": "Adjust the text size across the dashboard based on your preference.", - "UPDATE_SUCCESS": "Your font settings have been updated successfully", - "UPDATE_ERROR": "There is an error while updating the font settings, please try again", + "TITLE": "Размер шрифта", + "NOTE": "Измените размер текста на всей панели в соответствии с вашими предпочтениями.", + "UPDATE_SUCCESS": "Настройки шрифта успешно обновлены", + "UPDATE_ERROR": "Произошла ошибка при обновлении настроек шрифта, пожалуйста, попробуйте ещё раз", "OPTIONS": { - "SMALLER": "Smaller", - "SMALL": "Small", + "SMALLER": "Меньше", + "SMALL": "Маленький", "DEFAULT": "По умолчанию", - "LARGE": "Large", - "LARGER": "Larger", - "EXTRA_LARGE": "Extra Large" + "LARGE": "Большой", + "LARGER": "Крупнее", + "EXTRA_LARGE": "Очень большой" } } }, @@ -162,7 +162,7 @@ "REQUEST_PUSH": "Включить push-уведомления", "SLA_MISSED_FIRST_RESPONSE": "Отправить push-уведомление, если диалог не соответствует SLA первого ответа", "SLA_MISSED_NEXT_RESPONSE": "Отправить push-уведомление, если диалог не успел получить следующий ответ SLA", - "SLA_MISSED_RESOLUTION": "Отправить push-уведомление, если диалог не соответствует уровню разрешения SLA" + "SLA_MISSED_RESOLUTION": "Отправить push-уведомление, если диалог не соответствует SLA" }, "PROFILE_IMAGE": { "LABEL": "Изображение профиля" @@ -281,9 +281,9 @@ "SETTINGS": "Настройки", "CONTACTS": "Контакты", "CAPTAIN": "Капитан", - "CAPTAIN_ASSISTANTS": "Помощники", + "CAPTAIN_ASSISTANTS": "Ассистенты", "CAPTAIN_DOCUMENTS": "Документы", - "CAPTAIN_RESPONSES": "FAQs", + "CAPTAIN_RESPONSES": "FAQ", "HOME": "Главная", "AGENTS": "Операторы", "AGENT_BOTS": "Боты", @@ -345,14 +345,14 @@ }, "BILLING_SETTINGS": { "TITLE": "Платёж", - "DESCRIPTION": "Manage your subscription here, upgrade your plan and get more for your team.", + "DESCRIPTION": "Управляйте подпиской здесь, обновите тарифный план и получите больше возможностей для вашей команды.", "CURRENT_PLAN": { "TITLE": "Текущий план", "PLAN_NOTE": "На данный момент вы подписаны на ** план{plan}** с **{quantity}** лицензиями", - "SEAT_COUNT": "Number of seats", - "RENEWS_ON": "Renews on" + "SEAT_COUNT": "Количество мест", + "RENEWS_ON": "Продление" }, - "VIEW_PRICING": "View Pricing", + "VIEW_PRICING": "Посмотреть цены", "MANAGE_SUBSCRIPTION": { "TITLE": "Управление подпиской", "DESCRIPTION": "Просматривайте ваши предыдущие счета, редактируйте платежные реквизиты или отмените подписку.", @@ -360,11 +360,11 @@ }, "CAPTAIN": { "TITLE": "Капитан", - "DESCRIPTION": "Manage usage and credits for Captain AI.", - "BUTTON_TXT": "Buy more credits", + "DESCRIPTION": "Управляйте использованием и кредитами для Captain AI.", + "BUTTON_TXT": "Купить дополнительные кредиты", "DOCUMENTS": "Документы", - "RESPONSES": "Responses", - "UPGRADE": "Captain is not available on the free plan, upgrade now to get access to assistants, copilot and more." + "RESPONSES": "Ответы", + "UPGRADE": "Captain недоступен в бесплатном тарифном плане, обновите его, чтобы получить доступ к ассистентам, copilot и другим функциям." }, "CHAT_WITH_US": { "TITLE": "Нужна помощь?", diff --git a/app/javascript/dashboard/i18n/locale/sh/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sh/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/sh/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sh/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/sk/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sk/agentMgmt.json index cffb17244..22a6ec461 100644 --- a/app/javascript/dashboard/i18n/locale/sk/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sk/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Vybrať agenta", "TEAM": "Vybrať tím" }, + "LIST": { + "NONE": "Žiadne" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Žiadni agenti neboli nájdení", diff --git a/app/javascript/dashboard/i18n/locale/sl/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sl/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/sl/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sl/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/sq/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sq/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/sq/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sq/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json index d78e287ef..38a693be4 100644 --- a/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sr/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Izaberite agenta", "TEAM": "Izaberite tim" }, + "LIST": { + "NONE": "Niko" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Nema pronađenih agenata", diff --git a/app/javascript/dashboard/i18n/locale/sv/agentMgmt.json b/app/javascript/dashboard/i18n/locale/sv/agentMgmt.json index 29a18cee4..925b6854c 100644 --- a/app/javascript/dashboard/i18n/locale/sv/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/sv/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Välj agent", "TEAM": "Välj team" }, + "LIST": { + "NONE": "Inget" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Inga agenter hittades", diff --git a/app/javascript/dashboard/i18n/locale/ta/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ta/agentMgmt.json index 3e7d6a37e..2576c9c14 100644 --- a/app/javascript/dashboard/i18n/locale/ta/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ta/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/th/agentMgmt.json b/app/javascript/dashboard/i18n/locale/th/agentMgmt.json index 8a0893c42..baafc8e91 100644 --- a/app/javascript/dashboard/i18n/locale/th/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/th/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "เลือกพนักงาน", "TEAM": "เลือกทีม" }, + "LIST": { + "NONE": "ไม่มี" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "ไม่พบพนักงาน", diff --git a/app/javascript/dashboard/i18n/locale/tl/agentMgmt.json b/app/javascript/dashboard/i18n/locale/tl/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/tl/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tl/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/tr/agentMgmt.json b/app/javascript/dashboard/i18n/locale/tr/agentMgmt.json index d688b5f51..c69172907 100644 --- a/app/javascript/dashboard/i18n/locale/tr/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tr/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Temsilci seçin", "TEAM": "Takım seçin" }, + "LIST": { + "NONE": "Hiç" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Kullanıcı bulunamadı", diff --git a/app/javascript/dashboard/i18n/locale/uk/agentMgmt.json b/app/javascript/dashboard/i18n/locale/uk/agentMgmt.json index 5490db873..146890e69 100644 --- a/app/javascript/dashboard/i18n/locale/uk/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/uk/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Виберіть агента", "TEAM": "Виберіть команду" }, + "LIST": { + "NONE": "Нiчого" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Агентів не знайдено", diff --git a/app/javascript/dashboard/i18n/locale/ur/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ur/agentMgmt.json index 56feed818..5826eef95 100644 --- a/app/javascript/dashboard/i18n/locale/ur/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "ایجنٹ منتخب کریں۔", "TEAM": "ٹیم منتخب کریں۔" }, + "LIST": { + "NONE": "کوئی نہیں۔" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "کوئی ایجنٹ نہیں ملا", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ur_IN/agentMgmt.json index 364fa7d50..448994e69 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Select agent", "TEAM": "Select team" }, + "LIST": { + "NONE": "None" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "No agents found", diff --git a/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json b/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json index 8a9083ab9..a16af3dd1 100644 --- a/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "Chọn thành viên", "TEAM": "Chọn nhóm" }, + "LIST": { + "NONE": "Không có" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "Không tìm thấy nhà cung cấp", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/agentMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/agentMgmt.json index b8a4a0c49..33a2b5fb9 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "选择客服代表", "TEAM": "选择团队" }, + "LIST": { + "NONE": "啥都没有" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "未找到客服代表", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json b/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json index e3af34c03..1e45fa988 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/agentMgmt.json @@ -105,6 +105,9 @@ "AGENT": "選擇客服", "TEAM": "選擇團隊" }, + "LIST": { + "NONE": "無" + }, "SEARCH": { "NO_RESULTS": { "AGENT": "查無客服", diff --git a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue index f5688c0bb..ca8a28f5c 100644 --- a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue +++ b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue @@ -11,14 +11,12 @@ import { ACCOUNT_EVENTS, CONVERSATION_EVENTS, } from '../../../helper/AnalyticsHelper/events'; -import TranslateModal from 'dashboard/components/widgets/conversation/bubble/TranslateModal.vue'; import MenuItem from '../../../components/widgets/conversation/contextMenu/menuItem.vue'; import { useTrack } from 'dashboard/composables'; export default { components: { AddCannedModal, - TranslateModal, MenuItem, ContextMenu, }, @@ -54,7 +52,6 @@ export default { data() { return { isCannedResponseModalOpen: false, - showTranslateModal: false, showDeleteModal: false, }; }, @@ -125,15 +122,11 @@ export default { }); useTrack(CONVERSATION_EVENTS.TRANSLATE_A_MESSAGE); this.handleClose(); - this.showTranslateModal = true; }, handleReplyTo() { this.$emit('replyTo', this.message); this.handleClose(); }, - onCloseTranslateModal() { - this.showTranslateModal = false; - }, openDeleteModal() { this.handleClose(); this.showDeleteModal = true; @@ -170,13 +163,6 @@ export default { :on-close="hideCannedResponseModal" /> - -