diff --git a/.env.example b/.env.example index a97679f7e..d76338e28 100644 --- a/.env.example +++ b/.env.example @@ -81,7 +81,7 @@ SMTP_OPENSSL_VERIFY_MODE=peer # Mail Incoming # This is the domain set for the reply emails when conversation continuity is enabled MAILER_INBOUND_EMAIL_DOMAIN= -# Set this to appropriate ingress channel with regards to incoming emails +# Set this to the appropriate ingress channel with regards to incoming emails # Possible values are : # relay for Exim, Postfix, Qmail # mailgun for Mailgun @@ -91,10 +91,20 @@ MAILER_INBOUND_EMAIL_DOMAIN= RAILS_INBOUND_EMAIL_SERVICE= # Use one of the following based on the email ingress service # Ref: https://edgeguides.rubyonrails.org/action_mailbox_basics.html +# Set this to a password of your choice and use it in the Inbound webhook RAILS_INBOUND_EMAIL_PASSWORD= + MAILGUN_INGRESS_SIGNING_KEY= MANDRILL_INGRESS_API_KEY= +# Creating Your Inbound Webhook Instructions for Postmark and Sendgrid: +# Inbound webhook URL format: +# https://actionmailbox:[YOUR_RAILS_INBOUND_EMAIL_PASSWORD]@[YOUR_CHATWOOT_DOMAIN.COM]/rails/action_mailbox/[RAILS_INBOUND_EMAIL_SERVICE]/inbound_emails +# Note: Replace the values inside the brackets; do not include the brackets themselves. +# Example: https://actionmailbox:mYRandomPassword3@chatwoot.example.com/rails/action_mailbox/postmark/inbound_emails +# For Postmark +# Ensure the 'Include raw email content in JSON payload' checkbox is selected in the inbound webhook section. + # Storage ACTIVE_STORAGE_SERVICE=local @@ -176,6 +186,9 @@ ANDROID_SHA256_CERT_FINGERPRINT=AC:73:8E:DE:EB:56:EA:CC:10:87:02:A7:65:37:7B:38: # MICROSOFT CLARITY # MS_CLARITY_TOKEN=xxxxxxxxx +# GOOGLE_TAG_MANAGER +# GOOGLE_TAG = GTM-XXXXXXX + ## Scout ## https://scoutapm.com/docs/ruby/configuration # SCOUT_KEY=YOURKEY @@ -240,3 +253,9 @@ AZURE_APP_SECRET= # Sentiment analysis model file path SENTIMENT_FILE_PATH= + + +# Housekeeping/Performance related configurations +# Set to true if you want to remove stale contact inboxes +# contact_inboxes with no conversation older than 90 days will be removed +# REMOVE_STALE_CONTACT_INBOX_JOB_STATUS=false diff --git a/.eslintrc.js b/.eslintrc.js index a58c77e98..03e7e995b 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,6 +4,7 @@ module.exports = { 'prettier', 'plugin:vue/recommended', 'plugin:storybook/recommended', + 'plugin:cypress/recommended', ], parserOptions: { parser: '@babel/eslint-parser', diff --git a/Gemfile b/Gemfile index d68bbd8de..a40b0f816 100644 --- a/Gemfile +++ b/Gemfile @@ -107,16 +107,16 @@ gem 'google-cloud-translate-v3' gem 'ddtrace', require: false gem 'elastic-apm', require: false gem 'newrelic_rpm', require: false -gem 'newrelic-sidekiq-metrics', require: false +gem 'newrelic-sidekiq-metrics', '>= 1.6.2', require: false gem 'scout_apm', require: false -gem 'sentry-rails', '>= 5.12.0', require: false +gem 'sentry-rails', '>= 5.13.0', require: false gem 'sentry-ruby', require: false -gem 'sentry-sidekiq', '>= 5.12.0', require: false +gem 'sentry-sidekiq', '>= 5.13.0', require: false ##-- background job processing --## gem 'sidekiq', '>= 7.1.3' # We want cron jobs -gem 'sidekiq-cron', '>= 1.10.1' +gem 'sidekiq-cron', '>= 1.11.0' ##-- Push notification service --## gem 'fcm' @@ -159,7 +159,7 @@ gem 'lograge', '~> 0.14.0', require: false # worked with microsoft refresh token gem 'omniauth-oauth2' -gem 'audited', '~> 5.4', '>= 5.4.0' +gem 'audited', '~> 5.4', '>= 5.4.1' # need for google auth gem 'omniauth' @@ -200,6 +200,8 @@ group :development do # profiling gem 'rack-mini-profiler', '>= 3.1.1', require: false gem 'stackprof' + # Should install the associated chrome extension to view query logs + gem 'meta_request' end group :test do diff --git a/Gemfile.lock b/Gemfile.lock index a47f351c4..8c782dd48 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -126,9 +126,9 @@ GEM rake (>= 10.4, < 14.0) ast (2.4.2) attr_extras (7.1.0) - audited (5.4.0) - activerecord (>= 5.0, < 7.2) - request_store (~> 1.2) + audited (5.4.1) + activerecord (>= 5.0, < 7.7) + activesupport (>= 5.0, < 7.7) aws-eventstream (1.2.0) aws-partitions (1.760.0) aws-sdk-core (3.171.1) @@ -148,6 +148,7 @@ GEM barnes (0.0.9) multi_json (~> 1) statsd-ruby (~> 1.1) + base64 (0.1.1) bcrypt (3.1.19) bindex (0.8.1) blingfire (0.1.8) @@ -174,7 +175,7 @@ GEM rexml crass (1.0.6) csv-safe (3.2.1) - cypress-on-rails (1.13.1) + cypress-on-rails (1.16.0) rack database_cleaner (2.0.2) database_cleaner-active_record (>= 2, < 3) @@ -261,7 +262,7 @@ GEM rake flag_shih_tzu (0.3.23) foreman (0.87.2) - fugit (1.8.1) + fugit (1.9.0) et-orbi (~> 1, >= 1.2.7) raabro (~> 1.4) gapic-common (0.18.0) @@ -450,13 +451,16 @@ GEM marcel (1.0.2) maxminddb (0.1.22) memoist (0.16.2) + meta_request (0.7.4) + rack-contrib (>= 1.1, < 3) + railties (>= 3.0.0, < 7.1) method_source (1.0.0) mime-types (3.4.1) mime-types-data (~> 3.2015) mime-types-data (3.2023.0218.1) mini_magick (4.12.0) mini_mime (1.1.5) - mini_portile2 (2.8.4) + mini_portile2 (2.8.5) minitest (5.20.0) mock_redis (0.36.0) ruby2_keywords @@ -478,10 +482,11 @@ GEM net-smtp (0.3.3) net-protocol netrc (0.11.0) - newrelic-sidekiq-metrics (1.6.1) - newrelic_rpm (~> 8) + newrelic-sidekiq-metrics (1.6.2) + newrelic_rpm (>= 8.0.0) sidekiq - newrelic_rpm (8.16.0) + newrelic_rpm (9.6.0) + base64 nio4r (2.5.9) nokogiri (1.15.4) mini_portile2 (~> 2.8.2) @@ -553,10 +558,12 @@ GEM pundit (2.3.0) activesupport (>= 3.0.0) raabro (1.4.0) - racc (1.7.1) + racc (1.7.3) rack (2.2.8) rack-attack (6.7.0) rack (>= 1.0, < 4) + rack-contrib (2.4.0) + rack (< 4) rack-cors (2.0.1) rack (>= 2.0.0) rack-mini-profiler (3.1.1) @@ -597,13 +604,13 @@ GEM thor (~> 1.0) zeitwerk (~> 2.5) rainbow (3.1.1) - rake (13.0.6) + rake (13.1.0) rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) redis (5.0.6) redis-client (>= 0.9.0) - redis-client (0.17.0) + redis-client (0.18.0) connection_pool redis-namespace (1.10.0) redis (>= 4) @@ -702,23 +709,23 @@ GEM activesupport (>= 4) selectize-rails (0.12.6) semantic_range (3.0.0) - sentry-rails (5.12.0) + sentry-rails (5.13.0) railties (>= 5.0) - sentry-ruby (~> 5.12.0) - sentry-ruby (5.12.0) + sentry-ruby (~> 5.13.0) + sentry-ruby (5.13.0) concurrent-ruby (~> 1.0, >= 1.0.2) - sentry-sidekiq (5.12.0) - sentry-ruby (~> 5.12.0) + sentry-sidekiq (5.13.0) + sentry-ruby (~> 5.13.0) sidekiq (>= 3.0) sexp_processor (4.17.0) shoulda-matchers (5.3.0) activesupport (>= 5.2.0) - sidekiq (7.1.6) + sidekiq (7.2.0) concurrent-ruby (< 2) connection_pool (>= 2.3.0) rack (>= 2.2.4) redis-client (>= 0.14.0) - sidekiq-cron (1.10.1) + sidekiq-cron (1.11.0) fugit (~> 1.8) globalid (>= 1.0.1) sidekiq (>= 6) @@ -758,7 +765,7 @@ GEM stripe (8.5.0) telephone_number (1.4.20) test-prof (1.2.1) - thor (1.2.2) + thor (1.3.0) tilt (2.2.0) time_diff (0.3.0) activesupport @@ -838,7 +845,7 @@ DEPENDENCIES administrate-field-belongs_to_search annotate attr_extras - audited (~> 5.4, >= 5.4.0) + audited (~> 5.4, >= 5.4.1) aws-sdk-s3 azure-storage-blob! barnes @@ -893,9 +900,10 @@ DEPENDENCIES listen lograge (~> 0.14.0) maxminddb + meta_request mock_redis neighbor - newrelic-sidekiq-metrics + newrelic-sidekiq-metrics (>= 1.6.2) newrelic_rpm omniauth omniauth-google-oauth2 @@ -927,12 +935,12 @@ DEPENDENCIES scout_apm scss_lint seed_dump - sentry-rails (>= 5.12.0) + sentry-rails (>= 5.13.0) sentry-ruby - sentry-sidekiq (>= 5.12.0) + sentry-sidekiq (>= 5.13.0) shoulda-matchers sidekiq (>= 7.1.3) - sidekiq-cron (>= 1.10.1) + sidekiq-cron (>= 1.11.0) simplecov (= 0.17.1) slack-ruby-client (~> 2.2.0) spring diff --git a/Procfile.test b/Procfile.test index 32792c245..1770cdbc6 100644 --- a/Procfile.test +++ b/Procfile.test @@ -1,3 +1,3 @@ backend: RAILS_ENV=test bin/rails s -p 5050 -frontend: bin/webpack-dev-server -worker: dotenv RAILS_ENV=test bundle exec sidekiq -C config/sidekiq.yml +frontend: export NODE_OPTIONS=--openssl-legacy-provider && bin/webpack-dev-server +worker: RAILS_ENV=test dotenv bundle exec sidekiq -C config/sidekiq.yml diff --git a/README.md b/README.md index ac11d649d..11ac5dc2c 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ -
-
+
+
-
Customer engagement suite, an open-source alternative to Intercom, Zendesk, Salesforce Service Cloud etc.
- +___ -+# Chatwoot + +Customer engagement suite, an open-source alternative to Intercom, Zendesk, Salesforce Service Cloud etc. +
-___ - -+
-
-
-
+
+
Chatwoot is an open-source, self-hosted customer engagement suite. Chatwoot lets you view and manage your customer data, communicate with them irrespective of which medium they use, and re-engage them based on their profile.
diff --git a/app/builders/messages/instagram/message_builder.rb b/app/builders/messages/instagram/message_builder.rb
index e2c594376..5b2243906 100644
--- a/app/builders/messages/instagram/message_builder.rb
+++ b/app/builders/messages/instagram/message_builder.rb
@@ -76,6 +76,10 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
message[:reply_to][:story] if message[:reply_to].present? && message[:reply_to][:story].present?
end
+ def message_reply_attributes
+ message[:reply_to][:mid] if message[:reply_to].present? && message[:reply_to][:mid].present?
+ end
+
def build_message
return if @outgoing_echo && already_sent_from_chatwoot?
return if message_content.blank? && all_unsupported_files?
@@ -118,7 +122,10 @@ class Messages::Instagram::MessageBuilder < Messages::Messenger::MessageBuilder
message_type: message_type,
source_id: message_identifier,
content: message_content,
- sender: @outgoing_echo ? nil : contact
+ sender: @outgoing_echo ? nil : contact,
+ content_attributes: {
+ in_reply_to_external_id: message_reply_attributes
+ }
}
end
diff --git a/app/builders/messages/message_builder.rb b/app/builders/messages/message_builder.rb
index af312bf2e..0ec73edc3 100644
--- a/app/builders/messages/message_builder.rb
+++ b/app/builders/messages/message_builder.rb
@@ -9,11 +9,11 @@ class Messages::MessageBuilder
@user = user
@message_type = params[:message_type] || 'outgoing'
@attachments = params[:attachments]
- @automation_rule = @params&.dig(:content_attributes, :automation_rule_id)
+ @automation_rule = content_attributes&.dig(:automation_rule_id)
return unless params.instance_of?(ActionController::Parameters)
- @in_reply_to = params.to_unsafe_h&.dig(:content_attributes, :in_reply_to)
- @items = params.to_unsafe_h&.dig(:content_attributes, :items)
+ @in_reply_to = content_attributes&.dig(:in_reply_to)
+ @items = content_attributes&.dig(:items)
end
def perform
@@ -26,6 +26,38 @@ class Messages::MessageBuilder
private
+ # Extracts content attributes from the given params.
+ # - Converts ActionController::Parameters to a regular hash if needed.
+ # - Attempts to parse a JSON string if content is a string.
+ # - Returns an empty hash if content is not present, if there's a parsing error, or if it's an unexpected type.
+ def content_attributes
+ params = convert_to_hash(@params)
+ content_attributes = params.fetch(:content_attributes, {})
+
+ return parse_json(content_attributes) if content_attributes.is_a?(String)
+ return content_attributes if content_attributes.is_a?(Hash)
+
+ {}
+ end
+
+ # Converts the given object to a hash.
+ # If it's an instance of ActionController::Parameters, converts it to an unsafe hash.
+ # Otherwise, returns the object as-is.
+ def convert_to_hash(obj)
+ return obj.to_unsafe_h if obj.instance_of?(ActionController::Parameters)
+
+ obj
+ end
+
+ # Attempts to parse a string as JSON.
+ # If successful, returns the parsed hash with symbolized names.
+ # If unsuccessful, returns nil.
+ def parse_json(content)
+ JSON.parse(content, symbolize_names: true)
+ rescue JSON::ParserError
+ {}
+ end
+
def process_attachments
return if @attachments.blank?
diff --git a/app/controllers/api/v1/accounts/articles_controller.rb b/app/controllers/api/v1/accounts/articles_controller.rb
index 7762cc476..d164778ac 100644
--- a/app/controllers/api/v1/accounts/articles_controller.rb
+++ b/app/controllers/api/v1/accounts/articles_controller.rb
@@ -10,7 +10,7 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
@articles_count = @all_articles.count
@articles = if list_params[:category_slug].present?
- @all_articles.order_by_position.page(@current_page).per(50)
+ @all_articles.order_by_position.page(@current_page)
else
@all_articles.order_by_updated_at.page(@current_page)
end
diff --git a/app/controllers/api/v1/accounts/categories_controller.rb b/app/controllers/api/v1/accounts/categories_controller.rb
index 73fc5d885..834b19ed9 100644
--- a/app/controllers/api/v1/accounts/categories_controller.rb
+++ b/app/controllers/api/v1/accounts/categories_controller.rb
@@ -48,7 +48,7 @@ class Api::V1::Accounts::CategoriesController < Api::V1::Accounts::BaseControlle
def category_params
params.require(:category).permit(
- :name, :description, :position, :slug, :locale, :parent_category_id, :associated_category_id
+ :name, :description, :position, :slug, :locale, :icon, :parent_category_id, :associated_category_id
)
end
diff --git a/app/controllers/api/v1/accounts/portals_controller.rb b/app/controllers/api/v1/accounts/portals_controller.rb
index 6d2a181f0..bd8da5549 100644
--- a/app/controllers/api/v1/accounts/portals_controller.rb
+++ b/app/controllers/api/v1/accounts/portals_controller.rb
@@ -47,6 +47,11 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
head :ok
end
+ def logo
+ @portal.logo.purge if @portal.logo.attached?
+ head :ok
+ end
+
def process_attached_logo
blob_id = params[:blob_id]
blob = ActiveStorage::Blob.find_by(id: blob_id)
diff --git a/app/controllers/api/v1/widget/base_controller.rb b/app/controllers/api/v1/widget/base_controller.rb
index 229cf27e9..5b87e2d1a 100644
--- a/app/controllers/api/v1/widget/base_controller.rb
+++ b/app/controllers/api/v1/widget/base_controller.rb
@@ -79,6 +79,9 @@ class Api::V1::Widget::BaseController < ApplicationController
sender: @contact,
content: permitted_params[:message][:content],
inbox_id: conversation.inbox_id,
+ content_attributes: {
+ in_reply_to: permitted_params[:message][:reply_to]
+ },
echo_id: permitted_params[:message][:echo_id],
message_type: :incoming
}
diff --git a/app/controllers/api/v1/widget/conversations_controller.rb b/app/controllers/api/v1/widget/conversations_controller.rb
index df0ef64ff..1d1ba8a7e 100644
--- a/app/controllers/api/v1/widget/conversations_controller.rb
+++ b/app/controllers/api/v1/widget/conversations_controller.rb
@@ -28,7 +28,7 @@ class Api::V1::Widget::ConversationsController < Api::V1::Widget::BaseController
conversation.contact_last_seen_at = DateTime.now.utc
conversation.save!
- ::Conversations::MarkMessagesAsReadJob.perform_later(conversation)
+ ::Conversations::UpdateMessageStatusJob.perform_later(conversation.id, conversation.contact_last_seen_at)
head :ok
end
diff --git a/app/controllers/api/v1/widget/messages_controller.rb b/app/controllers/api/v1/widget/messages_controller.rb
index 306a5f46f..a51b4c2d6 100644
--- a/app/controllers/api/v1/widget/messages_controller.rb
+++ b/app/controllers/api/v1/widget/messages_controller.rb
@@ -64,7 +64,7 @@ class Api::V1::Widget::MessagesController < Api::V1::Widget::BaseController
def permitted_params
# timestamp parameter is used in create conversation method
- params.permit(:id, :before, :after, :website_token, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id])
+ params.permit(:id, :before, :after, :website_token, contact: [:name, :email], message: [:content, :referer_url, :timestamp, :echo_id, :reply_to])
end
def set_message
diff --git a/app/controllers/public/api/v1/inboxes/conversations_controller.rb b/app/controllers/public/api/v1/inboxes/conversations_controller.rb
index c79952372..671863bdc 100644
--- a/app/controllers/public/api/v1/inboxes/conversations_controller.rb
+++ b/app/controllers/public/api/v1/inboxes/conversations_controller.rb
@@ -23,6 +23,7 @@ class Public::Api::V1::Inboxes::ConversationsController < Public::Api::V1::Inbox
def update_last_seen
@conversation.contact_last_seen_at = DateTime.now.utc
@conversation.save!
+ ::Conversations::UpdateMessageStatusJob.perform_later(@conversation.id, @conversation.contact_last_seen_at)
head :ok
end
diff --git a/app/controllers/public/api/v1/portals/articles_controller.rb b/app/controllers/public/api/v1/portals/articles_controller.rb
index bc5f6c0fd..4e967cfbb 100644
--- a/app/controllers/public/api/v1/portals/articles_controller.rb
+++ b/app/controllers/public/api/v1/portals/articles_controller.rb
@@ -39,10 +39,6 @@ class Public::Api::V1::Portals::ArticlesController < Public::Api::V1::Portals::B
)
end
- def portal
- @portal ||= Portal.find_by!(slug: permitted_params[:slug], archived: false)
- end
-
def list_params
params.permit(:query, :locale, :sort, :status)
end
diff --git a/app/controllers/public/api/v1/portals/base_controller.rb b/app/controllers/public/api/v1/portals/base_controller.rb
index d9fec27b1..df9526a69 100644
--- a/app/controllers/public/api/v1/portals/base_controller.rb
+++ b/app/controllers/public/api/v1/portals/base_controller.rb
@@ -14,10 +14,14 @@ class Public::Api::V1::Portals::BaseController < PublicController
@theme = if %w[dark light].include?(params[:theme])
params[:theme]
else
- ''
+ 'system'
end
end
+ def portal
+ @portal ||= Portal.find_by!(slug: params[:slug], archived: false)
+ end
+
def set_locale(&)
switch_locale_with_portal(&) if params[:locale].present?
switch_locale_with_article(&) if params[:article_slug].present?
@@ -40,6 +44,8 @@ class Public::Api::V1::Portals::BaseController < PublicController
def switch_locale_with_article(&)
article = Article.find_by(slug: params[:article_slug])
+ 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
@@ -53,4 +59,9 @@ class Public::Api::V1::Portals::BaseController < PublicController
def allow_iframe_requests
response.headers.delete('X-Frame-Options') if @is_plain_layout_enabled
end
+
+ def render_404
+ portal
+ render 'public/api/v1/portals/error/404', status: :not_found
+ end
end
diff --git a/app/controllers/public/api/v1/portals/categories_controller.rb b/app/controllers/public/api/v1/portals/categories_controller.rb
index 7326f383b..c3a7b59e9 100644
--- a/app/controllers/public/api/v1/portals/categories_controller.rb
+++ b/app/controllers/public/api/v1/portals/categories_controller.rb
@@ -13,10 +13,9 @@ class Public::Api::V1::Portals::CategoriesController < Public::Api::V1::Portals:
private
def set_category
- @category = @portal.categories.find_by!(locale: params[:locale], slug: params[:category_slug])
- end
+ @category = @portal.categories.find_by(locale: params[:locale], slug: params[:category_slug])
- def portal
- @portal ||= Portal.find_by!(slug: params[:slug], archived: false)
+ Rails.logger.info "Category: not found for slug: #{params[:category_slug]}"
+ render_404 && return if @category.blank?
end
end
diff --git a/app/helpers/portal_helper.rb b/app/helpers/portal_helper.rb
index 3551b5ac6..72d4eeda1 100644
--- a/app/helpers/portal_helper.rb
+++ b/app/helpers/portal_helper.rb
@@ -1,11 +1,48 @@
module PortalHelper
def generate_portal_bg_color(portal_color, theme)
base_color = theme == 'dark' ? 'black' : 'white'
- "color-mix(in srgb, #{portal_color} 10%, #{base_color})"
+ "color-mix(in srgb, #{portal_color} 20%, #{base_color})"
end
def generate_portal_bg(portal_color, theme)
- bg_image = theme == 'dark' ? 'grid_dark.svg' : 'grid.svg'
+ bg_image = theme == 'dark' ? 'hexagon-dark.svg' : 'hexagon-light.svg'
"background: url(/assets/images/hc/#{bg_image}) #{generate_portal_bg_color(portal_color, theme)}"
end
+
+ def language_name(locale)
+ language_map = YAML.load_file(Rails.root.join('config/languages/language_map.yml'))
+ language_map[locale] || locale
+ end
+
+ def get_theme_names(theme)
+ if theme == 'light'
+ I18n.t('public_portal.header.appearance.light')
+ elsif theme == 'dark'
+ I18n.t('public_portal.header.appearance.dark')
+ else
+ I18n.t('public_portal.header.appearance.system')
+ end
+ end
+
+ def get_theme_icon(theme)
+ if theme == 'light'
+ 'icons/sun'
+ elsif theme == 'dark'
+ 'icons/moon'
+ else
+ 'icons/monitor'
+ end
+ end
+
+ def generate_gradient_to_bottom(theme)
+ "background-image: linear-gradient(to bottom, transparent, #{theme == 'dark' ? '#151718' : 'white'})"
+ end
+
+ def generate_article_link(portal_slug, article_slug, theme)
+ "/hc/#{portal_slug}/articles/#{article_slug}#{theme.present? && theme != 'system' ? "?theme=#{theme}" : ''}"
+ end
+
+ def render_category_content(content)
+ ChatwootMarkdownRenderer.new(content).render_markdown_to_plain_text
+ end
end
diff --git a/app/javascript/dashboard/api/helpCenter/articles.js b/app/javascript/dashboard/api/helpCenter/articles.js
index fb21a0847..e5847dc1b 100644
--- a/app/javascript/dashboard/api/helpCenter/articles.js
+++ b/app/javascript/dashboard/api/helpCenter/articles.js
@@ -1,6 +1,7 @@
/* global axios */
import PortalsAPI from './portals';
+import { getArticleSearchURL } from 'dashboard/helper/URLHelper.js';
class ArticlesAPI extends PortalsAPI {
constructor() {
@@ -12,14 +13,31 @@ class ArticlesAPI extends PortalsAPI {
portalSlug,
locale,
status,
- author_id,
- category_slug,
+ authorId,
+ categorySlug,
+ sort,
}) {
- let baseUrl = `${this.url}/${portalSlug}/articles?page=${pageNumber}&locale=${locale}`;
- if (status !== undefined) baseUrl += `&status=${status}`;
- if (author_id) baseUrl += `&author_id=${author_id}`;
- if (category_slug) baseUrl += `&category_slug=${category_slug}`;
- return axios.get(baseUrl);
+ const url = getArticleSearchURL({
+ pageNumber,
+ portalSlug,
+ locale,
+ status,
+ authorId,
+ categorySlug,
+ sort,
+ host: this.url,
+ });
+
+ return axios.get(url);
+ }
+
+ searchArticles({ portalSlug, query }) {
+ const url = getArticleSearchURL({
+ portalSlug,
+ query,
+ host: this.url,
+ });
+ return axios.get(url);
}
getArticle({ id, portalSlug }) {
diff --git a/app/javascript/dashboard/api/helpCenter/portals.js b/app/javascript/dashboard/api/helpCenter/portals.js
index 28220b0b5..7c6210dbd 100644
--- a/app/javascript/dashboard/api/helpCenter/portals.js
+++ b/app/javascript/dashboard/api/helpCenter/portals.js
@@ -17,6 +17,10 @@ class PortalsAPI extends ApiClient {
deletePortal(portalSlug) {
return axios.delete(`${this.url}/${portalSlug}`);
}
+
+ deleteLogo(portalSlug) {
+ return axios.delete(`${this.url}/${portalSlug}/logo`);
+ }
}
export default PortalsAPI;
diff --git a/app/javascript/dashboard/api/inbox/message.js b/app/javascript/dashboard/api/inbox/message.js
index fc77b24f5..6cb885e3d 100644
--- a/app/javascript/dashboard/api/inbox/message.js
+++ b/app/javascript/dashboard/api/inbox/message.js
@@ -26,9 +26,13 @@ export const buildCreatePayload = ({
payload.append('echo_id', echoId);
payload.append('cc_emails', ccEmails);
payload.append('bcc_emails', bccEmails);
+
if (toEmails) {
payload.append('to_emails', toEmails);
}
+ if (contentAttributes) {
+ payload.append('content_attributes', JSON.stringify(contentAttributes));
+ }
} else {
payload = {
content: message,
diff --git a/app/javascript/dashboard/api/specs/article.spec.js b/app/javascript/dashboard/api/specs/article.spec.js
index b8886b4f8..02c0f82d8 100644
--- a/app/javascript/dashboard/api/specs/article.spec.js
+++ b/app/javascript/dashboard/api/specs/article.spec.js
@@ -34,7 +34,7 @@ describe('#PortalAPI', () => {
portalSlug: 'room-rental',
locale: 'en-US',
status: 'published',
- author_id: '1',
+ authorId: '1',
});
expect(axiosMock.get).toHaveBeenCalledWith(
'/api/v1/portals/room-rental/articles?page=1&locale=en-US&status=published&author_id=1'
@@ -85,6 +85,33 @@ describe('#PortalAPI', () => {
window.axios = originalAxios;
});
+ it('#searchArticles', () => {
+ articlesAPI.searchArticles({
+ query: 'test',
+ portalSlug: 'room-rental',
+ });
+ expect(axiosMock.get).toHaveBeenCalledWith(
+ '/api/v1/portals/room-rental/articles?query=test'
+ );
+ });
+ });
+ describe('API calls', () => {
+ const originalAxios = window.axios;
+ const axiosMock = {
+ post: jest.fn(() => Promise.resolve()),
+ get: jest.fn(() => Promise.resolve()),
+ patch: jest.fn(() => Promise.resolve()),
+ delete: jest.fn(() => Promise.resolve()),
+ };
+
+ beforeEach(() => {
+ window.axios = axiosMock;
+ });
+
+ afterEach(() => {
+ window.axios = originalAxios;
+ });
+
it('#updateArticle', () => {
articlesAPI.updateArticle({
articleId: 1,
diff --git a/app/javascript/dashboard/api/specs/inbox/message.spec.js b/app/javascript/dashboard/api/specs/inbox/message.spec.js
index e75bf34b0..0d45b2157 100644
--- a/app/javascript/dashboard/api/specs/inbox/message.spec.js
+++ b/app/javascript/dashboard/api/specs/inbox/message.spec.js
@@ -50,6 +50,7 @@ describe('#ConversationAPI', () => {
message: 'test content',
echoId: 12,
isPrivate: true,
+ contentAttributes: { in_reply_to: 12 },
files: [new Blob(['test-content'], { type: 'application/pdf' })],
});
expect(formPayload).toBeInstanceOf(FormData);
@@ -57,6 +58,10 @@ describe('#ConversationAPI', () => {
expect(formPayload.get('echo_id')).toEqual('12');
expect(formPayload.get('private')).toEqual('true');
expect(formPayload.get('cc_emails')).toEqual('');
+ expect(formPayload.get('bcc_emails')).toEqual('');
+ expect(formPayload.get('content_attributes')).toEqual(
+ '{"in_reply_to":12}'
+ );
});
it('builds object payload if file is not available', () => {
diff --git a/app/javascript/dashboard/assets/scss/_date-picker.scss b/app/javascript/dashboard/assets/scss/_date-picker.scss
index 920fb8fa2..2132d5fd5 100644
--- a/app/javascript/dashboard/assets/scss/_date-picker.scss
+++ b/app/javascript/dashboard/assets/scss/_date-picker.scss
@@ -1,9 +1,5 @@
@import '~vue2-datepicker/scss/index';
-.mx-datepicker-popup {
- @apply z-[99999];
-}
-
.date-picker {
&.no-margin {
.mx-input {
@@ -29,10 +25,52 @@
.mx-input[readonly] {
@apply bg-white dark:bg-slate-900 cursor-pointer;
}
+
+ .mx-icon-calendar {
+ @apply dark:text-slate-500;
+ }
}
-.mx-calendar-content .cell:hover {
- @apply bg-slate-75 dark:bg-slate-700 text-slate-900 dark:text-slate-100;
+.mx-datepicker-main {
+ @apply border-0 bg-white dark:bg-slate-800;
+
+ .cell {
+ &.disabled {
+ @apply bg-slate-25 dark:bg-slate-900 text-slate-200 dark:text-slate-300;
+ }
+
+ &:hover,
+ &.hover-in-range,
+ &.in-range {
+ @apply bg-slate-75 dark:bg-slate-700 text-slate-900 dark:text-slate-100;
+ }
+ }
+
+ .mx-time {
+ @apply border-0 bg-white dark:bg-slate-800;
+
+ .mx-time-header {
+ @apply border-0;
+ }
+
+ .mx-time-item {
+ &.disabled {
+ @apply bg-slate-25 dark:bg-slate-900;
+ }
+
+ &:hover {
+ @apply bg-slate-75 dark:bg-slate-700;
+ }
+ }
+ }
+
+ .today {
+ @apply font-semibold;
+ }
+}
+
+.mx-datepicker-popup {
+ @apply z-[99999];
}
.mx-datepicker-inline {
@@ -41,24 +79,4 @@
.mx-calendar {
@apply w-full;
}
-
- .cell.disabled {
- @apply bg-slate-25 dark:bg-slate-900 text-slate-200 dark:text-slate-300;
- }
-
- .mx-time-item.disabled {
- @apply bg-slate-25 dark:bg-slate-900;
- }
-
- .today {
- @apply font-semibold;
- }
-
- .mx-datepicker-main {
- @apply border-0 bg-white dark:bg-slate-800;
- }
-
- .mx-time-header {
- @apply border-0;
- }
}
diff --git a/app/javascript/dashboard/assets/scss/_formulate.scss b/app/javascript/dashboard/assets/scss/_formulate.scss
index 57c43a3d6..d683ce3c7 100644
--- a/app/javascript/dashboard/assets/scss/_formulate.scss
+++ b/app/javascript/dashboard/assets/scss/_formulate.scss
@@ -16,3 +16,23 @@
width: 100%;
}
}
+
+.integration-hooks {
+ .formulate-input[data-type='checkbox'] {
+ .formulate-input-wrapper {
+ @apply flex;
+
+ .formulate-input-element {
+ @apply pr-2;
+
+ input {
+ @apply mb-0;
+ }
+ }
+ }
+
+ .formulate-input-element-decorator {
+ @apply hidden;
+ }
+ }
+}
diff --git a/app/javascript/dashboard/components/ChatList.vue b/app/javascript/dashboard/components/ChatList.vue
index b90ee30f6..194bf5e5d 100644
--- a/app/javascript/dashboard/components/ChatList.vue
+++ b/app/javascript/dashboard/components/ChatList.vue
@@ -207,6 +207,7 @@ import DeleteCustomViews from 'dashboard/routes/dashboard/customviews/DeleteCust
import ConversationBulkActions from './widgets/conversation/conversationBulkActions/Index.vue';
import alertMixin from 'shared/mixins/alertMixin';
import filterMixin from 'shared/mixins/filterMixin';
+import uiSettingsMixin from 'dashboard/mixins/uiSettings';
import languages from 'dashboard/components/widgets/conversation/advancedFilterItems/languages';
import countries from 'shared/constants/countries';
import { generateValuesForEditCustomViews } from 'dashboard/helper/customViewsHelper';
@@ -238,6 +239,7 @@ export default {
eventListenerMixins,
alertMixin,
filterMixin,
+ uiSettingsMixin,
],
props: {
conversationInbox: {
@@ -408,8 +410,12 @@ export default {
},
conversationListPagination() {
const conversationsPerPage = 25;
+ const hasChatsOnView =
+ this.chatsOnView &&
+ Array.isArray(this.chatsOnView) &&
+ !this.chatsOnView.length;
const isNoFiltersOrFoldersAndChatListNotEmpty =
- !this.hasAppliedFiltersOrActiveFolders && this.chatsOnView !== [];
+ !this.hasAppliedFiltersOrActiveFolders && hasChatsOnView;
const isUnderPerPage =
this.chatsOnView.length < conversationsPerPage &&
this.activeAssigneeTabCount < conversationsPerPage &&
@@ -515,6 +521,7 @@ export default {
},
},
mounted() {
+ this.setFiltersFromUISettings();
this.$store.dispatch('setChatStatusFilter', this.activeStatus);
this.$store.dispatch('setChatSortFilter', this.activeSortBy);
this.resetAndFetchData();
@@ -544,6 +551,12 @@ export default {
this.$store.dispatch('customViews/update', payloadData);
this.closeAdvanceFiltersModal();
},
+ setFiltersFromUISettings() {
+ const { conversations_filter_by: filterBy = {} } = this.uiSettings;
+ const { status, order_by: orderBy } = filterBy;
+ this.activeStatus = status || wootConstants.STATUS_TYPE.OPEN;
+ this.activeSortBy = orderBy || wootConstants.SORT_BY_TYPE.LATEST;
+ },
onClickOpenAddFoldersModal() {
this.showAddFoldersModal = true;
},
diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue
index fe615ad3a..f291d221e 100644
--- a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue
+++ b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue
@@ -136,6 +136,7 @@ export default {
toStateName: 'labels_list',
showModalForNewItem: true,
modalName: 'AddLabel',
+ dataTestid: 'sidebar-new-label-button',
children: this.labels.map(label => ({
id: label.id,
label: label.title,
diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue
index 112ce9ab2..05f6ebfe1 100644
--- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue
+++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue
@@ -78,6 +78,7 @@
variant="clear"
color-scheme="secondary"
icon="add"
+ :data-testid="menuItem.dataTestid"
@click="e => newLinkClick(e, navigate)"
>
{{ $t(`SIDEBAR.${menuItem.newLinkTag}`) }}
diff --git a/app/javascript/dashboard/components/widgets/AIAssistanceButton.vue b/app/javascript/dashboard/components/widgets/AIAssistanceButton.vue
index ab4047a1e..2d7951b05 100644
--- a/app/javascript/dashboard/components/widgets/AIAssistanceButton.vue
+++ b/app/javascript/dashboard/components/widgets/AIAssistanceButton.vue
@@ -61,6 +61,7 @@ export default {
computed: {
...mapGetters({
currentChat: 'getSelectedChat',
+ isAChatwootInstance: 'globalConfig/isAChatwootInstance',
}),
isAICTAModalDismissed() {
return this.uiSettings.is_open_ai_cta_modal_dismissed;
@@ -70,7 +71,8 @@ export default {
return (
this.isAdmin &&
!this.isAIIntegrationEnabled &&
- !this.isAICTAModalDismissed
+ !this.isAICTAModalDismissed &&
+ this.isAChatwootInstance
);
},
// Display a AI CTA button for agents and other admins who have not yet opened the AI assistance modal.
diff --git a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue
index 864f8ac35..33bca2e68 100644
--- a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue
+++ b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue
@@ -135,6 +135,7 @@ export default {
// allowSignature is a kill switch, ensuring no signature methods
// are triggered except when this flag is true
allowSignature: { type: Boolean, default: false },
+ channelType: { type: String, default: '' },
showImageResizeToolbar: { type: Boolean, default: false }, // A kill switch to show or hide the image toolbar
},
data() {
@@ -266,8 +267,11 @@ export default {
sendWithSignature() {
// this is considered the source of truth, we watch this property
// on change, we toggle the signature in the editor
- const { send_with_signature: isEnabled } = this.uiSettings;
- return isEnabled && this.allowSignature && !this.isPrivate;
+ if (this.allowSignature && !this.isPrivate && this.channelType) {
+ return this.fetchSignatureFlagFromUiSettings(this.channelType);
+ }
+
+ return false;
},
},
watch: {
@@ -442,7 +446,7 @@ export default {
this.onFocus();
},
click: () => {
- // this.isEditorMouseFocusedOnAnImage(); Enable it when the backend supports for message resize is done.
+ this.isEditorMouseFocusedOnAnImage();
},
blur: () => {
this.onBlur();
@@ -670,7 +674,7 @@ export default {
() => this.resetTyping(),
TYPING_INDICATOR_IDLE_TIME
);
- // this.updateImgToolbarOnDelete(); Enable it when the backend supports for message resize is done.
+ this.updateImgToolbarOnDelete();
},
onKeydown(event) {
if (this.isEnterToSendEnabled()) {
diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
index 8477accc2..eb9b26f30 100644
--- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
+++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue
@@ -101,7 +101,7 @@
+ {{ $t('COMPONENTS.FILE_BUBBLE.INSTAGRAM_STORY_UNAVAILABLE') }} +
++ {{ $t('CONVERSATION.REPLIED_TO_STORY') }} ++ + diff --git a/app/javascript/dashboard/components/widgets/conversation/bubble/ReplyTo.vue b/app/javascript/dashboard/components/widgets/conversation/bubble/ReplyTo.vue index 06b6f0445..754c79954 100644 --- a/app/javascript/dashboard/components/widgets/conversation/bubble/ReplyTo.vue +++ b/app/javascript/dashboard/components/widgets/conversation/bubble/ReplyTo.vue @@ -1,10 +1,11 @@+
{{ $t('COMPONENTS.FILE_BUBBLE.INSTAGRAM_STORY_UNAVAILABLE') }}
-Agent Bots
Agent bots allows you to automate the conversations
", + "LOADING_EDITOR": "Loading editor...", + "HEADER_BTN_TXT": "Add bot configuration", + "SIDEBAR_TXT": "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.
", "CSML_BOT_EDITOR": { "NAME": { - "LABEL": "Bot Name", - "PLACEHOLDER": "Give your bot a name", - "ERROR": "Bot name is required" + "LABEL": "Bot name", + "PLACEHOLDER": "Name your bot.", + "ERROR": "Bot name is required." }, "DESCRIPTION": { - "LABEL": "Bot Description", + "LABEL": "Bot description", "PLACEHOLDER": "What does this bot do?" }, "BOT_CONFIG": { - "ERROR": "Please enter your CSML bot configuration above", - "API_ERROR": "Your CSML configuration is invalid, please fix it and try again." + "ERROR": "Please enter your CSML bot configuration above.", + "API_ERROR": "Your CSML configuration is invalid. Please fix it and try again." }, "SUBMIT": "Validate and save" }, "BOT_CONFIGURATION": { "TITLE": "Select an agent bot", - "DESC": "You can set an agent bot from the list to this inbox. The bot can initially handle the conversation and transfer it to an agent when needed.", + "DESC": "Assign an Agent Bot to your inbox. They can handle initial conversations and transfer them to a live agent when necessary.", "SUBMIT": "Update", - "DISCONNECT": "Disconnect Bot", - "SUCCESS_MESSAGE": "Successfully updated the agent bot", - "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot", - "ERROR_MESSAGE": "Could not update the agent bot, please try again later", - "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot, please try again later", - "SELECT_PLACEHOLDER": "Select Bot" + "DISCONNECT": "Disconnect bot", + "SUCCESS_MESSAGE": "Successfully updated the agent bot.", + "DISCONNECTED_SUCCESS_MESSAGE": "Successfully disconnected the agent bot.", + "ERROR_MESSAGE": "Could not update the agent bot. Please try again.", + "DISCONNECTED_ERROR_MESSAGE": "Could not disconnect the agent bot. Please try again.", + "SELECT_PLACEHOLDER": "Select bot" }, "ADD": { "TITLE": "Configure new bot", "CANCEL_BUTTON_TEXT": "Cancel", "API": { - "SUCCESS_MESSAGE": "Bot added successfully", - "ERROR_MESSAGE": "Could not add bot, Please try again later" + "SUCCESS_MESSAGE": "Bot added successfully.", + "ERROR_MESSAGE": "Could not add bot. Please try again later." } }, "LIST": { - "404": "No Bots found, you can create a bot by clicking the 'Configure new bot' Button ↗", - "LOADING": "Fetching Bots...", - "TYPE": "Bot Type" + "404": "No bots found. You can create a bot by clicking the 'Configure new bot' button ↗", + "LOADING": "Fetching bots...", + "TYPE": "Bot type" }, "DELETE": { "BUTTON_TEXT": "Delete", - "TITLE": "Delete Bot", + "TITLE": "Delete bot", "SUBMIT": "Delete", "CANCEL_BUTTON_TEXT": "Cancel", - "DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible", + "DESCRIPTION": "Are you sure you want to delete this bot? This action is irreversible.", "API": { - "SUCCESS_MESSAGE": "Bot deleted successfully", - "ERROR_MESSAGE": "Could not able to delete bot, Please try again later" + "SUCCESS_MESSAGE": "Bot deleted successfully.", + "ERROR_MESSAGE": "Could not delete bot. Please try again." } }, "EDIT": { "BUTTON_TEXT": "Edit", - "LOADING": "Fetching Bots...", - "TITLE": "Edit Bot", + "LOADING": "Fetching bots...", + "TITLE": "Edit bot", "CANCEL_BUTTON_TEXT": "Cancel", "API": { - "SUCCESS_MESSAGE": "Bot updated successfully", - "ERROR_MESSAGE": "Could not update bot, Please try again later" + "SUCCESS_MESSAGE": "Bot updated successfully.", + "ERROR_MESSAGE": "Could not update bot. Please try again." } }, "TYPES": { - "WEBHOOK": "Webhook Bot", - "CSML": "CSML Bot" + "WEBHOOK": "Webhook bot", + "CSML": "CSML bot" } } } diff --git a/app/javascript/dashboard/i18n/locale/en/bulkActions.json b/app/javascript/dashboard/i18n/locale/en/bulkActions.json index d5145f1bb..6af8316e9 100644 --- a/app/javascript/dashboard/i18n/locale/en/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/en/bulkActions.json @@ -1,40 +1,40 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select Agent", + "AGENT_SELECT_LABEL": "Select agent", "ASSIGN_CONFIRMATION_LABEL": "Are you sure to assign %{conversationCount} %{conversationLabel} to", "UNASSIGN_CONFIRMATION_LABEL": "Are you sure to unassign %{conversationCount} %{conversationLabel}?", "GO_BACK_LABEL": "Go back", "ASSIGN_LABEL": "Assign", "YES": "Yes", - "ASSIGN_AGENT_TOOLTIP": "Assign Agent", + "ASSIGN_AGENT_TOOLTIP": "Assign agent", "ASSIGN_TEAM_TOOLTIP": "Assign team", - "ASSIGN_SUCCESFUL": "Conversations assigned successfully", - "ASSIGN_FAILED": "Failed to assign conversations, please try again", - "RESOLVE_SUCCESFUL": "Conversations resolved successfully", - "RESOLVE_FAILED": "Failed to resolve conversations, please try again", + "ASSIGN_SUCCESFUL": "Conversations assigned successfully.", + "ASSIGN_FAILED": "Failed to assign conversations. Please try again.", + "RESOLVE_SUCCESFUL": "Conversations resolved successfully.", + "RESOLVE_FAILED": "Failed to resolve conversations. Please try again.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", - "AGENT_LIST_LOADING": "Loading Agents", + "AGENT_LIST_LOADING": "Loading agents", "UPDATE": { "CHANGE_STATUS": "Change status", - "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", + "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply.", "UPDATE_SUCCESFUL": "Conversation status updated successfully.", - "UPDATE_FAILED": "Failed to update conversations, please try again" + "UPDATE_FAILED": "Failed to update conversations. Please try again." }, "LABELS": { - "ASSIGN_LABELS": "Assign Labels", + "ASSIGN_LABELS": "Assign labels", "NO_LABELS_FOUND": "No labels found for", "ASSIGN_SELECTED_LABELS": "Assign selected labels", - "ASSIGN_SUCCESFUL": "Labels assigned successfully", - "ASSIGN_FAILED": "Failed to assign labels, please try again" + "ASSIGN_SUCCESFUL": "Labels assigned successfully.", + "ASSIGN_FAILED": "Failed to assign labels. Please try again." }, "TEAMS": { - "TEAM_SELECT_LABEL": "Select Team", + "TEAM_SELECT_LABEL": "Select team", "NONE": "None", "NO_TEAMS_AVAILABLE": "There are no teams added to this account yet.", - "ASSIGN_SELECTED_TEAMS": "Assign selected team", - "ASSIGN_SUCCESFUL": "Teams assiged successfully", - "ASSIGN_FAILED": "Failed to assign team, please try again" + "ASSIGN_SELECTED_TEAMS": "Assign selected team.", + "ASSIGN_SUCCESFUL": "Teams assiged successfully.", + "ASSIGN_FAILED": "Failed to assign team. Please try again." } } } diff --git a/app/javascript/dashboard/i18n/locale/en/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/en/cannedMgmt.json index 0cd52986e..71a334d87 100644 --- a/app/javascript/dashboard/i18n/locale/en/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/en/cannedMgmt.json @@ -1,71 +1,71 @@ { "CANNED_MGMT": { "HEADER": "Canned Responses", - "HEADER_BTN_TXT": "Add Canned Response", - "LOADING": "Fetching Canned Responses", - "SEARCH_404": "There are no items matching this query", - "SIDEBAR_TXT": "Canned Responses
Canned Responses are saved reply templates which can be used to quickly send out a reply to a conversation.
For creating a Canned Response, just click on the Add Canned Response. You can also edit or delete an existing Canned Response by clicking on the Edit or Delete button
Canned responses are used with the help of Short Codes. Agents can access canned responses while on a chat by typing '/' followed by the short code.
", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "There are no items matching this query.", + "SIDEBAR_TXT": "Canned Responses
Canned Responses are pre-written reply templates that help you quickly respond to a conversation. To insert a canned response during a chat, agents can type a short code preceded by a '/' character.
You can manage your canned responses from this page or create new ones using the \"Add canned response\" button.
Open the Canned Responses handbook in another tab for a helping hand.
Also, check out the all-new Canned Responses Library.
", "LIST": { "404": "There are no canned responses available in this account.", "TITLE": "Manage canned responses", - "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to tickets.", - "TABLE_HEADER": ["Short Code", "Content", "Actions"] + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", + "TABLE_HEADER": ["Short code", "Content", "Actions"] }, "ADD": { - "TITLE": "Add Canned Response", - "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", "CANCEL_BUTTON_TEXT": "Cancel", "FORM": { "SHORT_CODE": { - "LABEL": "Short Code", - "PLACEHOLDER": "Please enter a short code", - "ERROR": "Short Code is required" + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." }, "CONTENT": { - "LABEL": "Content", - "PLACEHOLDER": "Please enter a content", - "ERROR": "Content is required" + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." }, "SUBMIT": "Submit" }, "API": { - "SUCCESS_MESSAGE": "Canned Response added successfully", - "ERROR_MESSAGE": "Could not create canned response. Please try again later." + "SUCCESS_MESSAGE": "Canned response added successfully.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." } }, "EDIT": { - "TITLE": "Edit Canned Response", + "TITLE": "Edit canned response", "CANCEL_BUTTON_TEXT": "Cancel", "FORM": { "SHORT_CODE": { - "LABEL": "Short Code", - "PLACEHOLDER": "Please enter a shortcode", - "ERROR": "Short Code is required" + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." }, "CONTENT": { - "LABEL": "Content", - "PLACEHOLDER": "Please enter a content", - "ERROR": "Content is required" + "LABEL": "Message", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." }, "SUBMIT": "Submit" }, "BUTTON_TEXT": "Edit", "API": { - "SUCCESS_MESSAGE": "Canned Response updated successfully", - "ERROR_MESSAGE": "Could not update canned response. Please try again later." + "SUCCESS_MESSAGE": "Canned response is updated successfully.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." } }, "DELETE": { "BUTTON_TEXT": "Delete", "API": { - "SUCCESS_MESSAGE": "Canned response deleted successfully", - "ERROR_MESSAGE": "Could not delete canned response. Please try again later." + "SUCCESS_MESSAGE": "Canned response deleted successfully.", + "ERROR_MESSAGE": "Could not connect to Woot server. Please try again." }, "CONFIRM": { - "TITLE": "Confirm Deletion", + "TITLE": "Confirm deletion", "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "YES": "Yes, delete ", + "NO": "No, keep " } } } diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json index 65b55b732..19012abed 100644 --- a/app/javascript/dashboard/i18n/locale/en/conversation.json +++ b/app/javascript/dashboard/i18n/locale/en/conversation.json @@ -139,6 +139,7 @@ "PRIVATE_NOTE": "Private Note", "SEND": "Send", "CREATE": "Add Note", + "INSERT_READ_MORE": "Read more", "DISMISS_REPLY": "Dismiss reply", "REPLYING_TO": "Replying to:", "TIP_FORMAT_ICON": "Show rich text editor", diff --git a/app/javascript/dashboard/i18n/locale/en/emoji.json b/app/javascript/dashboard/i18n/locale/en/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/en/emoji.json +++ b/app/javascript/dashboard/i18n/locale/en/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/en/helpCenter.json b/app/javascript/dashboard/i18n/locale/en/helpCenter.json index 72f642584..6d4a3eb8c 100644 --- a/app/javascript/dashboard/i18n/locale/en/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/en/helpCenter.json @@ -76,6 +76,9 @@ }, "ARTICLE_SEARCH_RESULT": { "UNCATEGORIZED": "Uncategorized", + "SEARCH_RESULTS": "Search results for %{query}", + "EMPTY_TEXT": "Search for articles to insert into replies.", + "SEARCH_LOADER": "Searching...", "INSERT_ARTICLE": "Insert", "NO_RESULT": "No articles found", "COPY_LINK": "Copy article link to clipboard", @@ -220,7 +223,10 @@ "LOGO": { "LABEL": "Logo", "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "HELP_TEXT": "This logo will be displayed on the portal header.", + "IMAGE_UPLOAD_SUCCESS": "Logo uploaded successfully", + "IMAGE_UPLOAD_ERROR": "Logo deleted successfully", + "IMAGE_DELETE_ERROR": "Error while deleting logo" }, "NAME": { "LABEL": "Name", @@ -365,7 +371,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +402,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -426,6 +432,21 @@ } } }, + "ARTICLE_SEARCH": { + "TITLE": "Search articles", + "PLACEHOLDER": "Search articles", + "NO_RESULT": "No articles found", + "SEARCHING": "Searching...", + "SEARCH_BUTTON": "Search", + "INSERT_ARTICLE": "Insert link", + "IFRAME_ERROR": "URL is empty or invalid. Unable to display content.", + "OPEN_ARTICLE_SEARCH": "Insert article from Help Center", + "SUCCESS_ARTICLE_INSERTED": "Article inserted successfully", + "PREVIEW_LINK": "Preview article", + "CANCEL": "Close", + "BACK": "Back", + "BACK_RESULTS": "Back to results" + }, "UPGRADE_PAGE": { "TITLE": "Help Center", "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json index d0c86391d..3e55251e2 100644 --- a/app/javascript/dashboard/i18n/locale/es/conversation.json +++ b/app/javascript/dashboard/i18n/locale/es/conversation.json @@ -139,8 +139,8 @@ "PRIVATE_NOTE": "Nota privada", "SEND": "Enviar", "CREATE": "Añadir nota", - "DISMISS_REPLY": "Dismiss reply", - "REPLYING_TO": "Replying to:", + "DISMISS_REPLY": "Descartar respuesta", + "REPLYING_TO": "Respondiendo a:", "TIP_FORMAT_ICON": "Mostrar editor de textos", "TIP_EMOJI_ICON": "Mostrar selector de emoji", "TIP_ATTACH_ICON": "Adjuntar archivos", @@ -195,7 +195,7 @@ }, "CONTEXT_MENU": { "COPY": "Copiar", - "REPLY_TO": "Reply to this message", + "REPLY_TO": "Responder a este mensaje", "DELETE": "Eliminar", "CREATE_A_CANNED_RESPONSE": "Añadir a respuestas predefinidas", "TRANSLATE": "Traducir", diff --git a/app/javascript/dashboard/i18n/locale/es/emoji.json b/app/javascript/dashboard/i18n/locale/es/emoji.json index c0493214b..c1cedd25e 100644 --- a/app/javascript/dashboard/i18n/locale/es/emoji.json +++ b/app/javascript/dashboard/i18n/locale/es/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Buscar emojis", - "NOT_FOUND": "Ningún emoji coincide con tu búsqueda" + "NOT_FOUND": "Ningún emoji coincide con tu búsqueda", + "REMOVE": "Eliminar" } } diff --git a/app/javascript/dashboard/i18n/locale/es/helpCenter.json b/app/javascript/dashboard/i18n/locale/es/helpCenter.json index 642af96a8..474b6d5d8 100644 --- a/app/javascript/dashboard/i18n/locale/es/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/es/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nombre", "PLACEHOLDER": "Nombre de categoría", - "HELP_TEXT": "El nombre de la categoría se utilizará en el portal público orientado a categorizar los artículos.", + "HELP_TEXT": "El nombre de la categoría y el icono se utilizarán en el portal público para categorizar los artículos.", "ERROR": "El nombre es requerido" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nombre", "PLACEHOLDER": "Nombre de categoría", - "HELP_TEXT": "El nombre de la categoría se utilizará en el portal público orientado a categorizar los artículos.", + "HELP_TEXT": "El nombre de la categoría y el icono se utilizarán en el portal público para categorizar los artículos.", "ERROR": "El nombre es requerido" }, "SLUG": { @@ -428,28 +428,28 @@ }, "UPGRADE_PAGE": { "TITLE": "Centro de ayuda", - "DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Upgrade your subscription to enable this feature.", - "SELF_HOSTED_DESCRIPTION": "Create user-friendly self-service portals. Help your users to access the articles and get support 24/7. Please contact your administrator to enable this feature.", + "DESCRIPTION": "Crear portales de autoservicio amigables. Ayuda a tus usuarios a acceder a los artículos y obtener soporte 24/7. Actualiza tu suscripción para activar esta característica.", + "SELF_HOSTED_DESCRIPTION": "Crear portales de autoservicio amigables. Ayuda a tus usuarios a acceder a los artículos y obtener soporte 24/7. Póngase en contacto con su administrador para habilitar esta característica.", "BUTTON": { "LEARN_MORE": "Más información", - "UPGRADE": "Upgrade" + "UPGRADE": "Mejorar" }, "FEATURES": { "PORTALS": { - "TITLE": "Multiple portals", - "DESCRIPTION": "Create multiple help center portals for different products using the same account." + "TITLE": "Múltiples portales", + "DESCRIPTION": "Crear múltiples portales de centro de ayuda para diferentes productos usando la misma cuenta." }, "LOCALES": { - "TITLE": "Full support for locales", - "DESCRIPTION": "Localize the portal in your language. We support all locales and allow translations for every article." + "TITLE": "Soporte completo para locales", + "DESCRIPTION": "Localiza el portal en tu idioma. Apoyamos todas las localizaciones y permitimos traducciones para cada artículo." }, "SEO": { - "TITLE": "SEO-friendly design", - "DESCRIPTION": "Customize your meta tags to improve your visibility on search engines with our SEO-friendly pages." + "TITLE": "Diseño amigable con SEO", + "DESCRIPTION": "Personalice sus meta-etiquetas para mejorar su visibilidad en los motores de búsqueda con nuestras páginas amigables con SEO." }, "API": { - "TITLE": "Full API support", - "DESCRIPTION": "Use the portal as a headless CMS with third party front-end frameworks using our APIs." + "TITLE": "Soporte completo de API", + "DESCRIPTION": "Utilice el portal como un CMS sin cabeceras con frameworks front-end de terceros usando nuestras APIs." } } } diff --git a/app/javascript/dashboard/i18n/locale/fa/chatlist.json b/app/javascript/dashboard/i18n/locale/fa/chatlist.json index cdb8d6586..a816db440 100644 --- a/app/javascript/dashboard/i18n/locale/fa/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/fa/chatlist.json @@ -39,7 +39,7 @@ "SORT_TOOLTIP_LABEL": "مرتبسازی گفتگوها", "CHAT_SORT": { "STATUS": "وضعیت", - "ORDER_BY": "سفارش توسط" + "ORDER_BY": "مرتب بر اساس" }, "CHAT_TIME_STAMP": { "CREATED": { @@ -62,7 +62,7 @@ "TEXT": "اولویت" }, "sort_on_waiting_since": { - "TEXT": "پاسخ در انتظار" + "TEXT": "در انتظار پاسخ" } }, "ATTACHMENTS": { diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json index 283175920..6d2055cb8 100644 --- a/app/javascript/dashboard/i18n/locale/fa/contact.json +++ b/app/javascript/dashboard/i18n/locale/fa/contact.json @@ -9,7 +9,7 @@ "LOCATION": "مکان", "BROWSER_LANGUAGE": "مرور زبان", "CONVERSATION_TITLE": "جزئیات مکالمه", - "VIEW_PROFILE": "نمایش مشخصات", + "VIEW_PROFILE": "نمایش پروفایل", "BROWSER": "مرورگر", "OS": "سیستم عامل", "INITIATED_FROM": "شروع شده از", @@ -62,13 +62,13 @@ "DESC": "اطلاعات اولیه درباره مخاطب را اضافه کنید." }, "IMPORT_CONTACTS": { - "BUTTON_LABEL": "وارد كردن", - "TITLE": "وارد کردن مخاطبین", + "BUTTON_LABEL": "تزریق کردن", + "TITLE": "تزریق مخاطبین", "DESC": "مخاطبین را از طریق یک فایل CSV وارد کنید.", "DOWNLOAD_LABEL": "نمونه csv را بارگیری کنید.", "FORM": { "LABEL": "پرونده CSV", - "SUBMIT": "وارد كردن", + "SUBMIT": "تزریق کردن", "CANCEL": "انصراف" }, "SUCCESS_MESSAGE": "You will be notified via email when the import is complete.", diff --git a/app/javascript/dashboard/i18n/locale/fa/conversation.json b/app/javascript/dashboard/i18n/locale/fa/conversation.json index 31a82262d..540b6aeb0 100644 --- a/app/javascript/dashboard/i18n/locale/fa/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fa/conversation.json @@ -1,7 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "لطفا یک گفتگو را از پنجره گفتگوها انتخاب کنید", - "CSAT_REPLY_MESSAGE": "لطفاً به مکالمه امتیاز دهید", + "CSAT_REPLY_MESSAGE": "لطفاً به گفتگو امتیاز دهید", "404": "با عرض پوزش، ما نمیتوانیم گفتگو را پیدا کنیم. لطفا دوباره تلاش کنید", "SWITCH_VIEW_LAYOUT": "تغییر طرحبندی", "DASHBOARD_APP_TAB_MESSAGES": "پیامها", @@ -37,7 +37,7 @@ "REPLYING_TO": "شما در حال پاسخ دادن به:", "REMOVE_SELECTION": "حذف انتخابشدهها", "DOWNLOAD": "دانلود", - "UNKNOWN_FILE_TYPE": "پرونده ناشناخته", + "UNKNOWN_FILE_TYPE": "فایل ناشناخته", "SAVE_CONTACT": "ذخیره", "UPLOADING_ATTACHMENTS": "در حال بارگذاری پیوستها...", "REPLIED_TO_STORY": "Replied to your story", @@ -46,7 +46,7 @@ "NO_RESPONSE": "بدون پاسخ", "RATING_TITLE": "رتبه", "FEEDBACK_TITLE": "بازخورد", - "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "REPLY_MESSAGE_NOT_FOUND": "پیام در دسترس نیست", "CARD": { "SHOW_LABELS": "مشاهده کردن برچسبها", "HIDE_LABELS": "پنهان کردن برچسبها" @@ -58,7 +58,7 @@ "OPEN": "بیشتر", "CLOSE": "بستن", "DETAILS": "جزئیات", - "SNOOZED_UNTIL": "Snoozed until", + "SNOOZED_UNTIL": "به تعویق افتاده تا", "SNOOZED_UNTIL_TOMORROW": "تا فردا به تعویق افتاد", "SNOOZED_UNTIL_NEXT_WEEK": "تا هفته آینده به تعویق افتاد", "SNOOZED_UNTIL_NEXT_REPLY": "تا پاسخ بعدی به تعویق افتاد" @@ -76,23 +76,23 @@ "CUSTOM_SNOOZE": { "TITLE": "به تعویق انداختن تا", "APPLY": "به تعویق انداختن", - "CANCEL": "انصراف" + "CANCEL": "لغو" }, "PRIORITY": { "TITLE": "اولویت", "OPTIONS": { "NONE": "هیچکدام", "URGENT": "Urgent", - "HIGH": "High", - "MEDIUM": "Medium", - "LOW": "Low" + "HIGH": "بالا", + "MEDIUM": "متوسط", + "LOW": "پایین" }, "CHANGE_PRIORITY": { "SELECT_PLACEHOLDER": "هیچکدام", - "INPUT_PLACEHOLDER": "Select priority", + "INPUT_PLACEHOLDER": "انتخاب اولویت", "NO_RESULTS": "نتیجهای یافت نشد", - "SUCCESSFUL": "Changed priority of conversation id %{conversationId} to %{priority}", - "FAILED": "Couldn't change priority. Please try again." + "SUCCESSFUL": "تغییر اولویت گفتگوی با شناسه %{conversationId} به %{priority}", + "FAILED": "تغییر اولویت گفتگو با موفقیت انجام نشد. لطفا دوباره تلاش نمایید." } }, "CARD_CONTEXT_MENU": { @@ -139,8 +139,8 @@ "PRIVATE_NOTE": "یادداشت خصوصی", "SEND": "ارسال", "CREATE": "افزودن یادداشت", - "DISMISS_REPLY": "Dismiss reply", - "REPLYING_TO": "Replying to:", + "DISMISS_REPLY": "رد پاسخ", + "REPLYING_TO": "در حال پاسخ دهی به:", "TIP_FORMAT_ICON": "نمایش ویرایشگر متنی پیشرفته", "TIP_EMOJI_ICON": "انتخاب ایموجی", "TIP_ATTACH_ICON": "ضمیمه فایل", @@ -152,10 +152,10 @@ "STOP_AUDIO_RECORDING": "در حال توقف ضبط صدا", "": "", "EMAIL_HEAD": { - "TO": "TO", - "ADD_BCC": "افزودن bcc", + "TO": "به", + "ADD_BCC": "افزودن رونوشت", "CC": { - "LABEL": "CC", + "LABEL": "رونوشت", "PLACEHOLDER": "ایمیلها با کاما از هم جدا میشوند", "ERROR": "لطفا آدرس ایمیل معتبر وارد کنید" }, @@ -195,7 +195,7 @@ }, "CONTEXT_MENU": { "COPY": "کپی", - "REPLY_TO": "Reply to this message", + "REPLY_TO": "پاسخ به این پیام", "DELETE": "حذف", "CREATE_A_CANNED_RESPONSE": "اضافه کردن به پاسخهای آماده", "TRANSLATE": "ترجمه", @@ -296,7 +296,7 @@ "SUBJECT": "موضوع" }, "CONVERSATION_PARTICIPANTS": { - "SIDEBAR_MENU_TITLE": "شرکت کننده", + "SIDEBAR_MENU_TITLE": "شرکت کنندگان", "SIDEBAR_TITLE": "شرکت کنندگان در گفتگو", "NO_RECORDS_FOUND": "نتیجهای یافت نشد", "ADD_PARTICIPANTS": "شرکت کنندگان را انتخاب کنید", diff --git a/app/javascript/dashboard/i18n/locale/fa/emoji.json b/app/javascript/dashboard/i18n/locale/fa/emoji.json index 6cc528b89..4e6cb0926 100644 --- a/app/javascript/dashboard/i18n/locale/fa/emoji.json +++ b/app/javascript/dashboard/i18n/locale/fa/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "جستجوی ایموجی", - "NOT_FOUND": "هیچ ایموجی با جستجوی شما مطابقت ندارد" + "NOT_FOUND": "هیچ ایموجی با جستجوی شما مطابقت ندارد", + "REMOVE": "حذف" } } diff --git a/app/javascript/dashboard/i18n/locale/fa/generalSettings.json b/app/javascript/dashboard/i18n/locale/fa/generalSettings.json index 0230a2b71..548fdf15c 100644 --- a/app/javascript/dashboard/i18n/locale/fa/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/fa/generalSettings.json @@ -3,7 +3,7 @@ "TITLE": "تنظیمات حساب", "SUBMIT": "بهروزرسانی تنظیمات", "BACK": "بازگشت", - "DISMISS": "Dismiss", + "DISMISS": "نادیده بگیر", "UPDATE": { "ERROR": "تنظیمات بهروزرسانی نشد، دوباره امتحان کنید!", "SUCCESS": "تنظیمات با موفقیت اعمال شد" @@ -92,7 +92,7 @@ }, "NETWORK": { "NOTIFICATION": { - "TEXT": "قطع کردن Chatwoot" + "TEXT": "ارتباط با سیستم چت قطع شده است" }, "BUTTON": { "REFRESH": "تازه کردن" @@ -112,7 +112,7 @@ "REMOVE_LABEL": "برچسب را از مکالمه حذف کنید", "SETTINGS": "تنظیمات", "AI_ASSIST": "AI Assist", - "APPEARANCE": "Appearance" + "APPEARANCE": "ظاهری" }, "COMMANDS": { "GO_TO_CONVERSATION_DASHBOARD": "به داشبورد مکالمه بروید", @@ -135,7 +135,7 @@ "ADD_LABELS_TO_CONVERSATION": "برچسب را به مکالمه اضافه کنید", "ASSIGN_AN_AGENT": "یک ایجنت تعیین کنید", "AI_ASSIST": "AI Assist", - "ASSIGN_PRIORITY": "Assign priority", + "ASSIGN_PRIORITY": "انتساب اولویت", "ASSIGN_A_TEAM": "یک تیم را تعیین کنید", "MUTE_CONVERSATION": "صدای گفتگو را قطع کن", "UNMUTE_CONVERSATION": "مکالمه را باصدا کنید", @@ -147,8 +147,8 @@ "UNTIL_NEXT_REPLY": "تا پاسخ بعدی", "UNTIL_NEXT_WEEK": "تا هفته بعد", "UNTIL_TOMORROW": "تا فردا", - "UNTIL_NEXT_MONTH": "Until next month", - "AN_HOUR_FROM_NOW": "Until an hour from now", + "UNTIL_NEXT_MONTH": "تا ماه آینده", + "AN_HOUR_FROM_NOW": "از حالا تا یک ساعت دیگر", "CUSTOM": "سفارشی...", "CHANGE_APPEARANCE": "تغییر ظاهر", "LIGHT_MODE": "روشن", diff --git a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json index 83ca68566..f10607ffd 100644 --- a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "نام", "PLACEHOLDER": "نام دستهبندی", - "HELP_TEXT": "از نام دسته در پرتال عمومی برای دسته بندی مقالات استفاده می شود.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "نام الزامی است" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "نام", "PLACEHOLDER": "نام دستهبندی", - "HELP_TEXT": "از نام دسته در پرتال عمومی برای دسته بندی مقالات استفاده می شود.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "نام الزامی است" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json index 838808ec5..80c08d99a 100644 --- a/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fa/inboxMgmt.json @@ -162,7 +162,7 @@ "PROVIDERS": { "LABEL": "ارائه دهنده API", "TWILIO": "Twilio", - "BANDWIDTH": "Bandwidth" + "BANDWIDTH": "پهنای باند" }, "API": { "ERROR_MESSAGE": "ما نتوانستیم کانال پیامک را ذخیره کنیم" @@ -405,21 +405,21 @@ "DISABLED": "غیرفعال" }, "SENDER_NAME_SECTION": { - "TITLE": "Sender name", + "TITLE": "نام ارسال کننده", "SUB_TEXT": "Select the name shown to the your customer when they receive emails from your agents.", "FOR_EG": "For eg:", "FRIENDLY": { - "TITLE": "Friendly", + "TITLE": "دوستانه", "FROM": "از", "SUBTITLE": "Add the name of the agent who sent the reply in the sender name to make it friendly." }, "PROFESSIONAL": { - "TITLE": "Professional", + "TITLE": "حرفه ای", "SUBTITLE": "Use only the configured business name as the sender name in the email header." }, "BUSINESS_NAME": { "BUTTON_TEXT": "+ Configure your business name", - "PLACEHOLDER": "Enter your business name", + "PLACEHOLDER": "نام کسب و کار خود را وارد کنید", "SAVE_BUTTON_TEXT": "ذخیره" } }, @@ -486,7 +486,7 @@ "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "فعال یا غیرفعال کردن فرم دریافت ایمیل از کاربر", "AUTO_ASSIGNMENT": "فعال کردن واگذاری خودکار گفتگو به ایجنت ها", "ENABLE_CSAT": "فعال کردن رضایت مشتری", - "SENDER_NAME_SECTION": "Enable Agent Name in Email", + "SENDER_NAME_SECTION": "فعال سازی نام اپراتور در ایمیل", "ENABLE_CSAT_SUB_TEXT": "پس از پایان گفتگو ، نظرسنجی CSAT (رضایت مشتری) را فعال/غیرفعال کنید", "SENDER_NAME_SECTION_TEXT": "Enable/Disable showing Agent's name in email, if disabled it will show business name", "ENABLE_CONTINUITY_VIA_EMAIL": "ادامه مکالمه را از طریق ایمیل فعال کنید", @@ -498,7 +498,7 @@ "AUTO_ASSIGNMENT_SUB_TEXT": "فعال کردن یا غیرفعال کردن واگذاری خودکار گفتگوها به ایجنت های عضو این صندوق ورودی.", "HMAC_VERIFICATION": "اعتبار سنجی کاربر", "HMAC_DESCRIPTION": "به منظور اعتبارسنجی هویت کاربر، میتوانید یک «شناسه_هش» برای هر کاربر ارسال کنید. میتوانید با استفاده از «شناسه» با کلید نشان داده شده در اینجا یک هش HMAC sha256 ایجاد کنید.", - "HMAC_LINK_TO_DOCS": "You can read more here.", + "HMAC_LINK_TO_DOCS": "از اینجا می توانید بیشتر بخوانید.", "HMAC_MANDATORY_VERIFICATION": "مجبور کردن تأیید اعتبار هویت کاربر", "HMAC_MANDATORY_DESCRIPTION": "اگر فعال باشد، درخواستهایی که «identifier_hash» را ندارند رد میشوند.", "INBOX_IDENTIFIER": "شناسه صندوق ورودی", @@ -674,7 +674,7 @@ "PLACE_HOLDER": "دسترسی به ما ساده است. هر سوالی پیش آمد همینجا از ما بپرسید." }, "REPLY_TIME": { - "LABEL": "زمان پاسخ", + "LABEL": "زمان پاسخ دهی", "IN_A_FEW_MINUTES": "در چند دقیقه", "IN_A_FEW_HOURS": "در چند ساعت", "IN_A_DAY": "در یک روز" @@ -712,12 +712,12 @@ "CHAT": "گفتگو" }, "REPLY_TIME": { - "IN_A_FEW_MINUTES": "معمولاً در عرض چند دقیقه پاسخ می دهند", + "IN_A_FEW_MINUTES": "معمولاً در عرض چند دقیقه پاسخ دهی انجام می شود", "IN_A_FEW_HOURS": "معمولاً در عرض چند ساعت پاسخ می دهند", - "IN_A_DAY": "به طور معمول در یک روز پاسخ می دهند" + "IN_A_DAY": "به طور معمول در یک روز پاسخ دهی انجام می شود" }, "FOOTER": { - "START_CONVERSATION_BUTTON_TEXT": "شروع گفتگو", + "START_CONVERSATION_BUTTON_TEXT": "گفتگو را شروع کنید", "CHAT_INPUT_PLACEHOLDER": "پیام خود را وارد کنید" }, "BODY": { diff --git a/app/javascript/dashboard/i18n/locale/fa/integrations.json b/app/javascript/dashboard/i18n/locale/fa/integrations.json index 1960d27d3..14254c4bb 100644 --- a/app/javascript/dashboard/i18n/locale/fa/integrations.json +++ b/app/javascript/dashboard/i18n/locale/fa/integrations.json @@ -131,7 +131,7 @@ "KEY_PLACEHOLDER": "Enter your OpenAI API key", "BUTTONS": { "NEED_HELP": "به کمک احتياج داری؟", - "DISMISS": "Dismiss", + "DISMISS": "نادیده بگیر", "FINISH": "Finish Setup" }, "DISMISS_MESSAGE": "You can setup OpenAI integration later Whenever you want.", diff --git a/app/javascript/dashboard/i18n/locale/fa/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/fa/labelsMgmt.json index 040553112..2230e35bc 100644 --- a/app/javascript/dashboard/i18n/locale/fa/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fa/labelsMgmt.json @@ -46,7 +46,7 @@ "DISMISS": "Dismiss suggestion" }, "POWERED_BY": "Chatwoot AI", - "DISMISS": "Dismiss", + "DISMISS": "نادیده بگیر", "ADD_SELECTED_LABELS": "Add selected labels", "ADD_SELECTED_LABEL": "Add selected label", "ADD_ALL_LABELS": "Add all labels" diff --git a/app/javascript/dashboard/i18n/locale/fi/campaign.json b/app/javascript/dashboard/i18n/locale/fi/campaign.json index 7e9cf4e93..cb2f5f8d5 100644 --- a/app/javascript/dashboard/i18n/locale/fi/campaign.json +++ b/app/javascript/dashboard/i18n/locale/fi/campaign.json @@ -34,7 +34,7 @@ "ERROR": "Inbox is required" }, "MESSAGE": { - "LABEL": "Message", + "LABEL": "Viesti", "PLACEHOLDER": "Please enter the message of campaign", "ERROR": "Message is required" }, @@ -88,7 +88,7 @@ "404": "There are no campaigns created for this inbox.", "TABLE_HEADER": { "TITLE": "Title", - "MESSAGE": "Message", + "MESSAGE": "Viesti", "INBOX": "Inbox", "STATUS": "Tila", "SENDER": "Sender", diff --git a/app/javascript/dashboard/i18n/locale/fi/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/fi/cannedMgmt.json index d9bb78ed3..9bc26933a 100644 --- a/app/javascript/dashboard/i18n/locale/fi/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fi/cannedMgmt.json @@ -1,75 +1,75 @@ { "CANNED_MGMT": { "HEADER": "Tallennetut vastaukset", - "HEADER_BTN_TXT": "Lisää tallennettu vastaus", - "LOADING": "Haetaan tallennettuja vastauksia", - "SEARCH_404": "Tätä hakua vastaavia kohteita ei löydy", - "SIDEBAR_TXT": "Canned Responses
Canned Responses are saved reply templates which can be used to quickly send out a reply to a conversation.
For creating a Canned Response, just click on the Add Canned Response. You can also edit or delete an existing Canned Response by clicking on the Edit or Delete button
Canned responses are used with the help of Short Codes. Agents can access canned responses while on a chat by typing '/' followed by the short code.
", + "HEADER_BTN_TXT": "Add canned response", + "LOADING": "Fetching canned responses...", + "SEARCH_404": "Tätä hakua vastaavia kohteita ei löydy.", + "SIDEBAR_TXT": "Canned Responses
Canned Responses are pre-written reply templates that help you quickly respond to a conversation. To insert a canned response during a chat, agents can type a short code preceded by a '/' character.
You can manage your canned responses from this page or create new ones using the \"Add canned response\" button.
Open the Canned Responses handbook in another tab for a helping hand.
Also, check out the all-new Canned Responses Library.
", "LIST": { "404": "Tällä tilillä ei ole tallennettuja vastauksia.", "TITLE": "Hallitse tallennettuja vastauksia", - "DESC": "Tallennetut vastaukset ovat ennalta valmisteltuja vastausmalleja, joita voidaan käyttää nopeasti lähettää vastaukset tukipyyntöihin.", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", "TABLE_HEADER": [ - "Oikotie", + "Short code", "Sisältö", "Toiminnot" ] }, "ADD": { - "TITLE": "Lisää tallennettu vastaus", - "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", + "TITLE": "Add canned response", + "DESC": "Canned Responses are predefined reply templates which can be used to quickly send out replies to conversations.", "CANCEL_BUTTON_TEXT": "Peruuta", "FORM": { "SHORT_CODE": { - "LABEL": "Oikotie", - "PLACEHOLDER": "Please enter a short code", - "ERROR": "Oikotie on vaadittu" + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a short code.", + "ERROR": "Short Code is required." }, "CONTENT": { - "LABEL": "Sisältö", - "PLACEHOLDER": "Ole hyvä ja syötä sisältö", - "ERROR": "Sisältö on vaadittu" + "LABEL": "Viesti", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." }, "SUBMIT": "Lähetä" }, "API": { - "SUCCESS_MESSAGE": "Tallennettu vastaus lisätty onnistuneesti", + "SUCCESS_MESSAGE": "Canned response added successfully.", "ERROR_MESSAGE": "Yhteyden muodostaminen Woot-palvelimelle ei onnistunut, yritä myöhemmin uudelleen" } }, "EDIT": { - "TITLE": "Muokkaa tallennettua vastausta", + "TITLE": "Edit canned response", "CANCEL_BUTTON_TEXT": "Peruuta", "FORM": { "SHORT_CODE": { - "LABEL": "Oikotie", - "PLACEHOLDER": "Ole hyvä ja syötä oikotie", - "ERROR": "Oikotie on vaadittu" + "LABEL": "Short code", + "PLACEHOLDER": "Please enter a shortcode.", + "ERROR": "Short code is required." }, "CONTENT": { - "LABEL": "Sisältö", - "PLACEHOLDER": "Ole hyvä ja syötä sisältö", - "ERROR": "Sisältö on vaadittu" + "LABEL": "Viesti", + "PLACEHOLDER": "Please write the message you want to save as a template to use later.", + "ERROR": "Message is required." }, "SUBMIT": "Lähetä" }, "BUTTON_TEXT": "Muokkaa", "API": { - "SUCCESS_MESSAGE": "Tallennettu vastaus päivitetty onnistuneesti", + "SUCCESS_MESSAGE": "Canned response is updated successfully.", "ERROR_MESSAGE": "Yhteyden muodostaminen Woot-palvelimelle ei onnistunut, yritä myöhemmin uudelleen" } }, "DELETE": { "BUTTON_TEXT": "Poista", "API": { - "SUCCESS_MESSAGE": "Tallennettu vastaus poistettu onnistuneesti", + "SUCCESS_MESSAGE": "Canned response deleted successfully.", "ERROR_MESSAGE": "Yhteyden muodostaminen Woot-palvelimelle ei onnistunut, yritä myöhemmin uudelleen" }, "CONFIRM": { - "TITLE": "Vahvista poistaminen", + "TITLE": "Confirm deletion", "MESSAGE": "Oletko varma että haluat poistaa ", - "YES": "Kyllä, poista ", - "NO": "Ei, säilytä " + "YES": "Yes, delete ", + "NO": "No, keep " } } } diff --git a/app/javascript/dashboard/i18n/locale/fi/contact.json b/app/javascript/dashboard/i18n/locale/fi/contact.json index 544015dbd..8afed55d0 100644 --- a/app/javascript/dashboard/i18n/locale/fi/contact.json +++ b/app/javascript/dashboard/i18n/locale/fi/contact.json @@ -200,7 +200,7 @@ "ERROR": "Subject can't be empty" }, "MESSAGE": { - "LABEL": "Message", + "LABEL": "Viesti", "PLACEHOLDER": "Write your message here", "ERROR": "Message can't be empty" }, @@ -309,20 +309,20 @@ }, "VALUE": { "LABEL": "Attribute value", - "PLACEHOLDER": "Eg: 11901 " + "PLACEHOLDER": "Esim: 11901 " }, "ADD": { "TITLE": "Luo uusi määrite ", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "SUCCESS": "Attribuutin lisäys onnistui", + "ERROR": "Attribuuttia ei voitu lisätä. Yritä myöhemmin uudelleen" }, "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Tunniste päivitetty onnistuneesti", + "ERROR": "Attribuuttia ei voida päivittää. Yritä myöhemmin uudelleen" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Attribuutin poisto onnistui", + "ERROR": "Attribuuttia ei voida poistaa. Yritä uudelleen myöhemmin" }, "ATTRIBUTE_SELECT": { "TITLE": "Lisää määritteitä", @@ -331,15 +331,15 @@ }, "ATTRIBUTE_TYPE": { "LIST": { - "PLACEHOLDER": "Select value", - "SEARCH_INPUT_PLACEHOLDER": "Search value", + "PLACEHOLDER": "Valitse arvo", + "SEARCH_INPUT_PLACEHOLDER": "Etsi arvo", "NO_RESULT": "Tuloksia ei löytynyt" } } }, "VALIDATIONS": { - "REQUIRED": "Valid value is required", - "INVALID_URL": "Invalid URL" + "REQUIRED": "Kelvollinen arvo vaaditaan", + "INVALID_URL": "Virheellinen URL" } }, "MERGE_CONTACTS": { @@ -355,7 +355,7 @@ "HELP_LABEL": "Säilytetään" }, "SUMMARY": { - "TITLE": "Summary", + "TITLE": "Yhteenveto", "DELETE_WARNING": "Contact of %{primaryContactName} will be deleted.", "ATTRIBUTE_WARNING": "Contact details of %{primaryContactName} will be copied to %{parentContactName}." }, diff --git a/app/javascript/dashboard/i18n/locale/fi/conversation.json b/app/javascript/dashboard/i18n/locale/fi/conversation.json index 319c53def..8a9af526d 100644 --- a/app/javascript/dashboard/i18n/locale/fi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fi/conversation.json @@ -270,17 +270,17 @@ "CONVERSATION_CUSTOM_ATTRIBUTES": { "ADD_BUTTON_TEXT": "Create attribute", "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Tunniste päivitetty onnistuneesti", + "ERROR": "Attribuuttia ei voida päivittää. Yritä myöhemmin uudelleen" }, "ADD": { "TITLE": "Add", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "SUCCESS": "Attribuutin lisäys onnistui", + "ERROR": "Attribuuttia ei voitu lisätä. Yritä myöhemmin uudelleen" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Attribuutin poisto onnistui", + "ERROR": "Attribuuttia ei voida poistaa. Yritä uudelleen myöhemmin" }, "ATTRIBUTE_SELECT": { "TITLE": "Lisää määritteitä", diff --git a/app/javascript/dashboard/i18n/locale/fi/emoji.json b/app/javascript/dashboard/i18n/locale/fi/emoji.json index fd81268fb..813862946 100644 --- a/app/javascript/dashboard/i18n/locale/fi/emoji.json +++ b/app/javascript/dashboard/i18n/locale/fi/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Poista" } } diff --git a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json index 189a4718c..f2129e52f 100644 --- a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nimi", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nimi", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json index 96420e8a7..029ec4a8f 100644 --- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json @@ -410,7 +410,7 @@ "FOR_EG": "For eg:", "FRIENDLY": { "TITLE": "Friendly", - "FROM": "from", + "FROM": "lähettäjä", "SUBTITLE": "Add the name of the agent who sent the reply in the sender name to make it friendly." }, "PROFESSIONAL": { diff --git a/app/javascript/dashboard/i18n/locale/fi/search.json b/app/javascript/dashboard/i18n/locale/fi/search.json index 8c59027b3..8e8487378 100644 --- a/app/javascript/dashboard/i18n/locale/fi/search.json +++ b/app/javascript/dashboard/i18n/locale/fi/search.json @@ -19,7 +19,7 @@ "BOT_LABEL": "Botti", "READ_MORE": "Read more", "WROTE": "wrote:", - "FROM": "from", + "FROM": "lähettäjä", "EMAIL": "sähköposti" } } diff --git a/app/javascript/dashboard/i18n/locale/fr/emoji.json b/app/javascript/dashboard/i18n/locale/fr/emoji.json index c67e48faf..4917bf08f 100644 --- a/app/javascript/dashboard/i18n/locale/fr/emoji.json +++ b/app/javascript/dashboard/i18n/locale/fr/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Rechercher des émojis", - "NOT_FOUND": "Aucun émoji ne correspond à votre recherche" + "NOT_FOUND": "Aucun émoji ne correspond à votre recherche", + "REMOVE": "Supprimer" } } diff --git a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json index 6cc23c33b..a9adeafe6 100644 --- a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nom", "PLACEHOLDER": "Nom de la catégorie", - "HELP_TEXT": "Le nom de la catégorie sera utilisé dans le portail public pour classer les articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Le nom est requis" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nom", "PLACEHOLDER": "Nom de la catégorie", - "HELP_TEXT": "Le nom de la catégorie sera utilisé dans le portail public pour classer les articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Le nom est requis" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/he/emoji.json b/app/javascript/dashboard/i18n/locale/he/emoji.json index 7eb8f230d..da67df544 100644 --- a/app/javascript/dashboard/i18n/locale/he/emoji.json +++ b/app/javascript/dashboard/i18n/locale/he/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "חפש אימוג'י", - "NOT_FOUND": "אין אמוג'י שתואם את החיפוש שלך" + "NOT_FOUND": "אין אמוג'י שתואם את החיפוש שלך", + "REMOVE": "הסר" } } diff --git a/app/javascript/dashboard/i18n/locale/he/helpCenter.json b/app/javascript/dashboard/i18n/locale/he/helpCenter.json index 28e428c8b..083d8462f 100644 --- a/app/javascript/dashboard/i18n/locale/he/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/he/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "שם", "PLACEHOLDER": "שם קטגוריה", - "HELP_TEXT": "שם הקטגוריה ישמש בפורטל הפונה לציבור כדי לסווג מאמרים.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "שם שדה חובה" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "שם", "PLACEHOLDER": "שם קטגוריה", - "HELP_TEXT": "שם הקטגוריה ישמש בפורטל הפונה לציבור כדי לסווג מאמרים.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "שם שדה חובה" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/hi/emoji.json b/app/javascript/dashboard/i18n/locale/hi/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/hi/emoji.json +++ b/app/javascript/dashboard/i18n/locale/hi/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json index deacd1bff..4354004a0 100644 --- a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/hr/emoji.json b/app/javascript/dashboard/i18n/locale/hr/emoji.json index fd81268fb..cec8c96d4 100644 --- a/app/javascript/dashboard/i18n/locale/hr/emoji.json +++ b/app/javascript/dashboard/i18n/locale/hr/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Izbaci" } } diff --git a/app/javascript/dashboard/i18n/locale/hr/helpCenter.json b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json index 44ebf5291..d8a8dda8e 100644 --- a/app/javascript/dashboard/i18n/locale/hr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hr/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json b/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json index 740ddb6fe..22a26ac68 100644 --- a/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/hu/advancedFilters.json @@ -1,18 +1,18 @@ { "FILTER": { "TITLE": "Beszélgetések szűrése", - "SUBTITLE": "Adj meg szűrőket alább, majd kattints a \"Szűrők alkalmazása\" gombra a szűréshez.", + "SUBTITLE": "Adja hozzá a szűrőket az alábbiakban, és nyomja meg a \"Szűrők alkalmazása\" gombot.", "EDIT_CUSTOM_FILTER": "Mappa szerkesztése", "CUSTOM_VIEWS_SUBTITLE": "Adj hozzá vagy törölj szűrőket, és frissítsd a mappát.", "ADD_NEW_FILTER": "Szűrő hozzáadása", - "FILTER_DELETE_ERROR": "Kötelező legalább egy szűrőt megadni a mentéshez", + "FILTER_DELETE_ERROR": "Hoppá, úgy tűnik, semmit sem tudunk elmenteni! Kérjük, adjon hozzá legalább egy szűrőt a mentéshez.", "SUBMIT_BUTTON_LABEL": "Szűrők alkalmazása", "UPDATE_BUTTON_LABEL": "Mappa frissítése", "CANCEL_BUTTON_LABEL": "Mégse", "CLEAR_BUTTON_LABEL": "Szűrők törlése", - "EMPTY_VALUE_ERROR": "Kötelező megadni", "FOLDER_LABEL": "Mappa neve", "FOLDER_QUERY_LABEL": "Mappa lekérdezés", + "EMPTY_VALUE_ERROR": "Kötelező megadni.", "TOOLTIP_LABEL": "Beszélgetések szűrése", "QUERY_DROPDOWN_LABELS": { "AND": "ÉS", @@ -36,11 +36,11 @@ }, "ATTRIBUTES": { "STATUS": "Státusz", - "ASSIGNEE_NAME": "Felelős neve", + "ASSIGNEE_NAME": "Jogosult neve", "INBOX_NAME": "Fiók név", - "TEAM_NAME": "Csapat neve", - "CONVERSATION_IDENTIFIER": "Beszélgetés azonosító", - "CAMPAIGN_NAME": "Kampány neve", + "TEAM_NAME": "Csapatnév", + "CONVERSATION_IDENTIFIER": "Beszélgetés azonosítója", + "CAMPAIGN_NAME": "Vállalkozás neve", "LABELS": "Cimkék", "BROWSER_LANGUAGE": "Böngésző nyelve", "PRIORITY": "Prioritás", @@ -55,25 +55,25 @@ "LAST_ACTIVITY": "Utolsó aktivitás" }, "GROUPS": { - "STANDARD_FILTERS": "Alap szűrők", - "ADDITIONAL_FILTERS": "Extra szűrők", - "CUSTOM_ATTRIBUTES": "Egyedi atribútumok" + "STANDARD_FILTERS": "Standard szűrők", + "ADDITIONAL_FILTERS": "További szűrők", + "CUSTOM_ATTRIBUTES": "Egyéni tulajdonságok" }, "CUSTOM_VIEWS": { "ADD": { "TITLE": "El akarod menteni ezt a szűrőt?", "LABEL": "Nevezd el a szűrőt", - "PLACEHOLDER": "Adj nevet a szűrőnek", - "ERROR_MESSAGE": "Név kötelező", + "PLACEHOLDER": "Nevezze el a szűrőt, hogy később hivatkozhasson rá.", + "ERROR_MESSAGE": "Név kötelező.", "SAVE_BUTTON": "Szűrő mentése", "CANCEL_BUTTON": "Mégse", "API_FOLDERS": { - "SUCCESS_MESSAGE": "Mappa sikeresen létrehozva", - "ERROR_MESSAGE": "Hiba történt a mappa létrehozása során" + "SUCCESS_MESSAGE": "Mappa sikeresen létrehozva.", + "ERROR_MESSAGE": "Hiba történt a mappa létrehozása során." }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Szegmens sikeresen létrehozva", - "ERROR_MESSAGE": "Hiba történt a szegmens törlésekor" + "SUCCESS_MESSAGE": "Szegmens sikeresen létrehozva.", + "ERROR_MESSAGE": "Hiba történt a szegmens törlésekor." } }, "EDIT": { @@ -85,17 +85,17 @@ "CONFIRM": { "TITLE": "Törlés megerősítése", "MESSAGE": "Biztosan törölni akarod a szűrőt ", - "YES": "Igen, Törlés", - "NO": "Nem, tartsa meg" + "YES": "Igen, törlés", + "NO": "Nem, tartsd meg" } }, "API_FOLDERS": { - "SUCCESS_MESSAGE": "Mappa sikeresen törölve", - "ERROR_MESSAGE": "Hiba történt a mappa törlése során" + "SUCCESS_MESSAGE": "Mappa sikeresen törölve.", + "ERROR_MESSAGE": "Hiba történt a mappa törlése során." }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Szegmens törölve", - "ERROR_MESSAGE": "Hiba történt a szegmens törlése során" + "SUCCESS_MESSAGE": "Szegmens törölve.", + "ERROR_MESSAGE": "Hiba történt a szegmens törlése során." } } } diff --git a/app/javascript/dashboard/i18n/locale/hu/agentBots.json b/app/javascript/dashboard/i18n/locale/hu/agentBots.json index fdf2efdc0..7d1d30f13 100644 --- a/app/javascript/dashboard/i18n/locale/hu/agentBots.json +++ b/app/javascript/dashboard/i18n/locale/hu/agentBots.json @@ -3,66 +3,66 @@ "HEADER": "Botok", "LOADING_EDITOR": "Szerkesztő betöltése...", "HEADER_BTN_TXT": "Bot konfiguráció hozzáadása", - "SIDEBAR_TXT": "Ügynökök
Az ügynökök lehetővé teszik a beszélgetés automatizálását
", + "SIDEBAR_TXT": "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.
", "CSML_BOT_EDITOR": { "NAME": { "LABEL": "Bot neve", - "PLACEHOLDER": "Adj nevet a botodnak", - "ERROR": "Bot név megadása kötelező" + "PLACEHOLDER": "Nevezd el a botodat.", + "ERROR": "Bot név megadása kötelező." }, "DESCRIPTION": { - "LABEL": "Bot leírása", + "LABEL": "Bot leírás", "PLACEHOLDER": "Mit csinál ez a bot?" }, "BOT_CONFIG": { - "ERROR": "Add meg a CSML bot konfigurációt feljebb", - "API_ERROR": "A CSML konfigurációd invalid, javítsd, majd próbáld újra." + "ERROR": "Add meg a CSML bot konfigurációt feljebb.", + "API_ERROR": "A CSML konfigurációja érvénytelen. Kérjük, javítsa ki és próbálja meg újra." }, "SUBMIT": "Validáció és mentés" }, "BOT_CONFIGURATION": { "TITLE": "Válassz ügynököt", - "DESC": "Beemelhet egy ügynök botot a listából ebbe a postafiókba. A bot kezdetben képes kezelni a beszélgetést és továbbítani tudja egy ügynöknek, ha az szükséges.", + "DESC": "Rendeljen egy Agent Botot a postaládájához. Ők képesek kezelni a kezdeti beszélgetéseket, és szükség esetén átirányítani őket egy emberhez.", "SUBMIT": "Frissítés", - "DISCONNECT": "Bot leválasztása", - "SUCCESS_MESSAGE": "Ügynök frissítve", - "DISCONNECTED_SUCCESS_MESSAGE": "Ügynök leválasztva", - "ERROR_MESSAGE": "Nem sikerült frissíteni az ügynököt, próbáld újra később", - "DISCONNECTED_ERROR_MESSAGE": "Nem sikerült leválasztani az ügynököt, próbáld újra később", - "SELECT_PLACEHOLDER": "Válasssz botot" + "DISCONNECT": "Bot lekapcsolása", + "SUCCESS_MESSAGE": "Ügynök frissítve.", + "DISCONNECTED_SUCCESS_MESSAGE": "Ügynök leválasztva.", + "ERROR_MESSAGE": "Nem sikerült frissíteni a botot. Kérjük, próbálja meg újra.", + "DISCONNECTED_ERROR_MESSAGE": "Nem sikerült leválasztani az botot. Kérjük, próbálja meg újra.", + "SELECT_PLACEHOLDER": "Válassza ki a botot" }, "ADD": { "TITLE": "Új bot beállítása", "CANCEL_BUTTON_TEXT": "Mégse", "API": { - "SUCCESS_MESSAGE": "Bot hozzáadva", - "ERROR_MESSAGE": "Sikertelen bot hozzáadás" + "SUCCESS_MESSAGE": "Bot hozzáadva.", + "ERROR_MESSAGE": "Nem tudott botot hozzáadni. Kérjük, próbálja meg később újra." } }, "LIST": { - "404": "Nem található Bot, létrehozhatsz egyet az 'Új Bot létrehozása' gomb megnyomásával", - "LOADING": "Botok keresése...", - "TYPE": "Bot típusa" + "404": "Nem találtunk botokat. A 'Új bot konfigurálása' gombra kattintva hozhat létre botot ↗", + "LOADING": "Botok hívása...", + "TYPE": "Bot típus" }, "DELETE": { "BUTTON_TEXT": "Törlés", "TITLE": "Bot törlése", "SUBMIT": "Törlés", "CANCEL_BUTTON_TEXT": "Mégse", - "DESCRIPTION": "Biztosan törölni szeretnéd ezt a botot? Ez a művelet visszafordíthatatlan", + "DESCRIPTION": "Biztosan törölni szeretnéd ezt a botot? Ez a művelet visszafordíthatatlan.", "API": { - "SUCCESS_MESSAGE": "Bot törölve", - "ERROR_MESSAGE": "Nem sikerült frissíteni a botot, kérlek próbáld újra később" + "SUCCESS_MESSAGE": "Bot törölve.", + "ERROR_MESSAGE": "Nem sikerült törölni a botot. Kérjük, próbálja újra." } }, "EDIT": { "BUTTON_TEXT": "Szerkesztés", - "LOADING": "Botok keresése...", + "LOADING": "Botok hívása...", "TITLE": "Bot szerkesztése", "CANCEL_BUTTON_TEXT": "Mégse", "API": { - "SUCCESS_MESSAGE": "Bot frissítve", - "ERROR_MESSAGE": "Nem sikerült frissíteni a botot" + "SUCCESS_MESSAGE": "Bot frissítve.", + "ERROR_MESSAGE": "Nem tudta frissíteni a botot. Kérjük, próbálja újra." } }, "TYPES": { diff --git a/app/javascript/dashboard/i18n/locale/hu/bulkActions.json b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json index 711a29e82..c57da4956 100644 --- a/app/javascript/dashboard/i18n/locale/hu/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/hu/bulkActions.json @@ -9,32 +9,32 @@ "YES": "Igen", "ASSIGN_AGENT_TOOLTIP": "Ügynök hozzárendelése", "ASSIGN_TEAM_TOOLTIP": "Csapat hozzárendelése", - "ASSIGN_SUCCESFUL": "Beszélgetés sikeresen hozzá lett rendelve", - "ASSIGN_FAILED": "Sikertelen hozzárendelni beszégetéseket, kérlek, próbáld újra", - "RESOLVE_SUCCESFUL": "Beszélgetés sikeresen megoldva", - "RESOLVE_FAILED": "Sikertelen megoldani a beszélgetéseket, kérlek, próbáld újra", + "ASSIGN_SUCCESFUL": "Beszélgetés sikeresen hozzá lett rendelve.", + "ASSIGN_FAILED": "Nem sikerült beszélgetéseket hozzárendelni. Kérjük, próbálja újra.", + "RESOLVE_SUCCESFUL": "Beszélgetés sikeresen megoldva.", + "RESOLVE_FAILED": "Nem sikerült megoldani a beszélgetéseket. Kérjük, próbálja újra.", "ALL_CONVERSATIONS_SELECTED_ALERT": "Csak a kiválasztott beszélgetések láthatóak ezen az oldalon.", "AGENT_LIST_LOADING": "Ügynökök betöltése", "UPDATE": { "CHANGE_STATUS": "Státusz változtatása", - "SNOOZE_UNTIL_NEXT_REPLY": "Alvómód a következő válaszig", + "SNOOZE_UNTIL_NEXT_REPLY": "Alvómód a következő válaszig.", "UPDATE_SUCCESFUL": "Beszélgetés státusza sikeresen frissítve ", - "UPDATE_FAILED": "A beszélgetés frissítése sikertelen, kérlek, próbáld újra" + "UPDATE_FAILED": "Nem sikerült frissíteni a beszélgetéseket. Kérjük, próbálja újra." }, "LABELS": { - "ASSIGN_LABELS": "Cimke hozzáadása", + "ASSIGN_LABELS": "Címkék hozzárendelése", "NO_LABELS_FOUND": "Nem található cimke erre:", "ASSIGN_SELECTED_LABELS": "Válogatott címkék hozzárendelése", - "ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres", - "ASSIGN_FAILED": "Címkék hozzárendelése sikertelne, kérlek, próbáld újra" + "ASSIGN_SUCCESFUL": "Címkék hozzárendelése sikeres.", + "ASSIGN_FAILED": "Nem sikerült címkéket hozzárendelni. Kérjük, próbálja újra." }, "TEAMS": { "TEAM_SELECT_LABEL": "Csapat kiválasztása", "NONE": "Nincs", "NO_TEAMS_AVAILABLE": "Ebben a fiókban még nincs csapat létrehozva.", - "ASSIGN_SELECTED_TEAMS": "Válogatott csapatok hozzárendelése", - "ASSIGN_SUCCESFUL": "Csapatok hozzárendelése sikeres", - "ASSIGN_FAILED": "Csapatok hozzárendelése sikertelen, kérlek, próbáld újra" + "ASSIGN_SELECTED_TEAMS": "Válogatott csapatok hozzárendelése.", + "ASSIGN_SUCCESFUL": "Csapatok hozzárendelése sikeres.", + "ASSIGN_FAILED": "Nem sikerült csapatot kijelölni. Kérjük, próbálja újra." } } } diff --git a/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json index 64482a806..f0d0d0916 100644 --- a/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/hu/cannedMgmt.json @@ -1,75 +1,75 @@ { "CANNED_MGMT": { "HEADER": "Mentett válaszok", - "HEADER_BTN_TXT": "Mentett válasz hozzáadása", - "LOADING": "Mentett válaszok letöltése", - "SEARCH_404": "Nincs megfelelő elem", - "SIDEBAR_TXT": "Mentett válaszok
A mentett válaszok sablonok, melyeket gyors válaszok kiküldésére használhatsz.
Mentett válasz létrehozásához kattints a Mentett válasz létrehozása-ra. Szerkesztheted vagy törölheted is a mentett válaszokat a Szerkesztés és Törlés gombokkal. A mentett válaszokat rövidkódok segítéségével használhatod. Az ügynökök a '/' jel begépelésével és a megfelelő rövidkód begépelésével férhetnek hozzá a válaszokhoz.
", + "HEADER_BTN_TXT": "Sablon válasz hozzáadása", + "LOADING": "Sablon válaszok lekérése...", + "SEARCH_404": "Nincs megfelelő elem.", + "SIDEBAR_TXT": "Canned Responses
Canned Responses are pre-written reply templates that help you quickly respond to a conversation. To insert a canned response during a chat, agents can type a short code preceded by a '/' character.
You can manage your canned responses from this page or create new ones using the \"Add canned response\" button.
Open the Canned Responses handbook in another tab for a helping hand.
Also, check out the all-new Canned Responses Library.
", "LIST": { "404": "Nincs megfelelő mentett válasz ebben a fiókban.", "TITLE": "Mentett válaszok kezelése", - "DESC": "A mentett válaszok előre meghatározott sablonok, melyeket gyors válaszok kiküldésére használhatsz.", + "DESC": "A sablon válaszok előre definiáltak, amelyek segítségével gyorsan küldhet válaszokat a beszélgetésekre.", "TABLE_HEADER": [ - "Rövidkód", + "Rövid kód", "Tartalom", "Műveletek" ] }, "ADD": { - "TITLE": "Mentett válasz hozzáadása", - "DESC": "A mentett válaszok előre meghatározott sablonok, melyeket gyors válaszok kiküldésére használhatsz.", + "TITLE": "Sablon válasz hozzáadása", + "DESC": "A sablon válaszok előre definiáltak, amelyek segítségével gyorsan küldhet válaszokat a beszélgetésekre.", "CANCEL_BUTTON_TEXT": "Mégse", "FORM": { "SHORT_CODE": { - "LABEL": "Rövidkód", - "PLACEHOLDER": "Add meg a shortcode-ot", - "ERROR": "Rövidkód szükséges" + "LABEL": "Rövid kód", + "PLACEHOLDER": "Kérjük, adjon meg egy rövid kódot.", + "ERROR": "Rövid kód szükséges." }, "CONTENT": { - "LABEL": "Tartalom", - "PLACEHOLDER": "Kérjük adj meg tartalmat", - "ERROR": "Tartalom szükséges" + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérjük, írja meg az üzenetet, amelyet sablonként szeretne elmenteni, hogy később felhasználhassa.", + "ERROR": "Üzenetre van szükség." }, "SUBMIT": "Elküldés" }, "API": { - "SUCCESS_MESSAGE": "A mentett válasz sikeresen hozzáadva", + "SUCCESS_MESSAGE": "Sikeresen hozzáadva a sablon válasz.", "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" } }, "EDIT": { - "TITLE": "Mentett válasz szerkesztése", + "TITLE": "Sablon válasz szerkesztése", "CANCEL_BUTTON_TEXT": "Mégse", "FORM": { "SHORT_CODE": { - "LABEL": "Rövidkód", - "PLACEHOLDER": "Kérjük adj meg egy Rövidkódot", - "ERROR": "Rövidkód szükséges" + "LABEL": "Rövid kód", + "PLACEHOLDER": "Kérjük, adjon meg egy rövidkódot.", + "ERROR": "Rövid kód szükséges." }, "CONTENT": { - "LABEL": "Tartalom", - "PLACEHOLDER": "Kérjük adj meg tartalmat", - "ERROR": "Tartalom szükséges" + "LABEL": "Üzenet", + "PLACEHOLDER": "Kérjük, írja meg az üzenetet, amelyet sablonként szeretne elmenteni, hogy később felhasználhassa.", + "ERROR": "Üzenet kötelező." }, "SUBMIT": "Elküldés" }, "BUTTON_TEXT": "Szerkesztés", "API": { - "SUCCESS_MESSAGE": "A mentett válasz sikeresen frissítve", + "SUCCESS_MESSAGE": "A sablon válasz sikeresen frissült.", "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" } }, "DELETE": { "BUTTON_TEXT": "Törlés", "API": { - "SUCCESS_MESSAGE": "A mentett válasz sikeresen törölve", + "SUCCESS_MESSAGE": "A sablon válasz sikeresen törölve.", "ERROR_MESSAGE": "Nem sikerült csatlakozni a Woot szerverhez, kérjük próbáld később" }, "CONFIRM": { "TITLE": "Törlés megerősítése", "MESSAGE": "Biztos abban, hogy törli ", - "YES": "Igen, Törlés ", - "NO": "Nem, Mégse " + "YES": "Igen, törlés ", + "NO": "Nem, mégse " } } } diff --git a/app/javascript/dashboard/i18n/locale/hu/emoji.json b/app/javascript/dashboard/i18n/locale/hu/emoji.json index a782413ef..a723075d9 100644 --- a/app/javascript/dashboard/i18n/locale/hu/emoji.json +++ b/app/javascript/dashboard/i18n/locale/hu/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Emoji keresése", - "NOT_FOUND": "Nem található emoji" + "NOT_FOUND": "Nem található emoji", + "REMOVE": "Eltávolítás" } } diff --git a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json index 2ac4b2d66..df89d9cb9 100644 --- a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Név", "PLACEHOLDER": "Kategória neve", - "HELP_TEXT": "A kategória nevét a nyilvános portálon a cikkek kategorizálására használjuk.", + "HELP_TEXT": "A kategória neve és ikonja a nyilvános portálon a cikkek kategorizálására szolgál.", "ERROR": "Név kötelező" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Név", "PLACEHOLDER": "Kategória neve", - "HELP_TEXT": "A kategória nevét a nyilvános portálon a cikkek kategorizálására használjuk.", + "HELP_TEXT": "A kategória neve és ikonja a nyilvános portálon a cikkek kategorizálására szolgál.", "ERROR": "Név kötelező" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/hy/emoji.json b/app/javascript/dashboard/i18n/locale/hy/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/hy/emoji.json +++ b/app/javascript/dashboard/i18n/locale/hy/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/hy/helpCenter.json b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json index deacd1bff..4354004a0 100644 --- a/app/javascript/dashboard/i18n/locale/hy/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hy/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/id/emoji.json b/app/javascript/dashboard/i18n/locale/id/emoji.json index b1bcd42d7..0f84caedc 100644 --- a/app/javascript/dashboard/i18n/locale/id/emoji.json +++ b/app/javascript/dashboard/i18n/locale/id/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Cari emoji", - "NOT_FOUND": "Tidak ditemukan emoji yang sesuai dengan pencarian Anda" + "NOT_FOUND": "Tidak ditemukan emoji yang sesuai dengan pencarian Anda", + "REMOVE": "Hapus" } } diff --git a/app/javascript/dashboard/i18n/locale/id/helpCenter.json b/app/javascript/dashboard/i18n/locale/id/helpCenter.json index eca29c3af..d4f0926d0 100644 --- a/app/javascript/dashboard/i18n/locale/id/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/id/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nama", "PLACEHOLDER": "Nama kategori", - "HELP_TEXT": "Nama kategori akan digunakan di portal menghadap publik untuk mengkategorikan artikel.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Nama dibutuhkan" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nama", "PLACEHOLDER": "Nama kategori", - "HELP_TEXT": "Nama kategori akan digunakan di portal menghadap publik untuk mengkategorikan artikel.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Nama dibutuhkan" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/is/emoji.json b/app/javascript/dashboard/i18n/locale/is/emoji.json index fd81268fb..6ef642c6c 100644 --- a/app/javascript/dashboard/i18n/locale/is/emoji.json +++ b/app/javascript/dashboard/i18n/locale/is/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Fjarlægja" } } diff --git a/app/javascript/dashboard/i18n/locale/is/helpCenter.json b/app/javascript/dashboard/i18n/locale/is/helpCenter.json index 863378d32..c856683a0 100644 --- a/app/javascript/dashboard/i18n/locale/is/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/is/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nafn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "Flokksheitið verður notað í gáttinni sem snýr að almenningi til að flokka greinar.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nafn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "Flokksheitið verður notað í gáttinni sem snýr að almenningi til að flokka greinar.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/it/emoji.json b/app/javascript/dashboard/i18n/locale/it/emoji.json index fd81268fb..4b6fa58ca 100644 --- a/app/javascript/dashboard/i18n/locale/it/emoji.json +++ b/app/javascript/dashboard/i18n/locale/it/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Rimuovi" } } diff --git a/app/javascript/dashboard/i18n/locale/it/helpCenter.json b/app/javascript/dashboard/i18n/locale/it/helpCenter.json index e7bcbe963..71a925b52 100644 --- a/app/javascript/dashboard/i18n/locale/it/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/it/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nome", "PLACEHOLDER": "Nome categoria", - "HELP_TEXT": "Il nome della categoria verrà utilizzato nel portale pubblico per categorizzare gli articoli.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Il nome è obbligatorio" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nome", "PLACEHOLDER": "Nome categoria", - "HELP_TEXT": "Il nome della categoria verrà utilizzato nel portale pubblico per categorizzare gli articoli.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Il nome è obbligatorio" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ja/emoji.json b/app/javascript/dashboard/i18n/locale/ja/emoji.json index fd81268fb..d0f2965ea 100644 --- a/app/javascript/dashboard/i18n/locale/ja/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ja/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "削除" } } diff --git a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json index dc2545406..11edaece1 100644 --- a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "名前", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名前が必須です" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "名前", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名前が必須です" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ka/emoji.json b/app/javascript/dashboard/i18n/locale/ka/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/ka/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ka/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json index deacd1bff..4354004a0 100644 --- a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ko/emoji.json b/app/javascript/dashboard/i18n/locale/ko/emoji.json index fd81268fb..252031c46 100644 --- a/app/javascript/dashboard/i18n/locale/ko/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ko/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "제거" } } diff --git a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json index 1c48a1f3c..d52254401 100644 --- a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "이름", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "이름이 필요합니다" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "이름", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "이름이 필요합니다" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/lt/emoji.json b/app/javascript/dashboard/i18n/locale/lt/emoji.json index 8759ebc53..76adca935 100644 --- a/app/javascript/dashboard/i18n/locale/lt/emoji.json +++ b/app/javascript/dashboard/i18n/locale/lt/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Ieškoti emodžių", - "NOT_FOUND": "Jūsų paieška neatitinka jokių emodži" + "NOT_FOUND": "Jūsų paieška neatitinka jokių emodži", + "REMOVE": "Pašalinti" } } diff --git a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json index b9b24be5c..cfe66ab01 100644 --- a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Vardas", "PLACEHOLDER": "Kategorijos pavadinimas", - "HELP_TEXT": "Kategorijos pavadinimas bus naudojamas viešajame portale straipsniams skirstyti į kategorijas.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Yra reikalingas vardas" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Vardas", "PLACEHOLDER": "Kategorijos pavadinimas", - "HELP_TEXT": "Kategorijos pavadinimas bus naudojamas viešajame portale straipsniams skirstyti į kategorijas.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Yra reikalingas vardas" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/lv/emoji.json b/app/javascript/dashboard/i18n/locale/lv/emoji.json index 3d1bef854..c4c00066f 100644 --- a/app/javascript/dashboard/i18n/locale/lv/emoji.json +++ b/app/javascript/dashboard/i18n/locale/lv/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Meklēt emocijzīmes", - "NOT_FOUND": "Neviena emocijzīme neatbilst jūsu meklēšanas vaicājumam" + "NOT_FOUND": "Neviena emocijzīme neatbilst jūsu meklēšanas vaicājumam", + "REMOVE": "Noņemt" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json index 42ce6917a..ee0ae76b9 100644 --- a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nosaukums", "PLACEHOLDER": "Kategorijas nosaukums", - "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", + "HELP_TEXT": "Kategorijas nosaukums un ikona tiks izmantota publiskajā portālā, lai klasificētu rakstus.", "ERROR": "Nepieciešams nosaukums" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nosaukums", "PLACEHOLDER": "Kategorijas nosaukums", - "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", + "HELP_TEXT": "Kategorijas nosaukums un ikona tiks izmantota publiskajā portālā, lai klasificētu rakstus.", "ERROR": "Nepieciešams nosaukums" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ml/emoji.json b/app/javascript/dashboard/i18n/locale/ml/emoji.json index fd81268fb..d0fdc5a5e 100644 --- a/app/javascript/dashboard/i18n/locale/ml/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ml/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "നീക്കം ചെയ്യുക" } } diff --git a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json index 9289607f9..842d64978 100644 --- a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "പേര്", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "നാമം ആവശ്യമാണ്" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "പേര്", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "നാമം ആവശ്യമാണ്" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ms/emoji.json b/app/javascript/dashboard/i18n/locale/ms/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/ms/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ms/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json index d40f41012..a41b5c90c 100644 --- a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nama", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nama", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ne/emoji.json b/app/javascript/dashboard/i18n/locale/ne/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/ne/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ne/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json index 4b98c593c..29bef3d34 100644 --- a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/nl/emoji.json b/app/javascript/dashboard/i18n/locale/nl/emoji.json index a4d551940..d364fd390 100644 --- a/app/javascript/dashboard/i18n/locale/nl/emoji.json +++ b/app/javascript/dashboard/i18n/locale/nl/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Zoek emojis", - "NOT_FOUND": "Er zijn geen overeenkomende emoji's gevonden" + "NOT_FOUND": "Er zijn geen overeenkomende emoji's gevonden", + "REMOVE": "Verwijderen" } } diff --git a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json index 531e1b5c7..899f2a362 100644 --- a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Naam", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Naam is vereist" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Naam", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Naam is vereist" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/no/emoji.json b/app/javascript/dashboard/i18n/locale/no/emoji.json index fd81268fb..08481a53f 100644 --- a/app/javascript/dashboard/i18n/locale/no/emoji.json +++ b/app/javascript/dashboard/i18n/locale/no/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Fjern" } } diff --git a/app/javascript/dashboard/i18n/locale/no/helpCenter.json b/app/javascript/dashboard/i18n/locale/no/helpCenter.json index 02731ea56..0fe8f562d 100644 --- a/app/javascript/dashboard/i18n/locale/no/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/no/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Navn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Navn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/pl/emoji.json b/app/javascript/dashboard/i18n/locale/pl/emoji.json index ea6c28cba..b0be4426b 100644 --- a/app/javascript/dashboard/i18n/locale/pl/emoji.json +++ b/app/javascript/dashboard/i18n/locale/pl/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Wyszukaj emoji", - "NOT_FOUND": "Nie znaleziono emoji pasującego do wyszukiwania" + "NOT_FOUND": "Nie znaleziono emoji pasującego do wyszukiwania", + "REMOVE": "Usuń" } } diff --git a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json index e1a2117a9..5bd99ea03 100644 --- a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nazwa", "PLACEHOLDER": "Nazwa kategorii", - "HELP_TEXT": "Nazwa kategorii będzie używana w publicznym portalu do kategoryzacji artykułów.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Nazwa jest wymagana" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nazwa", "PLACEHOLDER": "Nazwa kategorii", - "HELP_TEXT": "Nazwa kategorii będzie używana w publicznym portalu do kategoryzacji artykułów.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Nazwa jest wymagana" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/pt/conversation.json b/app/javascript/dashboard/i18n/locale/pt/conversation.json index b049760ae..452f5d2e2 100644 --- a/app/javascript/dashboard/i18n/locale/pt/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt/conversation.json @@ -46,7 +46,7 @@ "NO_RESPONSE": "Sem resposta", "RATING_TITLE": "Avaliar", "FEEDBACK_TITLE": "Opiniões", - "REPLY_MESSAGE_NOT_FOUND": "Message not available", + "REPLY_MESSAGE_NOT_FOUND": "Mensagem indisponível", "CARD": { "SHOW_LABELS": "Mostrar etiquetas", "HIDE_LABELS": "Ocultar os etiquetas" diff --git a/app/javascript/dashboard/i18n/locale/pt/emoji.json b/app/javascript/dashboard/i18n/locale/pt/emoji.json index dda8ac92f..58578b6df 100644 --- a/app/javascript/dashboard/i18n/locale/pt/emoji.json +++ b/app/javascript/dashboard/i18n/locale/pt/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Pesquisar emojis", - "NOT_FOUND": "Nenhum emoji corresponde à sua pesquisa" + "NOT_FOUND": "Nenhum emoji corresponde à sua pesquisa", + "REMOVE": "Excluir" } } diff --git a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json index 0368d7ce5..202deff03 100644 --- a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nome:", "PLACEHOLDER": "Nome da categoria", - "HELP_TEXT": "O nome da categoria será usado no portal público para categorizar artigos.", + "HELP_TEXT": "O ícone e o nome da categoria serão usados no portal público para categorizar artigos.", "ERROR": "Nome é obrigatório" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nome:", "PLACEHOLDER": "Nome da categoria", - "HELP_TEXT": "O nome da categoria será usado no portal público para categorizar artigos.", + "HELP_TEXT": "O ícone e o nome da categoria serão usados no portal público para categorizar artigos.", "ERROR": "Nome é obrigatório" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/pt/integrationApps.json b/app/javascript/dashboard/i18n/locale/pt/integrationApps.json index d3fd14bd1..aa9f1667a 100644 --- a/app/javascript/dashboard/i18n/locale/pt/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/pt/integrationApps.json @@ -56,7 +56,7 @@ "BUTTON_TEXT": "Desligar" }, "SIDEBAR_DESCRIPTION": { - "DIALOGFLOW": "Dialogflow é uma plataforma que facilita o planeamento e integração através de interface de conversação de utilizador numa aplicação móvel, web, bot, sistema de resposta de voz interativo, etc.Macros
Uma macro é um conjunto de ações salvas que ajudam os agentes de serviço ao cliente a concluírem facilmente as tarefas. Os agentes podem definir um conjunto de ações como marcar uma conversa com um rótulo, enviar uma transcrição de e-mail, atualizando um atributo personalizado, etc. e eles podem executar essas ações com um único clique. Quando os agentes executam a macro, as ações seriam executadas sequencialmente na ordem em que são definidas. Macros melhoram a produtividade e aumentam a consistência em ações.
Uma macro pode ser útil de 2 maneiras.
Como assistente de agente: Se um agente executa um conjunto de ações várias vezes, eles podem salvá-lo como uma macro e executar todas as ações juntas usando um único clique.
Como opção para integrar um membro da equipe: Todos os agentes devem realizar verificações/ações diferentes durante cada conversa. Integrar um novo membro da equipe de suporte será fácil se macros predefinidos estiverem disponíveis na conta. Em vez de descrever cada passo em detalhe, o chumbo do gerente/equipe pode apontar para as macros usadas em diferentes cenários.
", + "SIDEBAR_TXT": "Macros
Uma macro é um conjunto de ações salvas que ajudam os agentes de serviço ao cliente a concluírem facilmente as tarefas. Os agentes podem definir um conjunto de ações como marcar uma conversa com um rótulo, enviar uma transcrição de e-mail, atualizando um atributo personalizado, etc. e eles podem executar essas ações com um único clique. Quando os agentes executam a macro, as ações seriam executadas sequencialmente na ordem em que são definidas. Macros melhoram a produtividade e aumentam a consistência em ações.
Uma macro pode ser útil de 2 maneiras.
Como assistente de agente: Se um agente executa um conjunto de ações várias vezes, eles podem salvá-lo como uma macro e executar todas as ações juntas usando um único clique.
Como opção para integrar um membro da equipe: Todos os agentes devem realizar verificações/ações diferentes durante cada conversa. Integrar um novo membro da equipe de suporte será fácil se macros predefinidos estiverem disponíveis na conta. Em vez de descrever cada passo em detalhe, o gerente/líder da equipe pode apontar para as macros usadas em diferentes cenários.
", "ERROR": "Algo deu errado. Por favor, tente novamente", "ORDER_INFO": "As macros serão executadas na ordem que você adicionar suas ações. Você pode reorganizá-las arrastando-as pelo identificador ao lado de cada nó.", "ADD": { diff --git a/app/javascript/dashboard/i18n/locale/ro/emoji.json b/app/javascript/dashboard/i18n/locale/ro/emoji.json index aa23d7157..61df28b26 100644 --- a/app/javascript/dashboard/i18n/locale/ro/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ro/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Caută emoji-uri", - "NOT_FOUND": "Niciun emoji nu corespunde căutării tale" + "NOT_FOUND": "Niciun emoji nu corespunde căutării tale", + "REMOVE": "Elimină" } } diff --git a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json index 1a9fd32d7..a179151d2 100644 --- a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Nume", "PLACEHOLDER": "Nume categorie", - "HELP_TEXT": "Numele categoriei va fi folosit în portalul public pentru a clasifica articolele.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Numele este obligatoriu" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Nume", "PLACEHOLDER": "Nume categorie", - "HELP_TEXT": "Numele categoriei va fi folosit în portalul public pentru a clasifica articolele.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Numele este obligatoriu" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ru/emoji.json b/app/javascript/dashboard/i18n/locale/ru/emoji.json index cb7dd8e47..eada5b4b2 100644 --- a/app/javascript/dashboard/i18n/locale/ru/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ru/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Поиск эмодзи", - "NOT_FOUND": "Эмодзи не соответствуют вашему запросу" + "NOT_FOUND": "Эмодзи не соответствуют вашему запросу", + "REMOVE": "Удалить" } } diff --git a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json index b5e7ed70b..443dcf26e 100644 --- a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Имя", "PLACEHOLDER": "Имя категории", - "HELP_TEXT": "Название категории будет использоваться на портале общего доступа для классификации статей.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Необходимо указать имя" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Имя", "PLACEHOLDER": "Имя категории", - "HELP_TEXT": "Название категории будет использоваться на портале общего доступа для классификации статей.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Необходимо указать имя" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sh/emoji.json b/app/javascript/dashboard/i18n/locale/sh/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/sh/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sh/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/sh/helpCenter.json b/app/javascript/dashboard/i18n/locale/sh/helpCenter.json index deacd1bff..4354004a0 100644 --- a/app/javascript/dashboard/i18n/locale/sh/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sh/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sk/emoji.json b/app/javascript/dashboard/i18n/locale/sk/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/sk/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sk/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json index d5f507920..5bced2ae4 100644 --- a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Meno", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Meno", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sl/emoji.json b/app/javascript/dashboard/i18n/locale/sl/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/sl/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sl/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/sl/helpCenter.json b/app/javascript/dashboard/i18n/locale/sl/helpCenter.json index 72f642584..af692a27e 100644 --- a/app/javascript/dashboard/i18n/locale/sl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sl/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sq/emoji.json b/app/javascript/dashboard/i18n/locale/sq/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/sq/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sq/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json index 72f642584..af692a27e 100644 --- a/app/javascript/dashboard/i18n/locale/sq/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sq/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sr/emoji.json b/app/javascript/dashboard/i18n/locale/sr/emoji.json index fd81268fb..dbc02dbd8 100644 --- a/app/javascript/dashboard/i18n/locale/sr/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sr/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Ukloni" } } diff --git a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json index 9b50b5f8f..96c4dfd88 100644 --- a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Ime", "PLACEHOLDER": "Naziv kategorije", - "HELP_TEXT": "Naziv kategorije će se koristiti u javno dostupnim portalima da bi se članci kategorizovali.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Ime je neophodno" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Ime", "PLACEHOLDER": "Naziv kategorije", - "HELP_TEXT": "Naziv kategorije će se koristiti u javno dostupnim portalima da bi se članci kategorizovali.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Ime je neophodno" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/sv/emoji.json b/app/javascript/dashboard/i18n/locale/sv/emoji.json index ccfb8d4ab..c60f1c424 100644 --- a/app/javascript/dashboard/i18n/locale/sv/emoji.json +++ b/app/javascript/dashboard/i18n/locale/sv/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Sök emoji", - "NOT_FOUND": "Ingen emoji matchar din sökning" + "NOT_FOUND": "Ingen emoji matchar din sökning", + "REMOVE": "Radera" } } diff --git a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json index 339d52295..fe2e8cd26 100644 --- a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json @@ -240,7 +240,7 @@ "ERROR": "Enter a valid domain URL" }, "HOME_PAGE_LINK": { - "LABEL": "Home Page Link", + "LABEL": "Länk till startsida", "PLACEHOLDER": "Portal home page link", "HELP_TEXT": "The link used to return from the portal to the home page. Eg: https://example.com", "ERROR": "Enter a valid home page URL" @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Namn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "Kategorinamnet och ikonen kommer att användas i den publika portalen för att kategorisera artiklar.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Namn", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "Kategorinamnet och ikonen kommer att användas i den publika portalen för att kategorisera artiklar.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ta/emoji.json b/app/javascript/dashboard/i18n/locale/ta/emoji.json index fd81268fb..2869c27f2 100644 --- a/app/javascript/dashboard/i18n/locale/ta/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ta/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "நீக்கு" } } diff --git a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json index 79cfc5edd..bee2303a0 100644 --- a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "பெயர்", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "பெயர்", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/th/emoji.json b/app/javascript/dashboard/i18n/locale/th/emoji.json index fd81268fb..f9204a276 100644 --- a/app/javascript/dashboard/i18n/locale/th/emoji.json +++ b/app/javascript/dashboard/i18n/locale/th/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "ลบรูปภาพ" } } diff --git a/app/javascript/dashboard/i18n/locale/th/helpCenter.json b/app/javascript/dashboard/i18n/locale/th/helpCenter.json index 6b440f118..f05877c15 100644 --- a/app/javascript/dashboard/i18n/locale/th/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/th/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "ชื่อ", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "โปรดระบุชื่อ" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "ชื่อ", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "โปรดระบุชื่อ" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/tr/emoji.json b/app/javascript/dashboard/i18n/locale/tr/emoji.json index fd81268fb..a0eae7ff8 100644 --- a/app/javascript/dashboard/i18n/locale/tr/emoji.json +++ b/app/javascript/dashboard/i18n/locale/tr/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Kaldır" } } diff --git a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json index 2a9b5e5c6..2060cedf2 100644 --- a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "İsim", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "İsim gereklidir" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "İsim", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "İsim gereklidir" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/uk/emoji.json b/app/javascript/dashboard/i18n/locale/uk/emoji.json index f5c2297d8..672a59acb 100644 --- a/app/javascript/dashboard/i18n/locale/uk/emoji.json +++ b/app/javascript/dashboard/i18n/locale/uk/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Пошук смайлів", - "NOT_FOUND": "Немає смайликів, які відповідають вашому запиту" + "NOT_FOUND": "Немає смайликів, які відповідають вашому запиту", + "REMOVE": "Видалити" } } diff --git a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json index 19baf0cc2..72d01b784 100644 --- a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Ім'я", "PLACEHOLDER": "Назва категорії", - "HELP_TEXT": "Назва категорії буде використовуватися в публічному інтерфейсі порталу для категоризації статей.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Назва обов'язкова" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Ім'я", "PLACEHOLDER": "Назва категорії", - "HELP_TEXT": "Назва категорії буде використовуватися в публічному інтерфейсі порталу для категоризації статей.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Назва обов'язкова" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ur/emoji.json b/app/javascript/dashboard/i18n/locale/ur/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/ur/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ur/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json index 48a29e589..caeb6e44b 100644 --- a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "نام", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "نام", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/emoji.json b/app/javascript/dashboard/i18n/locale/ur_IN/emoji.json index fd81268fb..d5b96f0f9 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/emoji.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Remove" } } diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json index deacd1bff..4354004a0 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Name", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/vi/emoji.json b/app/javascript/dashboard/i18n/locale/vi/emoji.json index fd81268fb..6311baec1 100644 --- a/app/javascript/dashboard/i18n/locale/vi/emoji.json +++ b/app/javascript/dashboard/i18n/locale/vi/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "Xoá" } } diff --git a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json index 2954f8b00..543beb5eb 100644 --- a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "Tên", "PLACEHOLDER": "Tên danh mục", - "HELP_TEXT": "Tên danh mục sẽ được sử dụng trong cổng thông tin công khai để phân loại các bài.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Tên bắt buộc có" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "Tên", "PLACEHOLDER": "Tên danh mục", - "HELP_TEXT": "Tên danh mục sẽ được sử dụng trong cổng thông tin công khai để phân loại các bài.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "Tên bắt buộc có" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/emoji.json b/app/javascript/dashboard/i18n/locale/zh_CN/emoji.json index b9130bf97..7cea49648 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/emoji.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "搜索表情符号", - "NOT_FOUND": "没有适合你的搜索结果" + "NOT_FOUND": "没有适合你的搜索结果", + "REMOVE": "删除" } } diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json index 0aa0f0a59..97294f53d 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "姓名:", "PLACEHOLDER": "类别名称", - "HELP_TEXT": "类别名称将用于公共门户来对文章进行归类。", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名字必填" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "姓名:", "PLACEHOLDER": "类别名称", - "HELP_TEXT": "类别名称将用于公共门户来对文章进行归类。", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名字必填" }, "SLUG": { diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/emoji.json b/app/javascript/dashboard/i18n/locale/zh_TW/emoji.json index fd81268fb..7c5efc5f8 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/emoji.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/emoji.json @@ -1,6 +1,7 @@ { "EMOJI": { "PLACEHOLDER": "Search emojis", - "NOT_FOUND": "No emoji match your search" + "NOT_FOUND": "No emoji match your search", + "REMOVE": "刪除" } } diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json index 42b3fdb3a..20d4e005d 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json @@ -365,7 +365,7 @@ "NAME": { "LABEL": "姓名", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名稱為必填" }, "SLUG": { @@ -396,7 +396,7 @@ "NAME": { "LABEL": "姓名", "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "HELP_TEXT": "The category name and icon will be used in the public facing portal to categorize articles.", "ERROR": "名稱為必填" }, "SLUG": { diff --git a/app/javascript/dashboard/mixins/aiMixin.js b/app/javascript/dashboard/mixins/aiMixin.js index 3a9fc4a75..f3558a6c7 100644 --- a/app/javascript/dashboard/mixins/aiMixin.js +++ b/app/javascript/dashboard/mixins/aiMixin.js @@ -15,18 +15,26 @@ export default { currentChat: 'getSelectedChat', replyMode: 'draftMessages/getReplyEditorMode', }), - isAIIntegrationEnabled() { - return !!this.appIntegrations.find( + aiIntegration() { + return this.appIntegrations.find( integration => integration.id === 'openai' && !!integration.hooks.length - ); + ).hooks[0]; + }, + isAIIntegrationEnabled() { + return !!this.aiIntegration; + }, + isLabelSuggestionFeatureEnabled() { + if (this.aiIntegration) { + const { settings = {} } = this.aiIntegration || {}; + return settings.label_suggestion; + } + return false; }, isFetchingAppIntegrations() { return this.uiFlags.isFetching; }, hookId() { - return this.appIntegrations.find( - integration => integration.id === 'openai' && !!integration.hooks.length - ).hooks[0].id; + return this.aiIntegration.id; }, draftMessage() { return this.$store.getters['draftMessages/get'](this.draftKey); diff --git a/app/javascript/dashboard/mixins/uiSettings.js b/app/javascript/dashboard/mixins/uiSettings.js index 08a46c5c1..2c60db3cb 100644 --- a/app/javascript/dashboard/mixins/uiSettings.js +++ b/app/javascript/dashboard/mixins/uiSettings.js @@ -1,4 +1,5 @@ import { mapGetters } from 'vuex'; + export const DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER = [ { name: 'conversation_actions' }, { name: 'macros' }, @@ -13,6 +14,9 @@ export const DEFAULT_CONTACT_SIDEBAR_ITEMS_ORDER = [ { name: 'previous_conversation' }, ]; +const slugifyChannel = name => + name.toLowerCase().replace(' ', '_').replace('-', '_').replace('::', '_'); + export const isEditorHotKeyEnabled = (uiSettings, key) => { const { editor_message_key: editorMessageKey, @@ -65,5 +69,17 @@ export default { toggleSidebarUIState(key) { this.updateUISettings({ [key]: !this.isContactSidebarItemOpen(key) }); }, + setSignatureFlagForInbox(channelType, value) { + channelType = slugifyChannel(channelType); + this.updateUISettings({ + [`${channelType}_signature_enabled`]: value, + }); + }, + fetchSignatureFlagFromUiSettings(channelType) { + if (!channelType) return false; + + channelType = slugifyChannel(channelType); + return this.uiSettings[`${channelType}_signature_enabled`]; + }, }, }; diff --git a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue index 51e5e6a59..9adb9b2eb 100644 --- a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue +++ b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue @@ -111,7 +111,10 @@ import messageFormatterMixin from 'shared/mixins/messageFormatterMixin'; import AddCannedModal from 'dashboard/routes/dashboard/settings/canned/AddCanned.vue'; import { copyTextToClipboard } from 'shared/helpers/clipboard'; import { conversationUrl, frontendURL } from '../../../helper/URLHelper'; -import { ACCOUNT_EVENTS } from '../../../helper/AnalyticsHelper/events'; +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'; @@ -210,6 +213,7 @@ export default { messageId: this.messageId, targetLanguage: locale || 'en', }); + this.$track(CONVERSATION_EVENTS.TRANSLATE_A_MESSAGE); this.handleClose(); this.showTranslateModal = true; }, diff --git a/app/javascript/dashboard/modules/search/components/MessageContent.vue b/app/javascript/dashboard/modules/search/components/MessageContent.vue index 74d85ec87..4c86862f5 100644 --- a/app/javascript/dashboard/modules/search/components/MessageContent.vue +++ b/app/javascript/dashboard/modules/search/components/MessageContent.vue @@ -71,18 +71,11 @@ export default { }, prepareContent(content = '') { const escapedText = this.escapeHtml(content); - const plainTextContent = this.getPlainText(escapedText); - const escapedSearchTerm = this.escapeRegExp(this.searchTerm); - return plainTextContent - .replace( - new RegExp(`(${escapedSearchTerm})`, 'ig'), - '$1' - ) - .replace(/\s{2,}|\n|\r/g, ' '); - }, - // from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions#escaping - escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + return this.highlightContent( + escapedText, + this.searchTerm, + 'searchkey--highlight' + ); }, }, }; diff --git a/app/javascript/dashboard/modules/widget-preview/components/WidgetFooter.vue b/app/javascript/dashboard/modules/widget-preview/components/WidgetFooter.vue index 64355b6cd..b5d4bbc28 100644 --- a/app/javascript/dashboard/modules/widget-preview/components/WidgetFooter.vue +++ b/app/javascript/dashboard/modules/widget-preview/components/WidgetFooter.vue @@ -12,6 +12,7 @@