From c1c57fb2cdd14fcc388386d754087f1be8782433 Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Wed, 28 Sep 2022 00:57:18 +0530 Subject: [PATCH 01/62] fix: Add slug to articles (#5500) --- .../api/v1/accounts/articles_controller.rb | 4 ++-- app/models/article.rb | 2 ++ .../20220926164441_add_slug_to_article.rb | 21 +++++++++++++++++++ db/schema.rb | 4 +++- .../v1/accounts/articles_controller_spec.rb | 12 +++++++---- spec/factories/articles.rb | 1 + spec/models/article_spec.rb | 16 +++++++------- 7 files changed, 46 insertions(+), 14 deletions(-) create mode 100644 db/migrate/20220926164441_add_slug_to_article.rb diff --git a/app/controllers/api/v1/accounts/articles_controller.rb b/app/controllers/api/v1/accounts/articles_controller.rb index a2aab527c..d650b19d9 100644 --- a/app/controllers/api/v1/accounts/articles_controller.rb +++ b/app/controllers/api/v1/accounts/articles_controller.rb @@ -42,8 +42,8 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController def article_params params.require(:article).permit( - :title, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status, meta: [:title, :description, - { tags: [] }] + :title, :slug, :content, :description, :position, :category_id, :author_id, :associated_article_id, :status, meta: [:title, :description, + { tags: [] }] ) end diff --git a/app/models/article.rb b/app/models/article.rb index 1044e1107..f7318c497 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -6,6 +6,7 @@ # content :text # description :text # meta :jsonb +# slug :string not null # status :integer # title :string # views :integer @@ -22,6 +23,7 @@ # # index_articles_on_associated_article_id (associated_article_id) # index_articles_on_author_id (author_id) +# index_articles_on_slug (slug) # class Article < ApplicationRecord include PgSearch::Model diff --git a/db/migrate/20220926164441_add_slug_to_article.rb b/db/migrate/20220926164441_add_slug_to_article.rb new file mode 100644 index 000000000..4eac09b86 --- /dev/null +++ b/db/migrate/20220926164441_add_slug_to_article.rb @@ -0,0 +1,21 @@ +class AddSlugToArticle < ActiveRecord::Migration[6.1] + def up + add_column :articles, :slug, :string + + update_past_articles_with_slug + + add_index :articles, :slug + change_column_null(:articles, :slug, false) + end + + def down + remove_column(:articles, :slug) + end + + def update_past_articles_with_slug + Article.all.each_with_index do |article, index| + slug = article.title.underscore.parameterize(separator: '-') + article.update!(slug: "#{slug}-#{index}") + end + end +end diff --git a/db/schema.rb b/db/schema.rb index a20a90f65..ad5c8241a 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_09_20_014549) do +ActiveRecord::Schema.define(version: 2022_09_26_164441) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" @@ -131,8 +131,10 @@ ActiveRecord::Schema.define(version: 2022_09_20_014549) do t.bigint "author_id" t.bigint "associated_article_id" t.jsonb "meta", default: {} + t.string "slug", null: false t.index ["associated_article_id"], name: "index_articles_on_associated_article_id" t.index ["author_id"], name: "index_articles_on_author_id" + t.index ["slug"], name: "index_articles_on_slug" end create_table "attachments", id: :serial, force: :cascade do |t| diff --git a/spec/controllers/api/v1/accounts/articles_controller_spec.rb b/spec/controllers/api/v1/accounts/articles_controller_spec.rb index 1e98af260..8e79ba7c3 100644 --- a/spec/controllers/api/v1/accounts/articles_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/articles_controller_spec.rb @@ -24,6 +24,7 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do category_id: category.id, description: 'test description', title: 'MyTitle', + slug: 'my-title', content: 'This is my content.', status: :published, author_id: agent.id @@ -39,8 +40,9 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do end it 'associate to the root article' do - root_article = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: nil) - parent_article = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, + root_article = create(:article, category: category, slug: 'root-article', portal: portal, account_id: account.id, author_id: agent.id, + associated_article_id: nil) + parent_article = create(:article, category: category, slug: 'parent-article', portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: root_article.id) article_params = { @@ -48,6 +50,7 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do category_id: category.id, description: 'test description', title: 'MyTitle', + slug: 'MyTitle', content: 'This is my content.', status: :published, author_id: agent.id, @@ -73,6 +76,7 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do category_id: category.id, description: 'test description', title: 'MyTitle', + slug: 'MyTitle', content: 'This is my content.', status: :published, author_id: agent.id, @@ -210,9 +214,9 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do it 'get associated articles' do root_article = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: nil) - child_article_1 = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, + child_article_1 = create(:article, slug: 'child-1', category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: root_article.id) - child_article_2 = create(:article, category: category, portal: portal, account_id: account.id, author_id: agent.id, + child_article_2 = create(:article, slug: 'child-2', category: category, portal: portal, account_id: account.id, author_id: agent.id, associated_article_id: root_article.id) get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles/#{root_article.id}", diff --git a/spec/factories/articles.rb b/spec/factories/articles.rb index 9ba5d9ac4..f820ddd6c 100644 --- a/spec/factories/articles.rb +++ b/spec/factories/articles.rb @@ -4,6 +4,7 @@ FactoryBot.define do category_id { 1 } author_id { 1 } title { 'MyString' } + slug { 'MyString' } content { 'MyText' } description { 'MyDescrption' } status { 1 } diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index 6a66838ef..3fffa63d6 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -25,13 +25,15 @@ RSpec.describe Article, type: :model do let!(:category_3) { create(:category, slug: 'category_3', locale: 'es', portal_id: portal_2.id) } before do - create(:article, category_id: category_1.id, content: 'This is the content', description: 'this is the description', title: 'this is title', + create(:article, category_id: category_1.id, content: 'This is the content', description: 'this is the description', + slug: 'this-is-title', title: 'this is title', portal_id: portal_1.id, author_id: user.id) - create(:article, category_id: category_1.id, title: 'title 1', content: 'This is the content', portal_id: portal_1.id, author_id: user.id) - create(:article, category_id: category_2.id, title: 'title 2', portal_id: portal_2.id, author_id: user.id) - create(:article, category_id: category_2.id, title: 'title 3', portal_id: portal_1.id, author_id: user.id) - create(:article, category_id: category_3.id, title: 'title 6', portal_id: portal_2.id, author_id: user.id, status: :published) - create(:article, category_id: category_2.id, title: 'title 7', portal_id: portal_1.id, author_id: user.id, status: :published) + create(:article, category_id: category_1.id, slug: 'title-1', title: 'title 1', content: 'This is the content', portal_id: portal_1.id, + author_id: user.id) + create(:article, category_id: category_2.id, slug: 'title-2', title: 'title 2', portal_id: portal_2.id, author_id: user.id) + create(:article, category_id: category_2.id, slug: 'title-3', title: 'title 3', portal_id: portal_1.id, author_id: user.id) + create(:article, category_id: category_3.id, slug: 'title-6', title: 'title 6', portal_id: portal_2.id, author_id: user.id, status: :published) + create(:article, category_id: category_2.id, slug: 'title-7', title: 'title 7', portal_id: portal_1.id, author_id: user.id, status: :published) end context 'when no parameters passed' do @@ -121,7 +123,7 @@ RSpec.describe Article, type: :model do context 'with pagination' do it 'returns paginated articles' do - create_list(:article, 30, category_id: category_2.id, title: 'title 1', portal_id: portal_2.id, author_id: user.id) + create_list(:article, 30, category_id: category_2.id, slug: 'title-1', title: 'title 1', portal_id: portal_2.id, author_id: user.id) params = { category_slug: 'category_2' } records = portal_2.articles.search(params) expect(records.count).to eq(25) From 336c09e072eb6b12af0cee189a778d06f38e5ca4 Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Wed, 28 Sep 2022 01:05:53 +0530 Subject: [PATCH 02/62] fix: Add all articles count to article API (#5497) --- app/views/api/v1/accounts/articles/index.json.jbuilder | 5 +++++ spec/controllers/api/v1/accounts/articles_controller_spec.rb | 2 ++ 2 files changed, 7 insertions(+) diff --git a/app/views/api/v1/accounts/articles/index.json.jbuilder b/app/views/api/v1/accounts/articles/index.json.jbuilder index fef8dc521..906cabae1 100644 --- a/app/views/api/v1/accounts/articles/index.json.jbuilder +++ b/app/views/api/v1/accounts/articles/index.json.jbuilder @@ -5,4 +5,9 @@ end json.meta do json.current_page @current_page json.articles_count @articles_count + json.all_articles_count @articles_count + json.archived_articles_count @articles.archived.size + json.published_count @articles.published.size + json.draft_articles_count @articles.draft.size + json.mine_articles_count @articles.search_by_author(current_user.id).size if current_user.present? end diff --git a/spec/controllers/api/v1/accounts/articles_controller_spec.rb b/spec/controllers/api/v1/accounts/articles_controller_spec.rb index 8e79ba7c3..a34079c69 100644 --- a/spec/controllers/api/v1/accounts/articles_controller_spec.rb +++ b/spec/controllers/api/v1/accounts/articles_controller_spec.rb @@ -195,6 +195,8 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do json_response = JSON.parse(response.body) expect(json_response['payload'].count).to be 1 expect(json_response['meta']['articles_count']).to be 2 + expect(json_response['meta']['all_articles_count']).to be 2 + expect(json_response['meta']['mine_articles_count']).to be 1 end end From 543854eaa897e7c08702dbcad7edd2222dfe1d59 Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Wed, 28 Sep 2022 01:06:57 +0530 Subject: [PATCH 03/62] fix: Remove the notification subscription if present (#5510) --- app/controllers/api/v1/notification_subscriptions_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/api/v1/notification_subscriptions_controller.rb b/app/controllers/api/v1/notification_subscriptions_controller.rb index a01c2ca03..1a797a74d 100644 --- a/app/controllers/api/v1/notification_subscriptions_controller.rb +++ b/app/controllers/api/v1/notification_subscriptions_controller.rb @@ -9,7 +9,7 @@ class Api::V1::NotificationSubscriptionsController < Api::BaseController def destroy notification_subscription = NotificationSubscription.where(["subscription_attributes->>'push_token' = ?", params[:push_token]]).first - notification_subscription.destroy! + notification_subscription.destroy! if notification_subscription.present? head :ok end From 83eee7df911e8914e6b94b9fb840a1badb947896 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 28 Sep 2022 08:29:00 -0700 Subject: [PATCH 04/62] chore: Set locale in default_locale (#5515) --- app/controllers/dashboard_controller.rb | 1 + 1 file changed, 1 insertion(+) diff --git a/app/controllers/dashboard_controller.rb b/app/controllers/dashboard_controller.rb index 49993e6ee..84677c770 100644 --- a/app/controllers/dashboard_controller.rb +++ b/app/controllers/dashboard_controller.rb @@ -45,6 +45,7 @@ class DashboardController < ActionController::Base @portal = Portal.find_by(custom_domain: domain) return unless @portal + @locale = @portal.default_locale render 'public/api/v1/portals/show', layout: 'portal', portal: @portal and return end From fcb9a9ab0cece4f4d18041251c8344aec26c1ea5 Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Thu, 29 Sep 2022 01:20:23 +0530 Subject: [PATCH 05/62] fix: contact is not available for inaccessible sender (#5509) Fixes: #5508 We can not read contact information because of this error, as the messages echo when the sender sends messages to contacts. We don't have the user's consent until and unless they send messages to us. So after this result, information about the contact is empty, and we are trying to create a contact inbox for the same, and the error appears. type: OAuthException, code: 230, message: (#230) User consent is required to access user profile, x-fb-trace-id: AaitxF/whwY [HTTP 403] (Koala::Facebook::ClientError) --- app/services/instagram/message_text.rb | 4 ++- .../instagram_message_create_event.rb | 35 +++++++++++++++++++ .../webhooks/instagram_events_job_spec.rb | 24 ++++++++++--- 3 files changed, 57 insertions(+), 6 deletions(-) diff --git a/app/services/instagram/message_text.rb b/app/services/instagram/message_text.rb index 89cb12884..abcbe2d60 100644 --- a/app/services/instagram/message_text.rb +++ b/app/services/instagram/message_text.rb @@ -42,7 +42,7 @@ class Instagram::MessageText < Instagram::WebhooksBaseService ChatwootExceptionTracker.new(e, account: @inbox.account).capture_exception end - find_or_create_contact(result) + find_or_create_contact(result) if result.present? end def agent_message_via_echo? @@ -71,6 +71,8 @@ class Instagram::MessageText < Instagram::WebhooksBaseService end def create_message + return unless @contact_inbox + Messages::Instagram::MessageBuilder.new(@messaging, @inbox, outgoing_echo: agent_message_via_echo?).perform end diff --git a/spec/factories/instagram/instagram_message_create_event.rb b/spec/factories/instagram/instagram_message_create_event.rb index b821580b4..d024deccc 100644 --- a/spec/factories/instagram/instagram_message_create_event.rb +++ b/spec/factories/instagram/instagram_message_create_event.rb @@ -147,4 +147,39 @@ FactoryBot.define do end initialize_with { attributes } end + + factory :instagram_story_mention_event_with_echo, class: Hash do + entry do + [ + { + 'id': 'instagram-message-id-1234', + 'time': '2021-09-08T06:34:04+0000', + 'messaging': [ + { + 'sender': { + 'id': 'Sender-id-1' + }, + 'recipient': { + 'id': 'chatwoot-app-user-id-1' + }, + 'timestamp': '2021-09-08T06:34:04+0000', + 'message': { + 'mid': 'message-id-1', + 'attachments': [ + { + 'type': 'story_mention', + 'payload': { + 'url': 'https://www.example.com/test.jpeg' + } + } + ], + 'is_echo': true + } + } + ] + } + ] + end + initialize_with { attributes } + end end diff --git a/spec/jobs/webhooks/instagram_events_job_spec.rb b/spec/jobs/webhooks/instagram_events_job_spec.rb index 91600375f..89951e33a 100644 --- a/spec/jobs/webhooks/instagram_events_job_spec.rb +++ b/spec/jobs/webhooks/instagram_events_job_spec.rb @@ -11,7 +11,7 @@ describe Webhooks::InstagramEventsJob do end let!(:account) { create(:account) } - let(:return_onject) do + let(:return_object) do { name: 'Jane', id: 'Sender-id-1', account_id: instagram_inbox.account_id, @@ -24,6 +24,7 @@ describe Webhooks::InstagramEventsJob do let!(:unsend_event) { build(:instagram_message_unsend_event).with_indifferent_access } let!(:attachment_params) { build(:instagram_message_attachment_event).with_indifferent_access } let!(:story_mention_params) { build(:instagram_story_mention_event).with_indifferent_access } + let!(:story_mention_echo_params) { build(:instagram_story_mention_event_with_echo).with_indifferent_access } let(:fb_object) { double } describe '#perform' do @@ -31,7 +32,7 @@ describe Webhooks::InstagramEventsJob do it 'creates incoming message in the instagram inbox' do allow(Koala::Facebook::API).to receive(:new).and_return(fb_object) allow(fb_object).to receive(:get_object).and_return( - return_onject.with_indifferent_access + return_object.with_indifferent_access ) instagram_webhook.perform_now(dm_params[:entry]) @@ -45,7 +46,7 @@ describe Webhooks::InstagramEventsJob do it 'creates test text message in the instagram inbox' do allow(Koala::Facebook::API).to receive(:new).and_return(fb_object) allow(fb_object).to receive(:get_object).and_return( - return_onject.with_indifferent_access + return_object.with_indifferent_access ) instagram_webhook.perform_now(test_params[:entry]) @@ -78,7 +79,7 @@ describe Webhooks::InstagramEventsJob do it 'creates incoming message with attachments in the instagram inbox' do allow(Koala::Facebook::API).to receive(:new).and_return(fb_object) allow(fb_object).to receive(:get_object).and_return( - return_onject.with_indifferent_access + return_object.with_indifferent_access ) instagram_webhook.perform_now(attachment_params[:entry]) @@ -92,7 +93,7 @@ describe Webhooks::InstagramEventsJob do it 'creates incoming message with attachments in the instagram inbox for story mention' do allow(Koala::Facebook::API).to receive(:new).and_return(fb_object) allow(fb_object).to receive(:get_object).and_return( - return_onject.with_indifferent_access, + return_object.with_indifferent_access, { story: { mention: { @@ -113,6 +114,19 @@ describe Webhooks::InstagramEventsJob do expect(instagram_inbox.messages.count).to be 1 expect(instagram_inbox.messages.last.attachments.count).to be 1 end + + it 'creates does not create contact or messages' do + allow(Koala::Facebook::API).to receive(:new).and_return(fb_object) + allow(fb_object).to receive(:get_object).and_raise(Koala::Facebook::ClientError) + + instagram_webhook.perform_now(story_mention_echo_params[:entry]) + + instagram_inbox.reload + + expect(instagram_inbox.contacts.count).to be 0 + expect(instagram_inbox.contact_inboxes.count).to be 0 + expect(instagram_inbox.messages.count).to be 0 + end end end end From 6b47c7b43dca5ebcc80e2b4269f6a70ce91f9d6b Mon Sep 17 00:00:00 2001 From: "Chamath K.B. Attanayaka" <84182411+ChamathKB@users.noreply.github.com> Date: Thu, 29 Sep 2022 01:43:29 +0530 Subject: [PATCH 06/62] fix: Attachment not sending to bots message creation (#5353) --- app/services/telegram/incoming_message_service.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/services/telegram/incoming_message_service.rb b/app/services/telegram/incoming_message_service.rb index d56e20e8d..a26bda14e 100644 --- a/app/services/telegram/incoming_message_service.rb +++ b/app/services/telegram/incoming_message_service.rb @@ -12,7 +12,7 @@ class Telegram::IncomingMessageService set_contact update_contact_avatar set_conversation - @message = @conversation.messages.create!( + @message = @conversation.messages.build( content: params[:message][:text].presence || params[:message][:caption], account_id: @inbox.account_id, inbox_id: @inbox.id, From 74e03f9beb2ac8583a52d580d2414c7804f5fd28 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Wed, 28 Sep 2022 21:59:41 -0700 Subject: [PATCH 07/62] chore: Update translations from Crowdin (#5523) --- .../dashboard/i18n/locale/ar/contact.json | 1 + .../i18n/locale/ar/conversation.json | 3 +- .../dashboard/i18n/locale/ar/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ar/settings.json | 2 +- .../dashboard/i18n/locale/bg/contact.json | 1 + .../i18n/locale/bg/conversation.json | 3 +- .../dashboard/i18n/locale/bg/helpCenter.json | 148 +++- .../dashboard/i18n/locale/bg/settings.json | 2 +- .../dashboard/i18n/locale/ca/contact.json | 1 + .../i18n/locale/ca/conversation.json | 3 +- .../dashboard/i18n/locale/ca/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ca/settings.json | 2 +- .../i18n/locale/cs/advancedFilters.json | 2 +- .../dashboard/i18n/locale/cs/chatlist.json | 16 +- .../dashboard/i18n/locale/cs/contact.json | 1 + .../i18n/locale/cs/contactFilters.json | 56 +- .../i18n/locale/cs/conversation.json | 57 +- .../dashboard/i18n/locale/cs/helpCenter.json | 234 ++++-- .../dashboard/i18n/locale/cs/inboxMgmt.json | 2 +- .../dashboard/i18n/locale/cs/report.json | 44 +- .../dashboard/i18n/locale/cs/settings.json | 4 +- .../dashboard/i18n/locale/cs/signup.json | 2 +- .../i18n/locale/da/advancedFilters.json | 100 +-- .../dashboard/i18n/locale/da/agentMgmt.json | 12 +- .../i18n/locale/da/attributesMgmt.json | 76 +- .../dashboard/i18n/locale/da/automation.json | 98 +-- .../dashboard/i18n/locale/da/bulkActions.json | 42 +- .../dashboard/i18n/locale/da/campaign.json | 108 +-- .../dashboard/i18n/locale/da/cannedMgmt.json | 6 +- .../dashboard/i18n/locale/da/chatlist.json | 20 +- .../dashboard/i18n/locale/da/contact.json | 227 +++--- .../i18n/locale/da/contactFilters.json | 60 +- .../i18n/locale/da/conversation.json | 225 +++--- .../dashboard/i18n/locale/da/csatMgmt.json | 4 +- .../i18n/locale/da/generalSettings.json | 120 +-- .../dashboard/i18n/locale/da/helpCenter.json | 414 ++++++---- .../dashboard/i18n/locale/da/inboxMgmt.json | 332 ++++---- .../i18n/locale/da/integrationApps.json | 32 +- .../i18n/locale/da/integrations.json | 76 +- .../dashboard/i18n/locale/da/labelsMgmt.json | 6 +- .../dashboard/i18n/locale/da/report.json | 212 ++--- .../i18n/locale/da/setNewPassword.json | 2 +- .../dashboard/i18n/locale/da/settings.json | 176 ++--- .../dashboard/i18n/locale/da/signup.json | 20 +- .../i18n/locale/da/teamsSettings.json | 100 +-- .../i18n/locale/da/whatsappTemplates.json | 26 +- .../dashboard/i18n/locale/de/contact.json | 1 + .../i18n/locale/de/conversation.json | 3 +- .../dashboard/i18n/locale/de/helpCenter.json | 193 ++++- .../dashboard/i18n/locale/de/settings.json | 2 +- .../dashboard/i18n/locale/el/contact.json | 1 + .../i18n/locale/el/conversation.json | 3 +- .../dashboard/i18n/locale/el/helpCenter.json | 148 +++- .../dashboard/i18n/locale/el/settings.json | 2 +- .../dashboard/i18n/locale/es/contact.json | 5 +- .../i18n/locale/es/contactFilters.json | 2 +- .../i18n/locale/es/conversation.json | 39 +- .../dashboard/i18n/locale/es/helpCenter.json | 206 ++++- .../dashboard/i18n/locale/es/inboxMgmt.json | 6 +- .../i18n/locale/es/integrations.json | 20 +- .../dashboard/i18n/locale/es/settings.json | 38 +- .../dashboard/i18n/locale/fa/contact.json | 1 + .../i18n/locale/fa/conversation.json | 3 +- .../dashboard/i18n/locale/fa/helpCenter.json | 170 +++- .../dashboard/i18n/locale/fa/settings.json | 2 +- .../dashboard/i18n/locale/fi/bulkActions.json | 2 +- .../dashboard/i18n/locale/fi/contact.json | 49 +- .../i18n/locale/fi/conversation.json | 27 +- .../dashboard/i18n/locale/fi/helpCenter.json | 148 +++- .../dashboard/i18n/locale/fi/inboxMgmt.json | 10 +- .../dashboard/i18n/locale/fi/report.json | 2 +- .../dashboard/i18n/locale/fi/settings.json | 2 +- .../i18n/locale/fi/whatsappTemplates.json | 14 +- .../dashboard/i18n/locale/fr/contact.json | 1 + .../i18n/locale/fr/conversation.json | 3 +- .../dashboard/i18n/locale/fr/helpCenter.json | 148 +++- .../dashboard/i18n/locale/fr/settings.json | 2 +- .../dashboard/i18n/locale/he/contact.json | 1 + .../i18n/locale/he/conversation.json | 3 +- .../dashboard/i18n/locale/he/helpCenter.json | 148 +++- .../dashboard/i18n/locale/he/settings.json | 2 +- .../dashboard/i18n/locale/hi/contact.json | 1 + .../i18n/locale/hi/conversation.json | 3 +- .../dashboard/i18n/locale/hi/helpCenter.json | 148 +++- .../dashboard/i18n/locale/hi/settings.json | 2 +- .../dashboard/i18n/locale/hu/contact.json | 1 + .../i18n/locale/hu/conversation.json | 3 +- .../dashboard/i18n/locale/hu/helpCenter.json | 148 +++- .../dashboard/i18n/locale/hu/settings.json | 2 +- .../dashboard/i18n/locale/id/contact.json | 1 + .../i18n/locale/id/conversation.json | 3 +- .../dashboard/i18n/locale/id/helpCenter.json | 148 +++- .../dashboard/i18n/locale/id/settings.json | 2 +- .../dashboard/i18n/locale/it/contact.json | 1 + .../i18n/locale/it/conversation.json | 3 +- .../dashboard/i18n/locale/it/helpCenter.json | 148 +++- .../dashboard/i18n/locale/it/settings.json | 2 +- .../dashboard/i18n/locale/ja/contact.json | 1 + .../i18n/locale/ja/conversation.json | 3 +- .../dashboard/i18n/locale/ja/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ja/settings.json | 2 +- .../dashboard/i18n/locale/ka/contact.json | 1 + .../i18n/locale/ka/conversation.json | 3 +- .../dashboard/i18n/locale/ka/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ka/settings.json | 2 +- .../dashboard/i18n/locale/ko/contact.json | 1 + .../i18n/locale/ko/conversation.json | 3 +- .../dashboard/i18n/locale/ko/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ko/settings.json | 2 +- .../i18n/locale/lt/advancedFilters.json | 93 +++ .../dashboard/i18n/locale/lt/agentMgmt.json | 113 +++ .../i18n/locale/lt/attributesMgmt.json | 99 +++ .../dashboard/i18n/locale/lt/automation.json | 116 +++ .../dashboard/i18n/locale/lt/bulkActions.json | 29 + .../dashboard/i18n/locale/lt/campaign.json | 126 +++ .../dashboard/i18n/locale/lt/cannedMgmt.json | 76 ++ .../dashboard/i18n/locale/lt/chatlist.json | 65 ++ .../dashboard/i18n/locale/lt/contact.json | 347 +++++++++ .../i18n/locale/lt/contactFilters.json | 50 ++ .../i18n/locale/lt/conversation.json | 242 ++++++ .../dashboard/i18n/locale/lt/csatMgmt.json | 6 + .../i18n/locale/lt/generalSettings.json | 140 ++++ .../dashboard/i18n/locale/lt/helpCenter.json | 411 ++++++++++ .../dashboard/i18n/locale/lt/inboxMgmt.json | 662 ++++++++++++++++ .../i18n/locale/lt/integrationApps.json | 62 ++ .../i18n/locale/lt/integrations.json | 135 ++++ .../dashboard/i18n/locale/lt/labelsMgmt.json | 70 ++ .../dashboard/i18n/locale/lt/login.json | 21 + .../dashboard/i18n/locale/lt/report.json | 447 +++++++++++ .../i18n/locale/lt/resetPassword.json | 15 + .../i18n/locale/lt/setNewPassword.json | 23 + .../dashboard/i18n/locale/lt/settings.json | 269 +++++++ .../dashboard/i18n/locale/lt/signup.json | 39 + .../i18n/locale/lt/teamsSettings.json | 125 +++ .../dashboard/i18n/locale/lt/webhooks.json | 5 + .../i18n/locale/lt/whatsappTemplates.json | 25 + .../i18n/locale/lv/advancedFilters.json | 122 +-- .../dashboard/i18n/locale/lv/agentMgmt.json | 122 +-- .../i18n/locale/lv/attributesMgmt.json | 106 +-- .../dashboard/i18n/locale/lv/automation.json | 136 ++-- .../dashboard/i18n/locale/lv/bulkActions.json | 42 +- .../dashboard/i18n/locale/lv/campaign.json | 142 ++-- .../dashboard/i18n/locale/lv/cannedMgmt.json | 84 +- .../dashboard/i18n/locale/lv/chatlist.json | 62 +- .../dashboard/i18n/locale/lv/contact.json | 389 +++++----- .../i18n/locale/lv/contactFilters.json | 76 +- .../i18n/locale/lv/conversation.json | 327 ++++---- .../dashboard/i18n/locale/lv/csatMgmt.json | 4 +- .../i18n/locale/lv/generalSettings.json | 170 ++-- .../dashboard/i18n/locale/lv/helpCenter.json | 442 +++++++---- .../dashboard/i18n/locale/lv/inboxMgmt.json | 734 +++++++++--------- .../i18n/locale/lv/integrationApps.json | 56 +- .../i18n/locale/lv/integrations.json | 150 ++-- .../dashboard/i18n/locale/lv/labelsMgmt.json | 76 +- .../dashboard/i18n/locale/lv/login.json | 20 +- .../dashboard/i18n/locale/lv/report.json | 378 ++++----- .../i18n/locale/lv/resetPassword.json | 14 +- .../i18n/locale/lv/setNewPassword.json | 22 +- .../dashboard/i18n/locale/lv/settings.json | 350 ++++----- .../dashboard/i18n/locale/lv/signup.json | 46 +- .../i18n/locale/lv/teamsSettings.json | 126 +-- .../dashboard/i18n/locale/lv/webhooks.json | 2 +- .../i18n/locale/lv/whatsappTemplates.json | 26 +- .../dashboard/i18n/locale/ml/contact.json | 1 + .../i18n/locale/ml/conversation.json | 3 +- .../dashboard/i18n/locale/ml/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ml/settings.json | 2 +- .../i18n/locale/ms/advancedFilters.json | 120 +-- .../dashboard/i18n/locale/ms/agentMgmt.json | 118 +-- .../i18n/locale/ms/attributesMgmt.json | 18 +- .../dashboard/i18n/locale/ms/automation.json | 24 +- .../dashboard/i18n/locale/ms/campaign.json | 12 +- .../dashboard/i18n/locale/ms/cannedMgmt.json | 22 +- .../dashboard/i18n/locale/ms/contact.json | 31 +- .../i18n/locale/ms/contactFilters.json | 48 +- .../i18n/locale/ms/conversation.json | 7 +- .../i18n/locale/ms/generalSettings.json | 2 +- .../dashboard/i18n/locale/ms/helpCenter.json | 160 +++- .../dashboard/i18n/locale/ms/inboxMgmt.json | 14 +- .../i18n/locale/ms/integrationApps.json | 10 +- .../i18n/locale/ms/integrations.json | 28 +- .../dashboard/i18n/locale/ms/labelsMgmt.json | 16 +- .../dashboard/i18n/locale/ms/login.json | 2 +- .../dashboard/i18n/locale/ms/report.json | 2 +- .../i18n/locale/ms/resetPassword.json | 4 +- .../i18n/locale/ms/setNewPassword.json | 2 +- .../dashboard/i18n/locale/ms/settings.json | 8 +- .../dashboard/i18n/locale/ms/signup.json | 2 +- .../i18n/locale/ms/teamsSettings.json | 6 +- .../dashboard/i18n/locale/ne/contact.json | 1 + .../i18n/locale/ne/conversation.json | 3 +- .../dashboard/i18n/locale/ne/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ne/settings.json | 2 +- .../dashboard/i18n/locale/nl/contact.json | 1 + .../i18n/locale/nl/conversation.json | 3 +- .../dashboard/i18n/locale/nl/helpCenter.json | 148 +++- .../dashboard/i18n/locale/nl/settings.json | 2 +- .../dashboard/i18n/locale/no/contact.json | 1 + .../i18n/locale/no/conversation.json | 3 +- .../dashboard/i18n/locale/no/helpCenter.json | 148 +++- .../dashboard/i18n/locale/no/settings.json | 2 +- .../dashboard/i18n/locale/pl/contact.json | 1 + .../i18n/locale/pl/conversation.json | 3 +- .../dashboard/i18n/locale/pl/helpCenter.json | 148 +++- .../dashboard/i18n/locale/pl/settings.json | 2 +- .../dashboard/i18n/locale/pt/contact.json | 1 + .../i18n/locale/pt/conversation.json | 3 +- .../dashboard/i18n/locale/pt/helpCenter.json | 148 +++- .../dashboard/i18n/locale/pt/settings.json | 2 +- .../dashboard/i18n/locale/pt_BR/contact.json | 1 + .../i18n/locale/pt_BR/conversation.json | 3 +- .../i18n/locale/pt_BR/helpCenter.json | 150 +++- .../dashboard/i18n/locale/pt_BR/settings.json | 2 +- .../dashboard/i18n/locale/ro/contact.json | 1 + .../i18n/locale/ro/conversation.json | 3 +- .../dashboard/i18n/locale/ro/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ro/settings.json | 2 +- .../dashboard/i18n/locale/ru/contact.json | 1 + .../i18n/locale/ru/conversation.json | 3 +- .../dashboard/i18n/locale/ru/helpCenter.json | 234 ++++-- .../dashboard/i18n/locale/ru/settings.json | 4 +- .../dashboard/i18n/locale/sk/contact.json | 1 + .../i18n/locale/sk/conversation.json | 3 +- .../dashboard/i18n/locale/sk/helpCenter.json | 148 +++- .../dashboard/i18n/locale/sk/settings.json | 2 +- .../dashboard/i18n/locale/sr/contact.json | 1 + .../i18n/locale/sr/conversation.json | 3 +- .../dashboard/i18n/locale/sr/helpCenter.json | 148 +++- .../dashboard/i18n/locale/sr/settings.json | 2 +- .../dashboard/i18n/locale/sv/contact.json | 1 + .../i18n/locale/sv/conversation.json | 3 +- .../dashboard/i18n/locale/sv/helpCenter.json | 148 +++- .../dashboard/i18n/locale/sv/settings.json | 2 +- .../dashboard/i18n/locale/ta/contact.json | 1 + .../i18n/locale/ta/conversation.json | 3 +- .../dashboard/i18n/locale/ta/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ta/settings.json | 2 +- .../dashboard/i18n/locale/th/contact.json | 1 + .../i18n/locale/th/conversation.json | 3 +- .../dashboard/i18n/locale/th/helpCenter.json | 148 +++- .../dashboard/i18n/locale/th/settings.json | 2 +- .../dashboard/i18n/locale/tr/contact.json | 3 +- .../i18n/locale/tr/conversation.json | 3 +- .../dashboard/i18n/locale/tr/helpCenter.json | 148 +++- .../dashboard/i18n/locale/tr/inboxMgmt.json | 2 +- .../dashboard/i18n/locale/tr/settings.json | 2 +- .../dashboard/i18n/locale/uk/contact.json | 1 + .../i18n/locale/uk/conversation.json | 3 +- .../dashboard/i18n/locale/uk/helpCenter.json | 206 ++++- .../dashboard/i18n/locale/uk/inboxMgmt.json | 6 +- .../dashboard/i18n/locale/uk/settings.json | 2 +- .../dashboard/i18n/locale/ur/contact.json | 1 + .../i18n/locale/ur/conversation.json | 3 +- .../dashboard/i18n/locale/ur/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ur/settings.json | 2 +- .../dashboard/i18n/locale/ur_IN/contact.json | 1 + .../i18n/locale/ur_IN/conversation.json | 3 +- .../i18n/locale/ur_IN/helpCenter.json | 148 +++- .../dashboard/i18n/locale/ur_IN/settings.json | 2 +- .../i18n/locale/vi/advancedFilters.json | 18 +- .../dashboard/i18n/locale/vi/agentMgmt.json | 4 +- .../i18n/locale/vi/attributesMgmt.json | 32 +- .../dashboard/i18n/locale/vi/automation.json | 58 +- .../dashboard/i18n/locale/vi/bulkActions.json | 26 +- .../dashboard/i18n/locale/vi/campaign.json | 8 +- .../dashboard/i18n/locale/vi/chatlist.json | 4 +- .../dashboard/i18n/locale/vi/contact.json | 57 +- .../i18n/locale/vi/contactFilters.json | 2 +- .../i18n/locale/vi/conversation.json | 85 +- .../dashboard/i18n/locale/vi/csatMgmt.json | 2 +- .../i18n/locale/vi/generalSettings.json | 46 +- .../dashboard/i18n/locale/vi/helpCenter.json | 414 ++++++---- .../dashboard/i18n/locale/vi/inboxMgmt.json | 98 +-- .../i18n/locale/vi/integrations.json | 56 +- .../dashboard/i18n/locale/vi/login.json | 2 +- .../dashboard/i18n/locale/vi/report.json | 78 +- .../i18n/locale/vi/setNewPassword.json | 2 +- .../dashboard/i18n/locale/vi/settings.json | 54 +- .../dashboard/i18n/locale/vi/signup.json | 2 +- .../i18n/locale/vi/teamsSettings.json | 4 +- .../i18n/locale/vi/whatsappTemplates.json | 26 +- .../i18n/locale/zh_CN/bulkActions.json | 28 +- .../dashboard/i18n/locale/zh_CN/campaign.json | 6 +- .../dashboard/i18n/locale/zh_CN/contact.json | 5 +- .../i18n/locale/zh_CN/conversation.json | 17 +- .../i18n/locale/zh_CN/generalSettings.json | 32 +- .../i18n/locale/zh_CN/helpCenter.json | 210 ++++- .../i18n/locale/zh_CN/inboxMgmt.json | 10 +- .../dashboard/i18n/locale/zh_CN/settings.json | 4 +- .../i18n/locale/zh_CN/whatsappTemplates.json | 8 +- .../i18n/locale/zh_TW/advancedFilters.json | 2 +- .../dashboard/i18n/locale/zh_TW/contact.json | 1 + .../i18n/locale/zh_TW/conversation.json | 3 +- .../i18n/locale/zh_TW/helpCenter.json | 148 +++- .../dashboard/i18n/locale/zh_TW/settings.json | 2 +- app/javascript/survey/i18n/locale/da.json | 10 +- app/javascript/survey/i18n/locale/lt.json | 19 + app/javascript/survey/i18n/locale/lv.json | 18 +- app/javascript/survey/i18n/locale/ms.json | 2 +- app/javascript/survey/i18n/locale/vi.json | 10 +- app/javascript/widget/i18n/locale/da.json | 20 +- app/javascript/widget/i18n/locale/fi.json | 2 +- app/javascript/widget/i18n/locale/lt.json | 86 ++ app/javascript/widget/i18n/locale/lv.json | 94 +-- app/javascript/widget/i18n/locale/ms.json | 2 +- app/javascript/widget/i18n/locale/pt_BR.json | 2 +- app/javascript/widget/i18n/locale/tr.json | 2 +- app/javascript/widget/i18n/locale/vi.json | 30 +- config/locales/cs.yml | 8 +- config/locales/da.yml | 120 +-- config/locales/devise.lt.yml | 63 ++ config/locales/devise.lv.yml | 88 +-- config/locales/es.yml | 14 +- config/locales/fr.yml | 16 +- config/locales/lt.yml | 151 ++++ config/locales/lv.yml | 168 ++-- config/locales/ms.yml | 2 +- config/locales/tr.yml | 16 +- config/locales/vi.yml | 80 +- 319 files changed, 15118 insertions(+), 4939 deletions(-) create mode 100644 app/javascript/dashboard/i18n/locale/lt/advancedFilters.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/agentMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/automation.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/bulkActions.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/campaign.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/chatlist.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/contact.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/contactFilters.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/conversation.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/csatMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/generalSettings.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/helpCenter.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/integrationApps.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/integrations.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/login.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/report.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/resetPassword.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/setNewPassword.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/settings.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/signup.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/teamsSettings.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/webhooks.json create mode 100644 app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json create mode 100644 app/javascript/survey/i18n/locale/lt.json create mode 100644 app/javascript/widget/i18n/locale/lt.json create mode 100644 config/locales/devise.lt.yml create mode 100644 config/locales/lt.yml diff --git a/app/javascript/dashboard/i18n/locale/ar/contact.json b/app/javascript/dashboard/i18n/locale/ar/contact.json index ab134c256..c648b8aa7 100644 --- a/app/javascript/dashboard/i18n/locale/ar/contact.json +++ b/app/javascript/dashboard/i18n/locale/ar/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "غير متاح", "EMAIL_ADDRESS": "عنوان البريد الإلكتروني", "PHONE_NUMBER": "رقم الهاتف", + "IDENTIFIER": "المعرف", "COPY_SUCCESSFUL": "تم النسخ إلى الحافظة بنجاح", "COMPANY": "الشركة", "LOCATION": "الموقع الجغرافي", diff --git a/app/javascript/dashboard/i18n/locale/ar/conversation.json b/app/javascript/dashboard/i18n/locale/ar/conversation.json index d5b4eef83..8abd9b838 100644 --- a/app/javascript/dashboard/i18n/locale/ar/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ar/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "الرجاء اختيار محادثة من قائمة المحادثات", + "CSAT_REPLY_MESSAGE": "الرجاء تقييم المحادثة", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "الرسائل", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "تم تغيير فريق المحادثة", - "FILE_SIZE_LIMIT": "حجم الملف يتجاوز حد الاقصى وهو {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "غير قادر على إرسال هذه الرسالة، الرجاء المحاولة مرة أخرى لاحقاً", "SENT_BY": "أرسلت بواسطة:", "BOT": "رد آلي", diff --git a/app/javascript/dashboard/i18n/locale/ar/helpCenter.json b/app/javascript/dashboard/i18n/locale/ar/helpCenter.json index b48f301c0..9700d028c 100644 --- a/app/javascript/dashboard/i18n/locale/ar/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ar/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "نشر", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "معاينة", "ADD_TRANSLATION": "إضافة ترجمة", "OPEN_SIDEBAR": "فتح الشريط الجانبي", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "مفعل", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "الإعدادات" + "SETTINGS": "الإعدادات", + "DELETE": "حذف" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "الاسم", + "DESCRIPTION": "الوصف", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "إلغاء" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "تأكيد الحذف", + "MESSAGE": "Are you sure to delete the article?", + "YES": "نعم، احذف", + "NO": "لا، احتفظ به" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "الاسم", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "الاسم مطلوب" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "الوصف", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "الوصف مطلوب" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "إلغاء" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ar/settings.json b/app/javascript/dashboard/i18n/locale/ar/settings.json index a51c24386..801289ce6 100644 --- a/app/javascript/dashboard/i18n/locale/ar/settings.json +++ b/app/javascript/dashboard/i18n/locale/ar/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "نظرة عامة", "FACEBOOK_REAUTHORIZE": "انتهت صلاحية اتصال الفيسبوك الخاص بك، يرجى إعادة الاتصال بصفحة الفيسبوك الخاصة بك لمواصلة الخدمات", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "انتقل إلى الإعدادات", "SWITCH_CONVERSATION_STATUS": "التبديل إلى حالة المحادثة التالية", "SWITCH_TO_PRIVATE_NOTE": "التبديل إلى الملاحظة الخاصة", - "TOGGLE_RICH_CONTENT_EDITOR": "تبديل محرر المحتوى المتقدم", "SWITCH_TO_REPLY": "التبديل إلى الرد", "TOGGLE_SNOOZE_DROPDOWN": "تبديل القائمة المنسدلة" }, diff --git a/app/javascript/dashboard/i18n/locale/bg/contact.json b/app/javascript/dashboard/i18n/locale/bg/contact.json index f47704bfc..e0f42a715 100644 --- a/app/javascript/dashboard/i18n/locale/bg/contact.json +++ b/app/javascript/dashboard/i18n/locale/bg/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Не е наличен", "EMAIL_ADDRESS": "Имейл адрес", "PHONE_NUMBER": "Телефон", + "IDENTIFIER": "Идентификатор", "COPY_SUCCESSFUL": "Успешно копиране в клипборда", "COMPANY": "Фирма", "LOCATION": "Локация", diff --git a/app/javascript/dashboard/i18n/locale/bg/conversation.json b/app/javascript/dashboard/i18n/locale/bg/conversation.json index ce83258ad..5c06943cf 100644 --- a/app/javascript/dashboard/i18n/locale/bg/conversation.json +++ b/app/javascript/dashboard/i18n/locale/bg/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Бот", diff --git a/app/javascript/dashboard/i18n/locale/bg/helpCenter.json b/app/javascript/dashboard/i18n/locale/bg/helpCenter.json index e008ffefa..1fb3179c2 100644 --- a/app/javascript/dashboard/i18n/locale/bg/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/bg/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "активен", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Изтрий" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Име", + "DESCRIPTION": "Описание", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Отмени" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Потвърди изтриването", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Да, изтрий", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Име", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Описание", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Отмени" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/bg/settings.json b/app/javascript/dashboard/i18n/locale/bg/settings.json index f393e2cb1..e59197720 100644 --- a/app/javascript/dashboard/i18n/locale/bg/settings.json +++ b/app/javascript/dashboard/i18n/locale/bg/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ca/contact.json b/app/javascript/dashboard/i18n/locale/ca/contact.json index 0205732ff..78b2f9520 100644 --- a/app/javascript/dashboard/i18n/locale/ca/contact.json +++ b/app/javascript/dashboard/i18n/locale/ca/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "No disponible", "EMAIL_ADDRESS": "Adreça de correu electrònic", "PHONE_NUMBER": "Número de telèfon", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "S'ha copiat al porta-retalls amb èxit", "COMPANY": "Companyia", "LOCATION": "Ubicació", diff --git a/app/javascript/dashboard/i18n/locale/ca/conversation.json b/app/javascript/dashboard/i18n/locale/ca/conversation.json index 31a9c312d..1e1348d2e 100644 --- a/app/javascript/dashboard/i18n/locale/ca/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ca/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Si us plau, selecciona una conversa al panell de l’esquerra", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Enviat per:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ca/helpCenter.json b/app/javascript/dashboard/i18n/locale/ca/helpCenter.json index df0280993..2de2fbd0f 100644 --- a/app/javascript/dashboard/i18n/locale/ca/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ca/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Configuracions" + "SETTINGS": "Configuracions", + "DELETE": "Esborrar" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nom", + "DESCRIPTION": "Descripció", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel·la" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirma l'esborrat", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Si, esborra", + "NO": "No, manten-la" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Descripció", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel·la" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ca/settings.json b/app/javascript/dashboard/i18n/locale/ca/settings.json index bf80fe9bc..9e8562da7 100644 --- a/app/javascript/dashboard/i18n/locale/ca/settings.json +++ b/app/javascript/dashboard/i18n/locale/ca/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "La teva connexió a Facebook ha caducat, torna a connectar la vostra pàgina de Facebook per continuar els serveis", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/cs/advancedFilters.json b/app/javascript/dashboard/i18n/locale/cs/advancedFilters.json index 087630946..033845685 100644 --- a/app/javascript/dashboard/i18n/locale/cs/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/cs/advancedFilters.json @@ -21,7 +21,7 @@ "is_present": "Is present", "is_not_present": "Is not present", "is_greater_than": "Is greater than", - "is_less_than": "Is lesser than", + "is_less_than": "Je menší než", "days_before": "Is x days before" }, "ATTRIBUTE_LABELS": { diff --git a/app/javascript/dashboard/i18n/locale/cs/chatlist.json b/app/javascript/dashboard/i18n/locale/cs/chatlist.json index 0d46c6047..78897cc73 100644 --- a/app/javascript/dashboard/i18n/locale/cs/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/cs/chatlist.json @@ -7,22 +7,22 @@ "404": "V této skupině nejsou žádné aktivní konverzace." }, "TAB_HEADING": "Konverzace", - "MENTION_HEADING": "Zmínka", + "MENTION_HEADING": "Zmínky", "SEARCH": { "INPUT": "Hledat lidi, chaty, Uložené odpovědi .." }, "FILTER_ALL": "Vše", "ASSIGNEE_TYPE_TABS": { - "me": "Mine", + "me": "Moje", "unassigned": "Nepřiřazeno", "all": "Vše" }, "CHAT_STATUS_FILTER_ITEMS": { "open": { - "TEXT": "Otevřít" + "TEXT": "Otevřené" }, "resolved": { - "TEXT": "Vyřešeno" + "TEXT": "Vyřešené" }, "pending": { "TEXT": "Čekající" @@ -55,11 +55,11 @@ "VIEW_TWEET_IN_TWITTER": "Zobrazit tweet na Twitteru", "REPLY_TO_TWEET": "Odpovědět na tento tweet", "LINK_TO_STORY": "Přejít na instagram příběh", - "SENT": "Sent successfully", + "SENT": "Úspěšně odesláno", "NO_MESSAGES": "Žádné zprávy", "NO_CONTENT": "Žádný obsah k dispozici", - "HIDE_QUOTED_TEXT": "Hide Quoted Text", - "SHOW_QUOTED_TEXT": "Show Quoted Text", - "MESSAGE_READ": "Přečteno" + "HIDE_QUOTED_TEXT": "Skrýt citovaný text", + "SHOW_QUOTED_TEXT": "Zobrazit citovaný text", + "MESSAGE_READ": "Přečtené" } } diff --git a/app/javascript/dashboard/i18n/locale/cs/contact.json b/app/javascript/dashboard/i18n/locale/cs/contact.json index 96ab4cfdd..009ccf740 100644 --- a/app/javascript/dashboard/i18n/locale/cs/contact.json +++ b/app/javascript/dashboard/i18n/locale/cs/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Nedostupné", "EMAIL_ADDRESS": "E-mailová adresa", "PHONE_NUMBER": "Telefonní číslo", + "IDENTIFIER": "Identifikátor", "COPY_SUCCESSFUL": "Úspěšně zkopírováno do schránky", "COMPANY": "Společnost", "LOCATION": "Poloha", diff --git a/app/javascript/dashboard/i18n/locale/cs/contactFilters.json b/app/javascript/dashboard/i18n/locale/cs/contactFilters.json index eb04d75f5..c94ff7551 100644 --- a/app/javascript/dashboard/i18n/locale/cs/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/cs/contactFilters.json @@ -1,49 +1,49 @@ { "CONTACTS_FILTER": { - "TITLE": "Filter Contacts", - "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", - "ADD_NEW_FILTER": "Add Filter", - "CLEAR_ALL_FILTERS": "Clear All Filters", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "TITLE": "Filtrovat kontakty", + "SUBTITLE": "Přidejte filtry níže a stiskněte 'Odeslat' pro filtrování kontaktů.", + "ADD_NEW_FILTER": "Přidat filtr", + "CLEAR_ALL_FILTERS": "Vymazat všechny filtry", + "FILTER_DELETE_ERROR": "Pro uložení byste měli mít alespoň jeden filtr", "SUBMIT_BUTTON_LABEL": "Odeslat", "CANCEL_BUTTON_LABEL": "Zrušit", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter contacts", + "CLEAR_BUTTON_LABEL": "Vymazat filtry", + "EMPTY_VALUE_ERROR": "Hodnota je povinná", + "TOOLTIP_LABEL": "Filtrovat kontakty", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "A", + "OR": "NEBO" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_lesser_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Rovno", + "not_equal_to": "Nerovno", + "contains": "Obsahuje", + "does_not_contain": "Neobsahuje", + "is_present": "Je přítomno", + "is_not_present": "Není přítomno", + "is_greater_than": "Je větší než", + "is_lesser_than": "Je menší než", + "days_before": "Je o x dnů dříve" }, "ATTRIBUTES": { "NAME": "Název", "EMAIL": "E-mailová adresa", "PHONE_NUMBER": "Telefonní číslo", - "IDENTIFIER": "Identifier", + "IDENTIFIER": "Identifikátor", "CITY": "Město", "COUNTRY": "Země", - "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_LIST": "Seznam", "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", - "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", + "CUSTOM_ATTRIBUTE_NUMBER": "Číslo", + "CUSTOM_ATTRIBUTE_LINK": "Odkaz", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Zaškrtávací pole", + "CREATED_AT": "Vytvořeno", "LAST_ACTIVITY": "Poslední aktivita", - "REFERER_LINK": "Referrer link" + "REFERER_LINK": "Odkazující odkaz" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", + "STANDARD_FILTERS": "Standardní filtry", + "ADDITIONAL_FILTERS": "Další filtry", "CUSTOM_ATTRIBUTES": "Vlastní atributy" } } diff --git a/app/javascript/dashboard/i18n/locale/cs/conversation.json b/app/javascript/dashboard/i18n/locale/cs/conversation.json index 01bb19a86..4d05e9082 100644 --- a/app/javascript/dashboard/i18n/locale/cs/conversation.json +++ b/app/javascript/dashboard/i18n/locale/cs/conversation.json @@ -1,9 +1,10 @@ { "CONVERSATION": { - "SELECT_A_CONVERSATION": "Please select a conversation from left pane", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", - "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "SELECT_A_CONVERSATION": "Vyberte prosím konverzaci z levého panelu", + "CSAT_REPLY_MESSAGE": "Ohodnoťte prosím konverzaci", + "404": "Omlouváme se, konverzaci nelze najít. Zkuste to prosím znovu", + "SWITCH_VIEW_LAYOUT": "Přepnout rozložení", + "DASHBOARD_APP_TAB_MESSAGES": "Zprávy", "UNVERIFIED_SESSION": "Identita tohoto uživatele není ověřena", "NO_MESSAGE_1": "Ale ne! Vypadá to, že ve vaší schránce nejsou žádné zprávy od zákazníků.", "NO_MESSAGE_2": " pro odeslání zprávy na vaši stránku!", @@ -33,7 +34,7 @@ "REPLYING_TO": "Odpovídáte uživateli:", "REMOVE_SELECTION": "Odstranit výběr", "DOWNLOAD": "Stáhnout", - "UNKNOWN_FILE_TYPE": "Unknown File", + "UNKNOWN_FILE_TYPE": "Neznámý soubor", "UPLOADING_ATTACHMENTS": "Nahrávání příloh...", "SUCCESS_DELETE_MESSAGE": "Zpráva byla úspěšně smazána", "FAIL_DELETE_MESSSAGE": "Zpráva se nepodařilo odstranit! Zkuste to znovu", @@ -62,30 +63,30 @@ }, "CARD_CONTEXT_MENU": { "PENDING": "Označit jako nevyřízené", - "RESOLVED": "Mark as resolved", - "REOPEN": "Reopen conversation", + "RESOLVED": "Označit jako vyřešené", + "REOPEN": "Znovu otevřít konverzaci", "SNOOZE": { - "TITLE": "Snooze", - "NEXT_REPLY": "Until next reply", - "TOMORROW": "Until tomorrow", - "NEXT_WEEK": "Until next week" + "TITLE": "Odložit", + "NEXT_REPLY": "Do další odpovědi", + "TOMORROW": "Do zítřka", + "NEXT_WEEK": "Do příštího týdne" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Přiřadit agenta", + "ASSIGN_LABEL": "Přiřadit štítek", + "AGENTS_LOADING": "Načítání agentů...", + "ASSIGN_TEAM": "Přiřadit tým", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "Konverzace id %{conversationId} přiřazena \"%{agentName}\"", + "FAILED": "Nelze přiřadit agenta. Zkuste to prosím znovu." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Přiřazený štítek #%{labelName} ke konverzaci id %{conversationId}", + "FAILED": "Nelze přiřadit štítek. Zkuste to prosím znovu." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Přiřazený tým #%{team} ke konverzaci id %{conversationId}", + "FAILED": "Nelze přiřadit tým. Zkuste to prosím znovu." } } }, @@ -95,7 +96,7 @@ "DISABLE_SIGN_TOOLTIP": "Zakázat podpis", "MSG_INPUT": "Shift + zadejte pro nový řádek. Začněte '/' pro výběr zrušené odpovědi.", "PRIVATE_MSG_INPUT": "Shift + zadejte pro nový řádek. Toto bude viditelné pouze pro agenty", - "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Podpis zprávy není nakonfigurován, prosím nakonfigurujte jej v nastavení profilu.", "CLICK_HERE": "Klikněte zde pro aktualizaci" }, "REPLYBOX": { @@ -131,13 +132,13 @@ }, "VISIBLE_TO_AGENTS": "Soukromá poznámka: Viditelné pouze pro vás a váš tým", "CHANGE_STATUS": "Stav konverzace byl změněn", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "Změna stavu konverzace se nezdařila", "CHANGE_AGENT": "Konverzace pověřená osoba změněna", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_AGENT_FAILED": "Změna přiřazeného agenta se nezdařila", + "ASSIGN_LABEL_SUCCESFUL": "Štítek byl úspěšně přiřazen", + "ASSIGN_LABEL_FAILED": "Přiřazení štítku se nezdařilo", "CHANGE_TEAM": "Tým konverzace se změnil", - "FILE_SIZE_LIMIT": "Soubor překračuje limit {MAXIMUM_FILE_UPLOAD_SIZE} přílohy", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Nepodařilo se odeslat tuto zprávu, zkuste to prosím později", "SENT_BY": "Odeslal:", "BOT": "Bot", @@ -180,7 +181,7 @@ }, "TEAM_MEMBERS": { "TITLE": "Pozvěte své členy týmu", - "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "DESCRIPTION": "Vzhledem k tomu, že se připravujete na rozhovor se zákazníkem, přiveďte své týmové spolupracovníky, kteří Vám pomohou. Můžete pozvat své spolupracovníky přidáním jejich e-mailové adresy do seznamu agentů.", "NEW_LINK": "Klikněte zde pro pozvání člena týmu" }, "INBOXES": { diff --git a/app/javascript/dashboard/i18n/locale/cs/helpCenter.json b/app/javascript/dashboard/i18n/locale/cs/helpCenter.json index 4779130e6..dcea2beab 100644 --- a/app/javascript/dashboard/i18n/locale/cs/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/cs/helpCenter.json @@ -1,74 +1,76 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "Filtrovat podle", + "SORT": "Seřadit podle", "SETTINGS_BUTTON": "Nastavení", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "Nový článek", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Publikované", + "DRAFT": "Koncept", + "ARCHIVED": "Archivované" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Všechny články", + "MINE": "Moje články", + "DRAFT": "Koncepty článků", + "ARCHIVED": "Archivované články" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Všechny články", + "PUBLISH_BUTTON": "Publikovat", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Náhled", + "ADD_TRANSLATION": "Přidat překlad", + "OPEN_SIDEBAR": "Otevřít postranní panel", + "CLOSE_SIDEBAR": "Zavřít postranní panel", + "SAVING": "Ukládání...", + "SAVED": "Uloženo" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Nastavení článků", "FORM": { "CATEGORY": { - "LABEL": "Category", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "LABEL": "Kategorie", + "TITLE": "Vyberte kategorii", + "PLACEHOLDER": "Vyberte kategorii", + "NO_RESULT": "Nebyla nalezena žádná kategorie", + "SEARCH_PLACEHOLDER": "Hledat kategorii" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Autor", + "TITLE": "Vyberte autora", + "PLACEHOLDER": "Vyberte autora", + "NO_RESULT": "Nebyli nalezeni žádní autoři", + "SEARCH_PLACEHOLDER": "Hledat autora" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Meta titulek", + "PLACEHOLDER": "Přidat meta titulek" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Meta popis", + "PLACEHOLDER": "Přidejte svůj meta popis pro lepší výsledky SEO..." }, "META_TAGS": { - "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "LABEL": "Meta tagy", + "PLACEHOLDER": "Přidat meta tagy oddělené čárkou..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Archivovat článek", + "DELETE": "Odstranit článek" } }, "PORTAL": { - "HEADER": "Portals", - "NEW_BUTTON": "New Portal", - "ACTIVE_BADGE": "active", + "HEADER": "Portály", + "DEFAULT": "Default", + "NEW_BUTTON": "Nový portál", + "ACTIVE_BADGE": "aktivní", "CHOOSE_LOCALE_LABEL": "Choose a locale", - "LOADING_MESSAGE": "Loading portals...", - "ARTICLES_LABEL": "articles", + "LOADING_MESSAGE": "Načítání portálů...", + "ARTICLES_LABEL": "články", "NO_PORTALS_MESSAGE": "There are no available portals", "ADD_NEW_LOCALE": "Add a new locale", "POPOVER": { @@ -81,10 +83,11 @@ "PORTAL_SETTINGS": { "LIST_ITEM": { "HEADER": { - "COUNT_LABEL": "articles", + "COUNT_LABEL": "články", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Nastavení" + "SETTINGS": "Nastavení", + "DELETE": "Vymazat" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Název", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Zrušit" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potvrdit odstranění", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ano, odstranit", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Název", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Zrušit" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json index abcc35387..4cdc4fc21 100644 --- a/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/cs/inboxMgmt.json @@ -622,7 +622,7 @@ } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", + "PREVIEW": "Náhled", "SCRIPT": "Script" }, "WIDGET_BUBBLE_POSITION": { diff --git a/app/javascript/dashboard/i18n/locale/cs/report.json b/app/javascript/dashboard/i18n/locale/cs/report.json index 3827e8203..99037060b 100644 --- a/app/javascript/dashboard/i18n/locale/cs/report.json +++ b/app/javascript/dashboard/i18n/locale/cs/report.json @@ -45,11 +45,11 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Poslední 3 měsíce" }, { "id": 3, - "name": "Last 6 months" + "name": "Posledních 6 měsíců" }, { "id": 4, @@ -57,15 +57,15 @@ }, { "id": 5, - "name": "Custom date range" + "name": "Vlastní časové rozmezí" } ], "CUSTOM_DATE_RANGE": { "CONFIRM": "Použít", - "PLACEHOLDER": "Select date range" + "PLACEHOLDER": "Zvolte časové rozmezí" }, - "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", - "DURATION_FILTER_LABEL": "Duration", + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Seskupit podle", + "DURATION_FILTER_LABEL": "Doba trvání", "GROUP_BY_DAY_OPTIONS": [ { "id": 1, @@ -163,11 +163,11 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Poslední 3 měsíce" }, { "id": 3, - "name": "Last 6 months" + "name": "Posledních 6 měsíců" }, { "id": 4, @@ -175,12 +175,12 @@ }, { "id": 5, - "name": "Custom date range" + "name": "Vlastní časové rozmezí" } ], "CUSTOM_DATE_RANGE": { "CONFIRM": "Použít", - "PLACEHOLDER": "Select date range" + "PLACEHOLDER": "Zvolte časové rozmezí" } }, "LABEL_REPORTS": { @@ -230,11 +230,11 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Poslední 3 měsíce" }, { "id": 3, - "name": "Last 6 months" + "name": "Posledních 6 měsíců" }, { "id": 4, @@ -242,12 +242,12 @@ }, { "id": 5, - "name": "Custom date range" + "name": "Vlastní časové rozmezí" } ], "CUSTOM_DATE_RANGE": { "CONFIRM": "Použít", - "PLACEHOLDER": "Select date range" + "PLACEHOLDER": "Zvolte časové rozmezí" } }, "INBOX_REPORTS": { @@ -297,11 +297,11 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Poslední 3 měsíce" }, { "id": 3, - "name": "Last 6 months" + "name": "Posledních 6 měsíců" }, { "id": 4, @@ -309,12 +309,12 @@ }, { "id": 5, - "name": "Custom date range" + "name": "Vlastní časové rozmezí" } ], "CUSTOM_DATE_RANGE": { "CONFIRM": "Použít", - "PLACEHOLDER": "Select date range" + "PLACEHOLDER": "Zvolte časové rozmezí" } }, "TEAM_REPORTS": { @@ -364,11 +364,11 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Poslední 3 měsíce" }, { "id": 3, - "name": "Last 6 months" + "name": "Posledních 6 měsíců" }, { "id": 4, @@ -376,12 +376,12 @@ }, { "id": 5, - "name": "Custom date range" + "name": "Vlastní časové rozmezí" } ], "CUSTOM_DATE_RANGE": { "CONFIRM": "Použít", - "PLACEHOLDER": "Select date range" + "PLACEHOLDER": "Zvolte časové rozmezí" } }, "CSAT_REPORTS": { diff --git a/app/javascript/dashboard/i18n/locale/cs/settings.json b/app/javascript/dashboard/i18n/locale/cs/settings.json index 94ed6e58d..9a22bf8df 100644 --- a/app/javascript/dashboard/i18n/locale/cs/settings.json +++ b/app/javascript/dashboard/i18n/locale/cs/settings.json @@ -158,7 +158,7 @@ "SWITCH": "Switch", "CONVERSATIONS": "Konverzace", "ALL_CONVERSATIONS": "All Conversations", - "MENTIONED_CONVERSATIONS": "Zmínka", + "MENTIONED_CONVERSATIONS": "Zmínky", "REPORTS": "Zprávy", "SETTINGS": "Nastavení", "CONTACTS": "Kontakty", @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/cs/signup.json b/app/javascript/dashboard/i18n/locale/cs/signup.json index 994da4444..2a424eef0 100644 --- a/app/javascript/dashboard/i18n/locale/cs/signup.json +++ b/app/javascript/dashboard/i18n/locale/cs/signup.json @@ -22,7 +22,7 @@ "LABEL": "Heslo", "PLACEHOLDER": "Heslo", "ERROR": "Heslo je příliš krátké", - "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character" + "IS_INVALID_PASSWORD": "Heslo by mělo obsahovat alespoň jedno velké písmeno, jedno malé písmeno, jedno číslo a jeden speciální znak" }, "CONFIRM_PASSWORD": { "LABEL": "Potvrzení hesla", diff --git a/app/javascript/dashboard/i18n/locale/da/advancedFilters.json b/app/javascript/dashboard/i18n/locale/da/advancedFilters.json index cd247bbd7..e17710b2c 100644 --- a/app/javascript/dashboard/i18n/locale/da/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/da/advancedFilters.json @@ -1,91 +1,91 @@ { "FILTER": { - "TITLE": "Filter Conversations", - "SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.", - "ADD_NEW_FILTER": "Add Filter", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", - "SUBMIT_BUTTON_LABEL": "Apply filters", + "TITLE": "Filtrer Samtaler", + "SUBTITLE": "Tilføj filtre nedenfor og tryk på 'Anvend filtre' for at filtrere samtaler.", + "ADD_NEW_FILTER": "Tilføj Filter", + "FILTER_DELETE_ERROR": "Du skal have mindst et filter at gemme", + "SUBMIT_BUTTON_LABEL": "Anvend filtre", "CANCEL_BUTTON_LABEL": "Annuller", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter conversations", + "CLEAR_BUTTON_LABEL": "Ryd Filtre", + "EMPTY_VALUE_ERROR": "Værdi er påkrævet", + "TOOLTIP_LABEL": "Filtrer samtaler", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "OG", + "OR": "ELLER" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_less_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Lig med", + "not_equal_to": "Ikke lig med", + "contains": "Indeholder", + "does_not_contain": "Indeholder ikke", + "is_present": "Er til stede", + "is_not_present": "Er ikke til stede", + "is_greater_than": "Er større end", + "is_less_than": "Er mindre end", + "days_before": "Er x dage før" }, "ATTRIBUTE_LABELS": { - "TRUE": "True", - "FALSE": "False" + "TRUE": "Sandt", + "FALSE": "Falsk" }, "ATTRIBUTES": { "STATUS": "Status", - "ASSIGNEE_NAME": "Assignee Name", + "ASSIGNEE_NAME": "Ansvarlig Navn", "INBOX_NAME": "Indbakke Navn", - "TEAM_NAME": "Team Name", + "TEAM_NAME": "Hold Navn", "CONVERSATION_IDENTIFIER": "Conversation Identifier", - "CAMPAIGN_NAME": "Campaign Name", + "CAMPAIGN_NAME": "Kampagne Navn", "LABELS": "Etiketter", - "BROWSER_LANGUAGE": "Browser Language", - "COUNTRY_NAME": "Country Name", - "REFERER_LINK": "Referer link", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "BROWSER_LANGUAGE": "Browser Sprog", + "COUNTRY_NAME": "Land Navn", + "REFERER_LINK": "Refererer link", + "CUSTOM_ATTRIBUTE_LIST": "Liste", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Nummer", "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", - "LAST_ACTIVITY": "Last Activity" + "CUSTOM_ATTRIBUTE_CHECKBOX": "Afkrydsningsfelt", + "CREATED_AT": "Oprettet Den", + "LAST_ACTIVITY": "Sidste Aktivitet" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", + "STANDARD_FILTERS": "Standard Filtre", + "ADDITIONAL_FILTERS": "Yderligere Filtre", "CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber" }, "CUSTOM_VIEWS": { "ADD": { - "TITLE": "Do you want to save this filter?", - "LABEL": "Name this filter", - "PLACEHOLDER": "Enter a name for this filter", - "ERROR_MESSAGE": "Name is required", - "SAVE_BUTTON": "Save filter", + "TITLE": "Vil du gemme dette filter?", + "LABEL": "Navngiv dette filter", + "PLACEHOLDER": "Angiv et navn for dette filter", + "ERROR_MESSAGE": "Navn er påkrævet", + "SAVE_BUTTON": "Gem filter", "CANCEL_BUTTON": "Annuller", "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder created successfully", - "ERROR_MESSAGE": "Error while creating folder" + "SUCCESS_MESSAGE": "Mappe oprettet", + "ERROR_MESSAGE": "Fejl under oprettelse af mappe" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment created successfully", - "ERROR_MESSAGE": "Error while creating segment" + "SUCCESS_MESSAGE": "Segmentet er oprettet", + "ERROR_MESSAGE": "Fejl under oprettelse af segment" } }, "DELETE": { - "DELETE_BUTTON": "Delete filter", + "DELETE_BUTTON": "Slet filter", "MODAL": { "CONFIRM": { "TITLE": "Bekræft Sletning", - "MESSAGE": "Are you sure to delete the filter ", + "MESSAGE": "Er du sikker på du vil slette filteret ", "YES": "Ja, Slet", "NO": "Nej, behold det" } }, "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder deleted successfully", - "ERROR_MESSAGE": "Error while deleting folder" + "SUCCESS_MESSAGE": "Mappen blev slettet", + "ERROR_MESSAGE": "Fejl under sletning af mappe" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment deleted successfully", - "ERROR_MESSAGE": "Error while deleting segment" + "SUCCESS_MESSAGE": "Segmentet blev slettet", + "ERROR_MESSAGE": "Fejl under sletning af segment" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/agentMgmt.json b/app/javascript/dashboard/i18n/locale/da/agentMgmt.json index 539fdab4a..45a45bcb6 100644 --- a/app/javascript/dashboard/i18n/locale/da/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/agentMgmt.json @@ -93,19 +93,19 @@ "NO_RESULTS": "Ingen resultater fundet." }, "MULTI_SELECTOR": { - "PLACEHOLDER": "None", + "PLACEHOLDER": "Ingen", "TITLE": { - "AGENT": "Select agent", - "TEAM": "Select team" + "AGENT": "Vælg agent", + "TEAM": "Vælg hold" }, "SEARCH": { "NO_RESULTS": { "AGENT": "Ingen agenter fundet", - "TEAM": "No teams found" + "TEAM": "Ingen hold fundet" }, "PLACEHOLDER": { - "AGENT": "Search agents", - "TEAM": "Search teams" + "AGENT": "Søg agenter", + "TEAM": "Søg i teams" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/da/attributesMgmt.json index 3b939ccda..b6eae9c9e 100644 --- a/app/javascript/dashboard/i18n/locale/da/attributesMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/attributesMgmt.json @@ -1,98 +1,98 @@ { "ATTRIBUTES_MGMT": { "HEADER": "Brugerdefinerede Egenskaber", - "HEADER_BTN_TXT": "Add Custom Attribute", - "LOADING": "Fetching custom attributes", - "SIDEBAR_TXT": "

Custom Attributes

A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc.

For creating a Custom Attribute, just click on the Add Custom Attribute. You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.

", + "HEADER_BTN_TXT": "Tilføj Tilpasset Attribut", + "LOADING": "Henter brugerdefinerede attributter", + "SIDEBAR_TXT": "

Brugerdefinerede attributter

En brugerdefineret attribut sporer fakta om dine kontakter/samtale — såsom abonnementet, eller når de bestilte det første element osv.

For at oprette en brugerdefineret attribut, klik blot påTilføj brugerdefineret attribut. Du kan også redigere eller slette en eksisterende brugerdefineret attribut ved at klikke på Rediger eller Slet knappen.

", "ADD": { - "TITLE": "Add Custom Attribute", + "TITLE": "Tilføj Tilpasset Attribut", "SUBMIT": "Opret", "CANCEL_BUTTON_TEXT": "Annuller", "FORM": { "NAME": { - "LABEL": "Display Name", - "PLACEHOLDER": "Enter custom attribute display name", - "ERROR": "Name is required" + "LABEL": "Vis Navn", + "PLACEHOLDER": "Angiv brugerdefineret attribut visningsnavn", + "ERROR": "Navn er påkrævet" }, "DESC": { "LABEL": "Beskrivelse", - "PLACEHOLDER": "Enter custom attribute description", - "ERROR": "Description is required" + "PLACEHOLDER": "Angiv brugerdefineret attribut beskrivelse", + "ERROR": "Beskrivelse er påkrævet" }, "MODEL": { - "LABEL": "Applies to", - "PLACEHOLDER": "Please select one", - "ERROR": "Model is required" + "LABEL": "Gælder for", + "PLACEHOLDER": "Vælg venligst en", + "ERROR": "Model er påkrævet" }, "TYPE": { "LABEL": "Type", - "PLACEHOLDER": "Please select a type", - "ERROR": "Type is required", + "PLACEHOLDER": "Vælg venligst en type", + "ERROR": "Type er påkrævet", "LIST": { - "LABEL": "List Values", - "PLACEHOLDER": "Please enter value and press enter key", - "ERROR": "Must have at least one value" + "LABEL": "Liste Værdier", + "PLACEHOLDER": "Indtast venligst værdi og tryk på enter tasten", + "ERROR": "Skal have mindst én værdi" } }, "KEY": { - "LABEL": "Key", - "PLACEHOLDER": "Enter custom attribute key", - "ERROR": "Key is required", - "IN_VALID": "Invalid key" + "LABEL": "Nøgle", + "PLACEHOLDER": "Angiv brugerdefineret attributnøgle", + "ERROR": "Nøgle er påkrævet", + "IN_VALID": "Ugyldig nøgle" } }, "API": { - "SUCCESS_MESSAGE": "Custom Attribute added successfully", - "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later" + "SUCCESS_MESSAGE": "Brugerdefineret attribut blev tilføjet", + "ERROR_MESSAGE": "Kunne ikke oprette en brugerdefineret attribut. Prøv igen senere" } }, "DELETE": { "BUTTON_TEXT": "Slet", "API": { - "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", - "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + "SUCCESS_MESSAGE": "Brugerdefineret attribut slettet.", + "ERROR_MESSAGE": "Kunne ikke slette den brugerdefinerede attribut. Prøv igen." }, "CONFIRM": { - "TITLE": "Are you sure want to delete - %{attributeName}", - "PLACE_HOLDER": "Please type {attributeName} to confirm", - "MESSAGE": "Deleting will remove the custom attribute", + "TITLE": "Er du sikker på du vil slette - %{attributeName}", + "PLACE_HOLDER": "Skriv venligst {attributeName} for at bekræfte", + "MESSAGE": "Sletning vil fjerne den brugerdefinerede attribut", "YES": "Slet ", "NO": "Annuller" } }, "EDIT": { - "TITLE": "Edit Custom Attribute", + "TITLE": "Rediger Brugerdefineret Attribut", "UPDATE_BUTTON_TEXT": "Opdater", "TYPE": { "LIST": { - "LABEL": "List Values", - "PLACEHOLDER": "Please enter values and press enter key" + "LABEL": "Liste Værdier", + "PLACEHOLDER": "Indtast værdier og tryk på enter tasten" } }, "API": { - "SUCCESS_MESSAGE": "Custom Attribute updated successfully", - "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + "SUCCESS_MESSAGE": "Brugerdefineret attribut opdateret", + "ERROR_MESSAGE": "Der opstod en fejl under opdatering af brugerdefineret attribut. Prøv igen" } }, "TABS": { "HEADER": "Brugerdefinerede Egenskaber", - "CONVERSATION": "Conversation", - "CONTACT": "Contact" + "CONVERSATION": "Samtale", + "CONTACT": "Kontakt" }, "LIST": { "TABLE_HEADER": [ "Navn", "Beskrivelse", "Type", - "Key" + "Nøgle" ], "BUTTONS": { "EDIT": "Rediger", "DELETE": "Slet" }, "EMPTY_RESULT": { - "404": "There are no custom attributes created", - "NOT_FOUND": "There are no custom attributes configured" + "404": "Der er ingen brugerdefinerede attributter oprettet", + "NOT_FOUND": "Der er ingen brugerdefinerede attributter konfigureret" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/automation.json b/app/javascript/dashboard/i18n/locale/da/automation.json index 1f8c4617b..1998f07c1 100644 --- a/app/javascript/dashboard/i18n/locale/da/automation.json +++ b/app/javascript/dashboard/i18n/locale/da/automation.json @@ -1,54 +1,54 @@ { "AUTOMATION": { - "HEADER": "Automations", - "HEADER_BTN_TXT": "Add Automation Rule", - "LOADING": "Fetching automation rules", - "SIDEBAR_TXT": "

Automation Rules

Automation can replace and automate existing processes that require manual effort. You can do many things with automation, including adding labels and assigning conversation to the best agent. So the team focuses on what they do best and spends more little time on manual tasks.

", + "HEADER": "Automatiseringer", + "HEADER_BTN_TXT": "Tilføj Automatiseringsregel", + "LOADING": "Henter automatiseringsregler", + "SIDEBAR_TXT": "

Automatiseringsregler

Automatisering kan erstatte og automatisere eksisterende processer, der kræver manuel indsats. Du kan gøre mange ting med automatisering, herunder tilføje etiketter og tildele samtale til den bedste agent. Så holdet fokuserer på, hvad de gør bedst, og bruger mere lidt tid på manuelle opgaver.

", "ADD": { - "TITLE": "Add Automation Rule", + "TITLE": "Tilføj Automatiseringsregel", "SUBMIT": "Opret", "CANCEL_BUTTON_TEXT": "Annuller", "FORM": { "NAME": { - "LABEL": "Rule Name", - "PLACEHOLDER": "Enter rule name", - "ERROR": "Name is required" + "LABEL": "Regel Navn", + "PLACEHOLDER": "Indtast regelnavn", + "ERROR": "Navn er påkrævet" }, "DESC": { "LABEL": "Beskrivelse", - "PLACEHOLDER": "Enter rule description", - "ERROR": "Description is required" + "PLACEHOLDER": "Indtast regel beskrivelse", + "ERROR": "Beskrivelse er påkrævet" }, "EVENT": { - "LABEL": "Event", - "PLACEHOLDER": "Please select one", - "ERROR": "Event is required" + "LABEL": "Begivenhed", + "PLACEHOLDER": "Vælg venligst en", + "ERROR": "Begivenhed er påkrævet" }, "CONDITIONS": { - "LABEL": "Conditions" + "LABEL": "Betingelser" }, "ACTIONS": { "LABEL": "Handlinger" } }, - "CONDITION_BUTTON_LABEL": "Add Condition", - "ACTION_BUTTON_LABEL": "Add Action", + "CONDITION_BUTTON_LABEL": "Tilføj Betingelse", + "ACTION_BUTTON_LABEL": "Tilføj Handling", "API": { - "SUCCESS_MESSAGE": "Automation rule added successfully", - "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatiseringsregel tilføjet med succes", + "ERROR_MESSAGE": "Kunne ikke oprette en automatiseringsregel. Prøv igen senere" } }, "LIST": { "TABLE_HEADER": [ "Navn", "Beskrivelse", - "Active", - "Created on" + "Aktiv", + "Oprettet den" ], - "404": "No automation rules found" + "404": "Ingen automatiseringsregler fundet" }, "DELETE": { - "TITLE": "Delete Automation Rule", + "TITLE": "Slet Automatiseringsregel", "SUBMIT": "Slet", "CANCEL_BUTTON_TEXT": "Annuller", "CONFIRM": { @@ -58,24 +58,24 @@ "NO": "Nej, Behold " }, "API": { - "SUCCESS_MESSAGE": "Automation rule deleted successfully", - "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatiseringsregel slettet", + "ERROR_MESSAGE": "Kunne ikke slette en automatiseringsregel, prøv igen senere" } }, "EDIT": { - "TITLE": "Edit Automation Rule", + "TITLE": "Rediger Automatiseringsregel", "SUBMIT": "Opdater", "CANCEL_BUTTON_TEXT": "Annuller", "API": { - "SUCCESS_MESSAGE": "Automation rule updated successfully", - "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatiseringsregel opdateret", + "ERROR_MESSAGE": "Kunne ikke opdatere automatiseringsreglen. Prøv igen senere" } }, "CLONE": { - "TOOLTIP": "Clone", + "TOOLTIP": "Klon", "API": { - "SUCCESS_MESSAGE": "Automation cloned successfully", - "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatisering klonet med succes", + "ERROR_MESSAGE": "Kunne ikke klone automatiseringsreglen. Prøv igen senere" } }, "FORM": { @@ -83,34 +83,34 @@ "CREATE": "Opret", "DELETE": "Slet", "CANCEL": "Annuller", - "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + "RESET_MESSAGE": "Ændring af begivenhedstype vil nulstille de betingelser og begivenheder, du har tilføjet nedenfor" }, "CONDITION": { - "DELETE_MESSAGE": "You need to have atleast one condition to save" + "DELETE_MESSAGE": "Du skal have mindst én betingelse for at gemme" }, "ACTION": { - "DELETE_MESSAGE": "You need to have atleast one action to save", - "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", - "TEAM_DROPDOWN_PLACEHOLDER": "Select teams" + "DELETE_MESSAGE": "Du skal have mindst én handling for at gemme", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Indtast din besked her", + "TEAM_DROPDOWN_PLACEHOLDER": "Vælg teams" }, "TOGGLE": { - "ACTIVATION_TITLE": "Activate Automation Rule", - "DEACTIVATION_TITLE": "Deactivate Automation Rule", - "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", - "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", - "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", - "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", - "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", - "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", - "CONFIRMATION_LABEL": "Yes", - "CANCEL_LABEL": "No" + "ACTIVATION_TITLE": "Aktivér Automatiseringsregel", + "DEACTIVATION_TITLE": "Deaktiver Automatiseringsregel", + "ACTIVATION_DESCRIPTION": "Denne handling vil aktivere automatiseringsreglen '{automationName}'. Er du sikker på du vil fortsætte?", + "DEACTIVATION_DESCRIPTION": "Denne handling vil deaktivere automatiseringsreglen '{automationName}'. Er du sikker på du vil fortsætte?", + "ACTIVATION_SUCCESFUL": "Automatiseringsregel Aktiveret", + "DEACTIVATION_SUCCESFUL": "Automatiseringsregel Deaktiveret", + "ACTIVATION_ERROR": "Kunne ikke aktivere automatisering, prøv igen senere", + "DEACTIVATION_ERROR": "Kunne ikke deaktivere automatisering, prøv igen senere", + "CONFIRMATION_LABEL": "Ja", + "CANCEL_LABEL": "Nej" }, "ATTACHMENT": { - "UPLOAD_ERROR": "Could not upload attachment, Please try again", - "LABEL_IDLE": "Upload Attachment", + "UPLOAD_ERROR": "Kunne ikke uploade vedhæftning, Prøv venligst igen", + "LABEL_IDLE": "Upload Vedhæftning", "LABEL_UPLOADING": "Uploader...", - "LABEL_UPLOADED": "Succesfully Uploaded", - "LABEL_UPLOAD_FAILED": "Upload Failed" + "LABEL_UPLOADED": "Succesfuldt Uploadet", + "LABEL_UPLOAD_FAILED": "Upload Mislykkedes" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/bulkActions.json b/app/javascript/dashboard/i18n/locale/da/bulkActions.json index 7061e5e70..e3f58f562 100644 --- a/app/javascript/dashboard/i18n/locale/da/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/da/bulkActions.json @@ -1,29 +1,29 @@ { "BULK_ACTION": { - "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select Agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", - "ASSIGN_AGENT_TOOLTIP": "Assign Agent", - "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", + "CONVERSATIONS_SELECTED": "%{conversationCount} samtaler valgt", + "AGENT_SELECT_LABEL": "Vælg Agent", + "ASSIGN_CONFIRMATION_LABEL": "Er du sikker på, at du vil tildele %{conversationCount} %{conversationLabel} til", + "GO_BACK_LABEL": "Gå tilbage", + "ASSIGN_LABEL": "Tildel", + "ASSIGN_AGENT_TOOLTIP": "Tildel Agent", + "ASSIGN_SUCCESFUL": "Samtaler tildelt", + "ASSIGN_FAILED": "Mislykkedes at tildele samtaler, prøv igen", + "RESOLVE_SUCCESFUL": "Samtaler løst med succes", + "RESOLVE_FAILED": "Mislykkedes at løse samtaler, prøv igen", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Samtaler synlig på denne side er kun valgt.", + "AGENT_LIST_LOADING": "Indlæser Agenter", "UPDATE": { - "CHANGE_STATUS": "Change status", - "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", - "UPDATE_SUCCESFUL": "Conversation status updated successfully.", - "UPDATE_FAILED": "Failed to update conversations, please try again" + "CHANGE_STATUS": "Skift status", + "SNOOZE_UNTIL_NEXT_REPLY": "Udsæt til næste svar", + "UPDATE_SUCCESFUL": "Samtalens status blev opdateret.", + "UPDATE_FAILED": "Mislykkedes at opdatere samtaler, prøv igen" }, "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_LABELS": "Tildel Etiketter", + "NO_LABELS_FOUND": "Ingen etiketter fundet for", + "ASSIGN_SELECTED_LABELS": "Tildel valgte etiketter", + "ASSIGN_SUCCESFUL": "Etiketter tildelt med succes", + "ASSIGN_FAILED": "Kunne ikke tildele etiketter. Prøv igen" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/campaign.json b/app/javascript/dashboard/i18n/locale/da/campaign.json index 3854fb526..d23f592e6 100644 --- a/app/javascript/dashboard/i18n/locale/da/campaign.json +++ b/app/javascript/dashboard/i18n/locale/da/campaign.json @@ -1,65 +1,65 @@ { "CAMPAIGN": { - "HEADER": "Campaigns", - "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.", + "HEADER": "Kampagner", + "SIDEBAR_TXT": "Proaktive beskeder giver kunden mulighed for at sende udgående beskeder til deres kontakter, hvilket ville udløse flere samtaler. Klik på Tilføj kampagne for at oprette en ny kampagne. Du kan også redigere eller slette en eksisterende kampagne ved at klikke på Rediger eller Slet knappen.", "HEADER_BTN_TXT": { - "ONE_OFF": "Create a one off campaign", - "ONGOING": "Create a ongoing campaign" + "ONE_OFF": "Opret en kampagne fra", + "ONGOING": "Opret en igangværende kampagne" }, "ADD": { - "TITLE": "Create a campaign", - "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", + "TITLE": "Opret en kampagne", + "DESC": "Proaktive beskeder giver kunden mulighed for at sende udgående beskeder til deres kontakter, hvilket ville udløse flere samtaler.", "CANCEL_BUTTON_TEXT": "Annuller", "CREATE_BUTTON_TEXT": "Opret", "FORM": { "TITLE": { - "LABEL": "Title", - "PLACEHOLDER": "Please enter the title of campaign", - "ERROR": "Title is required" + "LABEL": "Titel", + "PLACEHOLDER": "Indtast titlen på kampagnen", + "ERROR": "Titel er påkrævet" }, "SCHEDULED_AT": { - "LABEL": "Scheduled time", - "PLACEHOLDER": "Please select the time", - "CONFIRM": "Confirm", - "ERROR": "Scheduled time is required" + "LABEL": "Planlagt tid", + "PLACEHOLDER": "Vælg venligst tid", + "CONFIRM": "Bekræft", + "ERROR": "Planlagt tid er påkrævet" }, "AUDIENCE": { - "LABEL": "Audience", - "PLACEHOLDER": "Select the customer labels", - "ERROR": "Audience is required" + "LABEL": "Målgruppe", + "PLACEHOLDER": "Vælg kunde etiketter", + "ERROR": "Målgruppe er påkrævet" }, "INBOX": { - "LABEL": "Select Inbox", - "PLACEHOLDER": "Select Inbox", - "ERROR": "Inbox is required" + "LABEL": "Vælg Indbakke", + "PLACEHOLDER": "Vælg Indbakke", + "ERROR": "Indbakke er påkrævet" }, "MESSAGE": { "LABEL": "Besked", - "PLACEHOLDER": "Please enter the message of campaign", - "ERROR": "Message is required" + "PLACEHOLDER": "Indtast venligst meddelelsen af kampagnen", + "ERROR": "Beskeden er påkrævet" }, "SENT_BY": { - "LABEL": "Sent by", - "PLACEHOLDER": "Please select the the content of campaign", - "ERROR": "Sender is required" + "LABEL": "Sendt af", + "PLACEHOLDER": "Vælg venligst indholdet af kampagnen", + "ERROR": "Afsenderen er påkrævet" }, "END_POINT": { "LABEL": "URL", - "PLACEHOLDER": "Please enter the URL", + "PLACEHOLDER": "Indtast venligst URL", "ERROR": "Angiv en gyldig URL" }, "TIME_ON_PAGE": { - "LABEL": "Time on page(Seconds)", - "PLACEHOLDER": "Please enter the time", - "ERROR": "Time on page is required" + "LABEL": "Tid på side (sekunder)", + "PLACEHOLDER": "Indtast venligst tid", + "ERROR": "Tid på siden er påkrævet" }, - "ENABLED": "Enable campaign", - "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours", - "SUBMIT": "Add Campaign" + "ENABLED": "Aktiver kampagne", + "TRIGGER_ONLY_BUSINESS_HOURS": "Udløs kun i åbningstiden", + "SUBMIT": "Tilføj Kampagne" }, "API": { - "SUCCESS_MESSAGE": "Campaign created successfully", - "ERROR_MESSAGE": "There was an error. Please try again." + "SUCCESS_MESSAGE": "Kampagne oprettet", + "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen." } }, "DELETE": { @@ -71,56 +71,56 @@ "NO": "Nej, Behold " }, "API": { - "SUCCESS_MESSAGE": "Campaign deleted successfully", - "ERROR_MESSAGE": "Could not delete the campaign. Please try again later." + "SUCCESS_MESSAGE": "Kampagne slettet", + "ERROR_MESSAGE": "Kunne ikke slette kampagnen. Prøv igen senere." } }, "EDIT": { - "TITLE": "Edit campaign", + "TITLE": "Rediger kampagne", "UPDATE_BUTTON_TEXT": "Opdater", "API": { - "SUCCESS_MESSAGE": "Campaign updated successfully", + "SUCCESS_MESSAGE": "Kampagne opdateret", "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen" } }, "LIST": { - "LOADING_MESSAGE": "Loading campaigns...", - "404": "There are no campaigns created for this inbox.", + "LOADING_MESSAGE": "Indlæser kampagner...", + "404": "Der er ingen kampagner oprettet for denne indbakke.", "TABLE_HEADER": { - "TITLE": "Title", + "TITLE": "Titel", "MESSAGE": "Besked", - "INBOX": "Inbox", + "INBOX": "Indbakke", "STATUS": "Status", - "SENDER": "Sender", + "SENDER": "Afsender", "URL": "URL", - "SCHEDULED_AT": "Scheduled time", - "TIME_ON_PAGE": "Time(Seconds)", - "CREATED_AT": "Created at" + "SCHEDULED_AT": "Planlagt tid", + "TIME_ON_PAGE": "Tid(sekunder)", + "CREATED_AT": "Oprettet den" }, "BUTTONS": { - "ADD": "Add", + "ADD": "Tilføj", "EDIT": "Rediger", "DELETE": "Slet" }, "STATUS": { "ENABLED": "Aktiveret", "DISABLED": "Deaktiveret", - "COMPLETED": "Completed", - "ACTIVE": "Active" + "COMPLETED": "Afsluttet", + "ACTIVE": "Aktiv" }, "SENDER": { "BOT": "Bot" } }, "ONE_OFF": { - "HEADER": "One off campaigns", - "404": "There are no one off campaigns created", - "INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns" + "HEADER": "Kampagner", + "404": "Der er ingen slukkede kampagner oprettet", + "INBOXES_NOT_FOUND": "Opret venligst en sms-indbakke og begynd at tilføje kampagner" }, "ONGOING": { - "HEADER": "Ongoing campaigns", - "404": "There are no ongoing campaigns created", - "INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns" + "HEADER": "Igangværende kampagner", + "404": "Der er ingen igangværende kampagner oprettet", + "INBOXES_NOT_FOUND": "Opret venligst en hjemmeside indbakke og begynd at tilføje kampagner" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/da/cannedMgmt.json index 8fb42bf2a..cd3a920a1 100644 --- a/app/javascript/dashboard/i18n/locale/da/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/cannedMgmt.json @@ -4,7 +4,7 @@ "HEADER_BTN_TXT": "Tilføj Standardsvar", "LOADING": "Henter Standardsvar", "SEARCH_404": "Der er ingen elementer, der matcher denne forespørgsel", - "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.

", + "SIDEBAR_TXT": "

Standardsvar

Standardsvar er gemte svarskabeloner, som kan bruges til hurtigt at sende et svar på en samtale.

For at oprette et standardsvar, klik blot på Tilføj standardsvar. Du kan også redigere eller slette et eksisterende standardsvar ved at klikke på Rediger eller Slet knappen

Standardsvar bruges ved hjælp af Short Codes. Agenter kan tilgå standardsvar på en chat ved at skrive '/' efterfulgt af din short code

", "LIST": { "404": "Der er ingen tilgængelige standardsvar på denne konto.", "TITLE": "Administrer standardsvar", @@ -17,12 +17,12 @@ }, "ADD": { "TITLE": "Tilføj Standardsvar", - "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", + "DESC": "Standardsvar er gemte svarskabeloner, som kan bruges til hurtigt at sende svar til samtalen.", "CANCEL_BUTTON_TEXT": "Annuller", "FORM": { "SHORT_CODE": { "LABEL": "Short Code", - "PLACEHOLDER": "Please enter a short code", + "PLACEHOLDER": "Indtast venligst en shortcode", "ERROR": "Short Code er påkrævet" }, "CONTENT": { diff --git a/app/javascript/dashboard/i18n/locale/da/chatlist.json b/app/javascript/dashboard/i18n/locale/da/chatlist.json index 9b6da159b..ccb516f7b 100644 --- a/app/javascript/dashboard/i18n/locale/da/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/da/chatlist.json @@ -7,7 +7,7 @@ "404": "Der er ingen aktive samtaler i denne gruppe." }, "TAB_HEADING": "Samtaler", - "MENTION_HEADING": "Mentions", + "MENTION_HEADING": "Omtaler", "SEARCH": { "INPUT": "Søg efter Mennesker, Chats, Gemte svar .." }, @@ -25,10 +25,10 @@ "TEXT": "Løst" }, "pending": { - "TEXT": "Pending" + "TEXT": "Afventer" }, "snoozed": { - "TEXT": "Snoozed" + "TEXT": "Udsat" } }, "ATTACHMENTS": { @@ -54,12 +54,12 @@ "RECEIVED_VIA_EMAIL": "Modtaget via e-mail", "VIEW_TWEET_IN_TWITTER": "Se tweet på Twitter", "REPLY_TO_TWEET": "Svar på dette tweet", - "LINK_TO_STORY": "Go to instagram story", - "SENT": "Sent successfully", - "NO_MESSAGES": "No Messages", - "NO_CONTENT": "No content available", - "HIDE_QUOTED_TEXT": "Hide Quoted Text", - "SHOW_QUOTED_TEXT": "Show Quoted Text", - "MESSAGE_READ": "Read" + "LINK_TO_STORY": "Gå til instagram historie", + "SENT": "Sendt med succes", + "NO_MESSAGES": "Ingen Beskeder", + "NO_CONTENT": "Intet tilgængeligt indhold", + "HIDE_QUOTED_TEXT": "Skjul Citeret Tekst", + "SHOW_QUOTED_TEXT": "Vis Citeret Tekst", + "MESSAGE_READ": "Læst" } } diff --git a/app/javascript/dashboard/i18n/locale/da/contact.json b/app/javascript/dashboard/i18n/locale/da/contact.json index e5722fc28..b67948e9f 100644 --- a/app/javascript/dashboard/i18n/locale/da/contact.json +++ b/app/javascript/dashboard/i18n/locale/da/contact.json @@ -3,39 +3,40 @@ "NOT_AVAILABLE": "Ikke Tilgængelig", "EMAIL_ADDRESS": "E-Mail Adresse", "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes", "COMPANY": "Virksomhed", "LOCATION": "Lokation", - "BROWSER_LANGUAGE": "Browser Language", + "BROWSER_LANGUAGE": "Browser Sprog", "CONVERSATION_TITLE": "Samtaledetaljer", - "VIEW_PROFILE": "View Profile", + "VIEW_PROFILE": "Vis Profil", "BROWSER": "Browser", "OS": "Operativsystem", "INITIATED_FROM": "Startet fra", "INITIATED_AT": "Startet fra", - "IP_ADDRESS": "IP Address", - "NEW_MESSAGE": "New message", + "IP_ADDRESS": "Ip Adresse", + "NEW_MESSAGE": "Ny besked", "CONVERSATIONS": { "NO_RECORDS_FOUND": "Der er ingen tidligere samtaler tilknyttet denne kontakt.", "TITLE": "Tidligere Samtaler" }, "LABELS": { "CONTACT": { - "TITLE": "Contact Labels", - "ERROR": "Couldn't update labels" + "TITLE": "Kontakt Labels", + "ERROR": "Kunne ikke opdatere etiketter" }, "CONVERSATION": { "TITLE": "Samtale Etiketter", - "ADD_BUTTON": "Add Labels" + "ADD_BUTTON": "Tilføj Labels" }, "LABEL_SELECT": { - "TITLE": "Add Labels", - "PLACEHOLDER": "Search labels", - "NO_RESULT": "No labels found" + "TITLE": "Tilføj Labels", + "PLACEHOLDER": "Søg efter labels", + "NO_RESULT": "Ingen labels fundet" } }, - "MERGE_CONTACT": "Merge contact", - "CONTACT_ACTIONS": "Contact actions", + "MERGE_CONTACT": "Sammenflet kontakt", + "CONTACT_ACTIONS": "Kontakt handlinger", "MUTE_CONTACT": "Gør Samtale Lydløs", "UNMUTE_CONTACT": "Fjern Lydløs", "MUTED_SUCCESS": "Denne samtale er gjort tavs i 6 timer", @@ -44,7 +45,7 @@ "EDIT_LABEL": "Rediger", "SIDEBAR_SECTIONS": { "CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber", - "CONTACT_LABELS": "Contact Labels", + "CONTACT_LABELS": "Kontakt Labels", "PREVIOUS_CONVERSATIONS": "Tidligere Samtaler" } }, @@ -54,35 +55,35 @@ "DESC": "Rediger kontaktoplysninger" }, "CREATE_CONTACT": { - "BUTTON_LABEL": "New Contact", - "TITLE": "Create new contact", - "DESC": "Add basic information details about the contact." + "BUTTON_LABEL": "Ny Kontakt", + "TITLE": "Opret ny kontakt", + "DESC": "Tilføj grundlæggende oplysninger om kontakten." }, "IMPORT_CONTACTS": { - "BUTTON_LABEL": "Import", - "TITLE": "Import Contacts", - "DESC": "Import contacts through a CSV file.", - "DOWNLOAD_LABEL": "Download a sample csv.", + "BUTTON_LABEL": "Importér", + "TITLE": "Importér Kontakter", + "DESC": "Importér kontakter via en CSV-fil.", + "DOWNLOAD_LABEL": "Download en prøve csv.", "FORM": { - "LABEL": "CSV File", - "SUBMIT": "Import", + "LABEL": "CSV Fil", + "SUBMIT": "Importer", "CANCEL": "Annuller" }, - "SUCCESS_MESSAGE": "Contacts saved successfully", + "SUCCESS_MESSAGE": "Kontakter gemt", "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen" }, "DELETE_NOTE": { "CONFIRM": { "TITLE": "Bekræft Sletning", - "MESSAGE": "Are you want sure to delete this note?", - "YES": "Yes, Delete it", + "MESSAGE": "Er du sikker på at slette denne note?", + "YES": "Ja, Slet", "NO": "Nej, behold det" } }, "DELETE_CONTACT": { - "BUTTON_LABEL": "Delete Contact", - "TITLE": "Delete contact", - "DESC": "Delete contact details", + "BUTTON_LABEL": "Slet Kontakt", + "TITLE": "Slet kontakt", + "DESC": "Slet kontaktoplysninger", "CONFIRM": { "TITLE": "Bekræft Sletning", "MESSAGE": "Er du sikker på du vil slette ", @@ -90,8 +91,8 @@ "NO": "Nej, Behold" }, "API": { - "SUCCESS_MESSAGE": "Contact deleted successfully", - "ERROR_MESSAGE": "Could not delete contact. Please try again later." + "SUCCESS_MESSAGE": "Kontakten blev slettet", + "ERROR_MESSAGE": "Kunne ikke slette kontakten. Prøv igen senere." } }, "CONTACT_FORM": { @@ -118,9 +119,9 @@ "PHONE_NUMBER": { "PLACEHOLDER": "Indtast telefonnummeret på kontaktpersonen", "LABEL": "Telefonnummer", - "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", - "ERROR": "Phone number should be either empty or of E.164 format", - "DUPLICATE": "This phone number is in use for another contact." + "HELP": "Telefonnummer skal være af E.164 format fx: +1415555555 [+] [landekode] [områdekode] [lokalt telefonnummer]", + "ERROR": "Telefonnummer skal være enten tomt eller i E.164-format", + "DUPLICATE": "Dette telefonnummer er i brug for en anden kontakt." }, "LOCATION": { "PLACEHOLDER": "Angiv placeringen af kontaktpersonen", @@ -151,30 +152,30 @@ }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", - "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + "SUCCESS_MESSAGE": "Kontakt avatar slettet", + "ERROR_MESSAGE": "Kunne ikke slette kontakten avatar. Prøv igen senere." } }, - "SUCCESS_MESSAGE": "Contact saved successfully", + "SUCCESS_MESSAGE": "Kontakt gemt med succes", "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen" }, "NEW_CONVERSATION": { - "BUTTON_LABEL": "Start conversation", - "TITLE": "New conversation", + "BUTTON_LABEL": "Start samtale", + "TITLE": "Ny samtale", "DESC": "Start en samtale ved at sende en besked.", - "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "NO_INBOX": "Kunne ikke finde en indbakke til at starte en ny samtale med denne kontakt.", "FORM": { "TO": { - "LABEL": "To" + "LABEL": "Til" }, "INBOX": { - "LABEL": "Inbox", - "ERROR": "Select an inbox" + "LABEL": "Indbakke", + "ERROR": "Vælg en indbakke" }, "SUBJECT": { - "LABEL": "Subject", - "PLACEHOLDER": "Subject", - "ERROR": "Subject can't be empty" + "LABEL": "Emne", + "PLACEHOLDER": "Emne", + "ERROR": "Emne må ikke være tomt" }, "MESSAGE": { "LABEL": "Besked", @@ -190,157 +191,157 @@ }, "CONTACTS_PAGE": { "HEADER": "Kontakter", - "FIELDS": "Contact fields", + "FIELDS": "Kontakt felter", "SEARCH_BUTTON": "Søg", "SEARCH_INPUT_PLACEHOLDER": "Søg efter kontakter", - "FILTER_CONTACTS": "Filter", - "FILTER_CONTACTS_SAVE": "Save filter", - "FILTER_CONTACTS_DELETE": "Delete filter", + "FILTER_CONTACTS": "Filtrer", + "FILTER_CONTACTS_SAVE": "Gem filter", + "FILTER_CONTACTS_DELETE": "Slet filter", "LIST": { "LOADING_MESSAGE": "Indlæser kontakter...", "404": "Ingen kontakter matcher din søgning 🔍", - "NO_CONTACTS": "There are no available contacts", + "NO_CONTACTS": "Der er ingen tilgængelige kontakter", "TABLE_HEADER": { "NAME": "Navn", "PHONE_NUMBER": "Telefonnummer", "CONVERSATIONS": "Samtaler", - "LAST_ACTIVITY": "Last Activity", - "COUNTRY": "Country", - "CITY": "City", + "LAST_ACTIVITY": "Sidste Aktivitet", + "COUNTRY": "Land", + "CITY": "By", "SOCIAL_PROFILES": "Social Profiles", "COMPANY": "Virksomhed", "EMAIL_ADDRESS": "E-Mail Adresse" }, - "VIEW_DETAILS": "View details" + "VIEW_DETAILS": "Se detaljer" } }, "CONTACT_PROFILE": { "BACK_BUTTON": "Kontakter", - "LOADING": "Loading contact profile..." + "LOADING": "Indlæser kontaktprofil..." }, "REMINDER": { "ADD_BUTTON": { - "BUTTON": "Add", - "TITLE": "Shift + Enter to create a task" + "BUTTON": "Tilføj", + "TITLE": "Shift + Enter for at oprette en opgave" }, "FOOTER": { - "DUE_DATE": "Due date", - "LABEL_TITLE": "Set type" + "DUE_DATE": "Forfaldsdato", + "LABEL_TITLE": "Angiv type" } }, "NOTES": { - "FETCHING_NOTES": "Fetching notes...", - "NOT_AVAILABLE": "There are no notes created for this contact", + "FETCHING_NOTES": "Henter noter...", + "NOT_AVAILABLE": "Der er ingen noter oprettet til denne kontakt", "HEADER": { - "TITLE": "Notes" + "TITLE": "Noter" }, "LIST": { - "LABEL": "added a note" + "LABEL": "tilføjede en note" }, "ADD": { - "BUTTON": "Add", - "PLACEHOLDER": "Add a note", - "TITLE": "Shift + Enter to create a note" + "BUTTON": "Tilføj", + "PLACEHOLDER": "Tilføj en note", + "TITLE": "Skift + Enter for at oprette en note" }, "CONTENT_HEADER": { - "DELETE": "Delete note" + "DELETE": "Slet note" } }, "EVENTS": { "HEADER": { - "TITLE": "Activities" + "TITLE": "Aktiviteter" }, "BUTTON": { - "PILL_BUTTON_NOTES": "notes", - "PILL_BUTTON_EVENTS": "events", + "PILL_BUTTON_NOTES": "noter", + "PILL_BUTTON_EVENTS": "begivenheder", "PILL_BUTTON_CONVO": "samtaler" } }, "CUSTOM_ATTRIBUTES": { - "ADD_BUTTON_TEXT": "Add attributes", - "BUTTON": "Add custom attribute", - "NOT_AVAILABLE": "There are no custom attributes available for this contact.", + "ADD_BUTTON_TEXT": "Tilføj attributter", + "BUTTON": "Tilføj brugerdefineret attribut", + "NOT_AVAILABLE": "Der er ingen brugerdefinerede attributter tilgængelige for denne kontakt.", "COPY_SUCCESSFUL": "Kopiering til udklipsholder lykkedes", "ACTIONS": { - "COPY": "Copy attribute", - "DELETE": "Delete attribute", - "EDIT": "Edit attribute" + "COPY": "Kopier attribut", + "DELETE": "Slet egenskab", + "EDIT": "Rediger attribut" }, "ADD": { - "TITLE": "Create custom attribute", - "DESC": "Add custom information to this contact." + "TITLE": "Opret brugerdefineret attribut", + "DESC": "Tilføj brugerdefineret information til denne kontakt." }, "FORM": { - "CREATE": "Add attribute", + "CREATE": "Tilføj attribut", "CANCEL": "Annuller", "NAME": { - "LABEL": "Custom attribute name", - "PLACEHOLDER": "Eg: shopify id", - "ERROR": "Invalid custom attribute name" + "LABEL": "Brugerdefineret attributnavn", + "PLACEHOLDER": "F. eks.: shopify id", + "ERROR": "Ugyldigt brugerdefineret attributnavn" }, "VALUE": { - "LABEL": "Attribute value", + "LABEL": "Egenskab værdi", "PLACEHOLDER": "Eg: 11901 " }, "ADD": { - "TITLE": "Create new attribute ", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "TITLE": "Opret ny egenskab ", + "SUCCESS": "Egenskab tilføjet", + "ERROR": "Kan ikke tilføje attribut. Prøv igen senere" }, "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Attributten er opdateret", + "ERROR": "Kan ikke opdatere attributten. Prøv igen senere" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Attributten blev slettet", + "ERROR": "Kan ikke slette attributten. Prøv igen senere" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Tilføj attributter", + "PLACEHOLDER": "Søg attributter", + "NO_RESULT": "Ingen attributter fundet" }, "ATTRIBUTE_TYPE": { "LIST": { - "PLACEHOLDER": "Select value", - "SEARCH_INPUT_PLACEHOLDER": "Search value", - "NO_RESULT": "No result found" + "PLACEHOLDER": "Vælg værdi", + "SEARCH_INPUT_PLACEHOLDER": "Søg værdi", + "NO_RESULT": "Ingen resultater fundet" } } }, "VALIDATIONS": { - "REQUIRED": "Valid value is required", - "INVALID_URL": "Invalid URL" + "REQUIRED": "Gyldig værdi er påkrævet", + "INVALID_URL": "Ugyldig URL" } }, "MERGE_CONTACTS": { - "TITLE": "Merge contacts", - "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "TITLE": "Sammenflet kontakter", + "DESCRIPTION": "Sammenflet kontakter for at kombinere to profiler til én, herunder alle attributter og samtaler. I tilfælde af konflikter vil den primære kontakts attributter have forrang.", "PRIMARY": { - "TITLE": "Primary contact", - "HELP_LABEL": "To be kept" + "TITLE": "Primær kontakt", + "HELP_LABEL": "Skal opbevares" }, "CHILD": { - "TITLE": "Contact to merge", - "PLACEHOLDER": "Search for a contact", - "HELP_LABEL": "To be deleted" + "TITLE": "Kontakt for sammenfletning", + "PLACEHOLDER": "Søg efter en kontakt", + "HELP_LABEL": "Skal slettes" }, "SUMMARY": { - "TITLE": "Summary", - "DELETE_WARNING": "Contact of %{childContactName} will be deleted.", - "ATTRIBUTE_WARNING": "Contact details of %{childContactName} will be copied to %{primaryContactName}." + "TITLE": "Oversigt", + "DELETE_WARNING": "Kontakt af %{childContactName} vil blive slettet.", + "ATTRIBUTE_WARNING": "Kontaktoplysninger på %{childContactName} vil blive kopieret til %{primaryContactName}." }, "SEARCH": { - "ERROR": "ERROR_MESSAGE" + "ERROR": "FEJL_MEDDELELSE" }, "FORM": { - "SUBMIT": " Merge contacts", + "SUBMIT": " Sammenflet kontakter", "CANCEL": "Annuller", "CHILD_CONTACT": { - "ERROR": "Select a child contact to merge" + "ERROR": "Vælg en underordnet kontakt at flette" }, - "SUCCESS_MESSAGE": "Contact merged successfully", - "ERROR_MESSAGE": "Could not merge contacts, try again!" + "SUCCESS_MESSAGE": "Kontakt flettet med succes", + "ERROR_MESSAGE": "Kunne ikke sammenflette kontakter, prøv igen!" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/contactFilters.json b/app/javascript/dashboard/i18n/locale/da/contactFilters.json index f9362ece1..1308856cb 100644 --- a/app/javascript/dashboard/i18n/locale/da/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/da/contactFilters.json @@ -1,49 +1,49 @@ { "CONTACTS_FILTER": { - "TITLE": "Filter Contacts", - "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", - "ADD_NEW_FILTER": "Add Filter", - "CLEAR_ALL_FILTERS": "Clear All Filters", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "TITLE": "Filtrer Kontakter", + "SUBTITLE": "Tilføj filtre nedenfor og tryk på 'Send' for at filtrere kontakter.", + "ADD_NEW_FILTER": "Tilføj Filter", + "CLEAR_ALL_FILTERS": "Ryd Alle Filtre", + "FILTER_DELETE_ERROR": "Du skal have mindst et filter at gemme", "SUBMIT_BUTTON_LABEL": "Send", "CANCEL_BUTTON_LABEL": "Annuller", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter contacts", + "CLEAR_BUTTON_LABEL": "Ryd Filtre", + "EMPTY_VALUE_ERROR": "Værdi er påkrævet", + "TOOLTIP_LABEL": "Filtrer kontaktpersoner", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "OG", + "OR": "ELLER" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_lesser_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Lig med", + "not_equal_to": "Ikke lig med", + "contains": "Indeholder", + "does_not_contain": "Indeholder ikke", + "is_present": "Er til stede", + "is_not_present": "Er ikke til stede", + "is_greater_than": "Er større end", + "is_lesser_than": "Er mindre end", + "days_before": "Er x dage før" }, "ATTRIBUTES": { "NAME": "Navn", "EMAIL": "E-mail", "PHONE_NUMBER": "Telefonnummer", "IDENTIFIER": "Identifier", - "CITY": "City", - "COUNTRY": "Country", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CITY": "By", + "COUNTRY": "Land", + "CUSTOM_ATTRIBUTE_LIST": "Liste", + "CUSTOM_ATTRIBUTE_TEXT": "Tekst", + "CUSTOM_ATTRIBUTE_NUMBER": "Nummer", "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", - "LAST_ACTIVITY": "Last Activity", - "REFERER_LINK": "Referrer link" + "CUSTOM_ATTRIBUTE_CHECKBOX": "Afkrydsningsfelt", + "CREATED_AT": "Oprettet Den", + "LAST_ACTIVITY": "Sidste Aktivitet", + "REFERER_LINK": "Link til reference" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", + "STANDARD_FILTERS": "Standard Filtre", + "ADDITIONAL_FILTERS": "Yderligere Filtre", "CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber" } } diff --git a/app/javascript/dashboard/i18n/locale/da/conversation.json b/app/javascript/dashboard/i18n/locale/da/conversation.json index 97e3bb3f1..b04d6c501 100644 --- a/app/javascript/dashboard/i18n/locale/da/conversation.json +++ b/app/javascript/dashboard/i18n/locale/da/conversation.json @@ -1,10 +1,11 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Vælg venligst en samtale fra venstre rude", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", - "DASHBOARD_APP_TAB_MESSAGES": "Messages", - "UNVERIFIED_SESSION": "The identity of this user is not verified", + "CSAT_REPLY_MESSAGE": "Bedøm venligst samtalen", + "404": "Beklager, vi kan ikke finde samtalen. Prøv igen", + "SWITCH_VIEW_LAYOUT": "Skift layout", + "DASHBOARD_APP_TAB_MESSAGES": "Beskeder", + "UNVERIFIED_SESSION": "Identiteten af denne bruger er ikke bekræftet", "NO_MESSAGE_1": "Åh oh! Det ser ud til, at der ikke er nogen beskeder fra kunder i din indbakke.", "NO_MESSAGE_2": " for at sende en besked til din side!", "NO_INBOX_1": "Hola! Det ser ud til, at du endnu ikke har tilføjet indbakker.", @@ -13,33 +14,33 @@ "SEARCH_MESSAGES": "Søg efter beskeder i samtaler", "SEARCH": { "TITLE": "Søg efter beskeder", - "RESULT_TITLE": "Search Results", + "RESULT_TITLE": "Søgeresultater", "LOADING_MESSAGE": "Behandler data...", "PLACEHOLDER": "Skriv tekst for at søge i beskeder", - "NO_MATCHING_RESULTS": "No results found." + "NO_MATCHING_RESULTS": "Ingen resultater fundet." }, - "UNREAD_MESSAGES": "Unread Messages", - "UNREAD_MESSAGE": "Unread Message", + "UNREAD_MESSAGES": "Ulæste Beskeder", + "UNREAD_MESSAGE": "Ulæst Besked", "CLICK_HERE": "Klik her", "LOADING_INBOXES": "Indlæser indbakker", "LOADING_CONVERSATIONS": "Indlæser Samtaler", "CANNOT_REPLY": "Du kan ikke svare på grund af", "24_HOURS_WINDOW": "24 timers beskedvindue begrænsning", - "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", - "ASSIGN_TO_ME": "Assign to me", - "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "NOT_ASSIGNED_TO_YOU": "Denne samtale er ikke tildelt dig. Vil du tildele denne samtale til dig selv?", + "ASSIGN_TO_ME": "Tildel til mig", + "TWILIO_WHATSAPP_CAN_REPLY": "Du kan kun svare på denne samtale ved hjælp af en skabelon besked på grund af", "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 timers beskedvindue begrænsning", - "SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.", + "SELECT_A_TWEET_TO_REPLY": "Vælg venligst et tweet at svare på.", "REPLYING_TO": "Du svarer til:", "REMOVE_SELECTION": "Fjern Markering", "DOWNLOAD": "Download", - "UNKNOWN_FILE_TYPE": "Unknown File", - "UPLOADING_ATTACHMENTS": "Uploading attachments...", - "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", - "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", - "NO_RESPONSE": "No response", - "RATING_TITLE": "Rating", - "FEEDBACK_TITLE": "Feedback", + "UNKNOWN_FILE_TYPE": "Ukendt Fil", + "UPLOADING_ATTACHMENTS": "Uploader vedhæftede filer...", + "SUCCESS_DELETE_MESSAGE": "Besked slettet", + "FAIL_DELETE_MESSSAGE": "Kunne ikke slette beskeden! Prøv igen", + "NO_RESPONSE": "Intet svar", + "RATING_TITLE": "Bedømmelse", + "FEEDBACK_TITLE": "Tilbagemelding", "HEADER": { "RESOLVE_ACTION": "Løs", "REOPEN_ACTION": "Genåben", @@ -47,56 +48,56 @@ "OPEN": "Mere", "CLOSE": "Luk", "DETAILS": "detaljer", - "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", - "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", - "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply" + "SNOOZED_UNTIL_TOMORROW": "Udsat til i morgen", + "SNOOZED_UNTIL_NEXT_WEEK": "Udsat indtil næste uge", + "SNOOZED_UNTIL_NEXT_REPLY": "Udsat indtil næste svar" }, "RESOLVE_DROPDOWN": { - "MARK_PENDING": "Mark as pending", + "MARK_PENDING": "Markér som afventende", "SNOOZE": { - "TITLE": "Snooze until", - "NEXT_REPLY": "Next reply", - "TOMORROW": "Tomorrow", - "NEXT_WEEK": "Next week" + "TITLE": "Udsæt til", + "NEXT_REPLY": "Næste svar", + "TOMORROW": "I Morgen", + "NEXT_WEEK": "Næste uge" } }, "CARD_CONTEXT_MENU": { - "PENDING": "Mark as pending", - "RESOLVED": "Mark as resolved", - "REOPEN": "Reopen conversation", + "PENDING": "Markér som afventende", + "RESOLVED": "Marker som løst", + "REOPEN": "Genåbn samtale", "SNOOZE": { - "TITLE": "Snooze", - "NEXT_REPLY": "Until next reply", - "TOMORROW": "Until tomorrow", - "NEXT_WEEK": "Until next week" + "TITLE": "Udsæt", + "NEXT_REPLY": "Indtil næste svar", + "TOMORROW": "Indtil i morgen", + "NEXT_WEEK": "Indtil næste uge" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Tildel agent", + "ASSIGN_LABEL": "Tildel etiket", + "AGENTS_LOADING": "Indlæser agenter...", + "ASSIGN_TEAM": "Tildel team", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "Samtale id %{conversationId} tildelt \"%{agentName}\"", + "FAILED": "Kunne ikke tildele agent. Prøv venligst igen." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Tildelt etiket #%{labelName} til samtale-id %{conversationId}", + "FAILED": "Kunne ikke tildele etiket. Prøv venligst igen." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Tildelt team \"%{team}\" til samtale-id %{conversationId}", + "FAILED": "Kunne ikke tildele team. Prøv venligst igen." } } }, "FOOTER": { - "MESSAGE_SIGN_TOOLTIP": "Message signature", - "ENABLE_SIGN_TOOLTIP": "Enable signature", - "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MESSAGE_SIGN_TOOLTIP": "Besked signatur", + "ENABLE_SIGN_TOOLTIP": "Aktiver signatur", + "DISABLE_SIGN_TOOLTIP": "Deaktivér signatur", "MSG_INPUT": "Shift + enter for ny linje. Start med '/' for at vælge et standardsvar.", "PRIVATE_MSG_INPUT": "Shift + enter for ny linje. Dette vil kun være synligt for Agenter", - "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", - "CLICK_HERE": "Click here to update" + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Beskedsignatur er ikke konfigureret, konfigurer den i profilindstillinger.", + "CLICK_HERE": "Klik her for at opdatere" }, "REPLYBOX": { "REPLY": "Svar", @@ -104,49 +105,49 @@ "SEND": "Send", "CREATE": "Tilføj Note", "TWEET": "Tweet", - "TIP_FORMAT_ICON": "Show rich text editor", - "TIP_EMOJI_ICON": "Show emoji selector", - "TIP_ATTACH_ICON": "Attach files", - "TIP_AUDIORECORDER_ICON": "Record audio", - "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", - "TIP_AUDIORECORDER_ERROR": "Could not open the audio", - "ENTER_TO_SEND": "Enter to send", - "DRAG_DROP": "Drag and drop here to attach", - "START_AUDIO_RECORDING": "Start audio recording", - "STOP_AUDIO_RECORDING": "Stop audio recording", + "TIP_FORMAT_ICON": "Vis rig teksteditor", + "TIP_EMOJI_ICON": "Vis emoji-vælger", + "TIP_ATTACH_ICON": "Vedhæft filer", + "TIP_AUDIORECORDER_ICON": "Optag lyd", + "TIP_AUDIORECORDER_PERMISSION": "Tillad adgang til lyd", + "TIP_AUDIORECORDER_ERROR": "Kunne ikke åbne lyden", + "ENTER_TO_SEND": "Indtast for at sende", + "DRAG_DROP": "Træk og slip her for at vedhæfte", + "START_AUDIO_RECORDING": "Start lydoptagelse", + "STOP_AUDIO_RECORDING": "Stop lydoptagelse", "": "", "EMAIL_HEAD": { - "ADD_BCC": "Add bcc", + "ADD_BCC": "Tilføj bcc", "CC": { "LABEL": "CC", - "PLACEHOLDER": "Emails separated by commas", - "ERROR": "Please enter valid email addresses" + "PLACEHOLDER": "E-mails adskilt af kommaer", + "ERROR": "Indtast venligst gyldige e-mailadresser" }, "BCC": { "LABEL": "BCC", - "PLACEHOLDER": "Emails separated by commas", - "ERROR": "Please enter valid email addresses" + "PLACEHOLDER": "E-mails adskilt af kommaer", + "ERROR": "Indtast venligst gyldige e-mailadresser" } } }, "VISIBLE_TO_AGENTS": "Privat Note: Kun synlig for dig og dit team", "CHANGE_STATUS": "Samtalestatus ændret", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "Ændring af samtale status mislykkedes", "CHANGE_AGENT": "Samtaleansvarlig ændret", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", - "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", - "MESSAGE_ERROR": "Unable to send this message, please try again later", - "SENT_BY": "Sent by:", + "CHANGE_AGENT_FAILED": "Ændring af ansvarlig mislykkedes", + "ASSIGN_LABEL_SUCCESFUL": "Label tildelt", + "ASSIGN_LABEL_FAILED": "Tildeling af etiket mislykkedes", + "CHANGE_TEAM": "Samtaleholdet er ændret", + "FILE_SIZE_LIMIT": "Filen overskrider grænsen på {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} for vedhæftede filer", + "MESSAGE_ERROR": "Kunne ikke sende denne besked, prøv igen senere", + "SENT_BY": "Sendt af:", "BOT": "Bot", - "SEND_FAILED": "Couldn't send message! Try again", - "TRY_AGAIN": "retry", + "SEND_FAILED": "Kunne ikke sende besked! Prøv igen", + "TRY_AGAIN": "prøv igen", "ASSIGNMENT": { - "SELECT_AGENT": "Select Agent", + "SELECT_AGENT": "Vælg Agent", "REMOVE": "Fjern", - "ASSIGN": "Assign" + "ASSIGN": "Tildel" }, "CONTEXT_MENU": { "COPY": "Kopiér", @@ -171,71 +172,71 @@ } }, "ONBOARDING": { - "TITLE": "Hey 👋, Welcome to %{installationName}!", - "DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.", - "READ_LATEST_UPDATES": "Read our latest updates", + "TITLE": "Hej 👋, Velkommen til %{installationName}!", + "DESCRIPTION": "Tak for din tilmelding. Vi vil have dig til at få mest muligt ud af %{installationName}. Her er et par ting, du kan gøre i %{installationName} for at gøre oplevelsen dejlig.", + "READ_LATEST_UPDATES": "Læs vores seneste opdateringer", "ALL_CONVERSATION": { - "TITLE": "All your conversations in one place", - "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status." + "TITLE": "Alle dine samtaler på ét sted", + "DESCRIPTION": "Se alle samtaler fra dine kunder på et enkelt betjeningspanel. Du kan filtrere samtaler efter indgående kanal, etiket og status." }, "TEAM_MEMBERS": { - "TITLE": "Invite your team members", - "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", - "NEW_LINK": "Click here to invite a team member" + "TITLE": "Inviter dine teammedlemmer", + "DESCRIPTION": "Da du er ved at blive klar til at tale med din kunde, skal du medbringe dine holdkammerater for at hjælpe dig. Du kan invitere dine holdkammerater ved at tilføje deres e-mailadresser til agentlisten.", + "NEW_LINK": "Klik her for at invitere et teammedlem" }, "INBOXES": { - "TITLE": "Connect Inboxes", - "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.", - "NEW_LINK": "Click here to create an inbox" + "TITLE": "Forbind Indbakker", + "DESCRIPTION": "Tilslut forskellige kanaler, hvorigennem dine kunder ville tale med dig. Det kan være en hjemmeside live-chat, din Facebook eller Twitter side eller endda dit WhatsApp nummer.", + "NEW_LINK": "Klik her for at oprette en indbakke" }, "LABELS": { - "TITLE": "Organize conversations with labels", - "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", - "NEW_LINK": "Click here to create tags" + "TITLE": "Organiser samtaler med etiketter", + "DESCRIPTION": "Etiketter giver en lettere måde at kategorisere din samtale. Opret nogle etiketter som #support-forespørgsel, #billing-spørgsmål osv., så du kan bruge dem i en samtale senere.", + "NEW_LINK": "Klik her for at oprette tags" } }, "CONVERSATION_SIDEBAR": { - "ASSIGNEE_LABEL": "Assigned Agent", - "SELF_ASSIGN": "Assign to me", - "TEAM_LABEL": "Assigned Team", + "ASSIGNEE_LABEL": "Tildelt Agent", + "SELF_ASSIGN": "Tildel til mig", + "TEAM_LABEL": "Tildelt Team", "SELECT": { - "PLACEHOLDER": "None" + "PLACEHOLDER": "Ingen" }, "ACCORDION": { - "CONTACT_DETAILS": "Contact Details", - "CONVERSATION_ACTIONS": "Conversation Actions", + "CONTACT_DETAILS": "Kontaktoplysninger", + "CONVERSATION_ACTIONS": "Samtale Handlinger", "CONVERSATION_LABELS": "Samtale Etiketter", - "CONVERSATION_INFO": "Conversation Information", - "CONTACT_ATTRIBUTES": "Contact Attributes", + "CONVERSATION_INFO": "Samtale Information", + "CONTACT_ATTRIBUTES": "Kontakt Attributter", "PREVIOUS_CONVERSATION": "Tidligere Samtaler" } }, "CONVERSATION_CUSTOM_ATTRIBUTES": { - "ADD_BUTTON_TEXT": "Create attribute", + "ADD_BUTTON_TEXT": "Opret ny egenskab", "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Attributten er opdateret", + "ERROR": "Kan ikke opdatere attributten. Prøv igen senere" }, "ADD": { - "TITLE": "Add", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "TITLE": "Tilføj", + "SUCCESS": "Egenskab tilføjet", + "ERROR": "Kan ikke tilføje attribut. Prøv igen senere" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Attributten blev slettet", + "ERROR": "Kan ikke slette attributten. Prøv igen senere" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Tilføj attributter", + "PLACEHOLDER": "Søg attributter", + "NO_RESULT": "Ingen attributter fundet" } }, "EMAIL_HEADER": { - "FROM": "From", - "TO": "To", + "FROM": "Fra", + "TO": "Til", "BCC": "Bcc", "CC": "Cc", - "SUBJECT": "Subject" + "SUBJECT": "Emne" } } diff --git a/app/javascript/dashboard/i18n/locale/da/csatMgmt.json b/app/javascript/dashboard/i18n/locale/da/csatMgmt.json index d7d2efc2a..3868455cc 100644 --- a/app/javascript/dashboard/i18n/locale/da/csatMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/csatMgmt.json @@ -1,6 +1,6 @@ { "CSAT": { - "TITLE": "Rate your conversation", - "PLACEHOLDER": "Tell us more..." + "TITLE": "Bedøm din samtale", + "PLACEHOLDER": "Fortæl os mere..." } } diff --git a/app/javascript/dashboard/i18n/locale/da/generalSettings.json b/app/javascript/dashboard/i18n/locale/da/generalSettings.json index 6da4fa87d..f71a91bd3 100644 --- a/app/javascript/dashboard/i18n/locale/da/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/da/generalSettings.json @@ -14,8 +14,8 @@ "NOTE": "" }, "ACCOUNT_ID": { - "TITLE": "Account ID", - "NOTE": "This ID is required if you are building an API based integration" + "TITLE": "Konto SID", + "NOTE": "Dette ID er påkrævet, hvis du bygger en API-baseret integration" }, "NAME": { "LABEL": "Kontonavn", @@ -40,36 +40,36 @@ "AUTO_RESOLVE_DURATION": { "LABEL": "Antal dage efter en ticket skal løses automatisk, hvis der ikke er nogen aktivitet", "PLACEHOLDER": "30", - "ERROR": "Please enter a valid auto resolve duration (minimum 1 day and maximum 999 days)" + "ERROR": "Please enter a valid auto resolve duration (minimum 1 dag og maksimum 999 dage)" }, "FEATURES": { "INBOUND_EMAIL_ENABLED": "Samtale kontinuitet med e-mails er aktiveret for din konto.", "CUSTOM_EMAIL_DOMAIN_ENABLED": "Du kan modtage e-mails på dit brugerdefinerede domæne nu." } }, - "UPDATE_CHATWOOT": "An update %{latestChatwootVersion} for Chatwoot is available. Please update your instance.", - "LEARN_MORE": "Learn more" + "UPDATE_CHATWOOT": "En opdatering %{latestChatwootVersion} til Chatwoot er tilgængelig. Opdater venligst din instans.", + "LEARN_MORE": "Lær mere" }, "FORMS": { "MULTISELECT": { - "ENTER_TO_SELECT": "Press enter to select", - "ENTER_TO_REMOVE": "Press enter to remove", - "SELECT_ONE": "Select one" + "ENTER_TO_SELECT": "Tryk enter for at vælge", + "ENTER_TO_REMOVE": "Tryk enter for at fjerne", + "SELECT_ONE": "Vælg en" } }, "NOTIFICATIONS_PAGE": { - "HEADER": "Notifications", - "MARK_ALL_DONE": "Mark All Done", - "DELETE_TITLE": "deleted", + "HEADER": "Notifikationer", + "MARK_ALL_DONE": "Markér Alle Udførte", + "DELETE_TITLE": "slettet", "UNREAD_NOTIFICATION": { - "TITLE": "Unread Notifications", - "ALL_NOTIFICATIONS": "View all notifications", - "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", - "EMPTY_MESSAGE": "You have no unread notifications" + "TITLE": "Ulæste Notifikationer", + "ALL_NOTIFICATIONS": "Se alle notifikationer", + "LOADING_UNREAD_MESSAGE": "Indlæser ulæste notifikationer...", + "EMPTY_MESSAGE": "Du har ingen ulæste notifikationer" }, "LIST": { - "LOADING_MESSAGE": "Loading notifications...", - "404": "No Notifications", + "LOADING_MESSAGE": "Indlæser notifikationer...", + "404": "Ingen Notifikationer", "TABLE_HEADER": [ "Navn", "Telefonnummer", @@ -78,63 +78,63 @@ ] }, "TYPE_LABEL": { - "conversation_creation": "New conversation", - "conversation_assignment": "Conversation Assigned", - "assigned_conversation_new_message": "New Message", - "conversation_mention": "Mention" + "conversation_creation": "Ny samtale", + "conversation_assignment": "Samtale Tildelt", + "assigned_conversation_new_message": "Ny Besked", + "conversation_mention": "Omtale" } }, "NETWORK": { "NOTIFICATION": { - "TEXT": "Disconnected from Chatwoot" + "TEXT": "Afbrudt fra Chatwoot" }, "BUTTON": { - "REFRESH": "Refresh" + "REFRESH": "Opdater" } }, "COMMAND_BAR": { - "SEARCH_PLACEHOLDER": "Search or jump to", + "SEARCH_PLACEHOLDER": "Søg eller hop til", "SECTIONS": { - "GENERAL": "General", + "GENERAL": "Generelt", "REPORTS": "Rapporter", - "CONVERSATION": "Conversation", - "CHANGE_ASSIGNEE": "Change Assignee", - "CHANGE_TEAM": "Change Team", - "ADD_LABEL": "Add label to the conversation", - "REMOVE_LABEL": "Remove label from the conversation", + "CONVERSATION": "Samtale", + "CHANGE_ASSIGNEE": "Skift Modtager", + "CHANGE_TEAM": "Skift Team", + "ADD_LABEL": "Tilføj etiket til samtalen", + "REMOVE_LABEL": "Fjern etiket fra samtalen", "SETTINGS": "Indstillinger" }, "COMMANDS": { - "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", - "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", - "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", - "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", - "GO_TO_AGENT_REPORTS": "Go to Agent Reports", - "GO_TO_LABEL_REPORTS": "Go to Label Reports", - "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", - "GO_TO_TEAM_REPORTS": "Go to Team Reports", - "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", - "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", - "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", - "GO_TO_SETTINGS_LABELS": "Go to Label Settings", - "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", - "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", - "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", - "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", - "GO_TO_NOTIFICATIONS": "Go to Notifications", - "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", - "ASSIGN_AN_AGENT": "Assign an agent", - "ASSIGN_A_TEAM": "Assign a team", - "MUTE_CONVERSATION": "Mute conversation", - "UNMUTE_CONVERSATION": "Unmute conversation", - "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", - "REOPEN_CONVERSATION": "Reopen conversation", - "RESOLVE_CONVERSATION": "Resolve conversation", - "SEND_TRANSCRIPT": "Send an email transcript", - "SNOOZE_CONVERSATION": "Snooze Conversation", - "UNTIL_NEXT_REPLY": "Until next reply", - "UNTIL_NEXT_WEEK": "Until next week", - "UNTIL_TOMORROW": "Until tomorrow" + "GO_TO_CONVERSATION_DASHBOARD": "Gå til Konversationspanel", + "GO_TO_CONTACTS_DASHBOARD": "Gå til Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Gå til Oversigt over rapporter", + "GO_TO_CONVERSATION_REPORTS": "Gå til Konversationsrapporter", + "GO_TO_AGENT_REPORTS": "Gå til Agent rapporter", + "GO_TO_LABEL_REPORTS": "Gå til Label rapporter", + "GO_TO_INBOX_REPORTS": "Gå til Indbakke Rapporter", + "GO_TO_TEAM_REPORTS": "Gå til holdrapporter", + "GO_TO_SETTINGS_AGENTS": "Gå til Agent indstillinger", + "GO_TO_SETTINGS_TEAMS": "Gå til teamindstillinger", + "GO_TO_SETTINGS_INBOXES": "Gå til Indbakkeindstillinger", + "GO_TO_SETTINGS_LABELS": "Gå til Label indstillinger", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Gå til Indstillinger for scannede svar", + "GO_TO_SETTINGS_APPLICATIONS": "Gå til programindstillinger", + "GO_TO_SETTINGS_ACCOUNT": "Gå til kontoindstillinger", + "GO_TO_SETTINGS_PROFILE": "Gå til profilindstillinger", + "GO_TO_NOTIFICATIONS": "Gå til Notifikationer", + "ADD_LABELS_TO_CONVERSATION": "Tilføj etiket til samtalen", + "ASSIGN_AN_AGENT": "Tildel en agent", + "ASSIGN_A_TEAM": "Tildel et team", + "MUTE_CONVERSATION": "Gør samtale lydløs", + "UNMUTE_CONVERSATION": "Fjern samtale", + "REMOVE_LABEL_FROM_CONVERSATION": "Fjern etiket fra samtalen", + "REOPEN_CONVERSATION": "Genåbn samtale", + "RESOLVE_CONVERSATION": "Løs samtale", + "SEND_TRANSCRIPT": "Send en e-mail udskrift", + "SNOOZE_CONVERSATION": "Udsæt Samtale", + "UNTIL_NEXT_REPLY": "Indtil næste svar", + "UNTIL_NEXT_WEEK": "Indtil næste uge", + "UNTIL_TOMORROW": "Indtil i morgen" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/helpCenter.json b/app/javascript/dashboard/i18n/locale/da/helpCenter.json index c8afcf3a7..bafc23671 100644 --- a/app/javascript/dashboard/i18n/locale/da/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/da/helpCenter.json @@ -1,267 +1,409 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "Filtrer efter", + "SORT": "Sorter efter", "SETTINGS_BUTTON": "Indstillinger", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "Ny Artikel", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Publiceret", + "DRAFT": "Kladde", + "ARCHIVED": "Arkiveret" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Alle Artikler", + "MINE": "Alle Artikler", + "DRAFT": "Kladde Artikler", + "ARCHIVED": "Arkiverede Artikler" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Alle Artikler", + "PUBLISH_BUTTON": "Udgiv", + "MOVE_TO_ARCHIVE_BUTTON": "Flyt til arkiveret", + "PREVIEW": "Eksempelvisning", + "ADD_TRANSLATION": "Tilføj oversættelse", + "OPEN_SIDEBAR": "Åbn sidepanel", + "CLOSE_SIDEBAR": "Luk sidepanel", + "SAVING": "Gemmer...", + "SAVED": "Gemt" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Artikel Indstillinger", "FORM": { "CATEGORY": { - "LABEL": "Category", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "LABEL": "Kategori", + "TITLE": "Vælg kategori", + "PLACEHOLDER": "Vælg kategori", + "NO_RESULT": "Ingen kategori fundet", + "SEARCH_PLACEHOLDER": "Søg kategori" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Forfatter", + "TITLE": "Vælg forfatter", + "PLACEHOLDER": "Vælg forfatter", + "NO_RESULT": "Ingen forfattere fundet", + "SEARCH_PLACEHOLDER": "Søg efter forfatter" }, "META_TITLE": { - "LABEL": "Meta title", + "LABEL": "Meta titel", "PLACEHOLDER": "Add a meta title" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Meta beskrivelse", + "PLACEHOLDER": "Tilføj din meta beskrivelse for bedre SEO resultater..." }, "META_TAGS": { "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "PLACEHOLDER": "Tilføj meta-tags adskilt af komma..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Arkiv artikel", + "DELETE": "Slet artikel" } }, "PORTAL": { "HEADER": "Portals", - "NEW_BUTTON": "New Portal", - "ACTIVE_BADGE": "active", - "CHOOSE_LOCALE_LABEL": "Choose a locale", - "LOADING_MESSAGE": "Loading portals...", - "ARTICLES_LABEL": "articles", - "NO_PORTALS_MESSAGE": "There are no available portals", - "ADD_NEW_LOCALE": "Add a new locale", + "DEFAULT": "Standard", + "NEW_BUTTON": "Ny Portal", + "ACTIVE_BADGE": "aktiv", + "CHOOSE_LOCALE_LABEL": "Vælg en landestandard", + "LOADING_MESSAGE": "Indlæser portaler...", + "ARTICLES_LABEL": "artikler", + "NO_PORTALS_MESSAGE": "Der er ingen tilgængelige portaler", + "ADD_NEW_LOCALE": "Tilføj en ny landestandard", "POPOVER": { "TITLE": "Portals", - "PORTAL_SETTINGS": "Portal settings", - "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "PORTAL_SETTINGS": "Portal indstillinger", + "SUBTITLE": "Du har flere portaler og kan have forskellige landestandarder for hver portal.", "CANCEL_BUTTON_LABEL": "Annuller", - "CHOOSE_LOCALE_BUTTON": "Choose Locale" + "CHOOSE_LOCALE_BUTTON": "Vælg Landestandard" }, "PORTAL_SETTINGS": { "LIST_ITEM": { "HEADER": { - "COUNT_LABEL": "articles", - "ADD": "Add locale", - "VISIT": "Visit site", - "SETTINGS": "Indstillinger" + "COUNT_LABEL": "artikler", + "ADD": "Tilføj landestandard", + "VISIT": "Besøg websted", + "SETTINGS": "Indstillinger", + "DELETE": "Slet" }, "PORTAL_CONFIG": { - "TITLE": "Portal Configurations", + "TITLE": "Portal Konfigurationer", "ITEMS": { "NAME": "Navn", - "DOMAIN": "Custom domain", - "SLUG": "Slug", - "TITLE": "Portal title", - "THEME": "Theme color", - "SUB_TEXT": "Portal sub text" + "DOMAIN": "Tilpasset domæne", + "SLUG": "Snegl", + "TITLE": "Portal titel", + "THEME": "Tema farve", + "SUB_TEXT": "Portal undertekst" } }, "AVAILABLE_LOCALES": { - "TITLE": "Available locales", + "TITLE": "Tilgængelige landestandarder", "TABLE": { - "NAME": "Locale name", - "CODE": "Locale code", - "ARTICLE_COUNT": "No. of articles", - "CATEGORIES": "No. of categories", - "SWAP": "Swap", + "NAME": "Landestandard navn", + "CODE": "Landestandard kode", + "ARTICLE_COUNT": "Antal varer", + "CATEGORIES": "Antal kategorier", + "SWAP": "Byt", "DELETE": "Slet", - "DEFAULT_LOCALE": "Default" + "DEFAULT_LOCALE": "Standard" } } + }, + "DELETE_PORTAL": { + "TITLE": "Slet portal", + "MESSAGE": "Er du sikker på du vil slette denne portal", + "YES": "Ja, slet portal", + "NO": "Nej, behold portal", + "API": { + "DELETE_SUCCESS": "Portal slettet", + "DELETE_ERROR": "Fejl under sletning af portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Rediger portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Grundlæggende oplysninger" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Tilpasning af portal" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorier" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Kategorier i", + "NEW_CATEGORY": "Ny kategori", + "TABLE": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "LOCALE": "Landestandard", + "ARTICLE_COUNT": "Antal varer", + "ACTION_BUTTON": { + "EDIT": "Rediger kategori", + "DELETE": "Slet kategori" + }, + "EMPTY_TEXT": "Ingen kategorier fundet" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Opdater grundlæggende indstillinger" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Information om hjælpecenter", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Grundlæggende oplysninger om portal", + "CREATE_BASIC_SETTING_BUTTON": "Opret grundlæggende portal indstillinger" }, { - "title": "Help center customization", - "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "title": "Tilpasning af hjælpecenter", + "route": "portal_tilpasning", + "body": "Tilpas portal", + "UPDATE_PORTAL_BUTTON": "Opdater portalindstillinger" }, { "title": "Voila! 🎉", "route": "portal_finish", - "body": "You're all set!", - "FINISH": "Finish" + "body": "Du er klar!", + "FINISH": "Afslut" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Tilbage", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Opret Portal", + "TITLE": "Information om hjælpecenter", + "CREATE_BASIC_SETTING_BUTTON": "Opret grundlæggende portal indstillinger" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Tilpasning af portal", + "TITLE": "Tilpasning af hjælpecenter", + "UPDATE_PORTAL_BUTTON": "Opdater portalindstillinger" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Voila!🎉 Alt er sat op!", + "MESSAGE": "Du kan nu se denne oprettede portal på alle portaler siden.", + "FINISH": "Gå til alle portaler side" } }, "LOGO": { "LABEL": "Logo", "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "HELP_TEXT": "Dette logo vil blive vist i portalens header." }, "NAME": { "LABEL": "Navn", - "PLACEHOLDER": "Portal name", - "HELP_TEXT": "The name will be used in the public facing portal internally.", - "ERROR": "Name is required" + "PLACEHOLDER": "Portal navn", + "HELP_TEXT": "Navnet vil blive brugt i den offentlige vendende portal internt.", + "ERROR": "Navn er påkrævet" }, "SLUG": { - "LABEL": "Slug", - "PLACEHOLDER": "Portal slug for urls", - - "ERROR": "Slug is required" + "LABEL": "Snegl", + "PLACEHOLDER": "Portal slug for webadresser", + "ERROR": "Slug er påkrævet" }, "DOMAIN": { - "LABEL": "Custom Domain", - "PLACEHOLDER": "Portal custom domain", - "HELP_TEXT": "Add only If you want to use a custom domain for your portals.", - "ERROR": "Custom Domain is required" + "LABEL": "Tilpasset Domæne", + "PLACEHOLDER": "Portal brugerdefineret domæne", + "HELP_TEXT": "Tilføj kun Hvis du vil bruge et brugerdefineret domæne til dine portaler.", + "ERROR": "Brugerdefineret domæne er påkrævet" }, "HOME_PAGE_LINK": { - "LABEL": "Home Page Link", - "PLACEHOLDER": "Portal home page link", - "HELP_TEXT": "The link used to return from the portal to the home page.", - "ERROR": "Home Page Link is required" + "LABEL": "Link Til Hjemmeside", + "PLACEHOLDER": "Link til portalens hjemmeside", + "HELP_TEXT": "Linket, der bruges til at vende tilbage fra portalen til hjemmesiden.", + "ERROR": "Hjemmeside Link er påkrævet" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Portal tema farve", + "HELP_TEXT": "Denne farve vil blive vist som temafarven for portalen." }, "PAGE_TITLE": { - "LABEL": "Page Title", - "PLACEHOLDER": "Portal page title", + "LABEL": "Side Titel", + "PLACEHOLDER": "Portal side titel", "HELP_TEXT": "The page title will be used in the public facing portal.", - "ERROR": "Page title is required" + "ERROR": "Sidetitel er påkrævet" }, "HEADER_TEXT": { - "LABEL": "Header Text", - "PLACEHOLDER": "Portal header text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", - "ERROR": "Portal header text is required" + "LABEL": "Header Tekst", + "PLACEHOLDER": "Portal header tekst", + "HELP_TEXT": "Portal header tekst vil blive brugt i den offentlige vender portal.", + "ERROR": "Portal header tekst er påkrævet" }, "API": { - "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_BASIC": "Portal oprettet.", + "ERROR_MESSAGE_FOR_BASIC": "Portalen kunne ikke oprettes. Prøv igen.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal opdateret.", + "ERROR_MESSAGE_FOR_UPDATE": "Portalen kunne ikke opdateres. Prøv igen." + } + }, + "ADD_LOCALE": { + "TITLE": "Tilføj en ny landestandard", + "SUB_TITLE": "Dette tilføjer en ny landestandard til din tilgængelige oversættelsesliste.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Landestandard", + "PLACEHOLDER": "Vælg en landestandard", + "ERROR": "Landestandard er påkrævet" + }, + "BUTTONS": { + "CREATE": "Opret landestandard", + "CANCEL": "Annuller" + }, + "API": { + "SUCCESS_MESSAGE": "Landestandard tilføjet", + "ERROR_MESSAGE": "Kan ikke tilføje locale. Prøv igen." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Standard landestandard opdateret", + "ERROR_MESSAGE": "Kan ikke opdatere standard locale. Prøv igen." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Landestandard fjernet fra portal", + "ERROR_MESSAGE": "Kan ikke fjerne landestandard fra portalen. Prøv igen." } } }, "TABLE": { - "LOADING_MESSAGE": "Loading articles...", - "404": "No articles matches your search 🔍", - "NO_ARTICLES": "There are no available articles", + "LOADING_MESSAGE": "Indlæser artikler...", + "404": "Ingen artikler matcher din søgning 🔍", + "NO_ARTICLES": "Der er ingen tilgængelige artikler", "HEADERS": { - "TITLE": "Title", - "CATEGORY": "Category", - "READ_COUNT": "Read count", + "TITLE": "Titel", + "CATEGORY": "Kategori", + "READ_COUNT": "Læse antal", "STATUS": "Status", - "LAST_EDITED": "Last edited" + "LAST_EDITED": "Sidst redigeret" }, "COLUMNS": { - "BY": "by" + "BY": "af" } }, "EDIT_ARTICLE": { - "LOADING": "Loading article...", - "TITLE_PLACEHOLDER": "Article title goes here", - "CONTENT_PLACEHOLDER": "Write your article here", + "LOADING": "Indlæser artikel...", + "TITLE_PLACEHOLDER": "Artikel titel vises her", + "CONTENT_PLACEHOLDER": "Skriv din artikel her", "API": { - "ERROR": "Error while saving article" + "ERROR": "Fejl under lagring af artikel" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Fejl under publicering af artikel", + "SUCCESS": "Artikel publiceret med succes" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Fejl under arkivering af artikel", + "SUCCESS": "Artikel arkiveret" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Bekræft Sletning", + "MESSAGE": "Er du sikker på at du vil slette artiklen?", + "YES": "Ja, Slet", + "NO": "Nej, behold det" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artikel slettet", + "ERROR_MESSAGE": "Fejl under sletning af artikel" } }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Tilføj venligst artiklens overskrift og indhold, så kun du kan opdatere indstillingerne" }, "SIDEBAR": { "SEARCH": { - "PLACEHOLDER": "Search for articles" + "PLACEHOLDER": "Søg efter artikler" } }, "CATEGORY": { "ADD": { - "TITLE": "Create a category", - "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "TITLE": "Opret en kategori", + "SUB_TITLE": "Kategorien vil blive brugt i den offentlige vender portal til at kategorisere artikler.", "PORTAL": "Portal", - "LOCALE": "Locale", + "LOCALE": "Landestandard", "NAME": { "LABEL": "Navn", - "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", - "ERROR": "Name is required" + "PLACEHOLDER": "Kategori navn", + "HELP_TEXT": "Kategorinavnet vil blive brugt i den offentlige vendende portal til at kategorisere artikler.", + "ERROR": "Navn er påkrævet" }, "SLUG": { - "LABEL": "Slug", - "PLACEHOLDER": "Category slug for urls", - "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", - "ERROR": "Slug is required" + "LABEL": "Snegl", + "PLACEHOLDER": "Kategori slug for webls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/da-DK/categories/my-slug", + "ERROR": "Slug er påkrævet" }, "DESCRIPTION": { "LABEL": "Beskrivelse", - "PLACEHOLDER": "Give a short description about the category.", - "ERROR": "Description is required" + "PLACEHOLDER": "Giv en kort beskrivelse af kategorien.", + "ERROR": "Beskrivelse er påkrævet" }, "BUTTONS": { - "CREATE": "Create category", + "CREATE": "Opret kategori", "CANCEL": "Annuller" }, "API": { - "SUCCESS_MESSAGE": "Category created successfully", - "ERROR_MESSAGE": "Unable to create category" + "SUCCESS_MESSAGE": "Kategori oprettet", + "ERROR_MESSAGE": "Kan ikke oprette kategori" + } + }, + "EDIT": { + "TITLE": "Rediger en kategori", + "SUB_TITLE": "Redigering af en kategori vil opdatere kategorien i den offentlige vender portal.", + "PORTAL": "Portal", + "LOCALE": "Landestandard", + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Kategori navn", + "HELP_TEXT": "Kategorinavnet vil blive brugt i den offentlige vendende portal til at kategorisere artikler.", + "ERROR": "Navn er påkrævet" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategori slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/da-DK/categories/my-slug", + "ERROR": "Slug er påkrævet" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Giv en kort beskrivelse af kategorien.", + "ERROR": "Beskrivelse er påkrævet" + }, + "BUTTONS": { + "CREATE": "Opdater kategori", + "CANCEL": "Annuller" + }, + "API": { + "SUCCESS_MESSAGE": "Kategori opdateret", + "ERROR_MESSAGE": "Kan ikke opdatere kategori" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategori slettet", + "ERROR_MESSAGE": "Kan ikke slette kategori" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json index 007d6de49..606dd4778 100644 --- a/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/inboxMgmt.json @@ -30,8 +30,8 @@ "ADD": { "CHANNEL_NAME": { "LABEL": "Indbakke Navn", - "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", - "ERROR": "Please enter a valid inbox name" + "PLACEHOLDER": "Indtast dit indbakke navn (f. eks. Acme Inc)", + "ERROR": "Angiv et gyldigt indbakke navn" }, "WEBSITE_NAME": { "LABEL": "Websted Navn", @@ -48,9 +48,9 @@ }, "TWITTER": { "HELP": "For at tilføje din Twitter-profil som en kanal, skal du godkende din Twitter-profil ved at klikke på 'Log ind med Twitter' ", - "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "ERROR_MESSAGE": "Der opstod en fejl under forbindelsen til Twitter. Prøv igen", "TWEETS": { - "ENABLE": "Create conversations from mentioned Tweets" + "ENABLE": "Opret samtaler fra nævnte Tweets" } }, "WEBSITE_CHANNEL": { @@ -62,7 +62,7 @@ }, "CHANNEL_WEBHOOK_URL": { "LABEL": "Webhook URL", - "PLACEHOLDER": "Enter your Webhook URL", + "PLACEHOLDER": "Indtast din Webhook URL", "ERROR": "Angiv en gyldig URL" }, "CHANNEL_DOMAIN": { @@ -83,7 +83,7 @@ }, "CHANNEL_GREETING_TOGGLE": { "LABEL": "Aktivér kanal start hilsen", - "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "HELP_TEXT": "Send automatisk en hilsen når en ny samtale er oprettet.", "ENABLED": "Aktiveret", "DISABLED": "Deaktiveret" }, @@ -100,22 +100,22 @@ }, "SUBMIT_BUTTON": "Opret indbakke", "API": { - "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + "ERROR_MESSAGE": "Vi var ikke i stand til at oprette en hjemmeside kanal, prøv igen" } }, "TWILIO": { - "TITLE": "Twilio SMS/WhatsApp Channel", - "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "TITLE": "Twilio SMS/Whatsapp Kanal", + "DESC": "Integrer Twilio og start med at supportere dine kunder via SMS eller Whatsapp.", "ACCOUNT_SID": { "LABEL": "Konto SID", "PLACEHOLDER": "Indtast venligst din Twilio konto SID", "ERROR": "Dette felt er påkrævet" }, "MESSAGING_SERVICE_SID": { - "LABEL": "Messaging Service SID", - "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "LABEL": "SID For Beskedtjeneste", + "PLACEHOLDER": "Indtast venligst din Twilio Messaging Service SID", "ERROR": "Dette felt er påkrævet", - "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + "USE_MESSAGING_SERVICE": "Brug en Twilio-meddelelsestjeneste" }, "CHANNEL_TYPE": { "LABEL": "Kanaltype", @@ -128,7 +128,7 @@ }, "CHANNEL_NAME": { "LABEL": "Indbakke Navn", - "PLACEHOLDER": "Please enter a inbox name", + "PLACEHOLDER": "Indtast venligst et indbakke navn", "ERROR": "Dette felt er påkrævet" }, "PHONE_NUMBER": { @@ -146,40 +146,40 @@ } }, "SMS": { - "TITLE": "SMS Channel", - "DESC": "Start supporting your customers via SMS.", + "TITLE": "SMS Kanal", + "DESC": "Begynd at støtte dine kunder via SMS.", "PROVIDERS": { "LABEL": "API Provider", "TWILIO": "Twilio", - "BANDWIDTH": "Bandwidth" + "BANDWIDTH": "Båndbredde" }, "API": { - "ERROR_MESSAGE": "We were not able to save the SMS channel" + "ERROR_MESSAGE": "Vi kunne ikke gemme SMS-kanalen" }, "BANDWIDTH": { "ACCOUNT_ID": { - "LABEL": "Account ID", - "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "LABEL": "Konto SID", + "PLACEHOLDER": "Indtast venligst dit Båndbredde Konto ID", "ERROR": "Dette felt er påkrævet" }, "API_KEY": { - "LABEL": "API Key", - "PLACEHOLDER": "Please enter your Bandwith API Key", + "LABEL": "API Nøgle", + "PLACEHOLDER": "Indtast venligst dit Båndbredde Konto ID", "ERROR": "Dette felt er påkrævet" }, "API_SECRET": { - "LABEL": "API Secret", - "PLACEHOLDER": "Please enter your Bandwith API Secret", + "LABEL": "API Hemmelighed", + "PLACEHOLDER": "Indtast venligst dit Bandwith API Secret", "ERROR": "Dette felt er påkrævet" }, "APPLICATION_ID": { - "LABEL": "Application ID", - "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "LABEL": "Applikations ID", + "PLACEHOLDER": "Indtast venligst dit Båndbredde-program-id", "ERROR": "Dette felt er påkrævet" }, "INBOX_NAME": { "LABEL": "Indbakke Navn", - "PLACEHOLDER": "Please enter a inbox name", + "PLACEHOLDER": "Indtast venligst et indbakke navn", "ERROR": "Dette felt er påkrævet" }, "PHONE_NUMBER": { @@ -187,28 +187,28 @@ "PLACEHOLDER": "Indtast venligst det telefonnummer, hvorfra beskeden vil blive sendt.", "ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn." }, - "SUBMIT_BUTTON": "Create Bandwidth Channel", + "SUBMIT_BUTTON": "Opret Båndbredde Kanal", "API": { - "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + "ERROR_MESSAGE": "Vi var ikke i stand til at godkende Twilio legitimationsoplysninger, prøv igen" }, "API_CALLBACK": { "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + "SUBTITLE": "Du skal konfigurere beskedtilbagekalds-URL'en i Båndbredde med den URL, der er nævnt her." } } }, "WHATSAPP": { - "TITLE": "WhatsApp Channel", - "DESC": "Start supporting your customers via WhatsApp.", + "TITLE": "WhatsApp Kanal", + "DESC": "Begynd at støtte dine kunder via WhatsApp.", "PROVIDERS": { "LABEL": "API Provider", "TWILIO": "Twilio", - "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD": "WhatsApp Sky", "360_DIALOG": "360Dialog" }, "INBOX_NAME": { "LABEL": "Indbakke Navn", - "PLACEHOLDER": "Please enter an inbox name", + "PLACEHOLDER": "Indtast venligst et indbakkens navn", "ERROR": "Dette felt er påkrævet" }, "PHONE_NUMBER": { @@ -217,33 +217,33 @@ "ERROR": "Angiv en gyldig værdi. Telefonnummer skal starte med `+` tegn." }, "PHONE_NUMBER_ID": { - "LABEL": "Phone number ID", - "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", - "ERROR": "Please enter a valid value." + "LABEL": "Telefonnummer ID", + "PLACEHOLDER": "Indtast venligst telefonnummer ID indhentet fra Facebook udviklerdashboard.", + "ERROR": "Angiv en gyldig værdi." }, "BUSINESS_ACCOUNT_ID": { - "LABEL": "Business Account ID", - "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", - "ERROR": "Please enter a valid value." + "LABEL": "Business Konto ID", + "PLACEHOLDER": "Indtast venligst Business Account ID opnået fra Facebook udvikler dashboard.", + "ERROR": "Angiv en gyldig værdi." }, "WEBHOOK_VERIFY_TOKEN": { - "LABEL": "Webhook Verify Token", - "PLACEHOLDER": "Enter a verify token which you want to configure for facebook webhooks.", - "ERROR": "Please enter a valid value." + "LABEL": "Webhook Verificér Token", + "PLACEHOLDER": "Indtast en verificeringstoken, som du vil konfigurere for facebook webhooks.", + "ERROR": "Angiv en gyldig værdi." }, "API_KEY": { - "LABEL": "API key", - "SUBTITLE": "Configure the WhatsApp API key.", - "PLACEHOLDER": "API key", - "ERROR": "Please enter a valid value." + "LABEL": "API Nøgle", + "SUBTITLE": "Konfigurer WhatsApp API-nøglen.", + "PLACEHOLDER": "API Nøgle", + "ERROR": "Angiv en gyldig værdi." }, "API_CALLBACK": { "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the webhook URL in facebook developer portal with the URL mentioned here." + "SUBTITLE": "Du skal konfigurere webhook URL i facebook udvikler portal med den URL, der er nævnt her." }, - "SUBMIT_BUTTON": "Create WhatsApp Channel", + "SUBMIT_BUTTON": "Opret WhatsApp Kanal", "API": { - "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + "ERROR_MESSAGE": "Vi kunne ikke gemme WhatsApp-kanalen" } }, "API_CHANNEL": { @@ -284,56 +284,56 @@ "FINISH_MESSAGE": "Begynd at videresende dine e-mails til følgende e-mailadresse." }, "LINE_CHANNEL": { - "TITLE": "LINE Channel", - "DESC": "Integrate with LINE channel and start supporting your customers.", + "TITLE": "LINE Kanal", + "DESC": "Integrér med LINE-kanalen og begynd at støtte dine kunder.", "CHANNEL_NAME": { "LABEL": "Kanalnavn", "PLACEHOLDER": "Indtast et kanalnavn", "ERROR": "Dette felt er påkrævet" }, "LINE_CHANNEL_ID": { - "LABEL": "LINE Channel ID", - "PLACEHOLDER": "LINE Channel ID" + "LABEL": "LINE Kanal ID", + "PLACEHOLDER": "LINE Kanal ID" }, "LINE_CHANNEL_SECRET": { - "LABEL": "LINE Channel Secret", - "PLACEHOLDER": "LINE Channel Secret" + "LABEL": "LINE Kanal Hemmelighed", + "PLACEHOLDER": "LINE Kanal Hemmelighed" }, "LINE_CHANNEL_TOKEN": { - "LABEL": "LINE Channel Token", - "PLACEHOLDER": "LINE Channel Token" + "LABEL": "LINE Kanal Token", + "PLACEHOLDER": "LINE Kanal Token" }, - "SUBMIT_BUTTON": "Create LINE Channel", + "SUBMIT_BUTTON": "Opret LINE Kanal", "API": { - "ERROR_MESSAGE": "We were not able to save the LINE channel" + "ERROR_MESSAGE": "Vi var ikke i stand til at gemme LINE kanalen" }, "API_CALLBACK": { "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + "SUBTITLE": "Du skal indstille webhook URL i LINE programmet med URL-adressen nævnt her." } }, "TELEGRAM_CHANNEL": { - "TITLE": "Telegram Channel", - "DESC": "Integrate with Telegram channel and start supporting your customers.", + "TITLE": "Telegram Kanal", + "DESC": "Integrér med Telegram-kanalen og begynd at støtte dine kunder.", "BOT_TOKEN": { "LABEL": "Bot Token", - "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "SUBTITLE": "Konfigurer den bot token du har fået fra Telegram BotFather.", "PLACEHOLDER": "Bot Token" }, - "SUBMIT_BUTTON": "Create Telegram Channel", + "SUBMIT_BUTTON": "Opret Telegram Kanal", "API": { - "ERROR_MESSAGE": "We were not able to save the telegram channel" + "ERROR_MESSAGE": "Vi var ikke i stand til at gemme telegram kanal" } }, "AUTH": { - "TITLE": "Choose a channel", - "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below." + "TITLE": "Vælg en kanal", + "DESC": "Chatwoot understøtter live-chat-widgets, Facebook Messenger, Twitter-profiler, WhatsApp, E-mails, osv., som kanaler. Hvis du ønsker at bygge en brugerdefineret kanal, kan du oprette den ved hjælp af API-kanalen. For at komme i gang, vælg en af kanalerne nedenfor." }, "AGENTS": { "TITLE": "Agenter", "DESC": "Her kan du tilføje agenter til at håndtere din nyoprettede indbakke. Kun disse valgte agenter vil have adgang til din indbakke. Agenter som ikke er en del af denne indbakke, vil ikke kunne se eller reagere på beskeder i denne indbakke, når de logger ind.
PS: Som administrator, hvis du har brug for adgang til alle indbakker, bør du tilføje dig selv som agent til alle indbakker, du opretter.", - "VALIDATION_ERROR": "Add atleast one agent to your new Inbox", - "PICK_AGENTS": "Pick agents for the inbox" + "VALIDATION_ERROR": "Tilføj mindst én agent til din nye indbakke", + "PICK_AGENTS": "Vælg agenter for indbakken" }, "DETAILS": { "TITLE": "Indbakke Detaljer", @@ -359,7 +359,7 @@ "TITLE": "Din indbakke er klar!", "MESSAGE": "Du kan nu engagere dig med dine kunder gennem din nye kanal. Glædelig supportering ", "BUTTON_TEXT": "Tag mig med dertil", - "MORE_SETTINGS": "More settings", + "MORE_SETTINGS": "Flere indstillinger", "WEBSITE_SUCCESS": "Du er færdig med at oprette en hjemmeside kanal. Kopier koden vist nedenfor og indsæt den på din hjemmeside. Næste gang en kunde bruger live chat, vil samtalen automatisk vises i din indbakke." }, "REAUTH": "Genautorisér", @@ -368,7 +368,7 @@ "API": { "SUCCESS_MESSAGE": "Indbakkeindstillinger opdateret", "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automatisk tildeling opdateret", - "ERROR_MESSAGE": "We couldn't update inbox settings. Please try again later." + "ERROR_MESSAGE": "Indbakkeindstillingerne kunne ikke opdateres. Prøv igen senere." }, "EMAIL_COLLECT_BOX": { "ENABLED": "Aktiveret", @@ -387,33 +387,33 @@ "DISABLED": "Deaktiveret" }, "ENABLE_HMAC": { - "LABEL": "Enable" + "LABEL": "Aktiver" } }, "DELETE": { "BUTTON_TEXT": "Slet", - "AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar", + "AVATAR_DELETE_BUTTON_TEXT": "Slet Avatar", "CONFIRM": { "TITLE": "Bekræft Sletning", "MESSAGE": "Er du sikker på du vil slette ", - "PLACE_HOLDER": "Please type {inboxName} to confirm", + "PLACE_HOLDER": "Skriv venligst {inboxName} for at bekræfte", "YES": "Ja, Slet ", "NO": "Nej, Behold " }, "API": { "SUCCESS_MESSAGE": "Indbakken blev slettet", "ERROR_MESSAGE": "Kunne ikke slette indbakken. Prøv igen senere.", - "AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully", - "AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later." + "AVATAR_SUCCESS_MESSAGE": "Indbakke avatar slettet", + "AVATAR_ERROR_MESSAGE": "Kunne ikke slette indbakken avatar. Prøv igen senere." } }, "TABS": { "SETTINGS": "Indstillinger", "COLLABORATORS": "Samarbejdspartnere", "CONFIGURATION": "Konfiguration", - "CAMPAIGN": "Campaigns", + "CAMPAIGN": "Kampagner", "PRE_CHAT_FORM": "Pre Chat Form", - "BUSINESS_HOURS": "Business Hours", + "BUSINESS_HOURS": "Forretningstider", "WIDGET_BUILDER": "Widget Builder" }, "SETTINGS": "Indstillinger", @@ -421,43 +421,43 @@ "LABEL": "Funktioner", "DISPLAY_FILE_PICKER": "Vis filvælger på widget'en", "DISPLAY_EMOJI_PICKER": "Vis emoji-vælger på widget'en", - "ALLOW_END_CONVERSATION": "Allow users to end conversation from the widget" + "ALLOW_END_CONVERSATION": "Tillad brugere at afslutte samtale fra widget" }, "SETTINGS_POPUP": { "MESSENGER_HEADING": "Messenger- Script", "MESSENGER_SUB_HEAD": "Placer denne knap inde i din body tag", "INBOX_AGENTS": "Agenter", "INBOX_AGENTS_SUB_TEXT": "Tilføj eller fjern agenter fra denne indbakke", - "AGENT_ASSIGNMENT": "Conversation Assignment", - "AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings", + "AGENT_ASSIGNMENT": "Samtale Tildeling", + "AGENT_ASSIGNMENT_SUB_TEXT": "Opdater indstillinger for samtale", "UPDATE": "Opdater", - "ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box", - "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation", + "ENABLE_EMAIL_COLLECT_BOX": "Aktiver boks til indsamling af e-mail", + "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Aktiver eller deaktivér opsamlingsboks for e-mail ved ny samtale", "AUTO_ASSIGNMENT": "Aktiver automatisk tildeling", - "ENABLE_CSAT": "Enable CSAT", - "ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation", - "ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email", - "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.", + "ENABLE_CSAT": "Aktiver CSAT", + "ENABLE_CSAT_SUB_TEXT": "Aktiver/deaktivér CSAT(Customer satisfaction) undersøgelse efter at have løst en samtale", + "ENABLE_CONTINUITY_VIA_EMAIL": "Aktivér konversationskontinuitet via e-mail", + "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Samtaler vil fortsætte via e-mail, hvis kontaktpersonens e-mailadresse er tilgængelig.", "INBOX_UPDATE_TITLE": "Indbakke Indstillinger", "INBOX_UPDATE_SUB_TEXT": "Opdater dine indbakkeindstillinger", "AUTO_ASSIGNMENT_SUB_TEXT": "Aktiver eller deaktiver automatisk tildeling af nye samtaler til agenter tilføjet til denne indbakke.", - "HMAC_VERIFICATION": "User Identity Validation", - "HMAC_DESCRIPTION": "In order to validate the user's identity, you can pass an `identifier_hash` for each user. You can generate a HMAC sha256 hash using the `identifier` with the key shown here.", - "HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation", - "HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.", - "INBOX_IDENTIFIER": "Inbox Identifier", - "INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.", - "FORWARD_EMAIL_TITLE": "Forward to Email", + "HMAC_VERIFICATION": "Bruger Identitetsvalidering", + "HMAC_DESCRIPTION": "For at validere brugerens identitet, kan du passere en `identifier_hash` for hver bruger. Du kan generere en HMAC sha256 hash ved hjælp af 'identifier' med nøglen vist her.", + "HMAC_MANDATORY_VERIFICATION": "Gennemtving Validering Af Bruger Identitet", + "HMAC_MANDATORY_DESCRIPTION": "Hvis aktiveret, vil forespørgsler der mangler 'identifier_hash' blive afvist.", + "INBOX_IDENTIFIER": "Identifikator For Indbakke", + "INBOX_IDENTIFIER_SUB_TEXT": "Brug den `inbox_identifier` token vist her til godkendelse dine API-klienter.", + "FORWARD_EMAIL_TITLE": "Videresend til e-mail", "FORWARD_EMAIL_SUB_TEXT": "Begynd at videresende dine e-mails til følgende e-mailadresse.", - "ALLOW_MESSAGES_AFTER_RESOLVED": "Allow messages after conversation resolved", - "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Allow the end-users to send messages even after the conversation is resolved.", - "WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.", - "WHATSAPP_SECTION_TITLE": "API Key" + "ALLOW_MESSAGES_AFTER_RESOLVED": "Tillad beskeder efter samtalen løst", + "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Tillad slutbrugere at sende beskeder, selv efter samtalen er løst.", + "WHATSAPP_SECTION_SUBHEADER": "Denne API-nøgle bruges til integration med WhatsApp API'erne.", + "WHATSAPP_SECTION_TITLE": "API Nøgle" }, "AUTO_ASSIGNMENT": { - "MAX_ASSIGNMENT_LIMIT": "Auto assignment limit", - "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Please enter a value greater than 0", - "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Limit the maximum number of conversations from this inbox that can be auto assigned to an agent" + "MAX_ASSIGNMENT_LIMIT": "Grænse for automatisk tildeling", + "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Indtast en værdi større end 0", + "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Begræns det maksimale antal samtaler fra denne indbakke, der kan være auto tildelt en agent" }, "FACEBOOK_REAUTHORIZE": { "TITLE": "Genautorisér", @@ -466,64 +466,64 @@ "MESSAGE_ERROR": "Der opstod en fejl, prøv igen" }, "PRE_CHAT_FORM": { - "DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.", - "SET_FIELDS": "Pre chat form fields", + "DESCRIPTION": "Forud chat formularer gør det muligt for dig at fange brugeroplysninger, før de starter samtale med dig.", + "SET_FIELDS": "Tidligere chatformularfelter", "SET_FIELDS_HEADER": { - "FIELDS": "Fields", - "LABEL": "Label", - "PLACE_HOLDER": "Placeholder", - "KEY": "Key", + "FIELDS": "Felter", + "LABEL": "Etiketter", + "PLACE_HOLDER": "Pladsholder", + "KEY": "Nøgle", "TYPE": "Type", - "REQUIRED": "Required" + "REQUIRED": "Påkrævet" }, "ENABLE": { - "LABEL": "Enable pre chat form", + "LABEL": "Aktiver præ-chat formular", "OPTIONS": { - "ENABLED": "Yes", - "DISABLED": "No" + "ENABLED": "Ja", + "DISABLED": "Nej" } }, "PRE_CHAT_MESSAGE": { - "LABEL": "Pre chat message", - "PLACEHOLDER": "This message would be visible to the users along with the form" + "LABEL": "Tidligere chatbesked", + "PLACEHOLDER": "Denne meddelelse vil være synlig for brugerne sammen med formularen" }, "REQUIRE_EMAIL": { - "LABEL": "Visitors should provide their name and email address before starting the chat" + "LABEL": "Besøgende skal angive deres navn og e-mailadresse, før du starter chatten" } }, "BUSINESS_HOURS": { - "TITLE": "Set your availability", - "SUBTITLE": "Set your availability on your livechat widget", - "WEEKLY_TITLE": "Set your weekly hours", - "TIMEZONE_LABEL": "Select timezone", - "UPDATE": "Update business hours settings", - "TOGGLE_AVAILABILITY": "Enable business availability for this inbox", - "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors", + "TITLE": "Indstil din tilgængelighed", + "SUBTITLE": "Indstil din tilgængelighed på din livechat widget", + "WEEKLY_TITLE": "Indstil dine ugentlige timer", + "TIMEZONE_LABEL": "Vælg tidszone", + "UPDATE": "Opdater indstillinger for åbningstider", + "TOGGLE_AVAILABILITY": "Aktiver forretningstilgængelighed for denne indbakke", + "UNAVAILABLE_MESSAGE_LABEL": "Utilgængelig besked til besøgende", "UNAVAILABLE_MESSAGE_DEFAULT": "Vi er ikke tilgængelige i øjeblikket. Skriv en besked og vi svarer, når vi er tilbage.", - "TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.", + "TOGGLE_HELP": "Aktivering af forretningstilgængelighed vil vise de tilgængelige timer på live chat widget, selvom alle agenter er offline. Udenfor tilgængelige timer kan livreddere advares med en besked og en pre-chat formular.", "DAY": { - "ENABLE": "Enable availability for this day", + "ENABLE": "Aktiver tilgængelighed for denne dag", "UNAVAILABLE": "Unavailable", - "HOURS": "hours", - "VALIDATION_ERROR": "Starting time should be before closing time.", - "CHOOSE": "Choose" + "HOURS": "timer", + "VALIDATION_ERROR": "Starttidspunkt bør være før lukketid.", + "CHOOSE": "Vælg" }, "ALL_DAY": "All-Day" }, "IMAP": { "TITLE": "IMAP", - "SUBTITLE": "Set your IMAP details", - "NOTE_TEXT": "To enable SMTP, please configure IMAP.", - "UPDATE": "Update IMAP settings", - "TOGGLE_AVAILABILITY": "Enable IMAP configuration for this inbox", - "TOGGLE_HELP": "Enabling IMAP will help the user to recieve email", + "SUBTITLE": "Indstil dine IMAP-oplysninger", + "NOTE_TEXT": "For at aktivere SMTP skal du konfigurere IMAP.", + "UPDATE": "Opdater indstillinger", + "TOGGLE_AVAILABILITY": "Aktiver IMAP- konfiguration for denne indbakke", + "TOGGLE_HELP": "Aktivering af IMAP, vil hjælpe brugeren med at modtage e-mail", "EDIT": { - "SUCCESS_MESSAGE": "IMAP settings updated successfully", - "ERROR_MESSAGE": "Unable to update IMAP settings" + "SUCCESS_MESSAGE": "Indbakkeindstillinger opdateret", + "ERROR_MESSAGE": "Kunne ikke opdatere IMAP-indstillinger" }, "ADDRESS": { - "LABEL": "Address", - "PLACE_HOLDER": "Address (Eg: imap.gmail.com)" + "LABEL": "Ip Adresse", + "PLACE_HOLDER": "Adresse (f.eks.: imap.gmail.com)" }, "PORT": { "LABEL": "Port", @@ -537,21 +537,21 @@ "LABEL": "Adgangskode", "PLACE_HOLDER": "Adgangskode" }, - "ENABLE_SSL": "Enable SSL" + "ENABLE_SSL": "Aktiver SSL" }, "SMTP": { - "TITLE": "SMTP", - "SUBTITLE": "Set your SMTP details", - "UPDATE": "Update SMTP settings", - "TOGGLE_AVAILABILITY": "Enable SMTP configuration for this inbox", - "TOGGLE_HELP": "Enabling SMTP will help the user to send email", + "TITLE": "Smtp", + "SUBTITLE": "Indstil dine IMAP-oplysninger", + "UPDATE": "Opdater SMTP indstillinger", + "TOGGLE_AVAILABILITY": "Aktiver SMTP konfiguration for denne indbakke", + "TOGGLE_HELP": "Aktivering af SMTP vil hjælpe brugeren med at sende e-mail", "EDIT": { - "SUCCESS_MESSAGE": "SMTP settings updated successfully", - "ERROR_MESSAGE": "Unable to update SMTP settings" + "SUCCESS_MESSAGE": "SMTP indstillinger opdateret", + "ERROR_MESSAGE": "Kan ikke opdatere SMTP indstillinger" }, "ADDRESS": { - "LABEL": "Address", - "PLACE_HOLDER": "Address (Eg: smtp.gmail.com)" + "LABEL": "Ip Adresse", + "PLACE_HOLDER": "Adresse (f.eks.: smtp.gmail.com)" }, "PORT": { "LABEL": "Port", @@ -566,23 +566,23 @@ "PLACE_HOLDER": "Adgangskode" }, "DOMAIN": { - "LABEL": "Domain", - "PLACE_HOLDER": "Domain" + "LABEL": "Domæne", + "PLACE_HOLDER": "Domæne" }, - "ENCRYPTION": "Encryption", + "ENCRYPTION": "Kryptering", "SSL_TLS": "SSL/TLS", "START_TLS": "STARTTLS", - "OPEN_SSL_VERIFY_MODE": "Open SSL Verify Mode", - "AUTH_MECHANISM": "Authentication" + "OPEN_SSL_VERIFY_MODE": "Åbn SSL-bekræftelsestilstand", + "AUTH_MECHANISM": "Godkendelse" }, - "NOTE": "Note: ", + "NOTE": "Bemærk: ", "WIDGET_BUILDER": { "WIDGET_OPTIONS": { "AVATAR": { - "LABEL": "Website Avatar", + "LABEL": "Websted Avatar", "DELETE": { "API": { - "SUCCESS_MESSAGE": "Avatar deleted successfully", + "SUCCESS_MESSAGE": "Avatar slettet", "ERROR_MESSAGE": "Der opstod en fejl. Prøv venligst igen" } } @@ -594,14 +594,14 @@ }, "WELCOME_HEADING": { "LABEL": "Velkomstoverskrift", - "PLACE_HOLDER": "Hi there!" + "PLACE_HOLDER": "Hej der!" }, "WELCOME_TAGLINE": { "LABEL": "Velkomst Tagline", "PLACE_HOLDER": "Vi gør det nemt at komme i kontakt med os. Spørg os om noget, eller del din feedback." }, "REPLY_TIME": { - "LABEL": "Reply Time", + "LABEL": "Svar Tid", "IN_A_FEW_MINUTES": "På nogle få minutter", "IN_A_FEW_HOURS": "Om et par timer", "IN_A_DAY": "På en dag" @@ -611,31 +611,31 @@ "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type", "WIDGET_BUBBLE_LAUNCHER_TITLE": { "DEFAULT": "Chat med os", - "LABEL": "Widget Bubble Launcher Title", + "LABEL": "Widget Bubble Launcher Titel", "PLACE_HOLDER": "Chat med os" }, "UPDATE": { - "BUTTON_TEXT": "Update Widget Settings", + "BUTTON_TEXT": "Opdater Widget Indstillinger", "API": { - "SUCCESS_MESSAGE": "Widget settings updated successfully", - "ERROR_MESSAGE": "Unable to update widget settings" + "SUCCESS_MESSAGE": "Widget-indstillinger opdateret", + "ERROR_MESSAGE": "Kan ikke opdatere widget-indstillinger" } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", + "PREVIEW": "Eksempelvisning", "SCRIPT": "Script" }, "WIDGET_BUBBLE_POSITION": { - "LEFT": "Left", - "RIGHT": "Right" + "LEFT": "Venstre", + "RIGHT": "Højre" }, "WIDGET_BUBBLE_TYPE": { "STANDARD": "Standard", - "EXPANDED_BUBBLE": "Expanded Bubble" + "EXPANDED_BUBBLE": "Udvidet Boble" } }, "WIDGET_SCREEN": { - "DEFAULT": "Default", + "DEFAULT": "Standard", "CHAT": "Chat" }, "REPLY_TIME": { @@ -649,11 +649,11 @@ }, "BODY": { "TEAM_AVAILABILITY": { - "ONLINE": "We are Online", + "ONLINE": "Vi er online", "OFFLINE": "Vi er ikke tilgængelige i øjeblikket" }, "USER_MESSAGE": "Hi", - "AGENT_MESSAGE": "Hello" + "AGENT_MESSAGE": "Hej" }, "BRANDING_TEXT": "Drevet af Chatwoot", "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" diff --git a/app/javascript/dashboard/i18n/locale/da/integrationApps.json b/app/javascript/dashboard/i18n/locale/da/integrationApps.json index 711c8a146..3223df2a3 100644 --- a/app/javascript/dashboard/i18n/locale/da/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/da/integrationApps.json @@ -1,36 +1,36 @@ { "INTEGRATION_APPS": { - "FETCHING": "Fetching Integrations", - "NO_HOOK_CONFIGURED": "There are no %{integrationId} integrations configured in this account.", - "HEADER": "Applications", + "FETCHING": "Henter Integrationer", + "NO_HOOK_CONFIGURED": "Der er ingen %{integrationId} integrationer konfigureret på denne konto.", + "HEADER": "Applikationer", "STATUS": { "ENABLED": "Aktiveret", "DISABLED": "Deaktiveret" }, "CONFIGURE": "Konfigurer", - "ADD_BUTTON": "Add a new hook", + "ADD_BUTTON": "Tilføj en ny krog", "DELETE": { "TITLE": { - "INBOX": "Confirm deletion", - "ACCOUNT": "Disconnect" + "INBOX": "Bekræft sletning", + "ACCOUNT": "Afbryd" }, "MESSAGE": { "INBOX": "Er du sikker på du vil slette?", - "ACCOUNT": "Are you sure to disconnect?" + "ACCOUNT": "Er du sikker på at du afbryder?" }, "CONFIRM_BUTTON_TEXT": { "INBOX": "Ja, Slet", - "ACCOUNT": "Yes, Disconnect" + "ACCOUNT": "Ja, Afbryd" }, "CANCEL_BUTTON_TEXT": "Annuller", "API": { - "SUCCESS_MESSAGE": "Hook deleted successfully", + "SUCCESS_MESSAGE": "Hook slettet", "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" } }, "LIST": { - "FETCHING": "Fetching integration hooks", - "INBOX": "Inbox", + "FETCHING": "Henter integrationshoks", + "INBOX": "Indbakke", "DELETE": { "BUTTON_TEXT": "Slet" } @@ -38,14 +38,14 @@ "ADD": { "FORM": { "INBOX": { - "LABEL": "Select Inbox", - "PLACEHOLDER": "Select Inbox" + "LABEL": "Vælg Indbakke", + "PLACEHOLDER": "Vælg Indbakke" }, "SUBMIT": "Opret", "CANCEL": "Annuller" }, "API": { - "SUCCESS_MESSAGE": "Integration hook added successfully", + "SUCCESS_MESSAGE": "Integration hook tilføjet", "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" } }, @@ -53,10 +53,10 @@ "BUTTON_TEXT": "Tilslut" }, "DISCONNECT": { - "BUTTON_TEXT": "Disconnect" + "BUTTON_TEXT": "Afbryd" }, "SIDEBAR_DESCRIPTION": { - "DIALOGFLOW": "Dialogflow is a natural language understanding platform that makes it easy to design and integrate a conversational user interface into your mobile app, web application, device, bot, interactive voice response system, and so on.

Dialogflow integration with %{installationName} allows you to configure a Dialogflow bot with your inboxes which lets the bot handle the queries initially and hand them over to an agent when needed. Dialogflow can be used to qualifying the leads, reduce the workload of agents by providing frequently asked questions etc.

To add Dialogflow, you need to create a Service Account in your Google project console and share the credentials. Please refer to the Dialogflow docs for more information." + "DIALOGFLOW": "Dialogflow er en naturlig sprogforståelsesplatform, der gør det nemt at designe og integrere en samtalebrugergrænseflade i din mobile app, webapplikation, enhed, bot, interaktivt talespons system, og så videre.

Dialogflow integration med %{installationName} giver dig mulighed for at konfigurere en Dialogflow bot med dine indbakker, som lader botten håndtere spørgsmålene i første omgang og overdrage dem til en agent, når det er nødvendigt. Dialogflow kan bruges til at kvalificere kundeemner, reducere arbejdsbyrden af agenter ved at stille ofte stillede spørgsmål osv.

For at tilføje Dialogflow skal du oprette en servicekonto i din Google-projektkonsol og dele legitimationsoplysningerne. Se Dialogflow dokumenterne for mere information." } } } diff --git a/app/javascript/dashboard/i18n/locale/da/integrations.json b/app/javascript/dashboard/i18n/locale/da/integrations.json index fb25006d4..d9ecbfbcd 100644 --- a/app/javascript/dashboard/i18n/locale/da/integrations.json +++ b/app/javascript/dashboard/i18n/locale/da/integrations.json @@ -2,19 +2,19 @@ "INTEGRATION_SETTINGS": { "HEADER": "Integrationer", "WEBHOOK": { - "SUBSCRIBED_EVENTS": "Subscribed Events", + "SUBSCRIBED_EVENTS": "Abonnerede Begivenheder", "FORM": { "CANCEL": "Annuller", "DESC": "Webhook-begivenheder giver dig realtidsoplysninger om, hvad der sker på din Chatwoot-konto. Angiv en gyldig URL for at konfigurere et callback.", "SUBSCRIPTIONS": { - "LABEL": "Events", + "LABEL": "Begivenheder", "EVENTS": { - "CONVERSATION_CREATED": "Conversation Created", - "CONVERSATION_STATUS_CHANGED": "Conversation Status Changed", - "CONVERSATION_UPDATED": "Conversation Updated", - "MESSAGE_CREATED": "Message created", - "MESSAGE_UPDATED": "Message updated", - "WEBWIDGET_TRIGGERED": "Live chat widget opened by the user" + "CONVERSATION_CREATED": "Samtale Oprettet", + "CONVERSATION_STATUS_CHANGED": "Samtale Status Ændret", + "CONVERSATION_UPDATED": "Samtale Opdateret", + "MESSAGE_CREATED": "Besked oprettet", + "MESSAGE_UPDATED": "Besked opdateret", + "WEBWIDGET_TRIGGERED": "Live chat widget åbnet af brugeren" } }, "END_POINT": { @@ -22,7 +22,7 @@ "PLACEHOLDER": "Eksempel: https://example/api/webhook", "ERROR": "Angiv en gyldig URL" }, - "EDIT_SUBMIT": "Update webhook", + "EDIT_SUBMIT": "Opdater webhook", "ADD_SUBMIT": "Opret webhook" }, "TITLE": "Webhook", @@ -42,9 +42,9 @@ }, "EDIT": { "BUTTON_TEXT": "Rediger", - "TITLE": "Edit webhook", + "TITLE": "Rediger webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration updated successfully", + "SUCCESS_MESSAGE": "Webhook konfiguration opdateret", "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" } }, @@ -52,7 +52,7 @@ "CANCEL": "Annuller", "TITLE": "Tilføj ny webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration added successfully", + "SUCCESS_MESSAGE": "Webhook konfiguration tilføjet", "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" } }, @@ -64,7 +64,7 @@ }, "CONFIRM": { "TITLE": "Bekræft Sletning", - "MESSAGE": "Are you sure to delete the webhook? (%{webhookURL})", + "MESSAGE": "Er du sikker på at du vil slette webhook? (%{webhookURL})", "YES": "Ja, Slet ", "NO": "Nej, behold det" } @@ -72,8 +72,8 @@ }, "SLACK": { "HELP_TEXT": { - "TITLE": "Using Slack Integration", - "BODY": "

Chatwoot will now sync all the incoming conversations into the customer-conversations channel inside your slack workplace.

Replying to a conversation thread in customer-conversations slack channel will create a response back to the customer through chatwoot.

Start the replies with note: to create private notes instead of replies.

If the replier on slack has an agent profile in chatwoot under the same email, the replies will be associated accordingly.

When the replier doesn't have an associated agent profile, the replies will be made from the bot profile.

" + "TITLE": "Brug Slack Integration", + "BODY": "

Chatwoot vil nu synkronisere alle indgående samtaler ind i kundesamtaler kanalen i din slack arbejdsplads.

Svar på en samtaletråd i kunde-samtaler slack kanal vil skabe et svar tilbage til kunden gennem chatwoot.

Start svarene med note: for at oprette private noter i stedet for svar.

Hvis replikatoren på slack har en agentprofil i chatwoot under samme e-mail, vil svarene blive tilknyttet i overensstemmelse hermed.

Når replikatoren ikke har en tilknyttet agentprofil, vil svarene blive fremsat fra bot-profilen.

" } }, "DELETE": { @@ -87,48 +87,48 @@ }, "DASHBOARD_APPS": { "TITLE": "Dashboard Apps", - "HEADER_BTN_TXT": "Add a new dashboard app", - "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", - "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "HEADER_BTN_TXT": "Tilføj en ny dashboard app", + "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps tillader organisationer at integrere en applikation i Chatwoot-dashboardet for at give konteksten til kundesupportagenter. Denne funktion giver dig mulighed for at oprette et program uafhængigt og integrere at inde i instrumentbrættet til at give brugerinformation, deres ordrer eller deres tidligere betalingshistorie.

Når du indlejrer din applikation ved hjælp af instrumentbrættet i Chatwoot, dit program vil få konteksten af samtalen og kontakt som en vinduesbegivenhed. Gennemfør en lytter til besked begivenheden på din side for at modtage konteksten.

For at tilføje en ny dashboard app, klik på knappen 'Tilføj en ny dashboard app'.

", + "DESCRIPTION": "Dashboard Apps giver organisationer mulighed for at integrere et program i instrumentbrættet for at give konteksten for kundesupportagenter. Denne funktion giver dig mulighed for at oprette et program uafhængigt og integrere at give brugeroplysninger, deres ordrer, eller deres tidligere betalingshistorik.", "LIST": { - "404": "There are no dashboard apps configured on this account yet", - "LOADING": "Fetching dashboard apps...", + "404": "Der er ingen dashboard apps konfigureret på denne konto endnu", + "LOADING": "Henter dashboard apps...", "TABLE_HEADER": [ "Navn", "Endpoint" ], - "EDIT_TOOLTIP": "Edit app", - "DELETE_TOOLTIP": "Delete app" + "EDIT_TOOLTIP": "Rediger app", + "DELETE_TOOLTIP": "Slet app" }, "FORM": { "TITLE_LABEL": "Navn", - "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", - "TITLE_ERROR": "A name for the dashboard app is required", + "TITLE_PLACEHOLDER": "Angiv et navn til din dashboard app", + "TITLE_ERROR": "Et navn til dashboard app er påkrævet", "URL_LABEL": "Endpoint", - "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", - "URL_ERROR": "A valid URL is required" + "URL_PLACEHOLDER": "Angiv slutpunktets URL, hvor din app er vært", + "URL_ERROR": "En gyldig URL er påkrævet" }, "CREATE": { - "HEADER": "Add a new dashboard app", + "HEADER": "Tilføj en ny dashboard app", "FORM_SUBMIT": "Send", "FORM_CANCEL": "Annuller", - "API_SUCCESS": "Dashboard app configured successfully", - "API_ERROR": "We couldn't create an app. Please try again later" + "API_SUCCESS": "Dashboard app konfigureret", + "API_ERROR": "Vi kunne ikke oprette en app. Prøv igen senere" }, "UPDATE": { - "HEADER": "Edit dashboard app", + "HEADER": "Rediger dashboard app", "FORM_SUBMIT": "Opdater", "FORM_CANCEL": "Annuller", - "API_SUCCESS": "Dashboard app updated successfully", - "API_ERROR": "We couldn't update the app. Please try again later" + "API_SUCCESS": "Dashboard app opdateret", + "API_ERROR": "Vi kunne ikke opdatere appen. Prøv igen senere" }, "DELETE": { - "CONFIRM_YES": "Yes, delete it", - "CONFIRM_NO": "No, keep it", - "TITLE": "Confirm deletion", - "MESSAGE": "Are you sure to delete the app - %{appName}?", - "API_SUCCESS": "Dashboard app deleted successfully", - "API_ERROR": "We couldn't delete the app. Please try again later" + "CONFIRM_YES": "Ja, slet det", + "CONFIRM_NO": "Nej, behold det", + "TITLE": "Bekræft sletning", + "MESSAGE": "Er du sikker på at du vil slette appen - %{appName}?", + "API_SUCCESS": "Dashboard app slettet", + "API_ERROR": "Vi kunne ikke slette appen. Prøv igen senere" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/da/labelsMgmt.json index a7a65b654..ce3c3c7d3 100644 --- a/app/javascript/dashboard/i18n/locale/da/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/da/labelsMgmt.json @@ -19,9 +19,9 @@ "NAME": { "LABEL": "Etiket Navn", "PLACEHOLDER": "Etiket Navn", - "REQUIRED_ERROR": "Label name is required", - "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", - "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + "REQUIRED_ERROR": "Etiketnavn er påkrævet", + "MINIMUM_LENGTH_ERROR": "Mindste længde 2 er påkrævet", + "VALID_ERROR": "Kun alfabeter, tal, bindestreger og understregning er tilladt" }, "DESCRIPTION": { "LABEL": "Beskrivelse", diff --git a/app/javascript/dashboard/i18n/locale/da/report.json b/app/javascript/dashboard/i18n/locale/da/report.json index ff2528569..18f1bd6f8 100644 --- a/app/javascript/dashboard/i18n/locale/da/report.json +++ b/app/javascript/dashboard/i18n/locale/da/report.json @@ -3,7 +3,7 @@ "HEADER": "Samtaler", "LOADING_CHART": "Indlæser diagramdata...", "NO_ENOUGH_DATA": "Vi har ikke modtaget nok datapunkter til at generere rapport. Prøv igen senere.", - "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "DOWNLOAD_AGENT_REPORTS": "Download agentrapporter", "METRICS": { "CONVERSATIONS": { "NAME": "Samtaler", @@ -18,16 +18,16 @@ "DESC": "( Total )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Første Respons Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Første svartid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_TIME": { "NAME": "Løsnings Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Opløsningstid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_COUNT": { "NAME": "Antal Afsluttede", @@ -45,83 +45,83 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Seneste 3 måneder" }, { "id": 3, - "name": "Last 6 months" + "name": "Seneste 6 måneder" }, { "id": 4, - "name": "Last year" + "name": "Sidste år" }, { "id": 5, - "name": "Custom date range" + "name": "Tilpasset datointerval" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Anvend", + "PLACEHOLDER": "Vælg datointerval" }, - "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", - "DURATION_FILTER_LABEL": "Duration", + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Gruppér Efter", + "DURATION_FILTER_LABEL": "Varighed", "GROUP_BY_DAY_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Dag" } ], "GROUP_BY_WEEK_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Dag" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Uge" } ], "GROUP_BY_MONTH_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Dag" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Uge" }, { "id": 3, - "groupBy": "Month" + "groupBy": "Måned" } ], "GROUP_BY_YEAR_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Dag" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Uge" }, { "id": 3, - "groupBy": "Month" + "groupBy": "Måned" }, { "id": 4, - "groupBy": "Year" + "groupBy": "År" } ], - "BUSINESS_HOURS": "Business Hours" + "BUSINESS_HOURS": "Forretningstider" }, "AGENT_REPORTS": { - "HEADER": "Agents Overview", + "HEADER": "Agenter Oversigt", "LOADING_CHART": "Indlæser diagramdata...", "NO_ENOUGH_DATA": "Vi har ikke modtaget nok datapunkter til at generere rapport. Prøv igen senere.", - "DOWNLOAD_AGENT_REPORTS": "Download agent reports", - "FILTER_DROPDOWN_LABEL": "Select Agent", + "DOWNLOAD_AGENT_REPORTS": "Download agentrapporter", + "FILTER_DROPDOWN_LABEL": "Vælg Agent", "METRICS": { "CONVERSATIONS": { "NAME": "Samtaler", @@ -136,16 +136,16 @@ "DESC": "( Total )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Første Respons Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Første svartid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_TIME": { "NAME": "Løsnings Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Opløsningstid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_COUNT": { "NAME": "Antal Afsluttede", @@ -163,32 +163,32 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Seneste 3 måneder" }, { "id": 3, - "name": "Last 6 months" + "name": "Seneste 6 måneder" }, { "id": 4, - "name": "Last year" + "name": "Sidste år" }, { "id": 5, - "name": "Custom date range" + "name": "Tilpasset datointerval" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Anvend", + "PLACEHOLDER": "Vælg datointerval" } }, "LABEL_REPORTS": { - "HEADER": "Labels Overview", + "HEADER": "Oversigt Over Etiketter", "LOADING_CHART": "Indlæser diagramdata...", "NO_ENOUGH_DATA": "Vi har ikke modtaget nok datapunkter til at generere rapport. Prøv igen senere.", - "DOWNLOAD_LABEL_REPORTS": "Download label reports", - "FILTER_DROPDOWN_LABEL": "Select Label", + "DOWNLOAD_LABEL_REPORTS": "Download etiketrapporter", + "FILTER_DROPDOWN_LABEL": "Vælg Etiket", "METRICS": { "CONVERSATIONS": { "NAME": "Samtaler", @@ -203,16 +203,16 @@ "DESC": "( Total )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Første Respons Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Første svartid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_TIME": { "NAME": "Løsnings Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Opløsningstid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_COUNT": { "NAME": "Antal Afsluttede", @@ -230,32 +230,32 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Seneste 3 måneder" }, { "id": 3, - "name": "Last 6 months" + "name": "Seneste 6 måneder" }, { "id": 4, - "name": "Last year" + "name": "Sidste år" }, { "id": 5, - "name": "Custom date range" + "name": "Tilpasset datointerval" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Anvend", + "PLACEHOLDER": "Vælg datointerval" } }, "INBOX_REPORTS": { - "HEADER": "Inbox Overview", + "HEADER": "Oversigt Over Indbakke", "LOADING_CHART": "Indlæser diagramdata...", "NO_ENOUGH_DATA": "Vi har ikke modtaget nok datapunkter til at generere rapport. Prøv igen senere.", - "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", - "FILTER_DROPDOWN_LABEL": "Select Inbox", + "DOWNLOAD_INBOX_REPORTS": "Download indbakke rapporter", + "FILTER_DROPDOWN_LABEL": "Vælg Indbakke", "METRICS": { "CONVERSATIONS": { "NAME": "Samtaler", @@ -270,16 +270,16 @@ "DESC": "( Total )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Første Respons Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Første svartid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_TIME": { "NAME": "Løsnings Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Opløsningstid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_COUNT": { "NAME": "Antal Afsluttede", @@ -297,32 +297,32 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Seneste 3 måneder" }, { "id": 3, - "name": "Last 6 months" + "name": "Seneste 6 måneder" }, { "id": 4, - "name": "Last year" + "name": "Sidste år" }, { "id": 5, - "name": "Custom date range" + "name": "Tilpasset datointerval" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Anvend", + "PLACEHOLDER": "Vælg datointerval" } }, "TEAM_REPORTS": { - "HEADER": "Team Overview", + "HEADER": "Team Oversigt", "LOADING_CHART": "Indlæser diagramdata...", "NO_ENOUGH_DATA": "Vi har ikke modtaget nok datapunkter til at generere rapport. Prøv igen senere.", - "DOWNLOAD_TEAM_REPORTS": "Download team reports", - "FILTER_DROPDOWN_LABEL": "Select Team", + "DOWNLOAD_TEAM_REPORTS": "Download teamrapporter", + "FILTER_DROPDOWN_LABEL": "Vælg Team", "METRICS": { "CONVERSATIONS": { "NAME": "Samtaler", @@ -337,16 +337,16 @@ "DESC": "( Total )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Første Respons Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Første svartid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_TIME": { "NAME": "Løsnings Tid", "DESC": "( Gns. )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Samlet antal samtaler, der anvendes til beregning:", + "TOOLTIP_TEXT": "Opløsningstid er %{metricValue} (baseret på %{conversationCount} samtaler)" }, "RESOLUTION_COUNT": { "NAME": "Antal Afsluttede", @@ -364,81 +364,81 @@ }, { "id": 2, - "name": "Last 3 months" + "name": "Seneste 3 måneder" }, { "id": 3, - "name": "Last 6 months" + "name": "Seneste 6 måneder" }, { "id": 4, - "name": "Last year" + "name": "Sidste år" }, { "id": 5, - "name": "Custom date range" + "name": "Tilpasset datointerval" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Anvend", + "PLACEHOLDER": "Vælg datointerval" } }, "CSAT_REPORTS": { - "HEADER": "CSAT Reports", - "NO_RECORDS": "There are no CSAT survey responses available.", - "DOWNLOAD": "Download CSAT Reports", + "HEADER": "CSAT Rapporter", + "NO_RECORDS": "Der er ingen CSAT undersøgelse svar til rådighed.", + "DOWNLOAD": "Download CSAT Rapporter", "FILTERS": { "AGENTS": { - "PLACEHOLDER": "Choose Agents" + "PLACEHOLDER": "Vælg Agenter" } }, "TABLE": { "HEADER": { - "CONTACT_NAME": "Contact", - "AGENT_NAME": "Assigned agent", - "RATING": "Rating", - "FEEDBACK_TEXT": "Feedback comment" + "CONTACT_NAME": "Kontakt", + "AGENT_NAME": "Tildelt agent", + "RATING": "Bedømmelse", + "FEEDBACK_TEXT": "Kommentar til feedback" } }, "METRIC": { "TOTAL_RESPONSES": { - "LABEL": "Total responses", - "TOOLTIP": "Total number of responses collected" + "LABEL": "Svar i alt", + "TOOLTIP": "Samlet antal indsamlede svar" }, "SATISFACTION_SCORE": { - "LABEL": "Satisfaction score", - "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + "LABEL": "Tilfredshed score", + "TOOLTIP": "Samlet antal positive respons / Samlet antal respons * 100" }, "RESPONSE_RATE": { - "LABEL": "Response rate", - "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + "LABEL": "Respons rate", + "TOOLTIP": "Samlet antal svar / Samlet antal CSAT undersøgelsesmeddelelser sendt * 100" } } }, "OVERVIEW_REPORTS": { - "HEADER": "Overview", - "LIVE": "Live", + "HEADER": "Oversigt", + "LIVE": "Levende", "ACCOUNT_CONVERSATIONS": { - "HEADER": "Open Conversations", - "LOADING_MESSAGE": "Loading conversation metrics...", + "HEADER": "Åbn Samtaler", + "LOADING_MESSAGE": "Indlæser samtalemetrik...", "OPEN": "Åbn", - "UNATTENDED": "Unattended", + "UNATTENDED": "Unattet", "UNASSIGNED": "Ikke Tildelt" }, "AGENT_CONVERSATIONS": { - "HEADER": "Conversations by agents", - "LOADING_MESSAGE": "Loading agent metrics...", - "NO_AGENTS": "There are no conversations by agents", + "HEADER": "Samtaler af agenter", + "LOADING_MESSAGE": "Indlæser agent målinger...", + "NO_AGENTS": "Der er ingen samtaler af agenter", "TABLE_HEADER": { "AGENT": "Agent", - "OPEN": "OPEN", - "UNATTENDED": "Unattended", + "OPEN": "ÅBN", + "UNATTENDED": "Unattet", "STATUS": "Status" } }, "AGENT_STATUS": { - "HEADER": "Agent status", + "HEADER": "Agentens status", "ONLINE": "Online", "BUSY": "Optaget", "OFFLINE": "Offline" diff --git a/app/javascript/dashboard/i18n/locale/da/setNewPassword.json b/app/javascript/dashboard/i18n/locale/da/setNewPassword.json index 087624091..0f3f3b599 100644 --- a/app/javascript/dashboard/i18n/locale/da/setNewPassword.json +++ b/app/javascript/dashboard/i18n/locale/da/setNewPassword.json @@ -16,7 +16,7 @@ "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" }, "CAPTCHA": { - "ERROR": "Verification expired. Please solve captcha again." + "ERROR": "Bekræftelse er udløbet. Løs captcha igen." }, "SUBMIT": "Send" } diff --git a/app/javascript/dashboard/i18n/locale/da/settings.json b/app/javascript/dashboard/i18n/locale/da/settings.json index 46e47635a..b3571a705 100644 --- a/app/javascript/dashboard/i18n/locale/da/settings.json +++ b/app/javascript/dashboard/i18n/locale/da/settings.json @@ -3,10 +3,10 @@ "LINK": "Profilindstillinger", "TITLE": "Profilindstillinger", "BTN_TEXT": "Opdater Profil", - "DELETE_AVATAR": "Delete Avatar", - "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", - "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", - "UPDATE_SUCCESS": "Your profile has been updated successfully", + "DELETE_AVATAR": "Slet Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar er blevet slettet", + "AVATAR_DELETE_FAILED": "Der er en fejl under sletning af avatar, prøv igen", + "UPDATE_SUCCESS": "Din profil er blevet opdateret", "PASSWORD_UPDATE_SUCCESS": "Din adgangskode er blevet ændret", "AFTER_EMAIL_CHANGED": "Din profil er blevet opdateret. Log venligst ind igen, da dine loginoplysninger er ændret", "FORM": { @@ -20,39 +20,39 @@ "NOTE": "Din e-mailadresse er din identitet og bruges til at logge ind." }, "MESSAGE_SIGNATURE_SECTION": { - "TITLE": "Personal message signature", - "NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.", - "BTN_TEXT": "Save message signature", - "API_ERROR": "Couldn't save signature! Try again", - "API_SUCCESS": "Signature saved successfully" + "TITLE": "Personlig beskedsignatur", + "NOTE": "Opret en personlig besked signatur, der vil blive føjet til alle de meddelelser, du sender fra din e-mail indbakke. Brug den rige content editor til at oprette en meget personlig signatur.", + "BTN_TEXT": "Gem beskedsignatur", + "API_ERROR": "Kunne ikke gemme signatur! Prøv igen", + "API_SUCCESS": "Signatur gemt" }, "MESSAGE_SIGNATURE": { - "LABEL": "Message Signature", - "ERROR": "Message Signature cannot be empty", - "PLACEHOLDER": "Insert your personal message signature here." + "LABEL": "Besked Signatur", + "ERROR": "Beskedsignatur kan ikke være tom", + "PLACEHOLDER": "Indsæt din personlige beskedsignatur her." }, "PASSWORD_SECTION": { "TITLE": "Adgangskode", "NOTE": "Opdatering af din adgangskode vil nulstille dine logins på flere enheder.", - "BTN_TEXT": "Change password" + "BTN_TEXT": "Skift adgangskode" }, "ACCESS_TOKEN": { "TITLE": "Adgangs Token", "NOTE": "Denne token kan bruges, hvis du bygger en API-baseret integration" }, "AUDIO_NOTIFICATIONS_SECTION": { - "TITLE": "Audio Notifications", - "NOTE": "Enable audio notifications in dashboard for new messages and conversations.", - "NONE": "None", - "ASSIGNED": "Assigned Conversations", - "ALL_CONVERSATIONS": "All Conversations" + "TITLE": "Lyd Notifikationer", + "NOTE": "Aktivér lydmeddelelser i dashboard for nye beskeder og samtaler.", + "NONE": "Ingen", + "ASSIGNED": "Tildelte Samtaler", + "ALL_CONVERSATIONS": "Alle Samtaler" }, "EMAIL_NOTIFICATIONS_SECTION": { "TITLE": "E-Mail Notifikationer", "NOTE": "Opdater dine e-mail notifikationspræferencer her", "CONVERSATION_ASSIGNMENT": "Send e-mail notifikationer når en samtale er tildelt mig", "CONVERSATION_CREATION": "Send e-mail notifikationer når en ny samtale er oprettet", - "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "CONVERSATION_MENTION": "Send e-mail notifikationer, når du er nævnt i en samtale", "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send e-mail notifikationer når en ny besked er oprettet i en tildelt samtale" }, "API": { @@ -64,7 +64,7 @@ "NOTE": "Opdater dine push-notifikationspræferencer her", "CONVERSATION_ASSIGNMENT": "Send push-notifikationer, når en samtale er tildelt mig", "CONVERSATION_CREATION": "Send push-notifikationer, når en ny samtale er oprettet", - "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "CONVERSATION_MENTION": "Send push-notifikationer, når du er nævnt i en samtale", "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push-notifikationer, når en ny besked oprettes i en tildelt samtale", "HAS_ENABLED_PUSH": "Du har aktiveret push for denne browser.", "REQUEST_PUSH": "Aktivér push-notifikationer" @@ -96,38 +96,38 @@ "PLACEHOLDER": "Indtast venligst din e-mailadresse, dette vil blive vist i samtaler" }, "CURRENT_PASSWORD": { - "LABEL": "Current password", - "ERROR": "Please enter the current password", - "PLACEHOLDER": "Please enter the current password" + "LABEL": "Nuværende adgangskode", + "ERROR": "Indtast den aktuelle adgangskode", + "PLACEHOLDER": "Indtast den aktuelle adgangskode" }, "PASSWORD": { - "LABEL": "New password", + "LABEL": "Ny adgangskode", "ERROR": "Indtast en adgangskode med længde 6 eller flere", "PLACEHOLDER": "Indtast venligst en ny adgangskode" }, "PASSWORD_CONFIRMATION": { "LABEL": "Bekræft ny adgangskode", "ERROR": "Bekræftelses adgangskoden skal matche adgangskoden", - "PLACEHOLDER": "Please re-enter your new password" + "PLACEHOLDER": "Indtast venligst din nye adgangskode igen" } } }, "SIDEBAR_ITEMS": { "CHANGE_AVAILABILITY_STATUS": "Skift", "CHANGE_ACCOUNTS": "Skift Konto", - "CONTACT_SUPPORT": "Contact Support", + "CONTACT_SUPPORT": "Kontakt Support", "SELECTOR_SUBTITLE": "Vælg en konto fra følgende liste", "PROFILE_SETTINGS": "Profilindstillinger", - "KEYBOARD_SHORTCUTS": "Keyboard Shortcuts", + "KEYBOARD_SHORTCUTS": "Tastaturgenveje", "LOGOUT": "Log Ud" }, "APP_GLOBAL": { "TRIAL_MESSAGE": "dage prøveperiode tilbage.", "TRAIL_BUTTON": "Køb Nu", - "DELETED_USER": "Deleted User", + "DELETED_USER": "Slettet Bruger", "ACCOUNT_SUSPENDED": { - "TITLE": "Account Suspended", - "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + "TITLE": "Konto Suspenderet", + "MESSAGE": "Din konto er suspenderet. Gå ud til supportteamet for mere information." } }, "COMPONENTS": { @@ -136,8 +136,8 @@ "COPY_SUCCESSFUL": "Kode kopieret til udklipsholder med succes" }, "SHOW_MORE_BLOCK": { - "SHOW_MORE": "Show More", - "SHOW_LESS": "Show Less" + "SHOW_MORE": "Vis Mere", + "SHOW_LESS": "Vis Mindre" }, "FILE_BUBBLE": { "DOWNLOAD": "Download", @@ -154,78 +154,79 @@ } }, "SIDEBAR": { - "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", - "SWITCH": "Switch", + "CURRENTLY_VIEWING_ACCOUNT": "Vises nu:", + "SWITCH": "Skift", "CONVERSATIONS": "Samtaler", - "ALL_CONVERSATIONS": "All Conversations", - "MENTIONED_CONVERSATIONS": "Mentions", + "ALL_CONVERSATIONS": "Alle Samtaler", + "MENTIONED_CONVERSATIONS": "Omtaler", "REPORTS": "Rapporter", "SETTINGS": "Indstillinger", "CONTACTS": "Kontakter", "HOME": "Hjem", "AGENTS": "Agenter", "INBOXES": "Indbakker", - "NOTIFICATIONS": "Notifications", + "NOTIFICATIONS": "Notifikationer", "CANNED_RESPONSES": "Standardsvar Svar", "INTEGRATIONS": "Integrationer", "PROFILE_SETTINGS": "Profilindstillinger", "ACCOUNT_SETTINGS": "Kontoindstillinger", - "APPLICATIONS": "Applications", + "APPLICATIONS": "Applikationer", "LABELS": "Etiketter", "CUSTOM_ATTRIBUTES": "Brugerdefinerede Egenskaber", - "AUTOMATION": "Automation", + "AUTOMATION": "Automatisering", "TEAMS": "Teams", - "BILLING": "Billing", - "CUSTOM_VIEWS_FOLDER": "Folders", - "CUSTOM_VIEWS_SEGMENTS": "Segments", - "ALL_CONTACTS": "All Contacts", - "TAGGED_WITH": "Tagged with", - "NEW_LABEL": "New label", - "NEW_TEAM": "New team", - "NEW_INBOX": "New inbox", + "BILLING": "Fakturering", + "CUSTOM_VIEWS_FOLDER": "Mapper", + "CUSTOM_VIEWS_SEGMENTS": "Segmenter", + "ALL_CONTACTS": "Alle Kontakter", + "TAGGED_WITH": "Mærket med", + "NEW_LABEL": "Ny label", + "NEW_TEAM": "Nyt team", + "NEW_INBOX": "Ny indbakke", "REPORTS_CONVERSATION": "Samtaler", "CSAT": "CSAT", - "CAMPAIGNS": "Campaigns", - "ONGOING": "Ongoing", - "ONE_OFF": "One off", + "CAMPAIGNS": "Kampagner", + "ONGOING": "Igangværende", + "ONE_OFF": "En rabat", "REPORTS_AGENT": "Agenter", "REPORTS_LABEL": "Etiketter", - "REPORTS_INBOX": "Inbox", + "REPORTS_INBOX": "Indbakke", "REPORTS_TEAM": "Team", - "SET_AVAILABILITY_TITLE": "Set yourself as", + "SET_AVAILABILITY_TITLE": "Sæt dig selv som", "BETA": "Beta", - "REPORTS_OVERVIEW": "Overview", + "REPORTS_OVERVIEW": "Oversigt", "FACEBOOK_REAUTHORIZE": "Din Facebook-forbindelse er udløbet, tilslut venligst din Facebook-side igen for at fortsætte tjenesterne", "HELP_CENTER": { - "ALL_ARTICLES": "All Articles", - "MY_ARTICLES": "My Articles", - "DRAFT": "Draft", - "ARCHIVED": "Archived", - "CATEGORY": "Category", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "TITLE": "Hjælpecenter (Beta)", + "ALL_ARTICLES": "Alle Artikler", + "MY_ARTICLES": "Alle Artikler", + "DRAFT": "Kladde", + "ARCHIVED": "Arkiveret", + "CATEGORY": "Kategori", + "CATEGORY_EMPTY_MESSAGE": "Ingen kategorier fundet" }, - "DOCS": "Read docs" + "DOCS": "Læs dokumenter" }, "BILLING_SETTINGS": { - "TITLE": "Billing", + "TITLE": "Fakturering", "CURRENT_PLAN": { - "TITLE": "Current Plan", - "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + "TITLE": "Nuværende Abonnement", + "PLAN_NOTE": "Du abonnerer i øjeblikket på **%{plan}** planen med **%{quantity}** licenser" }, "MANAGE_SUBSCRIPTION": { - "TITLE": "Manage your subscription", - "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", - "BUTTON_TXT": "Go to the billing portal" + "TITLE": "Administrer dit abonnement", + "DESCRIPTION": "Se dine tidligere fakturaer, rediger dine fakturaoplysninger eller annuller dit abonnement.", + "BUTTON_TXT": "Gå til faktureringsportalen" }, "CHAT_WITH_US": { - "TITLE": "Need help?", - "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "TITLE": "Brug for hjælp?", + "DESCRIPTION": "Har du problemer med fakturering? Vi er her for at hjælpe.", "BUTTON_TXT": "Chat med os" }, - "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + "NO_BILLING_USER": "Din faktureringskonto er ved at blive konfigureret. Opdater venligst siden og prøv igen." }, "CREATE_ACCOUNT": { - "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NO_ACCOUNT_WARNING": "Uh oh! Vi kunne ikke finde nogen Chatwoot-konti. Opret venligst en ny konto for at fortsætte.", "NEW_ACCOUNT": "Ny Konto", "SELECTOR_SUBTITLE": "Opret en ny konto", "API": { @@ -243,26 +244,25 @@ }, "KEYBOARD_SHORTCUTS": { "TITLE": { - "OPEN_CONVERSATION": "Open conversation", - "RESOLVE_AND_NEXT": "Resolve and move to next", - "NAVIGATE_DROPDOWN": "Navigate dropdown items", - "RESOLVE_CONVERSATION": "Resolve Conversation", - "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", - "ADD_ATTACHMENT": "Add Attachment", - "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", - "TOGGLE_SIDEBAR": "Toggle Sidebar", - "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", - "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", - "GO_TO_SETTINGS": "Go to Settings", - "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", - "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", - "SWITCH_TO_REPLY": "Switch to Reply", - "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + "OPEN_CONVERSATION": "Åbn samtale", + "RESOLVE_AND_NEXT": "Løs og flyt til næste", + "NAVIGATE_DROPDOWN": "Naviger rullemenuer", + "RESOLVE_CONVERSATION": "Løs Samtale", + "GO_TO_CONVERSATION_DASHBOARD": "Gå til Konversationspanel", + "ADD_ATTACHMENT": "Tilføj Vedhæftning", + "GO_TO_CONTACTS_DASHBOARD": "Gå til Contacts Dashboard", + "TOGGLE_SIDEBAR": "Slå Sidebjælke Til/Fra", + "GO_TO_REPORTS_SIDEBAR": "Gå til Rapporter sidepanel", + "MOVE_TO_NEXT_TAB": "Flyt til næste fane i samtalelisten", + "GO_TO_SETTINGS": "Gå til Indstillinger", + "SWITCH_CONVERSATION_STATUS": "Skift til næste samtalestatus", + "SWITCH_TO_PRIVATE_NOTE": "Skift til privat note", + "SWITCH_TO_REPLY": "Skift til svar", + "TOGGLE_SNOOZE_DROPDOWN": "Skift snooze dropdown" }, "KEYS": { - "WINDOWS_KEY_AND_COMMAND_KEY": "Win / ⌘", - "ALT_OR_OPTION_KEY": "Alt / ⌥", + "WINDOWS_KEY_AND_COMMAND_KEY": "Vind / ¤", + "ALT_OR_OPTION_KEY": "Alt. / ¤", "FORWARD_SLASH_KEY": "/" } } diff --git a/app/javascript/dashboard/i18n/locale/da/signup.json b/app/javascript/dashboard/i18n/locale/da/signup.json index 416db5f8c..d5ebaaea3 100644 --- a/app/javascript/dashboard/i18n/locale/da/signup.json +++ b/app/javascript/dashboard/i18n/locale/da/signup.json @@ -5,24 +5,24 @@ "TERMS_ACCEPT": "Ved at tilmelde dig, accepterer du vores T & C og Privatlivspolitik", "ACCOUNT_NAME": { "LABEL": "Kontonavn", - "PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises", - "ERROR": "Account name is too short" + "PLACEHOLDER": "Indtast et kontonavn, fx: Wayne Enterprises", + "ERROR": "Kontonavn er for kort" }, "FULL_NAME": { - "LABEL": "Full name", - "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", - "ERROR": "Full name is too short" + "LABEL": "Fulde navn", + "PLACEHOLDER": "Indtast dit fulde navn. fx: Bruce Wayne", + "ERROR": "Fulde navn er for kort" }, "EMAIL": { - "LABEL": "Work email", - "PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises", - "ERROR": "Email address is invalid" + "LABEL": "Arbejde e-mail", + "PLACEHOLDER": "Indtast din arbejdsmailadresse fx: bruce@wayne.enterprises", + "ERROR": "E-mail adresse er ugyldig" }, "PASSWORD": { "LABEL": "Adgangskode", "PLACEHOLDER": "Adgangskode", "ERROR": "Adgangskoden er for kort", - "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character" + "IS_INVALID_PASSWORD": "Adgangskoden skal indeholde mindst 1 stort bogstav, 1 lille bogstav, 1 nummer og 1 specialtegn" }, "CONFIRM_PASSWORD": { "LABEL": "Bekræft Adgangskode", @@ -34,6 +34,6 @@ "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" }, "SUBMIT": "Send", - "HAVE_AN_ACCOUNT": "Already have an account?" + "HAVE_AN_ACCOUNT": "Har du allerede en konto?" } } diff --git a/app/javascript/dashboard/i18n/locale/da/teamsSettings.json b/app/javascript/dashboard/i18n/locale/da/teamsSettings.json index 1c9faa6bc..b055d31ce 100644 --- a/app/javascript/dashboard/i18n/locale/da/teamsSettings.json +++ b/app/javascript/dashboard/i18n/locale/da/teamsSettings.json @@ -1,35 +1,35 @@ { "TEAMS_SETTINGS": { - "NEW_TEAM": "Create new team", + "NEW_TEAM": "Opret nyt team", "HEADER": "Teams", - "SIDEBAR_TXT": "

Teams

Teams let you organize your agents into groups based on their responsibilities.
An agent can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.

", + "SIDEBAR_TXT": "

Hold

Hold lader dig organisere dine agenter i grupper baseret på deres ansvar.
En agent kan være en del af flere hold. Du kan tildele samtaler til et team, når du arbejder i fællesskab.

", "LIST": { - "404": "There are no teams created on this account.", - "EDIT_TEAM": "Edit team" + "404": "Der er ingen teams oprettet på denne konto.", + "EDIT_TEAM": "Rediger team" }, "CREATE_FLOW": { "CREATE": { - "TITLE": "Create a new team", - "DESC": "Add a title and description to your new team." + "TITLE": "Opret et nyt team", + "DESC": "Tilføj en titel og beskrivelse til dit nye team." }, "AGENTS": { - "BUTTON_TEXT": "Add agents to team", - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + "BUTTON_TEXT": "Tilføj agenter til team", + "TITLE": "Tilføj agenter til team - %{teamName}", + "DESC": "Tilføj agenter til dit nyoprettede team. Dette lader dig samarbejde som et team om samtaler, få besked om nye begivenheder i samme samtale." }, "WIZARD": [ { "title": "Opret", "route": "settings_teams_new", - "body": "Create a new team of agents." + "body": "Opret et nyt team af agenter." }, { "title": "Tilføj Agenter", "route": "settings_teams_add_agents", - "body": "Add agents to the team." + "body": "Tilføj agenter til holdet." }, { - "title": "Finish", + "title": "Afslut", "route": "settings_teams_finish", "body": "Så er alt klart!" } @@ -37,89 +37,89 @@ }, "EDIT_FLOW": { "CREATE": { - "TITLE": "Edit your team details", - "DESC": "Edit title and description to your team.", - "BUTTON_TEXT": "Update team" + "TITLE": "Rediger dine teamoplysninger", + "DESC": "Rediger titel og beskrivelse til dit team.", + "BUTTON_TEXT": "Opdater team" }, "AGENTS": { - "BUTTON_TEXT": "Update agents in team", - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + "BUTTON_TEXT": "Opdater agenter i teamet", + "TITLE": "Tilføj agenter til team - %{teamName}", + "DESC": "Tilføj agenter til dit nyoprettede team. Alle de tilføjede agenter vil blive underrettet, når en samtale er tildelt til dette team." }, "WIZARD": [ { - "title": "Team details", + "title": "Team detaljer", "route": "settings_teams_edit", - "body": "Change name, description and other details." + "body": "Skift navn, beskrivelse og andre detaljer." }, { - "title": "Edit Agents", + "title": "Rediger Agenter", "route": "settings_teams_edit_members", - "body": "Edit agents in your team." + "body": "Rediger agenter i dit team." }, { - "title": "Finish", + "title": "Afslut", "route": "settings_teams_edit_finish", "body": "Så er alt klart!" } ] }, "TEAM_FORM": { - "ERROR_MESSAGE": "Couldn't save the team details. Try again." + "ERROR_MESSAGE": "Kunne ikke gemme teamdetaljerne. Prøv igen." }, "AGENTS": { "AGENT": "AGENT", "EMAIL": "E-MAIL", "BUTTON_TEXT": "Tilføj agenter", - "ADD_AGENTS": "Adding Agents to your Team...", - "SELECT": "select", - "SELECT_ALL": "select all agents", - "SELECTED_COUNT": "%{selected} out of %{total} agents selected." + "ADD_AGENTS": "Tilføjer agenter til dit Team...", + "SELECT": "vælg", + "SELECT_ALL": "vælg alle agenter", + "SELECTED_COUNT": "%{selected} ud af %{total} valgte agenter." }, "ADD": { - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", - "SELECT": "select", - "SELECT_ALL": "select all agents", - "SELECTED_COUNT": "%{selected} out of %{total} agents selected.", + "TITLE": "Tilføj agenter til team - %{teamName}", + "DESC": "Tilføj agenter til dit nyoprettede team. Dette lader dig samarbejde som et team om samtaler, få besked om nye begivenheder i samme samtale.", + "SELECT": "vælg", + "SELECT_ALL": "vælg alle agenter", + "SELECTED_COUNT": "%{selected} ud af %{total} valgte agenter.", "BUTTON_TEXT": "Tilføj agenter", - "AGENT_VALIDATION_ERROR": "Select at least one agent." + "AGENT_VALIDATION_ERROR": "Vælg mindst én agent." }, "FINISH": { - "TITLE": "Your team is ready!", - "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", - "BUTTON_TEXT": "Finish" + "TITLE": "Dit team er klar!", + "MESSAGE": "Du kan nu samarbejde som et team om samtaler. Tillykke med at støtte ", + "BUTTON_TEXT": "Afslut" }, "DELETE": { "BUTTON_TEXT": "Slet", "API": { - "SUCCESS_MESSAGE": "Team deleted successfully.", - "ERROR_MESSAGE": "Couldn't delete the team. Try again." + "SUCCESS_MESSAGE": "Team slettet.", + "ERROR_MESSAGE": "Kunne ikke slette teamet. Prøv igen." }, "CONFIRM": { - "TITLE": "Are you sure want to delete - %{teamName}", - "PLACE_HOLDER": "Please type {teamName} to confirm", - "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "TITLE": "Er du sikker på du vil slette - %{teamName}", + "PLACE_HOLDER": "Skriv venligst {teamName} for at bekræfte", + "MESSAGE": "Sletning af teamet vil fjerne teamtildelingen fra de samtaler, der er tildelt dette team.", "YES": "Slet ", "NO": "Annuller" } }, "SETTINGS": "Indstillinger", "FORM": { - "UPDATE": "Update team", - "CREATE": "Create team", + "UPDATE": "Opdater team", + "CREATE": "Opret team", "NAME": { - "LABEL": "Team name", - "PLACEHOLDER": "Example: Sales, Customer Support" + "LABEL": "Team navn", + "PLACEHOLDER": "Eksempel: Salg, Kundesupport" }, "DESCRIPTION": { - "LABEL": "Team Description", - "PLACEHOLDER": "Short description about this team." + "LABEL": "Hold Beskrivelse", + "PLACEHOLDER": "Kort beskrivelse af dette team." }, "AUTO_ASSIGN": { - "LABEL": "Allow auto assign for this team." + "LABEL": "Tillad automatisk tildeling af dette team." }, - "SUBMIT_CREATE": "Create team" + "SUBMIT_CREATE": "Opret team" } } } diff --git a/app/javascript/dashboard/i18n/locale/da/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/da/whatsappTemplates.json index bbcf28156..11b8ced68 100644 --- a/app/javascript/dashboard/i18n/locale/da/whatsappTemplates.json +++ b/app/javascript/dashboard/i18n/locale/da/whatsappTemplates.json @@ -1,25 +1,25 @@ { "WHATSAPP_TEMPLATES": { "MODAL": { - "TITLE": "Whatsapp Templates", - "SUBTITLE": "Select the whatsapp template you want to send", - "TEMPLATE_SELECTED_SUBTITLE": "Process %{templateName}" + "TITLE": "Whatsapp Skabeloner", + "SUBTITLE": "Vælg den whatsapp skabelon, du vil sende", + "TEMPLATE_SELECTED_SUBTITLE": "Proces %{templateName}" }, "PICKER": { - "SEARCH_PLACEHOLDER": "Search Templates", - "NO_TEMPLATES_FOUND": "No templates found for", + "SEARCH_PLACEHOLDER": "Søg Skabeloner", + "NO_TEMPLATES_FOUND": "Ingen skabeloner fundet for", "LABELS": { - "LANGUAGE": "Language", - "TEMPLATE_BODY": "Template Body", - "CATEGORY": "Category" + "LANGUAGE": "Sprog", + "TEMPLATE_BODY": "Skabelon Krop", + "CATEGORY": "Kategori" } }, "PARSER": { - "VARIABLES_LABEL": "Variables", - "VARIABLE_PLACEHOLDER": "Enter %{variable} value", - "GO_BACK_LABEL": "Go Back", - "SEND_MESSAGE_LABEL": "Send Message", - "FORM_ERROR_MESSAGE": "Please fill all variables before sending" + "VARIABLES_LABEL": "Variabler", + "VARIABLE_PLACEHOLDER": "Indtast %{variable} værdi", + "GO_BACK_LABEL": "Gå Tilbage", + "SEND_MESSAGE_LABEL": "Send Besked", + "FORM_ERROR_MESSAGE": "Udfyld venligst alle variabler før afsendelse" } } } diff --git a/app/javascript/dashboard/i18n/locale/de/contact.json b/app/javascript/dashboard/i18n/locale/de/contact.json index 94a621688..277c7c08d 100644 --- a/app/javascript/dashboard/i18n/locale/de/contact.json +++ b/app/javascript/dashboard/i18n/locale/de/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Nicht verfügbar", "EMAIL_ADDRESS": "E-Mail-Adresse", "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifizierer", "COPY_SUCCESSFUL": "Der Code wurde erfolgreich in die Zwischenablage kopiert", "COMPANY": "Firma", "LOCATION": "Ort", diff --git a/app/javascript/dashboard/i18n/locale/de/conversation.json b/app/javascript/dashboard/i18n/locale/de/conversation.json index 257c7cb52..bd174bfc1 100644 --- a/app/javascript/dashboard/i18n/locale/de/conversation.json +++ b/app/javascript/dashboard/i18n/locale/de/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Bitte wählen Sie eine Konversation aus dem linken Bereich aus", + "CSAT_REPLY_MESSAGE": "Bitte bewerte die Unterhaltung", "404": "Wir können die Konversation leider nicht finden. Bitte versuche es erneut", "SWITCH_VIEW_LAYOUT": "Layout wechseln", "DASHBOARD_APP_TAB_MESSAGES": "Nachrichten", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label erfolgreich zugewiesen", "ASSIGN_LABEL_FAILED": "Labelzuweisung fehlgeschlagen", "CHANGE_TEAM": "Das Konversationsteam hat sich geändert", - "FILE_SIZE_LIMIT": "Die Datei überschreitet das Limit von {MAXIMUM_FILE_UPLOAD_SIZE} für Anhänge", + "FILE_SIZE_LIMIT": "Die Datei überschreitet das Anhangslimit von {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", "MESSAGE_ERROR": "Nachricht konnte nicht gesendet werden, bitte versuchen Sie es später erneut", "SENT_BY": "Gesendet von:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/de/helpCenter.json b/app/javascript/dashboard/i18n/locale/de/helpCenter.json index a4bffcb26..80267c9a9 100644 --- a/app/javascript/dashboard/i18n/locale/de/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/de/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Alle Artikel", "PUBLISH_BUTTON": "Veröffentlichen", + "MOVE_TO_ARCHIVE_BUTTON": "Zu archiviert verschieben", "PREVIEW": "Vorschau", "ADD_TRANSLATION": "Übersetzung hinzufügen", "OPEN_SIDEBAR": "Seitenleiste öffnen", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portale", + "DEFAULT": "Standard", "NEW_BUTTON": "Neues Portal", "ACTIVE_BADGE": "aktiv", "CHOOSE_LOCALE_LABEL": "Wählen Sie ein Gebietsschema", @@ -84,7 +86,8 @@ "COUNT_LABEL": "Artikel", "ADD": "Sprache hinzufügen", "VISIT": "Seite besuchen", - "SETTINGS": "Einstellungen" + "SETTINGS": "Einstellungen", + "DELETE": "Löschen" }, "PORTAL_CONFIG": { "TITLE": "Portalkonfigurationen", @@ -109,51 +112,96 @@ "DEFAULT_LOCALE": "Standard" } } + }, + "DELETE_PORTAL": { + "TITLE": "Portal löschen", + "MESSAGE": "Möchten Sie dieses Portal wirklich löschen", + "YES": "Ja, Portal löschen", + "NO": "Nein, Portal behalten", + "API": { + "DELETE_SUCCESS": "Portal erfolgreich gelöscht", + "DELETE_ERROR": "Fehler beim Löschen des Portals" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Portal bearbeiten", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Grundinformation" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portalanpassung" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorien" + }, + "LOCALE_SETTINGS": { + "TITLE": "Sprachen" + } + }, + "CATEGORIES": { + "TITLE": "Kategorien in", + "NEW_CATEGORY": "Neue Kategorie", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Beschreibung", + "LOCALE": "Sprache", + "ARTICLE_COUNT": "Anzahl Artikel", + "ACTION_BUTTON": { + "EDIT": "Kategorie bearbeiten", + "DELETE": "Kategorie löschen" + }, + "EMPTY_TEXT": "Keine Kategorien gefunden" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Grundeinstellungen aktualisieren" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Informationen zum Hilfezentrum", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Grundlegende Informationen zum Portal", + "CREATE_BASIC_SETTING_BUTTON": "Portalgrundeinstellungen erstellen" }, { - "title": "Help center customization", + "title": "Anpassung des Help Centers", "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "body": "Portal anpassen", + "UPDATE_PORTAL_BUTTON": "Portaleinstellungen aktualisieren" }, { "title": "Voila! 🎉", "route": "portal_finish", - "body": "You're all set!", + "body": "Sie sind bereit!", "FINISH": "Abschließen" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Zurück", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Portal erstellen", + "TITLE": "Informationen zum Hilfezentrum", + "CREATE_BASIC_SETTING_BUTTON": "Portalgrundeinstellungen erstellen" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Portalanpassung", + "TITLE": "Anpassung des Help Centers", + "UPDATE_PORTAL_BUTTON": "Portaleinstellungen aktualisieren" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Voila!🎉 Sie sind fertig!", + "MESSAGE": "Sie können dieses erstellte Portal jetzt auf Ihrer Seite \"Alle Portale\" sehen.", + "FINISH": "Zur Seite Alle Portale" } }, "LOGO": { "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "UPLOAD_BUTTON": "Logo hochladen", + "HELP_TEXT": "Dieses Logo wird in der Kopfzeile des Portals angezeigt." }, "NAME": { "LABEL": "Name", @@ -179,24 +227,56 @@ "ERROR": "Homepage-Link ist erforderlich" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Farbe des Portaldesigns", + "HELP_TEXT": "Diese Farbe wird als Designfarbe für das Portal angezeigt." }, "PAGE_TITLE": { "LABEL": "Seitentitel", "PLACEHOLDER": "Titel der Portalseite", - "HELP_TEXT": "The page title will be used in the public facing portal.", + "HELP_TEXT": "Der Seitentitel wird im öffentlich zugänglichen Portal verwendet.", "ERROR": "Seitentitel ist erforderlich" }, "HEADER_TEXT": { "LABEL": "Überschrift", "PLACEHOLDER": "Portal-Header-Text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "HELP_TEXT": "Der Kopfzeilentext des Portals wird im öffentlich zugänglichen Portal verwendet.", "ERROR": "Portal-Kopfzeilentext ist erforderlich" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal erfolgreich erstellt.", "ERROR_MESSAGE_FOR_BASIC": "Das Portal konnte nicht erstellt werden. Versuchen Sie es nochmal.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal erfolgreich aktualisiert.", + "ERROR_MESSAGE_FOR_UPDATE": "Das Portal konnte nicht aktualisiert werden. Versuchen Sie es nochmal." + } + }, + "ADD_LOCALE": { + "TITLE": "Neues Gebietsschema hinzufügen", + "SUB_TITLE": "Dadurch wird Ihrer verfügbaren Übersetzungsliste eine neue Sprache hinzugefügt.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Sprache", + "PLACEHOLDER": "Wählen Sie ein Gebietsschema", + "ERROR": "Sprache ist erforderlich" + }, + "BUTTONS": { + "CREATE": "Sprache erstellen", + "CANCEL": "Stornieren" + }, + "API": { + "SUCCESS_MESSAGE": "Sprache erfolgreich hinzugefügt", + "ERROR_MESSAGE": "Sprache kann nicht hinzugefügt werden. Versuchen Sie es nochmal." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Standardsprache erfolgreich aktualisiert", + "ERROR_MESSAGE": "Die Standardsprache kann nicht aktualisiert werden. Versuchen Sie es nochmal." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Sprache wurde erfolgreich aus dem Portal entfernt", + "ERROR_MESSAGE": "Sprache kann nicht aus dem Portal entfernt werden. Versuchen Sie es nochmal." } } }, @@ -223,8 +303,34 @@ "ERROR": "Fehler beim Speichern des Artikels" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Fehler beim Veröffentlichen des Artikels", + "SUCCESS": "Artikel erfolgreich veröffentlicht" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Fehler beim Archivieren des Artikels", + "SUCCESS": "Artikel erfolgreich archiviert" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Löschung bestätigen", + "MESSAGE": "Möchten Sie den Artikel wirklich löschen?", + "YES": "Ja, löschen", + "NO": "Nein, behalte es" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artikel erfolgreich gelöscht", + "ERROR_MESSAGE": "Fehler beim Löschen des Artikels" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Bitte fügen Sie die Überschrift und den Inhalt des Artikels hinzu, dann können nur Sie die Einstellungen aktualisieren" }, "SIDEBAR": { "SEARCH": { @@ -262,6 +368,43 @@ "SUCCESS_MESSAGE": "Kategorie erfolgreich erstellt", "ERROR_MESSAGE": "Kategorie kann nicht erstellt werden" } + }, + "EDIT": { + "TITLE": "Eine Kategorie bearbeiten", + "SUB_TITLE": "Durch das Bearbeiten einer Kategorie wird die Kategorie im öffentlich zugänglichen Portal aktualisiert.", + "PORTAL": "Portal", + "LOCALE": "Sprache", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Kategoriename", + "HELP_TEXT": "Der Kategoriename wird im öffentlich zugänglichen Portal verwendet, um Artikel zu kategorisieren.", + "ERROR": "Name wird benötigt" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategorie-Slug für URLs", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug ist erforderlich" + }, + "DESCRIPTION": { + "LABEL": "Beschreibung", + "PLACEHOLDER": "Geben Sie eine kurze Beschreibung der Kategorie ein.", + "ERROR": "Beschreibung wird benötigt" + }, + "BUTTONS": { + "CREATE": "Kategorie aktualisieren", + "CANCEL": "Stornieren" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorie erfolgreich aktualisiert", + "ERROR_MESSAGE": "Kategorie kann nicht aktualisiert werden" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorie erfolgreich gelöscht", + "ERROR_MESSAGE": "Kategorie kann nicht gelöscht werden" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/de/settings.json b/app/javascript/dashboard/i18n/locale/de/settings.json index d8c9ef18e..d7b9f5b2e 100644 --- a/app/javascript/dashboard/i18n/locale/de/settings.json +++ b/app/javascript/dashboard/i18n/locale/de/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Übersicht", "FACEBOOK_REAUTHORIZE": "Ihre Facebook-Verbindung ist abgelaufen, bitte verbinden Sie sich neu, um die Dienste fortzuführen", "HELP_CENTER": { + "TITLE": "Hilfezentrum (Beta)", "ALL_ARTICLES": "Alle Artikel", "MY_ARTICLES": "Meine Artikel", "DRAFT": "Entwürfe", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Zu den Einstellungen", "SWITCH_CONVERSATION_STATUS": "Zum nächsten Gesprächsstatus wechseln", "SWITCH_TO_PRIVATE_NOTE": "Zu privaten Notizen wechseln", - "TOGGLE_RICH_CONTENT_EDITOR": "Rich-Content-Editor umschalten", "SWITCH_TO_REPLY": "Zur Antwort wechseln", "TOGGLE_SNOOZE_DROPDOWN": "Schlummer-Dropdown ein-/ausblenden" }, diff --git a/app/javascript/dashboard/i18n/locale/el/contact.json b/app/javascript/dashboard/i18n/locale/el/contact.json index f2b781743..fff494d7e 100644 --- a/app/javascript/dashboard/i18n/locale/el/contact.json +++ b/app/javascript/dashboard/i18n/locale/el/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Μη Διαθέσιμο", "EMAIL_ADDRESS": "Διεύθυνση Email", "PHONE_NUMBER": "Αριθμός τηλεφώνου", + "IDENTIFIER": "Κωδικός", "COPY_SUCCESSFUL": "Αντιγράφτηκε με επιτυχία στο πρόχειρο", "COMPANY": "Εταιρία", "LOCATION": "Θέση", diff --git a/app/javascript/dashboard/i18n/locale/el/conversation.json b/app/javascript/dashboard/i18n/locale/el/conversation.json index 2a056c810..ed71895ad 100644 --- a/app/javascript/dashboard/i18n/locale/el/conversation.json +++ b/app/javascript/dashboard/i18n/locale/el/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Παρακαλώ επιλέξτε συζήτηση από το αριστερό τμήμα", + "CSAT_REPLY_MESSAGE": "Παρακαλώ αξιολογήστε τη συνομιλία", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Μηνύματα", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Η ομάδα συνομιλίας άλλαξε", - "FILE_SIZE_LIMIT": "Το αρχείο υπερβαίνει το όριο συνημμένου {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Δεν είναι δυνατή η αποστολή του μηνύματος, παρακαλώ προσπαθήστε ξανά αργότερα", "SENT_BY": "Αποστολή από:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/el/helpCenter.json b/app/javascript/dashboard/i18n/locale/el/helpCenter.json index 1e8d54624..2f6be5952 100644 --- a/app/javascript/dashboard/i18n/locale/el/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/el/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "ενεργή", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Ρυθμίσεις" + "SETTINGS": "Ρυθμίσεις", + "DELETE": "Διαγραφή" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Όνομα", + "DESCRIPTION": "Περιγραφή", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Άκυρο" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Επιβεβαίωση Διαγραφής", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ναι, Διέγραψε το", + "NO": "Όχι, Κράτησε τον/την" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Όνομα", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Απαιτείται όνομα" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Περιγραφή", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Η περιγραφή απαιτείται" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Άκυρο" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/el/settings.json b/app/javascript/dashboard/i18n/locale/el/settings.json index bd32c67d2..bcb055b9d 100644 --- a/app/javascript/dashboard/i18n/locale/el/settings.json +++ b/app/javascript/dashboard/i18n/locale/el/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Επισκόπηση", "FACEBOOK_REAUTHORIZE": "Η σύνδεση Facebook έχει λήξει, παρακαλώ ξανασυνδεθείτε στο Facebook για να συνεχίσετε", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Μετάβαση στις ρυθμίσεις", "SWITCH_CONVERSATION_STATUS": "Εναλλαγή στην επόμενη κατάσταση συνομιλίας", "SWITCH_TO_PRIVATE_NOTE": "Αλλαγή σε Ιδιωτική Σημείωση", - "TOGGLE_RICH_CONTENT_EDITOR": "Εναλλαγή επεξεργαστή εμπλουτισμένου περιεχομένου", "SWITCH_TO_REPLY": "Εναλλαγή σε απάντηση", "TOGGLE_SNOOZE_DROPDOWN": "Εναλλαγή αναβολής dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/es/contact.json b/app/javascript/dashboard/i18n/locale/es/contact.json index 1da3b4544..9eac85cb5 100644 --- a/app/javascript/dashboard/i18n/locale/es/contact.json +++ b/app/javascript/dashboard/i18n/locale/es/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "No Disponible", "EMAIL_ADDRESS": "Dirección de correo", "PHONE_NUMBER": "Número de teléfono", + "IDENTIFIER": "Idenrificador", "COPY_SUCCESSFUL": "Copiado al portapapeles satisfactoriamente", "COMPANY": "Empresa", "LOCATION": "Ubicación", @@ -151,8 +152,8 @@ }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", - "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + "SUCCESS_MESSAGE": "Avatar de contacto eliminado correctamente", + "ERROR_MESSAGE": "No se pudo eliminar el avatar de contacto. Por favor, inténtelo de nuevo más tarde." } }, "SUCCESS_MESSAGE": "Contacto guardado correctamente", diff --git a/app/javascript/dashboard/i18n/locale/es/contactFilters.json b/app/javascript/dashboard/i18n/locale/es/contactFilters.json index d09bc91d7..15a610f55 100644 --- a/app/javascript/dashboard/i18n/locale/es/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/es/contactFilters.json @@ -39,7 +39,7 @@ "CUSTOM_ATTRIBUTE_CHECKBOX": "Casilla", "CREATED_AT": "Creado el", "LAST_ACTIVITY": "Última actividad", - "REFERER_LINK": "Referrer link" + "REFERER_LINK": "Enlace de referencia" }, "GROUPS": { "STANDARD_FILTERS": "Filtros estándar", diff --git a/app/javascript/dashboard/i18n/locale/es/conversation.json b/app/javascript/dashboard/i18n/locale/es/conversation.json index e58154853..9bd2f3b76 100644 --- a/app/javascript/dashboard/i18n/locale/es/conversation.json +++ b/app/javascript/dashboard/i18n/locale/es/conversation.json @@ -1,8 +1,9 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Por favor, selecciona una conversación del panel izquierdo", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", + "CSAT_REPLY_MESSAGE": "Por favor, valora la conversación", + "404": "Lo sentimos, no podemos encontrar la conversación. Por favor, inténtalo de nuevo", + "SWITCH_VIEW_LAYOUT": "Cambiar el diseño", "DASHBOARD_APP_TAB_MESSAGES": "Mensajes", "UNVERIFIED_SESSION": "La identidad de este usuario no está verificada", "NO_MESSAGE_1": "¡Oh oh! Parece que no hay mensajes de los clientes en tu bandeja de entrada.", @@ -62,30 +63,30 @@ }, "CARD_CONTEXT_MENU": { "PENDING": "Marcar como pendiente", - "RESOLVED": "Mark as resolved", + "RESOLVED": "Marcar como resuelto", "REOPEN": "Resolver conversación", "SNOOZE": { - "TITLE": "Snooze", + "TITLE": "Posponer", "NEXT_REPLY": "Hasta la siguiente respuesta", "TOMORROW": "Hasta mañana", "NEXT_WEEK": "Hasta la próxima semana" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Asignar un agente", + "ASSIGN_LABEL": "Asignar etiqueta", + "AGENTS_LOADING": "Cargando agentes...", + "ASSIGN_TEAM": "Asignar equipo", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "ID de conversación %{conversationId} asignado a \"%{agentName}\"", + "FAILED": "No se pudo asignar el agente. Por favor, inténtelo de nuevo." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Etiqueta asignada #%{labelName} al id de conversación %{conversationId}", + "FAILED": "No se pudo asignar el agente. Por favor, inténtelo de nuevo." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Equipo asignado \"%{team}\" al ID de conversación %{conversationId}", + "FAILED": "No se pudo asignar el equipo. Por favor, inténtelo de nuevo." } } }, @@ -131,13 +132,13 @@ }, "VISIBLE_TO_AGENTS": "Nota privada: solo visible para ti y tu equipo", "CHANGE_STATUS": "Estado de la conversación cambiado", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "Error al cambiar el estado de la conversación", "CHANGE_AGENT": "Conversación cambiada de asignatario", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_AGENT_FAILED": "Error al cambiar el asignatario", + "ASSIGN_LABEL_SUCCESFUL": "Etiqueta asignada correctamente", + "ASSIGN_LABEL_FAILED": "No se ha podido asignar la etiqueta", "CHANGE_TEAM": "Equipo de conversación cambiado", - "FILE_SIZE_LIMIT": "El archivo excede el límite de los archivos adjuntos {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "El archivo supera el límite de archivos adjuntos de {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", "MESSAGE_ERROR": "No se puede enviar este mensaje, por favor inténtalo de nuevo más tarde", "SENT_BY": "Enviado por:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/es/helpCenter.json b/app/javascript/dashboard/i18n/locale/es/helpCenter.json index 607739890..dd2d48050 100644 --- a/app/javascript/dashboard/i18n/locale/es/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/es/helpCenter.json @@ -1,51 +1,52 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "Filtrar por", + "SORT": "Ordenar por", "SETTINGS_BUTTON": "Ajustes", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "Nuevo artículo", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Publicado", + "DRAFT": "Borrador", + "ARCHIVED": "Archivado" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Todos los artículos", + "MINE": "Todos los artículos", + "DRAFT": "Borrador de artículos", + "ARCHIVED": "Artículos archivados" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Todos los artículos", + "PUBLISH_BUTTON": "Publicar", + "MOVE_TO_ARCHIVE_BUTTON": "Mover a archivado", + "PREVIEW": "Previsualizar", + "ADD_TRANSLATION": "Añadir traducción", + "OPEN_SIDEBAR": "Abrir barra lateral", + "CLOSE_SIDEBAR": "Cerrar barra lateral", + "SAVING": "Guardando...", + "SAVED": "Guardado" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Ajustes del artículo", "FORM": { "CATEGORY": { "LABEL": "Categoría", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "TITLE": "Seleccionar categoría", + "PLACEHOLDER": "Seleccionar categoría", + "NO_RESULT": "No se encontraron categorías", + "SEARCH_PLACEHOLDER": "Buscar categoría" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Autor", + "TITLE": "Seleccionar autor", + "PLACEHOLDER": "Seleccionar autor", + "NO_RESULT": "No se encontraron autores", + "SEARCH_PLACEHOLDER": "Buscar autor" }, "META_TITLE": { - "LABEL": "Meta title", + "LABEL": "Título Meta", "PLACEHOLDER": "Add a meta title" }, "META_DESCRIPTION": { @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "activo", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Ajustes" + "SETTINGS": "Ajustes", + "DELETE": "Eliminar" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nombre", + "DESCRIPTION": "Descripción", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No se encontraron categorías" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar eliminación", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Sí, eliminar", + "NO": "No, mantenerlo" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nombre", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "El nombre es requerido" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Descripción", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Descripción requerida" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json index 97c6c41f8..c9386532d 100644 --- a/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/es/inboxMgmt.json @@ -203,7 +203,7 @@ "PROVIDERS": { "LABEL": "Proveedor de API", "TWILIO": "Twilio", - "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD": "Nube de WhatsApp", "360_DIALOG": "360 Diálogo" }, "INBOX_NAME": { @@ -217,7 +217,7 @@ "ERROR": "Por favor, introduzca un valor válido. El número de teléfono debe comenzar con la firma `+`." }, "PHONE_NUMBER_ID": { - "LABEL": "Phone number ID", + "LABEL": "ID de número de teléfono", "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", "ERROR": "Por favor, introduzca un valor válido." }, @@ -622,7 +622,7 @@ } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", + "PREVIEW": "Previsualizar", "SCRIPT": "Script" }, "WIDGET_BUBBLE_POSITION": { diff --git a/app/javascript/dashboard/i18n/locale/es/integrations.json b/app/javascript/dashboard/i18n/locale/es/integrations.json index f21dbe6b9..9f54cc9ac 100644 --- a/app/javascript/dashboard/i18n/locale/es/integrations.json +++ b/app/javascript/dashboard/i18n/locale/es/integrations.json @@ -86,30 +86,30 @@ "BUTTON_TEXT": "Conectar" }, "DASHBOARD_APPS": { - "TITLE": "Dashboard Apps", - "HEADER_BTN_TXT": "Add a new dashboard app", - "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", - "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "TITLE": "Panel de aplicaciones", + "HEADER_BTN_TXT": "Añadir una nueva aplicación", + "SIDEBAR_TXT": "

Aplicaciones de panel

Aplicaciones de panel de control permiten a las organizaciones incrustar una aplicación dentro del panel de control de Chatwoot para proporcionar el contexto para los agentes de atención al cliente. Esta característica le permite crear una aplicación de forma independiente e incrustarla dentro del panel de control para proporcionar información de usuario, sus pedidos, o su historial de pagos anterior.

Cuando incrustas tu aplicación usando el panel de control en Chatwoot, tu aplicación obtendrá el contexto de la conversación y el contacto como un evento de ventana. Implementa un oyente para el evento del mensaje en tu página para recibir el contexto.

Para añadir una nueva aplicación de panel, haga clic en el botón 'Añadir una nueva aplicación de panel'.

", + "DESCRIPTION": "Las aplicaciones de panel permiten a las organizaciones incrustar una aplicación dentro del panel de control para proporcionar el contexto para los agentes de soporte al cliente. Esta función le permite crear una aplicación de forma independiente e incrustada para proporcionar información de usuario, sus pedidos o su historial de pagos anterior.", "LIST": { - "404": "There are no dashboard apps configured on this account yet", - "LOADING": "Fetching dashboard apps...", + "404": "Todavía no hay aplicaciones configuradas en esta cuenta", + "LOADING": "Obteniendo aplicaciones del tablero...", "TABLE_HEADER": [ "Nombre", "Endpoint" ], - "EDIT_TOOLTIP": "Edit app", - "DELETE_TOOLTIP": "Delete app" + "EDIT_TOOLTIP": "Editar aplicación", + "DELETE_TOOLTIP": "Eliminar aplicación" }, "FORM": { "TITLE_LABEL": "Nombre", - "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_PLACEHOLDER": "Ingrese un nombre para su aplicación de tablero", "TITLE_ERROR": "A name for the dashboard app is required", "URL_LABEL": "Endpoint", "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", "URL_ERROR": "A valid URL is required" }, "CREATE": { - "HEADER": "Add a new dashboard app", + "HEADER": "Añadir una nueva aplicación", "FORM_SUBMIT": "Enviar", "FORM_CANCEL": "Cancelar", "API_SUCCESS": "Dashboard app configured successfully", diff --git a/app/javascript/dashboard/i18n/locale/es/settings.json b/app/javascript/dashboard/i18n/locale/es/settings.json index 84f12e805..c59ddc30d 100644 --- a/app/javascript/dashboard/i18n/locale/es/settings.json +++ b/app/javascript/dashboard/i18n/locale/es/settings.json @@ -126,8 +126,8 @@ "TRAIL_BUTTON": "Comprar ahora", "DELETED_USER": "Usuario eliminado", "ACCOUNT_SUSPENDED": { - "TITLE": "Account Suspended", - "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + "TITLE": "Cuenta suspendida", + "MESSAGE": "Tu cuenta está suspendida. Comuníquese con el equipo de soporte para obtener más información." } }, "COMPONENTS": { @@ -175,7 +175,7 @@ "CUSTOM_ATTRIBUTES": "Atributos personalizados", "AUTOMATION": "Automatización", "TEAMS": "Equipos", - "BILLING": "Billing", + "BILLING": "Facturación", "CUSTOM_VIEWS_FOLDER": "Carpetas", "CUSTOM_VIEWS_SEGMENTS": "Segmentos", "ALL_CONTACTS": "Todos los contactos", @@ -197,32 +197,33 @@ "REPORTS_OVERVIEW": "Resumen", "FACEBOOK_REAUTHORIZE": "Su conexión de Facebook expiró, por favor reconecte si página de Facebook para continuar con el servicio", "HELP_CENTER": { - "ALL_ARTICLES": "All Articles", - "MY_ARTICLES": "My Articles", - "DRAFT": "Draft", - "ARCHIVED": "Archived", + "TITLE": "Centro de ayuda (Beta)", + "ALL_ARTICLES": "Todos los artículos", + "MY_ARTICLES": "Todos los artículos", + "DRAFT": "Borrador", + "ARCHIVED": "Archivado", "CATEGORY": "Categoría", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "CATEGORY_EMPTY_MESSAGE": "No se encontraron categorías" }, - "DOCS": "Read docs" + "DOCS": "Leer documentos" }, "BILLING_SETTINGS": { - "TITLE": "Billing", + "TITLE": "Facturación", "CURRENT_PLAN": { - "TITLE": "Current Plan", - "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + "TITLE": "Plan actual", + "PLAN_NOTE": "Actualmente está suscrito al plan **%{plan}** con **%{quantity}** licencias" }, "MANAGE_SUBSCRIPTION": { - "TITLE": "Manage your subscription", - "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", - "BUTTON_TXT": "Go to the billing portal" + "TITLE": "Administre su suscripción", + "DESCRIPTION": "Vea sus facturas anteriores, edite sus datos de facturación o cancele su suscripción.", + "BUTTON_TXT": "Ir al portal de facturación" }, "CHAT_WITH_US": { - "TITLE": "Need help?", - "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "TITLE": "¿Necesitas ayuda?", + "DESCRIPTION": "¿Tienes a algún problema en la facturación? Estamos aquí para ayudarte.", "BUTTON_TXT": "Chatea con nosotros" }, - "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + "NO_BILLING_USER": "Tu cuenta de facturación está siendo configurada. Por favor, actualiza la página e inténtalo de nuevo." }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "¡Oh oh! No hemos podido encontrar ninguna cuenta de \"Chatwoot\". Por favor, crea una nueva cuenta para continuar.", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Ir a Ajustes", "SWITCH_CONVERSATION_STATUS": "Cambiar al siguiente estado de conversación", "SWITCH_TO_PRIVATE_NOTE": "Cambiar a nota privada", - "TOGGLE_RICH_CONTENT_EDITOR": "Cambiar editor de contenido enriquecido", "SWITCH_TO_REPLY": "Cambiar a respuesta", "TOGGLE_SNOOZE_DROPDOWN": "Cambiar el menú desplegable" }, diff --git a/app/javascript/dashboard/i18n/locale/fa/contact.json b/app/javascript/dashboard/i18n/locale/fa/contact.json index aa3e44036..f4949b093 100644 --- a/app/javascript/dashboard/i18n/locale/fa/contact.json +++ b/app/javascript/dashboard/i18n/locale/fa/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "در دسترس نیست", "EMAIL_ADDRESS": "ایمیل", "PHONE_NUMBER": "شماره تلفن", + "IDENTIFIER": "شناسه", "COPY_SUCCESSFUL": "با موفقیت در کلیپ‌بورد کپی شد", "COMPANY": "شرکت", "LOCATION": "مکان", diff --git a/app/javascript/dashboard/i18n/locale/fa/conversation.json b/app/javascript/dashboard/i18n/locale/fa/conversation.json index c1199bb2f..49b41f449 100644 --- a/app/javascript/dashboard/i18n/locale/fa/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fa/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "لطفا یک گفتگو را از پنجره گفتگوها انتخاب کنید", + "CSAT_REPLY_MESSAGE": "لطفاً به مکالمه امتیاز دهید", "404": "با عرض پوزش، ما نمی‌توانیم گفتگو را پیدا کنیم. لطفا دوباره تلاش کنید", "SWITCH_VIEW_LAYOUT": "تغییر طرح‌بندی", "DASHBOARD_APP_TAB_MESSAGES": "پیام‌ها", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "برچسب با موفقیت تخصیص یافت", "ASSIGN_LABEL_FAILED": "تخصیص برچسب ناموفق بود", "CHANGE_TEAM": "تیم مکالمه تغییر کرد", - "FILE_SIZE_LIMIT": "فایل ضمیمه شده بیشتر از {MAXIMUM_FILE_UPLOAD_SIZE} است", + "FILE_SIZE_LIMIT": "پرونده از حد مجاز پیوست {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} مگابایت بیشتر است", "MESSAGE_ERROR": "ارسال این پیام امکان پذیر نیست ، لطفاً بعداً دوباره امتحان کنید", "SENT_BY": "ارسال شده توسط:", "BOT": "ربات", diff --git a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json index 411452387..a59aeed8d 100644 --- a/app/javascript/dashboard/i18n/locale/fa/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fa/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "همه مقالات", "PUBLISH_BUTTON": "انتشار", + "MOVE_TO_ARCHIVE_BUTTON": "به بایگانی انتقال داده شد", "PREVIEW": "پیش‌نمایش", "ADD_TRANSLATION": "افزودن ترجمه", "OPEN_SIDEBAR": "نوار کناری را باز کنید", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "پورتال ها", + "DEFAULT": "پیش‌فرض", "NEW_BUTTON": "پورتال جدید", "ACTIVE_BADGE": "فعال", "CHOOSE_LOCALE_LABEL": "محلی را انتخاب کنید", @@ -84,7 +86,8 @@ "COUNT_LABEL": "مقالات", "ADD": "افزودن منطقه", "VISIT": "به سایت مراجعه کنید", - "SETTINGS": "تنظیمات" + "SETTINGS": "تنظیمات", + "DELETE": "حذف" }, "PORTAL_CONFIG": { "TITLE": "تنظیمات پورتال", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "پیش‌فرض" } } + }, + "DELETE_PORTAL": { + "TITLE": "حذف پورتال", + "MESSAGE": "آیا مطمئن هستید که می‌خواهید این پورتال را حذف کنید؟", + "YES": "بله، پورتال حذف شود", + "NO": "خیر، پورتال را نگه‌دار", + "API": { + "DELETE_SUCCESS": "پورتال با موفقیت حذف شد", + "DELETE_ERROR": "خطا هنگام حذف پورتال" + } + } + }, + "EDIT": { + "HEADER_TEXT": "ویرایش پورتال", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "اطلاعات اولیه" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "سفارشی سازی پورتال" + }, + "CATEGORY_SETTINGS": { + "TITLE": "دسته‌بندی‌ها" + }, + "LOCALE_SETTINGS": { + "TITLE": "زبان‌های محلی" + } + }, + "CATEGORIES": { + "TITLE": "دسته‌بندی‌ها در", + "NEW_CATEGORY": "دسته‌بندی جدید", + "TABLE": { + "NAME": "نام", + "DESCRIPTION": "توضیحات", + "LOCALE": "محلی", + "ARTICLE_COUNT": "تعداد مقالات", + "ACTION_BUTTON": { + "EDIT": "ویرایش دسته‌بندی", + "DELETE": "حذف دسته‌بندی" + }, + "EMPTY_TEXT": "هیچ دسته‌بندی‌ای یافت نشد" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "به‌روزرسانی تنظیمات اولیه‌" } }, "ADD": { @@ -146,14 +194,14 @@ }, "FINISH_PAGE": { "TITLE": "هوراا !🎉 شما آماده‌اید!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "MESSAGE": "اکنون می توانید این پورتال ایجاد شده را در صفحه همه پورتال های خود مشاهده کنید.", + "FINISH": "برو به صفحه همه پورتال‌ها" } }, "LOGO": { - "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "LABEL": "آرم", + "UPLOAD_BUTTON": "بارگذاری آرم", + "HELP_TEXT": "این لوگو در هدر پورتال نمایش داده می شود." }, "NAME": { "LABEL": "نام", @@ -163,8 +211,7 @@ }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Portal slug for urls", - + "PLACEHOLDER": "اسلاگ پورتال برای آدرس‌های اینترنتی", "ERROR": "Slug مورد نیاز است" }, "DOMAIN": { @@ -180,24 +227,56 @@ "ERROR": "پیوند صفحه اصلی الزامی است" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "رنگ پوسته پورتال", + "HELP_TEXT": "این رنگ به عنوان رنگ پوسته برای پورتال نشان داده می‌شود." }, "PAGE_TITLE": { "LABEL": "عنوان صفحه", "PLACEHOLDER": "عنوان صفحه پورتال", - "HELP_TEXT": "The page title will be used in the public facing portal.", + "HELP_TEXT": "عنوان صفحه در پرتال عمومی استفاده خواهد شد.", "ERROR": "عنوان صفحه الزامی است" }, "HEADER_TEXT": { "LABEL": "متن سرصفحه", "PLACEHOLDER": "متن سرصفحه پورتال", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "HELP_TEXT": "متن سرصفحه پورتال در پرتال عمومی استفاده خواهد شد.", "ERROR": "متن سرصفحه پورتال الزامی است" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "پورتال با موفقیت ایجاد شد.", "ERROR_MESSAGE_FOR_BASIC": "پورتال ایجاد نشد. دوباره امتحان کنید.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_UPDATE": "پورتال با موفقیت به‌روز شد.", + "ERROR_MESSAGE_FOR_UPDATE": "پورتال به روز رسانی نشد. دوباره امتحان کنید." + } + }, + "ADD_LOCALE": { + "TITLE": "یک محل جدید اضافه کنید", + "SUB_TITLE": "این یک زبان محلی جدید به فهرست ترجمه موجود شما اضافه می‌کند.", + "PORTAL": "پورتال", + "LOCALE": { + "LABEL": "محلی", + "PLACEHOLDER": "محلی را انتخاب کنید", + "ERROR": "زبان محلی الزامی است" + }, + "BUTTONS": { + "CREATE": "ایجاد زبان محلی", + "CANCEL": "انصراف" + }, + "API": { + "SUCCESS_MESSAGE": "زبان محلی با موفقیت اضافه شد", + "ERROR_MESSAGE": "امکان افزودن زبان محلی وجود ندارد. دوباره امتحان کنید." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "زبان محلی پیش‌فرض با موفقیت به‌روز شد", + "ERROR_MESSAGE": "به‌روزرسانی زبان محلی پیش‌فرض ممکن نیست. دوباره امتحان کنید." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "زبان محلی با موفقیت از پورتال حذف شد", + "ERROR_MESSAGE": "حذف زبان محلی از پورتال ممکن نیست. دوباره امتحان کنید." } } }, @@ -224,8 +303,34 @@ "ERROR": "خطا در هنگام ذخیره مقاله" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "خطا هنگام انتشار مقاله", + "SUCCESS": "مقاله با موفقیت منتشر شد" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "خطا هنگام بایگانی مقاله", + "SUCCESS": "مقاله با موفقیت بایگانی شد" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "تاییدیه حذف", + "MESSAGE": "آیا مطمئن هستید که مقاله حذف شود؟", + "YES": "بله، حذف شود", + "NO": "خیر، بماند" + } + }, + "API": { + "SUCCESS_MESSAGE": "مقاله با موفقیت حذف شد", + "ERROR_MESSAGE": "خطا هنگام حذف مقاله" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "مشکلی پیش آمد. لطفا دوباره تلاش کنید." + "ERROR_MESSAGE": "لطفا عنوان و محتوای مقاله را اضافه کنید و فقط شما می‌توانید تنظیمات را به‌روز کنید" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "دسته‌بندی با موفقیت ایجاد شد", "ERROR_MESSAGE": "امکان ایجاد دسته‌بندی وجود ندارد" } + }, + "EDIT": { + "TITLE": "ویرایش دسته‌بندی", + "SUB_TITLE": "ویرایش یک دسته‌بندی، اون را در پورتال عمومی به‌روز می‌کند.", + "PORTAL": "پورتال", + "LOCALE": "محلی", + "NAME": { + "LABEL": "نام", + "PLACEHOLDER": "نام دسته‌بندی", + "HELP_TEXT": "از نام دسته در پرتال عمومی برای دسته بندی مقالات استفاده می شود.", + "ERROR": "نام الزامی است" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug دسته برای آدرس ها", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug مورد نیاز است" + }, + "DESCRIPTION": { + "LABEL": "توضیحات", + "PLACEHOLDER": "یک توضیح کوتاه در مورد دسته ارائه دهید.", + "ERROR": "توضیحات الزامی است" + }, + "BUTTONS": { + "CREATE": "به‌روزرسانی دسته‌بندی", + "CANCEL": "انصراف" + }, + "API": { + "SUCCESS_MESSAGE": "دسته‌بندی با موفقیت به‌روز شد", + "ERROR_MESSAGE": "دسته‌بندی به‌روزرسانی نمی‌شود" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "دسته‌بندی با موفقیت حذف شد", + "ERROR_MESSAGE": "حذف دسته‌بندی ممکن نیست" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/fa/settings.json b/app/javascript/dashboard/i18n/locale/fa/settings.json index 53422bc51..2b62274d3 100644 --- a/app/javascript/dashboard/i18n/locale/fa/settings.json +++ b/app/javascript/dashboard/i18n/locale/fa/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "بررسی اجمالی", "FACEBOOK_REAUTHORIZE": "اتصال فیس بوک شما منقضی شده است ، لطفاً برای ادامه خدمات دوباره صفحه فیس بوک خود را متصل کنید", "HELP_CENTER": { + "TITLE": "مرکز راهنمایی (آزمایشی)", "ALL_ARTICLES": "همه مقالات", "MY_ARTICLES": "مقالات من", "DRAFT": "پیش‌نویس", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "برو به تنظیمات", "SWITCH_CONVERSATION_STATUS": "به وضعیت مکالمه بعدی بروید", "SWITCH_TO_PRIVATE_NOTE": "رفتن به یادداشت خصوصی", - "TOGGLE_RICH_CONTENT_EDITOR": "تغییر وضعیت ویرایشگر محتوا", "SWITCH_TO_REPLY": "رفتن به پاسخ", "TOGGLE_SNOOZE_DROPDOWN": "تغییر حالت بازکردن تعویق" }, diff --git a/app/javascript/dashboard/i18n/locale/fi/bulkActions.json b/app/javascript/dashboard/i18n/locale/fi/bulkActions.json index 4fd2cb4a1..cdabb75b3 100644 --- a/app/javascript/dashboard/i18n/locale/fi/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/fi/bulkActions.json @@ -3,7 +3,7 @@ "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", "AGENT_SELECT_LABEL": "Valitse edustaja", "ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", - "GO_BACK_LABEL": "Go back", + "GO_BACK_LABEL": "Mene takaisin", "ASSIGN_LABEL": "Delegoi", "ASSIGN_AGENT_TOOLTIP": "Assign Agent", "ASSIGN_SUCCESFUL": "Conversations assigned successfully", diff --git a/app/javascript/dashboard/i18n/locale/fi/contact.json b/app/javascript/dashboard/i18n/locale/fi/contact.json index bd8f6cc3e..62ef936e3 100644 --- a/app/javascript/dashboard/i18n/locale/fi/contact.json +++ b/app/javascript/dashboard/i18n/locale/fi/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Ei saatavilla", "EMAIL_ADDRESS": "Sähköpostiosoite", "PHONE_NUMBER": "Puhelinnumero", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Kopioitu leikepöydälle onnistuneesti", "COMPANY": "Yritys", "LOCATION": "Sijainti", @@ -34,7 +35,7 @@ "NO_RESULT": "No labels found" } }, - "MERGE_CONTACT": "Merge contact", + "MERGE_CONTACT": "Yhdistä yhteystieto", "CONTACT_ACTIONS": "Contact actions", "MUTE_CONTACT": "Mykistä Keskustelu", "UNMUTE_CONTACT": "Poista keskustelun mykistys", @@ -80,9 +81,9 @@ } }, "DELETE_CONTACT": { - "BUTTON_LABEL": "Delete Contact", - "TITLE": "Delete contact", - "DESC": "Delete contact details", + "BUTTON_LABEL": "Poista Yhteystieto", + "TITLE": "Poista yhteystieto", + "DESC": "Poista kontaktin tiedot", "CONFIRM": { "TITLE": "Vahvista poistaminen", "MESSAGE": "Oletko varma että haluat poistaa ", @@ -90,7 +91,7 @@ "NO": "Ei, säilytä" }, "API": { - "SUCCESS_MESSAGE": "Contact deleted successfully", + "SUCCESS_MESSAGE": "Yhteystiedon poistaminen onnistui", "ERROR_MESSAGE": "Could not delete contact. Please try again later." } }, @@ -151,7 +152,7 @@ }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "SUCCESS_MESSAGE": "Yhteystiedon avatarin poisto onnistui", "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." } }, @@ -181,11 +182,11 @@ "PLACEHOLDER": "Write your message here", "ERROR": "Message can't be empty" }, - "SUBMIT": "Send message", + "SUBMIT": "Lähetä viesti", "CANCEL": "Peruuta", "SUCCESS_MESSAGE": "Message sent!", "GO_TO_CONVERSATION": "Näytä", - "ERROR_MESSAGE": "Couldn't send! try again" + "ERROR_MESSAGE": "Ei voitu lähettää! Yritä uudelleen" } }, "CONTACTS_PAGE": { @@ -195,7 +196,7 @@ "SEARCH_INPUT_PLACEHOLDER": "Etsi yhteystietoja", "FILTER_CONTACTS": "Filter", "FILTER_CONTACTS_SAVE": "Save filter", - "FILTER_CONTACTS_DELETE": "Delete filter", + "FILTER_CONTACTS_DELETE": "Poista suodatin", "LIST": { "LOADING_MESSAGE": "Ladataan yhteystietoja...", "404": "Ei hakua vastaavia yhteystietoja 🔍", @@ -257,7 +258,7 @@ } }, "CUSTOM_ATTRIBUTES": { - "ADD_BUTTON_TEXT": "Add attributes", + "ADD_BUTTON_TEXT": "Lisää määritteitä", "BUTTON": "Add custom attribute", "NOT_AVAILABLE": "There are no custom attributes available for this contact.", "COPY_SUCCESSFUL": "Kopioitu leikepöydälle onnistuneesti", @@ -271,7 +272,7 @@ "DESC": "Add custom information to this contact." }, "FORM": { - "CREATE": "Add attribute", + "CREATE": "Lisää määrite", "CANCEL": "Peruuta", "NAME": { "LABEL": "Custom attribute name", @@ -283,7 +284,7 @@ "PLACEHOLDER": "Eg: 11901 " }, "ADD": { - "TITLE": "Create new attribute ", + "TITLE": "Luo uusi määrite ", "SUCCESS": "Attribute added successfully", "ERROR": "Unable to add attribute. Please try again later" }, @@ -296,15 +297,15 @@ "ERROR": "Unable to delete attribute. Please try again later" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Lisää määritteitä", + "PLACEHOLDER": "Etsi määritteitä", + "NO_RESULT": "Määritteitä ei löytynyt" }, "ATTRIBUTE_TYPE": { "LIST": { "PLACEHOLDER": "Select value", "SEARCH_INPUT_PLACEHOLDER": "Search value", - "NO_RESULT": "No result found" + "NO_RESULT": "Tuloksia ei löytynyt" } } }, @@ -314,16 +315,16 @@ } }, "MERGE_CONTACTS": { - "TITLE": "Merge contacts", - "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "TITLE": "Yhdistä yhteystiedot", + "DESCRIPTION": "Yhdistämällä yhteystiedot voit muuntaa kaksi profiilia yhdeksi, mukaan lukien kaikki määritteet ja keskustelut. Ristiriitatilanteessa ensisijaisen yhteyshenkilön määritteet ovat ensisijaisia.", "PRIMARY": { - "TITLE": "Primary contact", - "HELP_LABEL": "To be kept" + "TITLE": "Ensisijainen kontakti", + "HELP_LABEL": "Säilytetään" }, "CHILD": { - "TITLE": "Contact to merge", - "PLACEHOLDER": "Search for a contact", - "HELP_LABEL": "To be deleted" + "TITLE": "Yhdistettävä yhteystieto", + "PLACEHOLDER": "Etsi yhteystietoa", + "HELP_LABEL": "Poistetaan" }, "SUMMARY": { "TITLE": "Summary", @@ -334,7 +335,7 @@ "ERROR": "ERROR_MESSAGE" }, "FORM": { - "SUBMIT": " Merge contacts", + "SUBMIT": " Yhdistä yhteystiedot", "CANCEL": "Peruuta", "CHILD_CONTACT": { "ERROR": "Select a child contact to merge" diff --git a/app/javascript/dashboard/i18n/locale/fi/conversation.json b/app/javascript/dashboard/i18n/locale/fi/conversation.json index 41a186cc1..ca03f61d0 100644 --- a/app/javascript/dashboard/i18n/locale/fi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fi/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Ole hyvä ja valitse keskustelu vasemmasta paneelista", + "CSAT_REPLY_MESSAGE": "Voisitko antaa palautetta saamastasi palvelusta?", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -25,8 +26,8 @@ "LOADING_CONVERSATIONS": "Ladataan keskusteluita", "CANNOT_REPLY": "Et voi vastata, sillä", "24_HOURS_WINDOW": "24h vastausikkuna", - "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", - "ASSIGN_TO_ME": "Assign to me", + "NOT_ASSIGNED_TO_YOU": "Tätä keskustelua ei ole määritetty sinulle. Haluatko siirtää tämän keskustelun itsellesi?", + "ASSIGN_TO_ME": "Siirrä minulle", "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24h vastausikkuna", "SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.", @@ -137,11 +138,11 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Lähettäjä:", "BOT": "Botti", - "SEND_FAILED": "Couldn't send message! Try again", + "SEND_FAILED": "Viestiä ei voitu lähettää! Yritä uudelleen", "TRY_AGAIN": "retry", "ASSIGNMENT": { "SELECT_AGENT": "Valitse edustaja", @@ -195,18 +196,18 @@ } }, "CONVERSATION_SIDEBAR": { - "ASSIGNEE_LABEL": "Assigned Agent", - "SELF_ASSIGN": "Assign to me", - "TEAM_LABEL": "Assigned Team", + "ASSIGNEE_LABEL": "Osoitettu Edustajalle", + "SELF_ASSIGN": "Siirrä minulle", + "TEAM_LABEL": "Osoitettu Tiimille", "SELECT": { "PLACEHOLDER": "None" }, "ACCORDION": { "CONTACT_DETAILS": "Contact Details", - "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_ACTIONS": "Keskustelutoiminnot", "CONVERSATION_LABELS": "Keskustelutunnisteet", - "CONVERSATION_INFO": "Conversation Information", - "CONTACT_ATTRIBUTES": "Contact Attributes", + "CONVERSATION_INFO": "Keskustelun Tiedot", + "CONTACT_ATTRIBUTES": "Yhteystiedon määritteet", "PREVIOUS_CONVERSATION": "Edelliset keskustelut" } }, @@ -226,9 +227,9 @@ "ERROR": "Unable to delete attribute. Please try again later" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Lisää määritteitä", + "PLACEHOLDER": "Etsi määritteitä", + "NO_RESULT": "Määritteitä ei löytynyt" } }, "EMAIL_HEADER": { diff --git a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json index d689bb178..8eb3b3dec 100644 --- a/app/javascript/dashboard/i18n/locale/fi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fi/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Asetukset" + "SETTINGS": "Asetukset", + "DELETE": "Poista" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nimi", + "DESCRIPTION": "Kuvaus", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Peruuta" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Vahvista poistaminen", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Kyllä, poista", + "NO": "Ei, säilytä" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nimi", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Kuvaus", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Peruuta" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json index 0a5f5da7d..544b82e24 100644 --- a/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/fi/inboxMgmt.json @@ -594,7 +594,7 @@ }, "WELCOME_HEADING": { "LABEL": "Tervetuloa-otsikko", - "PLACE_HOLDER": "Hi there!" + "PLACE_HOLDER": "Hei siellä!" }, "WELCOME_TAGLINE": { "LABEL": "Tervetulotoivotus", @@ -649,11 +649,11 @@ }, "BODY": { "TEAM_AVAILABILITY": { - "ONLINE": "We are Online", - "OFFLINE": "We are away at the moment" + "ONLINE": "Olemme online-tilassa", + "OFFLINE": "Olemme tällä hetkellä poissa" }, - "USER_MESSAGE": "Hi", - "AGENT_MESSAGE": "Hello" + "USER_MESSAGE": "Hei", + "AGENT_MESSAGE": "Moi" }, "BRANDING_TEXT": "Palvelun tarjoaa Chatwoot", "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" diff --git a/app/javascript/dashboard/i18n/locale/fi/report.json b/app/javascript/dashboard/i18n/locale/fi/report.json index e3dc5856c..b2b84affe 100644 --- a/app/javascript/dashboard/i18n/locale/fi/report.json +++ b/app/javascript/dashboard/i18n/locale/fi/report.json @@ -396,7 +396,7 @@ "TABLE": { "HEADER": { "CONTACT_NAME": "Contact", - "AGENT_NAME": "Assigned agent", + "AGENT_NAME": "Osoitettu edustajalle", "RATING": "Arvio", "FEEDBACK_TEXT": "Palautteen kommentti" } diff --git a/app/javascript/dashboard/i18n/locale/fi/settings.json b/app/javascript/dashboard/i18n/locale/fi/settings.json index 104d7d2b0..72d172b5b 100644 --- a/app/javascript/dashboard/i18n/locale/fi/settings.json +++ b/app/javascript/dashboard/i18n/locale/fi/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Facebook-yhteytesi on vanhentunut, ole hyvä ja yhdistä uudelleen Facebook-sivusi jatkaaksesi palveluita", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/fi/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/fi/whatsappTemplates.json index bbcf28156..f4e2e3c13 100644 --- a/app/javascript/dashboard/i18n/locale/fi/whatsappTemplates.json +++ b/app/javascript/dashboard/i18n/locale/fi/whatsappTemplates.json @@ -1,12 +1,12 @@ { "WHATSAPP_TEMPLATES": { "MODAL": { - "TITLE": "Whatsapp Templates", - "SUBTITLE": "Select the whatsapp template you want to send", + "TITLE": "WhatsApp-pohjat", + "SUBTITLE": "Valitse WhatsApp-pohja, jonka haluat lähettää", "TEMPLATE_SELECTED_SUBTITLE": "Process %{templateName}" }, "PICKER": { - "SEARCH_PLACEHOLDER": "Search Templates", + "SEARCH_PLACEHOLDER": "Etsi Pohjia", "NO_TEMPLATES_FOUND": "No templates found for", "LABELS": { "LANGUAGE": "Language", @@ -15,11 +15,11 @@ } }, "PARSER": { - "VARIABLES_LABEL": "Variables", + "VARIABLES_LABEL": "Muuttujat", "VARIABLE_PLACEHOLDER": "Enter %{variable} value", - "GO_BACK_LABEL": "Go Back", - "SEND_MESSAGE_LABEL": "Send Message", - "FORM_ERROR_MESSAGE": "Please fill all variables before sending" + "GO_BACK_LABEL": "Mene Takaisin", + "SEND_MESSAGE_LABEL": "Lähetä Viesti", + "FORM_ERROR_MESSAGE": "Täytä kaikki muuttujat ennen lähettämistä" } } } diff --git a/app/javascript/dashboard/i18n/locale/fr/contact.json b/app/javascript/dashboard/i18n/locale/fr/contact.json index 6e25fd8f5..796b0db03 100644 --- a/app/javascript/dashboard/i18n/locale/fr/contact.json +++ b/app/javascript/dashboard/i18n/locale/fr/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Non disponible", "EMAIL_ADDRESS": "Adresse de courriel", "PHONE_NUMBER": "Numéro de téléphone", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copié dans le presse-papiers avec succès", "COMPANY": "Société", "LOCATION": "Localisation", diff --git a/app/javascript/dashboard/i18n/locale/fr/conversation.json b/app/javascript/dashboard/i18n/locale/fr/conversation.json index 8a24fa2b1..b502e5854 100644 --- a/app/javascript/dashboard/i18n/locale/fr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/fr/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Veuillez sélectionner une conversation à partir du panneau de gauche", + "CSAT_REPLY_MESSAGE": "Veuillez évaluer la conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "L'équipe de conversation a été modifiée", - "FILE_SIZE_LIMIT": "Le fichier dépasse la limite de {MAXIMUM_FILE_UPLOAD_SIZE} pour les pièces jointes", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Impossible d'envoyer ce message, veuillez réessayer plus tard", "SENT_BY": "Envoyé par:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json index 53aaa81e4..a2f5f6285 100644 --- a/app/javascript/dashboard/i18n/locale/fr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/fr/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "actif", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Paramètres" + "SETTINGS": "Paramètres", + "DELETE": "Supprimer" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nom", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmer la suppression", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Oui, supprimer", + "NO": "Non, conservez-le" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nom", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Le nom est requis" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "La description est requise" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Annuler" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/fr/settings.json b/app/javascript/dashboard/i18n/locale/fr/settings.json index bf8a56606..4ef8b372b 100644 --- a/app/javascript/dashboard/i18n/locale/fr/settings.json +++ b/app/javascript/dashboard/i18n/locale/fr/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Vue d'ensemble", "FACEBOOK_REAUTHORIZE": "Votre connexion Facebook a expiré, veuillez reconnecter votre page Facebook pour continuer les services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Accéder aux paramètres", "SWITCH_CONVERSATION_STATUS": "Passer au statut suivant de la conversation", "SWITCH_TO_PRIVATE_NOTE": "Basculer vers une note privée", - "TOGGLE_RICH_CONTENT_EDITOR": "Activer/désactiver l'éditeur de texte enrichi", "SWITCH_TO_REPLY": "Basculer vers la réponse", "TOGGLE_SNOOZE_DROPDOWN": "Activer/désactiver la liste déroulante de répétition" }, diff --git a/app/javascript/dashboard/i18n/locale/he/contact.json b/app/javascript/dashboard/i18n/locale/he/contact.json index aea842bea..c4f12e24c 100644 --- a/app/javascript/dashboard/i18n/locale/he/contact.json +++ b/app/javascript/dashboard/i18n/locale/he/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "לא זמין", "EMAIL_ADDRESS": "כתובת מייל", "PHONE_NUMBER": "מספר טלפון", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "הועתק ללוח בהצלחה", "COMPANY": "חברה", "LOCATION": "מיקום", diff --git a/app/javascript/dashboard/i18n/locale/he/conversation.json b/app/javascript/dashboard/i18n/locale/he/conversation.json index 7df2a980b..9a003fe05 100644 --- a/app/javascript/dashboard/i18n/locale/he/conversation.json +++ b/app/javascript/dashboard/i18n/locale/he/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "אנא בחר שיחה מהחלונית השמאלית", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "שיחת קבוצה השתנתה", - "FILE_SIZE_LIMIT": "קובץ חורג ממגבלת גודל מקסימלי {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "לא ניתן לשלוח הודעה, אנא נסה שוב מאוחר יותר", "SENT_BY": "נשלח על ידי:", "BOT": "בוט", diff --git a/app/javascript/dashboard/i18n/locale/he/helpCenter.json b/app/javascript/dashboard/i18n/locale/he/helpCenter.json index ed9525c21..de5bc68df 100644 --- a/app/javascript/dashboard/i18n/locale/he/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/he/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "פעיל", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "הגדרות" + "SETTINGS": "הגדרות", + "DELETE": "מחק" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "שם", + "DESCRIPTION": "תיאור", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "אשר מחיקה", + "MESSAGE": "Are you sure to delete the article?", + "YES": "כן, מחק", + "NO": "לא, השאר" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "שם", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "שם שדה חובה" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "תיאור", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "נדרש תיאור" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "ביטול" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json index a8b285c08..326804941 100644 --- a/app/javascript/dashboard/i18n/locale/he/settings.json +++ b/app/javascript/dashboard/i18n/locale/he/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "פג תוקף החיבור שלך לפייסבוק, אנא חבר מחדש את דף הפייסבוק שלך כדי להמשיך בשירותים", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/hi/contact.json b/app/javascript/dashboard/i18n/locale/hi/contact.json index 0bc399ba1..0a7f4092a 100644 --- a/app/javascript/dashboard/i18n/locale/hi/contact.json +++ b/app/javascript/dashboard/i18n/locale/hi/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Not Available", "EMAIL_ADDRESS": "Email Address", "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "Location", diff --git a/app/javascript/dashboard/i18n/locale/hi/conversation.json b/app/javascript/dashboard/i18n/locale/hi/conversation.json index 7adac123f..047e5c351 100644 --- a/app/javascript/dashboard/i18n/locale/hi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hi/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json index d0c7b2411..9c18b4c7f 100644 --- a/app/javascript/dashboard/i18n/locale/hi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hi/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Delete" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/hi/settings.json b/app/javascript/dashboard/i18n/locale/hi/settings.json index 7994321cc..93ebbbc9a 100644 --- a/app/javascript/dashboard/i18n/locale/hi/settings.json +++ b/app/javascript/dashboard/i18n/locale/hi/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/hu/contact.json b/app/javascript/dashboard/i18n/locale/hu/contact.json index fecc18c2c..444273824 100644 --- a/app/javascript/dashboard/i18n/locale/hu/contact.json +++ b/app/javascript/dashboard/i18n/locale/hu/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Nem elérhető", "EMAIL_ADDRESS": "Email cím", "PHONE_NUMBER": "Telefonszám", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Vágólapra másolva", "COMPANY": "Cég", "LOCATION": "Hely", diff --git a/app/javascript/dashboard/i18n/locale/hu/conversation.json b/app/javascript/dashboard/i18n/locale/hu/conversation.json index 029536249..3d27e6d75 100644 --- a/app/javascript/dashboard/i18n/locale/hu/conversation.json +++ b/app/javascript/dashboard/i18n/locale/hu/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Kérjük válassz egy beszélgetést a bal sávból", + "CSAT_REPLY_MESSAGE": "Kérlek értékeld a beszélgetést", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "A beszélgetés csapata megváltozott", - "FILE_SIZE_LIMIT": "A file mérete meghaladja a {MAXIMUM_FILE_UPLOAD_SIZE} limitet", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Küldő:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json index 97b256648..901130d51 100644 --- a/app/javascript/dashboard/i18n/locale/hu/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/hu/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Beállítások" + "SETTINGS": "Beállítások", + "DELETE": "Törlés" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Név", + "DESCRIPTION": "Leírás", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Törlés megerősítése", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Igen, Törlés", + "NO": "Nem, tartsa meg" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Név", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Leírás", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Mégse" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/hu/settings.json b/app/javascript/dashboard/i18n/locale/hu/settings.json index 379ff29be..669139f38 100644 --- a/app/javascript/dashboard/i18n/locale/hu/settings.json +++ b/app/javascript/dashboard/i18n/locale/hu/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "A Facebook kapcsolatod lejárt, kérjük kapcsold össze oldalad újra a szolgáltatás folytatásához", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/id/contact.json b/app/javascript/dashboard/i18n/locale/id/contact.json index d11da4b4d..87c9baf0e 100644 --- a/app/javascript/dashboard/i18n/locale/id/contact.json +++ b/app/javascript/dashboard/i18n/locale/id/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Tidak Tersedia", "EMAIL_ADDRESS": "Alamat Email", "PHONE_NUMBER": "Nomor Telpon", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Berhasil disalin ke clipboard", "COMPANY": "Perusahaan", "LOCATION": "Lokasi", diff --git a/app/javascript/dashboard/i18n/locale/id/conversation.json b/app/javascript/dashboard/i18n/locale/id/conversation.json index b1a0bb169..2a3e656c3 100644 --- a/app/javascript/dashboard/i18n/locale/id/conversation.json +++ b/app/javascript/dashboard/i18n/locale/id/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Pilih percakapan dari panel kiri", + "CSAT_REPLY_MESSAGE": "Silakan beri peringkat percakapan ini", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Tim percakapan berubah", - "FILE_SIZE_LIMIT": "File melebihi batas {MAXIMUM_FILE_UPLOAD_SIZE} lampiran", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Dikirim oleh:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/id/helpCenter.json b/app/javascript/dashboard/i18n/locale/id/helpCenter.json index cd3625c49..0c705ea16 100644 --- a/app/javascript/dashboard/i18n/locale/id/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/id/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "aktif", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Pengaturan" + "SETTINGS": "Pengaturan", + "DELETE": "Hapus" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nama", + "DESCRIPTION": "Deskripsi", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Konfirmasi Penghapusan", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ya, Hapus", + "NO": "Tidak, Simpan" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Nama dibutuhkan" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Deskripsi", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Deskripsi dibutuhkan" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/id/settings.json b/app/javascript/dashboard/i18n/locale/id/settings.json index b51434118..c8207fc62 100644 --- a/app/javascript/dashboard/i18n/locale/id/settings.json +++ b/app/javascript/dashboard/i18n/locale/id/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Gambaran", "FACEBOOK_REAUTHORIZE": "Koneksi Facebook Anda telah kedaluwarsa, hubungkan kembali halaman Facebook Anda untuk melanjutkan layanan", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Menuju ke Settings", "SWITCH_CONVERSATION_STATUS": "Beralih ke status percakapan selanjutnya", "SWITCH_TO_PRIVATE_NOTE": "Beralih ke Catatan Pribadi", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Ganti ke Balasan", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/it/contact.json b/app/javascript/dashboard/i18n/locale/it/contact.json index 4096e8ae7..33f32c6d9 100644 --- a/app/javascript/dashboard/i18n/locale/it/contact.json +++ b/app/javascript/dashboard/i18n/locale/it/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Non disponibile", "EMAIL_ADDRESS": "Indirizzo email", "PHONE_NUMBER": "Numero di telefono", + "IDENTIFIER": "Identificatore", "COPY_SUCCESSFUL": "Copiato negli appunti con successo", "COMPANY": "Azienda", "LOCATION": "Posizione", diff --git a/app/javascript/dashboard/i18n/locale/it/conversation.json b/app/javascript/dashboard/i18n/locale/it/conversation.json index 98de45392..2f86651aa 100644 --- a/app/javascript/dashboard/i18n/locale/it/conversation.json +++ b/app/javascript/dashboard/i18n/locale/it/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Si prega di selezionare una conversazione dal pannello sinistro", + "CSAT_REPLY_MESSAGE": "Valuta la conversazione", "404": "Siamo spiacenti, non siamo riusciti a trovare la conversazione. Riprova", "SWITCH_VIEW_LAYOUT": "Cambia il layout", "DASHBOARD_APP_TAB_MESSAGES": "Messaggi", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Etichetta assegnata correttamente", "ASSIGN_LABEL_FAILED": "Assegnazione etichetta non riuscita", "CHANGE_TEAM": "Team conversazione cambiato", - "FILE_SIZE_LIMIT": "Il file supera il limite di {MAXIMUM_FILE_UPLOAD_SIZE} per poter essere allegato", + "FILE_SIZE_LIMIT": "Il file supera il limite di {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB per l'allegato", "MESSAGE_ERROR": "Impossibile inviare questo messaggio, riprova più tardi", "SENT_BY": "Inviato da:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/it/helpCenter.json b/app/javascript/dashboard/i18n/locale/it/helpCenter.json index 1ec5277df..3a9736f27 100644 --- a/app/javascript/dashboard/i18n/locale/it/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/it/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Tutti gli articoli", "PUBLISH_BUTTON": "Pubblica", + "MOVE_TO_ARCHIVE_BUTTON": "Sposta nell'archivio", "PREVIEW": "Anteprima", "ADD_TRANSLATION": "Aggiungi traduzione", "OPEN_SIDEBAR": "Apri barra laterale", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portali", + "DEFAULT": "Predefinito", "NEW_BUTTON": "Nuovo portale", "ACTIVE_BADGE": "attivo", "CHOOSE_LOCALE_LABEL": "Scegli una lingua", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articoli", "ADD": "Aggiungi lingua", "VISIT": "Visita sito", - "SETTINGS": "Impostazioni" + "SETTINGS": "Impostazioni", + "DELETE": "Elimina" }, "PORTAL_CONFIG": { "TITLE": "Configurazioni portale", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Predefinito" } } + }, + "DELETE_PORTAL": { + "TITLE": "Elimina portale", + "MESSAGE": "Sei sicuro di voler eliminare questo portale", + "YES": "Sì, elimina il portale", + "NO": "No, mantieni il portale", + "API": { + "DELETE_SUCCESS": "Portale eliminato con successo", + "DELETE_ERROR": "Errore durante l'eliminazione del portale" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Modifica portale", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informazioni di base" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personalizzazione del portale" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categorie" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categorie in", + "NEW_CATEGORY": "Nuova categoria", + "TABLE": { + "NAME": "Nome", + "DESCRIPTION": "Descrizione", + "LOCALE": "Locale", + "ARTICLE_COUNT": "N° di articoli", + "ACTION_BUTTON": { + "EDIT": "Modifica categoria", + "DELETE": "Elimina categoria" + }, + "EMPTY_TEXT": "Nessuna categoria trovata" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Aggiorna impostazioni di base" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Slug portale per URLs", - "ERROR": "Slug è obbligatorio" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Il testo dell'intestazione del portale è obbligatorio" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portale creato con successo.", "ERROR_MESSAGE_FOR_BASIC": "Impossibile creare il portale. Riprova.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portale aggiornato con successo.", "ERROR_MESSAGE_FOR_UPDATE": "Impossibile aggiornare il portale. Riprova." } + }, + "ADD_LOCALE": { + "TITLE": "Aggiungi una nuova lingua", + "SUB_TITLE": "Questo aggiunge un nuova lingua alla tua lista di traduzioni disponibili.", + "PORTAL": "Portale", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Scegli una lingua", + "ERROR": "Lingua richiesta" + }, + "BUTTONS": { + "CREATE": "Crea lingua", + "CANCEL": "annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Lingua aggiunta con successo", + "ERROR_MESSAGE": "Impossibile aggiungere la lingua. Riprova." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lingua predefinita aggiornata correttamente", + "ERROR_MESSAGE": "Impossibile aggiornare la lingua predefinita. Riprova." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lingua rimossa dal portale con successo", + "ERROR_MESSAGE": "Impossibile rimuovere la lingua dal portale. Riprova." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Errore durante il salvataggio dell'articolo" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Errore durante la pubblicazione dell'articolo", + "SUCCESS": "Articolo pubblicato con successo" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Errore durante l'archiviazione dell'articolo", + "SUCCESS": "Articolo archiviato con successo" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Conferma eliminazione", + "MESSAGE": "Sei sicuro di voler eliminare l'articolo?", + "YES": "Sì, elimina", + "NO": "No, conserva" + } + }, + "API": { + "SUCCESS_MESSAGE": "Articolo eliminato con successo", + "ERROR_MESSAGE": "Errore durante l'eliminazione dell'articolo" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Qualcosa è andato storto. Per favore, riprova." + "ERROR_MESSAGE": "Si prega di aggiungere l'intestazione e il contenuto dell'articolo quindi solo è possibile aggiornare le impostazioni" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Categoria creata con successo", "ERROR_MESSAGE": "Impossibile creare la categoria" } + }, + "EDIT": { + "TITLE": "Modifica una categoria", + "SUB_TITLE": "Modificare una categoria aggiornerà la categoria nel portale pubblico.", + "PORTAL": "Portale", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome categoria", + "HELP_TEXT": "Il nome della categoria verrà utilizzato nel portale pubblico per categorizzare gli articoli.", + "ERROR": "Il nome è obbligatorio" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug categoria per url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug è obbligatorio" + }, + "DESCRIPTION": { + "LABEL": "Descrizione", + "PLACEHOLDER": "Fornisci una breve descrizione della categoria.", + "ERROR": "La descrizione è obbligatoria" + }, + "BUTTONS": { + "CREATE": "Aggiorna categoria", + "CANCEL": "annulla" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria aggiornata con successo", + "ERROR_MESSAGE": "Impossibile aggiornare la categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria eliminata con successo", + "ERROR_MESSAGE": "Impossibile eliminare la categoria" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/it/settings.json b/app/javascript/dashboard/i18n/locale/it/settings.json index dc0ac5e88..2a8468737 100644 --- a/app/javascript/dashboard/i18n/locale/it/settings.json +++ b/app/javascript/dashboard/i18n/locale/it/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Panoramica", "FACEBOOK_REAUTHORIZE": "La tua connessione a Facebook è scaduta, ricollegati alla tua pagina Facebook per continuare i servizi", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "Tutti gli articoli", "MY_ARTICLES": "I miei articoli", "DRAFT": "Bozza", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Vai alle impostazioni", "SWITCH_CONVERSATION_STATUS": "Passa allo stato successivo della conversazione", "SWITCH_TO_PRIVATE_NOTE": "Passa alle note private", - "TOGGLE_RICH_CONTENT_EDITOR": "Attiva/Disattiva editor di contenuti esteso", "SWITCH_TO_REPLY": "Passa a Risposta", "TOGGLE_SNOOZE_DROPDOWN": "Attiva/Disattiva sospensione a discesa" }, diff --git a/app/javascript/dashboard/i18n/locale/ja/contact.json b/app/javascript/dashboard/i18n/locale/ja/contact.json index 1563af6e4..495b236b2 100644 --- a/app/javascript/dashboard/i18n/locale/ja/contact.json +++ b/app/javascript/dashboard/i18n/locale/ja/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "利用不可", "EMAIL_ADDRESS": "Eメールアドレス", "PHONE_NUMBER": "電話番号", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "企業", "LOCATION": "場所", diff --git a/app/javascript/dashboard/i18n/locale/ja/conversation.json b/app/javascript/dashboard/i18n/locale/ja/conversation.json index 6ea1cb21b..ee7c21644 100644 --- a/app/javascript/dashboard/i18n/locale/ja/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ja/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "左のリストから会話を選択してください", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "添付ファイルサイズの上限 {MAXIMUM_FILE_UPLOAD_SIZE} を超えています", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json index f464401bd..263545bf9 100644 --- a/app/javascript/dashboard/i18n/locale/ja/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ja/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "設定" + "SETTINGS": "設定", + "DELETE": "削除" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "名前", + "DESCRIPTION": "説明", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "削除の確認", + "MESSAGE": "Are you sure to delete the article?", + "YES": "削除する", + "NO": "いいえ、保存しておきます" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "名前", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "名前が必須です" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "説明", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "キャンセル" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ja/settings.json b/app/javascript/dashboard/i18n/locale/ja/settings.json index 263151ddb..457d3978b 100644 --- a/app/javascript/dashboard/i18n/locale/ja/settings.json +++ b/app/javascript/dashboard/i18n/locale/ja/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Facebookの接続が期限切れになりました。サービスを継続するには、Facebookページを再接続してください。", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ka/contact.json b/app/javascript/dashboard/i18n/locale/ka/contact.json index 0bc399ba1..0a7f4092a 100644 --- a/app/javascript/dashboard/i18n/locale/ka/contact.json +++ b/app/javascript/dashboard/i18n/locale/ka/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Not Available", "EMAIL_ADDRESS": "Email Address", "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "Location", diff --git a/app/javascript/dashboard/i18n/locale/ka/conversation.json b/app/javascript/dashboard/i18n/locale/ka/conversation.json index 7adac123f..047e5c351 100644 --- a/app/javascript/dashboard/i18n/locale/ka/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ka/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json index d0c7b2411..9c18b4c7f 100644 --- a/app/javascript/dashboard/i18n/locale/ka/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ka/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Delete" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ka/settings.json b/app/javascript/dashboard/i18n/locale/ka/settings.json index 7994321cc..93ebbbc9a 100644 --- a/app/javascript/dashboard/i18n/locale/ka/settings.json +++ b/app/javascript/dashboard/i18n/locale/ka/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ko/contact.json b/app/javascript/dashboard/i18n/locale/ko/contact.json index 45a8c66f7..cb374dc75 100644 --- a/app/javascript/dashboard/i18n/locale/ko/contact.json +++ b/app/javascript/dashboard/i18n/locale/ko/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "사용할 수 없음", "EMAIL_ADDRESS": "이메일 주소", "PHONE_NUMBER": "휴대폰 번호", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "클립보드에 성공적으로 복사됨", "COMPANY": "회사", "LOCATION": "장소", diff --git a/app/javascript/dashboard/i18n/locale/ko/conversation.json b/app/javascript/dashboard/i18n/locale/ko/conversation.json index 21f761cfb..22c9f4f94 100644 --- a/app/javascript/dashboard/i18n/locale/ko/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ko/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "왼쪽 창에서 대화를 선택하십시오.", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "대화 담당자가 변경됨", - "FILE_SIZE_LIMIT": "첨부파일이 최대 {MAXIMUM_FILE_UPLOAD_SIZE} 용량 제한을 넘어섭니다.", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "보낸 사람:", "BOT": "봇", diff --git a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json index 91cbb2c02..318e0550c 100644 --- a/app/javascript/dashboard/i18n/locale/ko/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ko/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "설정" + "SETTINGS": "설정", + "DELETE": "삭제" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "이름", + "DESCRIPTION": "내용", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "삭제 확인", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "아니요, 유지합니다." + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "이름", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "내용", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "취소" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ko/settings.json b/app/javascript/dashboard/i18n/locale/ko/settings.json index d534cc099..33d0a1f0e 100644 --- a/app/javascript/dashboard/i18n/locale/ko/settings.json +++ b/app/javascript/dashboard/i18n/locale/ko/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "페이스북 연결이 만료되었습니다. 서비스를 계속하려면 페이스북 페이지를 다시 연결하십시오.", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json b/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json new file mode 100644 index 000000000..46a573c42 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/advancedFilters.json @@ -0,0 +1,93 @@ +{ + "FILTER": { + "TITLE": "Filter Conversations", + "SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.", + "ADD_NEW_FILTER": "Add Filter", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Apply filters", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "TOOLTIP_LABEL": "Filter conversations", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_less_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ATTRIBUTE_LABELS": { + "TRUE": "True", + "FALSE": "False" + }, + "ATTRIBUTES": { + "STATUS": "Status", + "ASSIGNEE_NAME": "Assignee Name", + "INBOX_NAME": "Inbox Name", + "TEAM_NAME": "Team Name", + "CONVERSATION_IDENTIFIER": "Conversation Identifier", + "CAMPAIGN_NAME": "Campaign Name", + "LABELS": "Labels", + "BROWSER_LANGUAGE": "Browser Language", + "COUNTRY_NAME": "Country Name", + "REFERER_LINK": "Referer link", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + }, + "CUSTOM_VIEWS": { + "ADD": { + "TITLE": "Do you want to save this filter?", + "LABEL": "Name this filter", + "PLACEHOLDER": "Enter a name for this filter", + "ERROR_MESSAGE": "Name is required", + "SAVE_BUTTON": "Save filter", + "CANCEL_BUTTON": "Cancel", + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder created successfully", + "ERROR_MESSAGE": "Error while creating folder" + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment created successfully", + "ERROR_MESSAGE": "Error while creating segment" + } + }, + "DELETE": { + "DELETE_BUTTON": "Delete filter", + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the filter ", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API_FOLDERS": { + "SUCCESS_MESSAGE": "Folder deleted successfully", + "ERROR_MESSAGE": "Error while deleting folder" + }, + "API_SEGMENTS": { + "SUCCESS_MESSAGE": "Segment deleted successfully", + "ERROR_MESSAGE": "Error while deleting segment" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json b/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json new file mode 100644 index 000000000..0f965c717 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/agentMgmt.json @@ -0,0 +1,113 @@ +{ + "AGENT_MGMT": { + "HEADER": "Agents", + "HEADER_BTN_TXT": "Add Agent", + "LOADING": "Fetching Agent List", + "SIDEBAR_TXT": "

Agents

An Agent is a member of your Customer Support team.

Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account.

Click on Add Agent to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages.

Access to Chatwoot's features are based on following roles.

Agent - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.

Administrator - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.

", + "AGENT_TYPES": { + "ADMINISTRATOR": "Administrator", + "AGENT": "Agent" + }, + "LIST": { + "404": "There are no agents associated to this account", + "TITLE": "Manage agents in your team", + "DESC": "You can add/remove agents to/in your team.", + "NAME": "Name", + "EMAIL": "EMAIL", + "STATUS": "Status", + "ACTIONS": "Actions", + "VERIFIED": "Verified", + "VERIFICATION_PENDING": "Verification Pending" + }, + "ADD": { + "TITLE": "Add agent to your team", + "DESC": "You can add people who will be able to handle support for your inboxes.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Add Agent" + }, + "API": { + "SUCCESS_MESSAGE": "Agent added successfully", + "EXIST_MESSAGE": "Agent email already in use, Please try another email address", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Agent deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + }, + "EDIT": { + "TITLE": "Edit agent", + "FORM": { + "NAME": { + "LABEL": "Agent Name", + "PLACEHOLDER": "Please enter a name of the agent" + }, + "AGENT_TYPE": { + "LABEL": "Role", + "PLACEHOLDER": "Please select a role", + "ERROR": "Role is required" + }, + "EMAIL": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter an email address of the agent" + }, + "SUBMIT": "Edit Agent" + }, + "BUTTON_TEXT": "Edit", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Agent updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "PASSWORD_RESET": { + "ADMIN_RESET_BUTTON": "Reset Password", + "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", + "SUCCESS_MESSAGE": "Agent password reset successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "SEARCH": { + "NO_RESULTS": "No results found." + }, + "MULTI_SELECTOR": { + "PLACEHOLDER": "None", + "TITLE": { + "AGENT": "Select agent", + "TEAM": "Select team" + }, + "SEARCH": { + "NO_RESULTS": { + "AGENT": "No agents found", + "TEAM": "No teams found" + }, + "PLACEHOLDER": { + "AGENT": "Search agents", + "TEAM": "Search teams" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json new file mode 100644 index 000000000..ff4904c34 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/attributesMgmt.json @@ -0,0 +1,99 @@ +{ + "ATTRIBUTES_MGMT": { + "HEADER": "Custom Attributes", + "HEADER_BTN_TXT": "Add Custom Attribute", + "LOADING": "Fetching custom attributes", + "SIDEBAR_TXT": "

Custom Attributes

A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc.

For creating a Custom Attribute, just click on the Add Custom Attribute. You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.

", + "ADD": { + "TITLE": "Add Custom Attribute", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Display Name", + "PLACEHOLDER": "Enter custom attribute display name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter custom attribute description", + "ERROR": "Description is required" + }, + "MODEL": { + "LABEL": "Applies to", + "PLACEHOLDER": "Please select one", + "ERROR": "Model is required" + }, + "TYPE": { + "LABEL": "Type", + "PLACEHOLDER": "Please select a type", + "ERROR": "Type is required", + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter value and press enter key", + "ERROR": "Must have at least one value" + } + }, + "KEY": { + "LABEL": "Key", + "PLACEHOLDER": "Enter custom attribute key", + "ERROR": "Key is required", + "IN_VALID": "Invalid key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute added successfully", + "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - %{attributeName}", + "PLACE_HOLDER": "Please type {attributeName} to confirm", + "MESSAGE": "Deleting will remove the custom attribute", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "EDIT": { + "TITLE": "Edit Custom Attribute", + "UPDATE_BUTTON_TEXT": "Update", + "TYPE": { + "LIST": { + "LABEL": "List Values", + "PLACEHOLDER": "Please enter values and press enter key" + } + }, + "API": { + "SUCCESS_MESSAGE": "Custom Attribute updated successfully", + "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + } + }, + "TABS": { + "HEADER": "Custom Attributes", + "CONVERSATION": "Conversation", + "CONTACT": "Contact" + }, + "LIST": { + "TABLE_HEADER": [ + "Name", + "Description", + "Type", + "Key" + ], + "BUTTONS": { + "EDIT": "Edit", + "DELETE": "Delete" + }, + "EMPTY_RESULT": { + "404": "There are no custom attributes created", + "NOT_FOUND": "There are no custom attributes configured" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/automation.json b/app/javascript/dashboard/i18n/locale/lt/automation.json new file mode 100644 index 000000000..5d291814e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/automation.json @@ -0,0 +1,116 @@ +{ + "AUTOMATION": { + "HEADER": "Automations", + "HEADER_BTN_TXT": "Add Automation Rule", + "LOADING": "Fetching automation rules", + "SIDEBAR_TXT": "

Automation Rules

Automation can replace and automate existing processes that require manual effort. You can do many things with automation, including adding labels and assigning conversation to the best agent. So the team focuses on what they do best and spends more little time on manual tasks.

", + "ADD": { + "TITLE": "Add Automation Rule", + "SUBMIT": "Create", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "NAME": { + "LABEL": "Rule Name", + "PLACEHOLDER": "Enter rule name", + "ERROR": "Name is required" + }, + "DESC": { + "LABEL": "Description", + "PLACEHOLDER": "Enter rule description", + "ERROR": "Description is required" + }, + "EVENT": { + "LABEL": "Event", + "PLACEHOLDER": "Please select one", + "ERROR": "Event is required" + }, + "CONDITIONS": { + "LABEL": "Conditions" + }, + "ACTIONS": { + "LABEL": "Actions" + } + }, + "CONDITION_BUTTON_LABEL": "Add Condition", + "ACTION_BUTTON_LABEL": "Add Action", + "API": { + "SUCCESS_MESSAGE": "Automation rule added successfully", + "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + } + }, + "LIST": { + "TABLE_HEADER": [ + "Name", + "Description", + "Active", + "Created on" + ], + "404": "No automation rules found" + }, + "DELETE": { + "TITLE": "Delete Automation Rule", + "SUBMIT": "Delete", + "CANCEL_BUTTON_TEXT": "Cancel", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Automation rule deleted successfully", + "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Automation Rule", + "SUBMIT": "Update", + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Automation rule updated successfully", + "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + } + }, + "CLONE": { + "TOOLTIP": "Clone", + "API": { + "SUCCESS_MESSAGE": "Automation cloned successfully", + "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + } + }, + "FORM": { + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel", + "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + }, + "CONDITION": { + "DELETE_MESSAGE": "You need to have atleast one condition to save" + }, + "ACTION": { + "DELETE_MESSAGE": "You need to have atleast one action to save", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", + "TEAM_DROPDOWN_PLACEHOLDER": "Select teams" + }, + "TOGGLE": { + "ACTIVATION_TITLE": "Activate Automation Rule", + "DEACTIVATION_TITLE": "Deactivate Automation Rule", + "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", + "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", + "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", + "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", + "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", + "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", + "CONFIRMATION_LABEL": "Yes", + "CANCEL_LABEL": "No" + }, + "ATTACHMENT": { + "UPLOAD_ERROR": "Could not upload attachment, Please try again", + "LABEL_IDLE": "Upload Attachment", + "LABEL_UPLOADING": "Uploading...", + "LABEL_UPLOADED": "Succesfully Uploaded", + "LABEL_UPLOAD_FAILED": "Upload Failed" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/bulkActions.json b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json new file mode 100644 index 000000000..7061e5e70 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/bulkActions.json @@ -0,0 +1,29 @@ +{ + "BULK_ACTION": { + "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", + "AGENT_SELECT_LABEL": "Select Agent", + "ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", + "GO_BACK_LABEL": "Go back", + "ASSIGN_LABEL": "Assign", + "ASSIGN_AGENT_TOOLTIP": "Assign Agent", + "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", + "UPDATE": { + "CHANGE_STATUS": "Change status", + "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", + "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "UPDATE_FAILED": "Failed to update conversations, please try again" + }, + "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" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/campaign.json b/app/javascript/dashboard/i18n/locale/lt/campaign.json new file mode 100644 index 000000000..bbcc463ee --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/campaign.json @@ -0,0 +1,126 @@ +{ + "CAMPAIGN": { + "HEADER": "Campaigns", + "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.", + "HEADER_BTN_TXT": { + "ONE_OFF": "Create a one off campaign", + "ONGOING": "Create a ongoing campaign" + }, + "ADD": { + "TITLE": "Create a campaign", + "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", + "CANCEL_BUTTON_TEXT": "Cancel", + "CREATE_BUTTON_TEXT": "Create", + "FORM": { + "TITLE": { + "LABEL": "Title", + "PLACEHOLDER": "Please enter the title of campaign", + "ERROR": "Title is required" + }, + "SCHEDULED_AT": { + "LABEL": "Scheduled time", + "PLACEHOLDER": "Please select the time", + "CONFIRM": "Confirm", + "ERROR": "Scheduled time is required" + }, + "AUDIENCE": { + "LABEL": "Audience", + "PLACEHOLDER": "Select the customer labels", + "ERROR": "Audience is required" + }, + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox", + "ERROR": "Inbox is required" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter the message of campaign", + "ERROR": "Message is required" + }, + "SENT_BY": { + "LABEL": "Sent by", + "PLACEHOLDER": "Please select the the content of campaign", + "ERROR": "Sender is required" + }, + "END_POINT": { + "LABEL": "URL", + "PLACEHOLDER": "Please enter the URL", + "ERROR": "Please enter a valid URL" + }, + "TIME_ON_PAGE": { + "LABEL": "Time on page(Seconds)", + "PLACEHOLDER": "Please enter the time", + "ERROR": "Time on page is required" + }, + "ENABLED": "Enable campaign", + "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours", + "SUBMIT": "Add Campaign" + }, + "API": { + "SUCCESS_MESSAGE": "Campaign created successfully", + "ERROR_MESSAGE": "There was an error. Please try again." + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete?", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Campaign deleted successfully", + "ERROR_MESSAGE": "Could not delete the campaign. Please try again later." + } + }, + "EDIT": { + "TITLE": "Edit campaign", + "UPDATE_BUTTON_TEXT": "Update", + "API": { + "SUCCESS_MESSAGE": "Campaign updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "LIST": { + "LOADING_MESSAGE": "Loading campaigns...", + "404": "There are no campaigns created for this inbox.", + "TABLE_HEADER": { + "TITLE": "Title", + "MESSAGE": "Message", + "INBOX": "Inbox", + "STATUS": "Status", + "SENDER": "Sender", + "URL": "URL", + "SCHEDULED_AT": "Scheduled time", + "TIME_ON_PAGE": "Time(Seconds)", + "CREATED_AT": "Created at" + }, + "BUTTONS": { + "ADD": "Add", + "EDIT": "Edit", + "DELETE": "Delete" + }, + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled", + "COMPLETED": "Completed", + "ACTIVE": "Active" + }, + "SENDER": { + "BOT": "Bot" + } + }, + "ONE_OFF": { + "HEADER": "One off campaigns", + "404": "There are no one off campaigns created", + "INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns" + }, + "ONGOING": { + "HEADER": "Ongoing campaigns", + "404": "There are no ongoing campaigns created", + "INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json new file mode 100644 index 000000000..9c14f5a52 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/cannedMgmt.json @@ -0,0 +1,76 @@ +{ + "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.

", + "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" + ] + }, + "ADD": { + "TITLE": "Add Canned Response", + "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "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" + }, + "SUBMIT": "Submit" + }, + "API": { + "SUCCESS_MESSAGE": "Canned Response added successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "EDIT": { + "TITLE": "Edit Canned Response", + "CANCEL_BUTTON_TEXT": "Cancel", + "FORM": { + "SHORT_CODE": { + "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" + }, + "SUBMIT": "Submit" + }, + "BUTTON_TEXT": "Edit", + "API": { + "SUCCESS_MESSAGE": "Canned Response updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Canned response deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/chatlist.json b/app/javascript/dashboard/i18n/locale/lt/chatlist.json new file mode 100644 index 000000000..93bba4aab --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/chatlist.json @@ -0,0 +1,65 @@ +{ + "CHAT_LIST": { + "LOADING": "Fetching conversations", + "LOAD_MORE_CONVERSATIONS": "Load more conversations", + "EOF": "All conversations loaded 🎉", + "LIST": { + "404": "There are no active conversations in this group." + }, + "TAB_HEADING": "Conversations", + "MENTION_HEADING": "Mentions", + "SEARCH": { + "INPUT": "Search for People, Chats, Saved Replies .." + }, + "FILTER_ALL": "All", + "ASSIGNEE_TYPE_TABS": { + "me": "Mine", + "unassigned": "Unassigned", + "all": "All" + }, + "CHAT_STATUS_FILTER_ITEMS": { + "open": { + "TEXT": "Open" + }, + "resolved": { + "TEXT": "Resolved" + }, + "pending": { + "TEXT": "Pending" + }, + "snoozed": { + "TEXT": "Snoozed" + } + }, + "ATTACHMENTS": { + "image": { + "CONTENT": "Picture message" + }, + "audio": { + "CONTENT": "Audio message" + }, + "video": { + "CONTENT": "Video message" + }, + "file": { + "CONTENT": "File Attachment" + }, + "location": { + "CONTENT": "Location" + }, + "fallback": { + "CONTENT": "has shared a url" + } + }, + "RECEIVED_VIA_EMAIL": "Received via email", + "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", + "REPLY_TO_TWEET": "Reply to this tweet", + "LINK_TO_STORY": "Go to instagram story", + "SENT": "Sent successfully", + "NO_MESSAGES": "No Messages", + "NO_CONTENT": "No content available", + "HIDE_QUOTED_TEXT": "Hide Quoted Text", + "SHOW_QUOTED_TEXT": "Show Quoted Text", + "MESSAGE_READ": "Read" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/contact.json b/app/javascript/dashboard/i18n/locale/lt/contact.json new file mode 100644 index 000000000..0a7f4092a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/contact.json @@ -0,0 +1,347 @@ +{ + "CONTACT_PANEL": { + "NOT_AVAILABLE": "Not Available", + "EMAIL_ADDRESS": "Email Address", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "COMPANY": "Company", + "LOCATION": "Location", + "BROWSER_LANGUAGE": "Browser Language", + "CONVERSATION_TITLE": "Conversation Details", + "VIEW_PROFILE": "View Profile", + "BROWSER": "Browser", + "OS": "Operating System", + "INITIATED_FROM": "Initiated from", + "INITIATED_AT": "Initiated at", + "IP_ADDRESS": "IP Address", + "NEW_MESSAGE": "New message", + "CONVERSATIONS": { + "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", + "TITLE": "Previous Conversations" + }, + "LABELS": { + "CONTACT": { + "TITLE": "Contact Labels", + "ERROR": "Couldn't update labels" + }, + "CONVERSATION": { + "TITLE": "Conversation Labels", + "ADD_BUTTON": "Add Labels" + }, + "LABEL_SELECT": { + "TITLE": "Add Labels", + "PLACEHOLDER": "Search labels", + "NO_RESULT": "No labels found" + } + }, + "MERGE_CONTACT": "Merge contact", + "CONTACT_ACTIONS": "Contact actions", + "MUTE_CONTACT": "Mute Conversation", + "UNMUTE_CONTACT": "Unmute Conversation", + "MUTED_SUCCESS": "This conversation is muted for 6 hours", + "UNMUTED_SUCCESS": "This conversation is unmuted", + "SEND_TRANSCRIPT": "Send Transcript", + "EDIT_LABEL": "Edit", + "SIDEBAR_SECTIONS": { + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "CONTACT_LABELS": "Contact Labels", + "PREVIOUS_CONVERSATIONS": "Previous Conversations" + } + }, + "EDIT_CONTACT": { + "BUTTON_LABEL": "Edit Contact", + "TITLE": "Edit contact", + "DESC": "Edit contact details" + }, + "CREATE_CONTACT": { + "BUTTON_LABEL": "New Contact", + "TITLE": "Create new contact", + "DESC": "Add basic information details about the contact." + }, + "IMPORT_CONTACTS": { + "BUTTON_LABEL": "Import", + "TITLE": "Import Contacts", + "DESC": "Import contacts through a CSV file.", + "DOWNLOAD_LABEL": "Download a sample csv.", + "FORM": { + "LABEL": "CSV File", + "SUBMIT": "Import", + "CANCEL": "Cancel" + }, + "SUCCESS_MESSAGE": "Contacts saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "DELETE_NOTE": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you want sure to delete this note?", + "YES": "Yes, Delete it", + "NO": "No, Keep it" + } + }, + "DELETE_CONTACT": { + "BUTTON_LABEL": "Delete Contact", + "TITLE": "Delete contact", + "DESC": "Delete contact details", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete", + "NO": "No, Keep" + }, + "API": { + "SUCCESS_MESSAGE": "Contact deleted successfully", + "ERROR_MESSAGE": "Could not delete contact. Please try again later." + } + }, + "CONTACT_FORM": { + "FORM": { + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "AVATAR": { + "LABEL": "Contact Avatar" + }, + "NAME": { + "PLACEHOLDER": "Enter the full name of the contact", + "LABEL": "Full Name" + }, + "BIO": { + "PLACEHOLDER": "Enter the bio of the contact", + "LABEL": "Bio" + }, + "EMAIL_ADDRESS": { + "PLACEHOLDER": "Enter the email address of the contact", + "LABEL": "Email Address", + "DUPLICATE": "This email address is in use for another contact.", + "ERROR": "Please enter a valid email address." + }, + "PHONE_NUMBER": { + "PLACEHOLDER": "Enter the phone number of the contact", + "LABEL": "Phone Number", + "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", + "ERROR": "Phone number should be either empty or of E.164 format", + "DUPLICATE": "This phone number is in use for another contact." + }, + "LOCATION": { + "PLACEHOLDER": "Enter the location of the contact", + "LABEL": "Location" + }, + "COMPANY_NAME": { + "PLACEHOLDER": "Enter the company name", + "LABEL": "Company Name" + }, + "SOCIAL_PROFILES": { + "FACEBOOK": { + "PLACEHOLDER": "Enter the Facebook username", + "LABEL": "Facebook" + }, + "TWITTER": { + "PLACEHOLDER": "Enter the Twitter username", + "LABEL": "Twitter" + }, + "LINKEDIN": { + "PLACEHOLDER": "Enter the LinkedIn username", + "LABEL": "LinkedIn" + }, + "GITHUB": { + "PLACEHOLDER": "Enter the Github username", + "LABEL": "Github" + } + } + }, + "DELETE_AVATAR": { + "API": { + "SUCCESS_MESSAGE": "Contact avatar deleted successfully", + "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + } + }, + "SUCCESS_MESSAGE": "Contact saved successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "NEW_CONVERSATION": { + "BUTTON_LABEL": "Start conversation", + "TITLE": "New conversation", + "DESC": "Start a new conversation by sending a new message.", + "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "FORM": { + "TO": { + "LABEL": "To" + }, + "INBOX": { + "LABEL": "Inbox", + "ERROR": "Select an inbox" + }, + "SUBJECT": { + "LABEL": "Subject", + "PLACEHOLDER": "Subject", + "ERROR": "Subject can't be empty" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Write your message here", + "ERROR": "Message can't be empty" + }, + "SUBMIT": "Send message", + "CANCEL": "Cancel", + "SUCCESS_MESSAGE": "Message sent!", + "GO_TO_CONVERSATION": "View", + "ERROR_MESSAGE": "Couldn't send! try again" + } + }, + "CONTACTS_PAGE": { + "HEADER": "Contacts", + "FIELDS": "Contact fields", + "SEARCH_BUTTON": "Search", + "SEARCH_INPUT_PLACEHOLDER": "Search for contacts", + "FILTER_CONTACTS": "Filter", + "FILTER_CONTACTS_SAVE": "Save filter", + "FILTER_CONTACTS_DELETE": "Delete filter", + "LIST": { + "LOADING_MESSAGE": "Loading contacts...", + "404": "No contacts matches your search 🔍", + "NO_CONTACTS": "There are no available contacts", + "TABLE_HEADER": { + "NAME": "Name", + "PHONE_NUMBER": "Phone Number", + "CONVERSATIONS": "Conversations", + "LAST_ACTIVITY": "Last Activity", + "COUNTRY": "Country", + "CITY": "City", + "SOCIAL_PROFILES": "Social Profiles", + "COMPANY": "Company", + "EMAIL_ADDRESS": "Email Address" + }, + "VIEW_DETAILS": "View details" + } + }, + "CONTACT_PROFILE": { + "BACK_BUTTON": "Contacts", + "LOADING": "Loading contact profile..." + }, + "REMINDER": { + "ADD_BUTTON": { + "BUTTON": "Add", + "TITLE": "Shift + Enter to create a task" + }, + "FOOTER": { + "DUE_DATE": "Due date", + "LABEL_TITLE": "Set type" + } + }, + "NOTES": { + "FETCHING_NOTES": "Fetching notes...", + "NOT_AVAILABLE": "There are no notes created for this contact", + "HEADER": { + "TITLE": "Notes" + }, + "LIST": { + "LABEL": "added a note" + }, + "ADD": { + "BUTTON": "Add", + "PLACEHOLDER": "Add a note", + "TITLE": "Shift + Enter to create a note" + }, + "CONTENT_HEADER": { + "DELETE": "Delete note" + } + }, + "EVENTS": { + "HEADER": { + "TITLE": "Activities" + }, + "BUTTON": { + "PILL_BUTTON_NOTES": "notes", + "PILL_BUTTON_EVENTS": "events", + "PILL_BUTTON_CONVO": "conversations" + } + }, + "CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Add attributes", + "BUTTON": "Add custom attribute", + "NOT_AVAILABLE": "There are no custom attributes available for this contact.", + "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "ACTIONS": { + "COPY": "Copy attribute", + "DELETE": "Delete attribute", + "EDIT": "Edit attribute" + }, + "ADD": { + "TITLE": "Create custom attribute", + "DESC": "Add custom information to this contact." + }, + "FORM": { + "CREATE": "Add attribute", + "CANCEL": "Cancel", + "NAME": { + "LABEL": "Custom attribute name", + "PLACEHOLDER": "Eg: shopify id", + "ERROR": "Invalid custom attribute name" + }, + "VALUE": { + "LABEL": "Attribute value", + "PLACEHOLDER": "Eg: 11901 " + }, + "ADD": { + "TITLE": "Create new attribute ", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + }, + "ATTRIBUTE_TYPE": { + "LIST": { + "PLACEHOLDER": "Select value", + "SEARCH_INPUT_PLACEHOLDER": "Search value", + "NO_RESULT": "No result found" + } + } + }, + "VALIDATIONS": { + "REQUIRED": "Valid value is required", + "INVALID_URL": "Invalid URL" + } + }, + "MERGE_CONTACTS": { + "TITLE": "Merge contacts", + "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "PRIMARY": { + "TITLE": "Primary contact", + "HELP_LABEL": "To be kept" + }, + "CHILD": { + "TITLE": "Contact to merge", + "PLACEHOLDER": "Search for a contact", + "HELP_LABEL": "To be deleted" + }, + "SUMMARY": { + "TITLE": "Summary", + "DELETE_WARNING": "Contact of %{childContactName} will be deleted.", + "ATTRIBUTE_WARNING": "Contact details of %{childContactName} will be copied to %{primaryContactName}." + }, + "SEARCH": { + "ERROR": "ERROR_MESSAGE" + }, + "FORM": { + "SUBMIT": " Merge contacts", + "CANCEL": "Cancel", + "CHILD_CONTACT": { + "ERROR": "Select a child contact to merge" + }, + "SUCCESS_MESSAGE": "Contact merged successfully", + "ERROR_MESSAGE": "Could not merge contacts, try again!" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/contactFilters.json b/app/javascript/dashboard/i18n/locale/lt/contactFilters.json new file mode 100644 index 000000000..3f84a8476 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/contactFilters.json @@ -0,0 +1,50 @@ +{ + "CONTACTS_FILTER": { + "TITLE": "Filter Contacts", + "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", + "ADD_NEW_FILTER": "Add Filter", + "CLEAR_ALL_FILTERS": "Clear All Filters", + "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "SUBMIT_BUTTON_LABEL": "Submit", + "CANCEL_BUTTON_LABEL": "Cancel", + "CLEAR_BUTTON_LABEL": "Clear Filters", + "EMPTY_VALUE_ERROR": "Value is required", + "TOOLTIP_LABEL": "Filter contacts", + "QUERY_DROPDOWN_LABELS": { + "AND": "AND", + "OR": "OR" + }, + "OPERATOR_LABELS": { + "equal_to": "Equal to", + "not_equal_to": "Not equal to", + "contains": "Contains", + "does_not_contain": "Does not contain", + "is_present": "Is present", + "is_not_present": "Is not present", + "is_greater_than": "Is greater than", + "is_lesser_than": "Is lesser than", + "days_before": "Is x days before" + }, + "ATTRIBUTES": { + "NAME": "Name", + "EMAIL": "Email", + "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", + "CITY": "City", + "COUNTRY": "Country", + "CUSTOM_ATTRIBUTE_LIST": "List", + "CUSTOM_ATTRIBUTE_TEXT": "Text", + "CUSTOM_ATTRIBUTE_NUMBER": "Number", + "CUSTOM_ATTRIBUTE_LINK": "Link", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CREATED_AT": "Created At", + "LAST_ACTIVITY": "Last Activity", + "REFERER_LINK": "Referrer link" + }, + "GROUPS": { + "STANDARD_FILTERS": "Standard Filters", + "ADDITIONAL_FILTERS": "Additional Filters", + "CUSTOM_ATTRIBUTES": "Custom Attributes" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/conversation.json b/app/javascript/dashboard/i18n/locale/lt/conversation.json new file mode 100644 index 000000000..047e5c351 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/conversation.json @@ -0,0 +1,242 @@ +{ + "CONVERSATION": { + "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "404": "Sorry, we cannot find the conversation. Please try again", + "SWITCH_VIEW_LAYOUT": "Switch the layout", + "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "UNVERIFIED_SESSION": "The identity of this user is not verified", + "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", + "NO_MESSAGE_2": " to send a message to your page!", + "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", + "NO_INBOX_2": " to get started", + "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", + "SEARCH_MESSAGES": "Search for messages in conversations", + "SEARCH": { + "TITLE": "Search messages", + "RESULT_TITLE": "Search Results", + "LOADING_MESSAGE": "Crunching data...", + "PLACEHOLDER": "Type any text to search messages", + "NO_MATCHING_RESULTS": "No results found." + }, + "UNREAD_MESSAGES": "Unread Messages", + "UNREAD_MESSAGE": "Unread Message", + "CLICK_HERE": "Click here", + "LOADING_INBOXES": "Loading inboxes", + "LOADING_CONVERSATIONS": "Loading Conversations", + "CANNOT_REPLY": "You cannot reply due to", + "24_HOURS_WINDOW": "24 hour message window restriction", + "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", + "ASSIGN_TO_ME": "Assign to me", + "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", + "SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.", + "REPLYING_TO": "You are replying to:", + "REMOVE_SELECTION": "Remove Selection", + "DOWNLOAD": "Download", + "UNKNOWN_FILE_TYPE": "Unknown File", + "UPLOADING_ATTACHMENTS": "Uploading attachments...", + "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", + "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", + "NO_RESPONSE": "No response", + "RATING_TITLE": "Rating", + "FEEDBACK_TITLE": "Feedback", + "HEADER": { + "RESOLVE_ACTION": "Resolve", + "REOPEN_ACTION": "Reopen", + "OPEN_ACTION": "Open", + "OPEN": "More", + "CLOSE": "Close", + "DETAILS": "details", + "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", + "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply" + }, + "RESOLVE_DROPDOWN": { + "MARK_PENDING": "Mark as pending", + "SNOOZE": { + "TITLE": "Snooze until", + "NEXT_REPLY": "Next reply", + "TOMORROW": "Tomorrow", + "NEXT_WEEK": "Next week" + } + }, + "CARD_CONTEXT_MENU": { + "PENDING": "Mark as pending", + "RESOLVED": "Mark as resolved", + "REOPEN": "Reopen conversation", + "SNOOZE": { + "TITLE": "Snooze", + "NEXT_REPLY": "Until next reply", + "TOMORROW": "Until tomorrow", + "NEXT_WEEK": "Until next week" + }, + "ASSIGN_AGENT": "Assign agent", + "ASSIGN_LABEL": "Assign label", + "AGENTS_LOADING": "Loading agents...", + "ASSIGN_TEAM": "Assign team", + "API": { + "AGENT_ASSIGNMENT": { + "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", + "FAILED": "Couldn't assign agent. Please try again." + }, + "LABEL_ASSIGNMENT": { + "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", + "FAILED": "Couldn't assign label. Please try again." + }, + "TEAM_ASSIGNMENT": { + "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", + "FAILED": "Couldn't assign team. Please try again." + } + } + }, + "FOOTER": { + "MESSAGE_SIGN_TOOLTIP": "Message signature", + "ENABLE_SIGN_TOOLTIP": "Enable signature", + "DISABLE_SIGN_TOOLTIP": "Disable signature", + "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", + "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", + "CLICK_HERE": "Click here to update" + }, + "REPLYBOX": { + "REPLY": "Reply", + "PRIVATE_NOTE": "Private Note", + "SEND": "Send", + "CREATE": "Add Note", + "TWEET": "Tweet", + "TIP_FORMAT_ICON": "Show rich text editor", + "TIP_EMOJI_ICON": "Show emoji selector", + "TIP_ATTACH_ICON": "Attach files", + "TIP_AUDIORECORDER_ICON": "Record audio", + "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", + "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "ENTER_TO_SEND": "Enter to send", + "DRAG_DROP": "Drag and drop here to attach", + "START_AUDIO_RECORDING": "Start audio recording", + "STOP_AUDIO_RECORDING": "Stop audio recording", + "": "", + "EMAIL_HEAD": { + "ADD_BCC": "Add bcc", + "CC": { + "LABEL": "CC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + }, + "BCC": { + "LABEL": "BCC", + "PLACEHOLDER": "Emails separated by commas", + "ERROR": "Please enter valid email addresses" + } + } + }, + "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", + "CHANGE_STATUS": "Conversation status changed", + "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_AGENT": "Conversation Assignee changed", + "CHANGE_AGENT_FAILED": "Assignee change failed", + "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", + "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_TEAM": "Conversation team changed", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "MESSAGE_ERROR": "Unable to send this message, please try again later", + "SENT_BY": "Sent by:", + "BOT": "Bot", + "SEND_FAILED": "Couldn't send message! Try again", + "TRY_AGAIN": "retry", + "ASSIGNMENT": { + "SELECT_AGENT": "Select Agent", + "REMOVE": "Remove", + "ASSIGN": "Assign" + }, + "CONTEXT_MENU": { + "COPY": "Copy", + "DELETE": "Delete" + } + }, + "EMAIL_TRANSCRIPT": { + "TITLE": "Send conversation transcript", + "DESC": "Send a copy of the conversation transcript to the specified email address", + "SUBMIT": "Submit", + "CANCEL": "Cancel", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again", + "FORM": { + "SEND_TO_CONTACT": "Send the transcript to the customer", + "SEND_TO_AGENT": "Send the transcript to the assigned agent", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "EMAIL": { + "PLACEHOLDER": "Enter an email address", + "ERROR": "Please enter a valid email address" + } + } + }, + "ONBOARDING": { + "TITLE": "Hey 👋, Welcome to %{installationName}!", + "DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.", + "READ_LATEST_UPDATES": "Read our latest updates", + "ALL_CONVERSATION": { + "TITLE": "All your conversations in one place", + "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status." + }, + "TEAM_MEMBERS": { + "TITLE": "Invite your team members", + "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", + "NEW_LINK": "Click here to invite a team member" + }, + "INBOXES": { + "TITLE": "Connect Inboxes", + "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.", + "NEW_LINK": "Click here to create an inbox" + }, + "LABELS": { + "TITLE": "Organize conversations with labels", + "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", + "NEW_LINK": "Click here to create tags" + } + }, + "CONVERSATION_SIDEBAR": { + "ASSIGNEE_LABEL": "Assigned Agent", + "SELF_ASSIGN": "Assign to me", + "TEAM_LABEL": "Assigned Team", + "SELECT": { + "PLACEHOLDER": "None" + }, + "ACCORDION": { + "CONTACT_DETAILS": "Contact Details", + "CONVERSATION_ACTIONS": "Conversation Actions", + "CONVERSATION_LABELS": "Conversation Labels", + "CONVERSATION_INFO": "Conversation Information", + "CONTACT_ATTRIBUTES": "Contact Attributes", + "PREVIOUS_CONVERSATION": "Previous Conversations" + } + }, + "CONVERSATION_CUSTOM_ATTRIBUTES": { + "ADD_BUTTON_TEXT": "Create attribute", + "UPDATE": { + "SUCCESS": "Attribute updated successfully", + "ERROR": "Unable to update attribute. Please try again later" + }, + "ADD": { + "TITLE": "Add", + "SUCCESS": "Attribute added successfully", + "ERROR": "Unable to add attribute. Please try again later" + }, + "DELETE": { + "SUCCESS": "Attribute deleted successfully", + "ERROR": "Unable to delete attribute. Please try again later" + }, + "ATTRIBUTE_SELECT": { + "TITLE": "Add attributes", + "PLACEHOLDER": "Search attributes", + "NO_RESULT": "No attributes found" + } + }, + "EMAIL_HEADER": { + "FROM": "From", + "TO": "To", + "BCC": "Bcc", + "CC": "Cc", + "SUBJECT": "Subject" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json b/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json new file mode 100644 index 000000000..d7d2efc2a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/csatMgmt.json @@ -0,0 +1,6 @@ +{ + "CSAT": { + "TITLE": "Rate your conversation", + "PLACEHOLDER": "Tell us more..." + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/generalSettings.json b/app/javascript/dashboard/i18n/locale/lt/generalSettings.json new file mode 100644 index 000000000..5a0c4f7d7 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/generalSettings.json @@ -0,0 +1,140 @@ +{ + "GENERAL_SETTINGS": { + "TITLE": "Account settings", + "SUBMIT": "Update settings", + "BACK": "Back", + "UPDATE": { + "ERROR": "Could not update settings, try again!", + "SUCCESS": "Successfully updated account settings" + }, + "FORM": { + "ERROR": "Please fix form errors", + "GENERAL_SECTION": { + "TITLE": "General settings", + "NOTE": "" + }, + "ACCOUNT_ID": { + "TITLE": "Account ID", + "NOTE": "This ID is required if you are building an API based integration" + }, + "NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Your account name", + "ERROR": "Please enter a valid account name" + }, + "LANGUAGE": { + "LABEL": "Site language (Beta)", + "PLACEHOLDER": "Your account name", + "ERROR": "" + }, + "DOMAIN": { + "LABEL": "Incoming Email Domain", + "PLACEHOLDER": "The domain where you will receive the emails", + "ERROR": "" + }, + "SUPPORT_EMAIL": { + "LABEL": "Support Email", + "PLACEHOLDER": "Your company's support email", + "ERROR": "" + }, + "AUTO_RESOLVE_DURATION": { + "LABEL": "Number of days after a ticket should auto resolve if there is no activity", + "PLACEHOLDER": "30", + "ERROR": "Please enter a valid auto resolve duration (minimum 1 day and maximum 999 days)" + }, + "FEATURES": { + "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + } + }, + "UPDATE_CHATWOOT": "An update %{latestChatwootVersion} for Chatwoot is available. Please update your instance.", + "LEARN_MORE": "Learn more" + }, + "FORMS": { + "MULTISELECT": { + "ENTER_TO_SELECT": "Press enter to select", + "ENTER_TO_REMOVE": "Press enter to remove", + "SELECT_ONE": "Select one" + } + }, + "NOTIFICATIONS_PAGE": { + "HEADER": "Notifications", + "MARK_ALL_DONE": "Mark All Done", + "DELETE_TITLE": "deleted", + "UNREAD_NOTIFICATION": { + "TITLE": "Unread Notifications", + "ALL_NOTIFICATIONS": "View all notifications", + "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", + "EMPTY_MESSAGE": "You have no unread notifications" + }, + "LIST": { + "LOADING_MESSAGE": "Loading notifications...", + "404": "No Notifications", + "TABLE_HEADER": [ + "Name", + "Phone Number", + "Conversations", + "Last Contacted" + ] + }, + "TYPE_LABEL": { + "conversation_creation": "New conversation", + "conversation_assignment": "Conversation Assigned", + "assigned_conversation_new_message": "New Message", + "conversation_mention": "Mention" + } + }, + "NETWORK": { + "NOTIFICATION": { + "TEXT": "Disconnected from Chatwoot" + }, + "BUTTON": { + "REFRESH": "Refresh" + } + }, + "COMMAND_BAR": { + "SEARCH_PLACEHOLDER": "Search or jump to", + "SECTIONS": { + "GENERAL": "General", + "REPORTS": "Reports", + "CONVERSATION": "Conversation", + "CHANGE_ASSIGNEE": "Change Assignee", + "CHANGE_TEAM": "Change Team", + "ADD_LABEL": "Add label to the conversation", + "REMOVE_LABEL": "Remove label from the conversation", + "SETTINGS": "Settings" + }, + "COMMANDS": { + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", + "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", + "GO_TO_AGENT_REPORTS": "Go to Agent Reports", + "GO_TO_LABEL_REPORTS": "Go to Label Reports", + "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", + "GO_TO_TEAM_REPORTS": "Go to Team Reports", + "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", + "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", + "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", + "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", + "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", + "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", + "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", + "GO_TO_NOTIFICATIONS": "Go to Notifications", + "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", + "ASSIGN_AN_AGENT": "Assign an agent", + "ASSIGN_A_TEAM": "Assign a team", + "MUTE_CONVERSATION": "Mute conversation", + "UNMUTE_CONVERSATION": "Unmute conversation", + "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", + "REOPEN_CONVERSATION": "Reopen conversation", + "RESOLVE_CONVERSATION": "Resolve conversation", + "SEND_TRANSCRIPT": "Send an email transcript", + "SNOOZE_CONVERSATION": "Snooze Conversation", + "UNTIL_NEXT_REPLY": "Until next reply", + "UNTIL_NEXT_WEEK": "Until next week", + "UNTIL_TOMORROW": "Until tomorrow" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/helpCenter.json b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json new file mode 100644 index 000000000..9c18b4c7f --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/helpCenter.json @@ -0,0 +1,411 @@ +{ + "HELP_CENTER": { + "HEADER": { + "FILTER": "Filter by", + "SORT": "Sort by", + "SETTINGS_BUTTON": "Settings", + "NEW_BUTTON": "New Article", + "DROPDOWN_OPTIONS": { + "PUBLISHED": "Published", + "DRAFT": "Draft", + "ARCHIVED": "Archived" + }, + "TITLES": { + "ALL_ARTICLES": "All Articles", + "MINE": "My Articles", + "DRAFT": "Draft Articles", + "ARCHIVED": "Archived Articles" + } + }, + "EDIT_HEADER": { + "ALL_ARTICLES": "All Articles", + "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Preview", + "ADD_TRANSLATION": "Add translation", + "OPEN_SIDEBAR": "Open sidebar", + "CLOSE_SIDEBAR": "Close sidebar", + "SAVING": "Saving...", + "SAVED": "Saved" + }, + "ARTICLE_SETTINGS": { + "TITLE": "Article Settings", + "FORM": { + "CATEGORY": { + "LABEL": "Category", + "TITLE": "Select category", + "PLACEHOLDER": "Select category", + "NO_RESULT": "No category found", + "SEARCH_PLACEHOLDER": "Search category" + }, + "AUTHOR": { + "LABEL": "Author", + "TITLE": "Select author", + "PLACEHOLDER": "Select author", + "NO_RESULT": "No authors found", + "SEARCH_PLACEHOLDER": "Search author" + }, + "META_TITLE": { + "LABEL": "Meta title", + "PLACEHOLDER": "Add a meta title" + }, + "META_DESCRIPTION": { + "LABEL": "Meta description", + "PLACEHOLDER": "Add your meta description for better SEO results..." + }, + "META_TAGS": { + "LABEL": "Meta tags", + "PLACEHOLDER": "Add meta tags separated by comma..." + } + }, + "BUTTONS": { + "ARCHIVE": "Archive article", + "DELETE": "Delete article" + } + }, + "PORTAL": { + "HEADER": "Portals", + "DEFAULT": "Default", + "NEW_BUTTON": "New Portal", + "ACTIVE_BADGE": "active", + "CHOOSE_LOCALE_LABEL": "Choose a locale", + "LOADING_MESSAGE": "Loading portals...", + "ARTICLES_LABEL": "articles", + "NO_PORTALS_MESSAGE": "There are no available portals", + "ADD_NEW_LOCALE": "Add a new locale", + "POPOVER": { + "TITLE": "Portals", + "PORTAL_SETTINGS": "Portal settings", + "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "CANCEL_BUTTON_LABEL": "Cancel", + "CHOOSE_LOCALE_BUTTON": "Choose Locale" + }, + "PORTAL_SETTINGS": { + "LIST_ITEM": { + "HEADER": { + "COUNT_LABEL": "articles", + "ADD": "Add locale", + "VISIT": "Visit site", + "SETTINGS": "Settings", + "DELETE": "Delete" + }, + "PORTAL_CONFIG": { + "TITLE": "Portal Configurations", + "ITEMS": { + "NAME": "Name", + "DOMAIN": "Custom domain", + "SLUG": "Slug", + "TITLE": "Portal title", + "THEME": "Theme color", + "SUB_TEXT": "Portal sub text" + } + }, + "AVAILABLE_LOCALES": { + "TITLE": "Available locales", + "TABLE": { + "NAME": "Locale name", + "CODE": "Locale code", + "ARTICLE_COUNT": "No. of articles", + "CATEGORIES": "No. of categories", + "SWAP": "Swap", + "DELETE": "Delete", + "DEFAULT_LOCALE": "Default" + } + } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" + } + }, + "ADD": { + "CREATE_FLOW": [ + { + "title": "Help center information", + "route": "new_portal_information", + "body": "Basic information about portal", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + { + "title": "Help center customization", + "route": "portal_customization", + "body": "Customize portal", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + { + "title": "Voila! 🎉", + "route": "portal_finish", + "body": "You're all set!", + "FINISH": "Finish" + } + ], + "CREATE_FLOW_PAGE": { + "BACK_BUTTON": "Back", + "BASIC_SETTINGS_PAGE": { + "HEADER": "Create Portal", + "TITLE": "Help center information", + "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + }, + "CUSTOMIZATION_PAGE": { + "HEADER": "Portal customisation", + "TITLE": "Help center customization", + "UPDATE_PORTAL_BUTTON": "Update portal settings" + }, + "FINISH_PAGE": { + "TITLE": "Voila!🎉 You're all set up!", + "MESSAGE": "You can now see this created portal on your all portals page.", + "FINISH": "Go to all portals page" + } + }, + "LOGO": { + "LABEL": "Logo", + "UPLOAD_BUTTON": "Upload logo", + "HELP_TEXT": "This logo will be displayed on the portal header." + }, + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Portal name", + "HELP_TEXT": "The name will be used in the public facing portal internally.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Portal slug for urls", + "ERROR": "Slug is required" + }, + "DOMAIN": { + "LABEL": "Custom Domain", + "PLACEHOLDER": "Portal custom domain", + "HELP_TEXT": "Add only If you want to use a custom domain for your portals.", + "ERROR": "Custom Domain is required" + }, + "HOME_PAGE_LINK": { + "LABEL": "Home Page Link", + "PLACEHOLDER": "Portal home page link", + "HELP_TEXT": "The link used to return from the portal to the home page.", + "ERROR": "Home Page Link is required" + }, + "THEME_COLOR": { + "LABEL": "Portal theme color", + "HELP_TEXT": "This color will show as the theme color for the portal." + }, + "PAGE_TITLE": { + "LABEL": "Page Title", + "PLACEHOLDER": "Portal page title", + "HELP_TEXT": "The page title will be used in the public facing portal.", + "ERROR": "Page title is required" + }, + "HEADER_TEXT": { + "LABEL": "Header Text", + "PLACEHOLDER": "Portal header text", + "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "ERROR": "Portal header text is required" + }, + "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } + } + }, + "TABLE": { + "LOADING_MESSAGE": "Loading articles...", + "404": "No articles matches your search 🔍", + "NO_ARTICLES": "There are no available articles", + "HEADERS": { + "TITLE": "Title", + "CATEGORY": "Category", + "READ_COUNT": "Read count", + "STATUS": "Status", + "LAST_EDITED": "Last edited" + }, + "COLUMNS": { + "BY": "by" + } + }, + "EDIT_ARTICLE": { + "LOADING": "Loading article...", + "TITLE_PLACEHOLDER": "Article title goes here", + "CONTENT_PLACEHOLDER": "Write your article here", + "API": { + "ERROR": "Error while saving article" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, + "CREATE_ARTICLE": { + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + }, + "SIDEBAR": { + "SEARCH": { + "PLACEHOLDER": "Search for articles" + } + }, + "CATEGORY": { + "ADD": { + "TITLE": "Create a category", + "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Create category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category created successfully", + "ERROR_MESSAGE": "Unable to create category" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json new file mode 100644 index 000000000..09a6210da --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/inboxMgmt.json @@ -0,0 +1,662 @@ +{ + "INBOX_MGMT": { + "HEADER": "Inboxes", + "SIDEBAR_TXT": "

Inbox

When you connect a website or a facebook Page to Chatwoot, it is called an Inbox. You can have unlimited inboxes in your Chatwoot account.

Click on Add Inbox to connect a website or a Facebook Page.

In the Dashboard, you can see all the conversations from all your inboxes in a single place and respond to them under the `Conversations` tab.

You can also see conversations specific to an inbox by clicking on the inbox name on the left pane of the dashboard.

", + "LIST": { + "404": "There are no inboxes attached to this account." + }, + "CREATE_FLOW": [ + { + "title": "Choose Channel", + "route": "settings_inbox_new", + "body": "Choose the provider you want to integrate with Chatwoot." + }, + { + "title": "Create Inbox", + "route": "settings_inboxes_page_channel", + "body": "Authenticate your account and create an inbox." + }, + { + "title": "Add Agents", + "route": "settings_inboxes_add_agents", + "body": "Add agents to the created inbox." + }, + { + "title": "Voila!", + "route": "settings_inbox_finish", + "body": "You are all set to go!" + } + ], + "ADD": { + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", + "ERROR": "Please enter a valid inbox name" + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + }, + "FB": { + "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", + "CHOOSE_PAGE": "Choose Page", + "CHOOSE_PLACEHOLDER": "Select a page from the list", + "INBOX_NAME": "Inbox Name", + "ADD_NAME": "Add a name for your inbox", + "PICK_NAME": "Pick A Name Your Inbox", + "PICK_A_VALUE": "Pick a value" + }, + "TWITTER": { + "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", + "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "TWEETS": { + "ENABLE": "Create conversations from mentioned Tweets" + } + }, + "WEBSITE_CHANNEL": { + "TITLE": "Website channel", + "DESC": "Create a channel for your website and start supporting your customers via our website widget.", + "LOADING_MESSAGE": "Creating Website Support Channel", + "CHANNEL_AVATAR": { + "LABEL": "Channel Avatar" + }, + "CHANNEL_WEBHOOK_URL": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Enter your Webhook URL", + "ERROR": "Please enter a valid URL" + }, + "CHANNEL_DOMAIN": { + "LABEL": "Website Domain", + "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + }, + "CHANNEL_WELCOME_TITLE": { + "LABEL": "Welcome Heading", + "PLACEHOLDER": "Hi there !" + }, + "CHANNEL_WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "CHANNEL_GREETING_MESSAGE": { + "LABEL": "Channel greeting message", + "PLACEHOLDER": "Acme Inc typically replies in a few hours." + }, + "CHANNEL_GREETING_TOGGLE": { + "LABEL": "Enable channel greeting", + "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "REPLY_TIME": { + "TITLE": "Set Reply time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day", + "HELP_TEXT": "This reply time will be displayed on the live chat widget" + }, + "WIDGET_COLOR": { + "LABEL": "Widget Color", + "PLACEHOLDER": "Update the widget color used in widget" + }, + "SUBMIT_BUTTON": "Create inbox", + "API": { + "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + } + }, + "TWILIO": { + "TITLE": "Twilio SMS/WhatsApp Channel", + "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "ACCOUNT_SID": { + "LABEL": "Account SID", + "PLACEHOLDER": "Please enter your Twilio Account SID", + "ERROR": "This field is required" + }, + "MESSAGING_SERVICE_SID": { + "LABEL": "Messaging Service SID", + "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "ERROR": "This field is required", + "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + }, + "CHANNEL_TYPE": { + "LABEL": "Channel Type", + "ERROR": "Please select your Channel Type" + }, + "AUTH_TOKEN": { + "LABEL": "Auth Token", + "PLACEHOLDER": "Please enter your Twilio Auth Token", + "ERROR": "This field is required" + }, + "CHANNEL_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create Twilio Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + } + }, + "SMS": { + "TITLE": "SMS Channel", + "DESC": "Start supporting your customers via SMS.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "BANDWIDTH": "Bandwidth" + }, + "API": { + "ERROR_MESSAGE": "We were not able to save the SMS channel" + }, + "BANDWIDTH": { + "ACCOUNT_ID": { + "LABEL": "Account ID", + "PLACEHOLDER": "Please enter your Bandwidth Account ID", + "ERROR": "This field is required" + }, + "API_KEY": { + "LABEL": "API Key", + "PLACEHOLDER": "Please enter your Bandwith API Key", + "ERROR": "This field is required" + }, + "API_SECRET": { + "LABEL": "API Secret", + "PLACEHOLDER": "Please enter your Bandwith API Secret", + "ERROR": "This field is required" + }, + "APPLICATION_ID": { + "LABEL": "Application ID", + "PLACEHOLDER": "Please enter your Bandwidth Application ID", + "ERROR": "This field is required" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter a inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + }, + "SUBMIT_BUTTON": "Create Bandwidth Channel", + "API": { + "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + } + } + }, + "WHATSAPP": { + "TITLE": "WhatsApp Channel", + "DESC": "Start supporting your customers via WhatsApp.", + "PROVIDERS": { + "LABEL": "API Provider", + "TWILIO": "Twilio", + "WHATSAPP_CLOUD": "WhatsApp Cloud", + "360_DIALOG": "360Dialog" + }, + "INBOX_NAME": { + "LABEL": "Inbox Name", + "PLACEHOLDER": "Please enter an inbox name", + "ERROR": "This field is required" + }, + "PHONE_NUMBER": { + "LABEL": "Phone number", + "PLACEHOLDER": "Please enter the phone number from which message will be sent.", + "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + }, + "PHONE_NUMBER_ID": { + "LABEL": "Phone number ID", + "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "BUSINESS_ACCOUNT_ID": { + "LABEL": "Business Account ID", + "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "ERROR": "Please enter a valid value." + }, + "WEBHOOK_VERIFY_TOKEN": { + "LABEL": "Webhook Verify Token", + "PLACEHOLDER": "Enter a verify token which you want to configure for facebook webhooks.", + "ERROR": "Please enter a valid value." + }, + "API_KEY": { + "LABEL": "API key", + "SUBTITLE": "Configure the WhatsApp API key.", + "PLACEHOLDER": "API key", + "ERROR": "Please enter a valid value." + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in facebook developer portal with the URL mentioned here." + }, + "SUBMIT_BUTTON": "Create WhatsApp Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + } + }, + "API_CHANNEL": { + "TITLE": "API Channel", + "DESC": "Integrate with API channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "WEBHOOK_URL": { + "LABEL": "Webhook URL", + "SUBTITLE": "Configure the URL where you want to recieve callbacks on events.", + "PLACEHOLDER": "Webhook URL" + }, + "SUBMIT_BUTTON": "Create API Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the api channel" + } + }, + "EMAIL_CHANNEL": { + "TITLE": "Email Channel", + "DESC": "Integrate you email inbox.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "EMAIL": { + "LABEL": "Email", + "SUBTITLE": "Email where your customers sends you support tickets", + "PLACEHOLDER": "Email" + }, + "SUBMIT_BUTTON": "Create Email Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the email channel" + }, + "FINISH_MESSAGE": "Start forwarding your emails to the following email address." + }, + "LINE_CHANNEL": { + "TITLE": "LINE Channel", + "DESC": "Integrate with LINE channel and start supporting your customers.", + "CHANNEL_NAME": { + "LABEL": "Channel Name", + "PLACEHOLDER": "Please enter a channel name", + "ERROR": "This field is required" + }, + "LINE_CHANNEL_ID": { + "LABEL": "LINE Channel ID", + "PLACEHOLDER": "LINE Channel ID" + }, + "LINE_CHANNEL_SECRET": { + "LABEL": "LINE Channel Secret", + "PLACEHOLDER": "LINE Channel Secret" + }, + "LINE_CHANNEL_TOKEN": { + "LABEL": "LINE Channel Token", + "PLACEHOLDER": "LINE Channel Token" + }, + "SUBMIT_BUTTON": "Create LINE Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the LINE channel" + }, + "API_CALLBACK": { + "TITLE": "Callback URL", + "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + } + }, + "TELEGRAM_CHANNEL": { + "TITLE": "Telegram Channel", + "DESC": "Integrate with Telegram channel and start supporting your customers.", + "BOT_TOKEN": { + "LABEL": "Bot Token", + "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "PLACEHOLDER": "Bot Token" + }, + "SUBMIT_BUTTON": "Create Telegram Channel", + "API": { + "ERROR_MESSAGE": "We were not able to save the telegram channel" + } + }, + "AUTH": { + "TITLE": "Choose a channel", + "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below." + }, + "AGENTS": { + "TITLE": "Agents", + "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.
PS: As an administrator, if you need access to all inboxes, you should add yourself as agent to all inboxes that you create.", + "VALIDATION_ERROR": "Add atleast one agent to your new Inbox", + "PICK_AGENTS": "Pick agents for the inbox" + }, + "DETAILS": { + "TITLE": "Inbox Details", + "DESC": "From the dropdown below, select the Facebook Page you want to connect to Chatwoot. You can also give a custom name to your inbox for better identification." + }, + "FINISH": { + "TITLE": "Nailed It!", + "DESC": "You have successfully finished integrating your Facebook Page with Chatwoot. Next time a customer messages your Page, the conversation will automatically appear on your inbox.
We are also providing you with a widget script that you can easily add to your website. Once this is live on your website, customers can message you right from your website without the help of any external tool and the conversation will appear right here, on Chatwoot.
Cool, huh? Well, we sure try to be :)" + } + }, + "DETAILS": { + "LOADING_FB": "Authenticating you with Facebook...", + "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", + "CREATING_CHANNEL": "Creating your Inbox...", + "TITLE": "Configure Inbox Details", + "DESC": "" + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Inbox..." + }, + "FINISH": { + "TITLE": "Your Inbox is ready!", + "MESSAGE": "You can now engage with your customers through your new Channel. Happy supporting ", + "BUTTON_TEXT": "Take me there", + "MORE_SETTINGS": "More settings", + "WEBSITE_SUCCESS": "You have successfully finished creating a website channel. Copy the code shown below and paste it on your website. Next time a customer use the live chat, the conversation will automatically appear on your inbox." + }, + "REAUTH": "Reauthorize", + "VIEW": "View", + "EDIT": { + "API": { + "SUCCESS_MESSAGE": "Inbox settings updated successfully", + "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto assignment updated successfully", + "ERROR_MESSAGE": "We couldn't update inbox settings. Please try again later." + }, + "EMAIL_COLLECT_BOX": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "ENABLE_CSAT": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "ALLOW_MESSAGES_AFTER_RESOLVED": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "ENABLE_CONTINUITY_VIA_EMAIL": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "ENABLE_HMAC": { + "LABEL": "Enable" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar", + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "PLACE_HOLDER": "Please type {inboxName} to confirm", + "YES": "Yes, Delete ", + "NO": "No, Keep " + }, + "API": { + "SUCCESS_MESSAGE": "Inbox deleted successfully", + "ERROR_MESSAGE": "Could not delete inbox. Please try again later.", + "AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully", + "AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later." + } + }, + "TABS": { + "SETTINGS": "Settings", + "COLLABORATORS": "Collaborators", + "CONFIGURATION": "Configuration", + "CAMPAIGN": "Campaigns", + "PRE_CHAT_FORM": "Pre Chat Form", + "BUSINESS_HOURS": "Business Hours", + "WIDGET_BUILDER": "Widget Builder" + }, + "SETTINGS": "Settings", + "FEATURES": { + "LABEL": "Features", + "DISPLAY_FILE_PICKER": "Display file picker on the widget", + "DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget", + "ALLOW_END_CONVERSATION": "Allow users to end conversation from the widget" + }, + "SETTINGS_POPUP": { + "MESSENGER_HEADING": "Messenger Script", + "MESSENGER_SUB_HEAD": "Place this button inside your body tag", + "INBOX_AGENTS": "Agents", + "INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox", + "AGENT_ASSIGNMENT": "Conversation Assignment", + "AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings", + "UPDATE": "Update", + "ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box", + "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation", + "AUTO_ASSIGNMENT": "Enable auto assignment", + "ENABLE_CSAT": "Enable CSAT", + "ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation", + "ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email", + "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.", + "INBOX_UPDATE_TITLE": "Inbox Settings", + "INBOX_UPDATE_SUB_TEXT": "Update your inbox settings", + "AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.", + "HMAC_VERIFICATION": "User Identity Validation", + "HMAC_DESCRIPTION": "In order to validate the user's identity, you can pass an `identifier_hash` for each user. You can generate a HMAC sha256 hash using the `identifier` with the key shown here.", + "HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation", + "HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.", + "INBOX_IDENTIFIER": "Inbox Identifier", + "INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.", + "FORWARD_EMAIL_TITLE": "Forward to Email", + "FORWARD_EMAIL_SUB_TEXT": "Start forwarding your emails to the following email address.", + "ALLOW_MESSAGES_AFTER_RESOLVED": "Allow messages after conversation resolved", + "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Allow the end-users to send messages even after the conversation is resolved.", + "WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.", + "WHATSAPP_SECTION_TITLE": "API Key" + }, + "AUTO_ASSIGNMENT": { + "MAX_ASSIGNMENT_LIMIT": "Auto assignment limit", + "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Please enter a value greater than 0", + "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Limit the maximum number of conversations from this inbox that can be auto assigned to an agent" + }, + "FACEBOOK_REAUTHORIZE": { + "TITLE": "Reauthorize", + "SUBTITLE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", + "MESSAGE_SUCCESS": "Reconnection successful", + "MESSAGE_ERROR": "There was an error, please try again" + }, + "PRE_CHAT_FORM": { + "DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.", + "SET_FIELDS": "Pre chat form fields", + "SET_FIELDS_HEADER": { + "FIELDS": "Fields", + "LABEL": "Label", + "PLACE_HOLDER": "Placeholder", + "KEY": "Key", + "TYPE": "Type", + "REQUIRED": "Required" + }, + "ENABLE": { + "LABEL": "Enable pre chat form", + "OPTIONS": { + "ENABLED": "Yes", + "DISABLED": "No" + } + }, + "PRE_CHAT_MESSAGE": { + "LABEL": "Pre chat message", + "PLACEHOLDER": "This message would be visible to the users along with the form" + }, + "REQUIRE_EMAIL": { + "LABEL": "Visitors should provide their name and email address before starting the chat" + } + }, + "BUSINESS_HOURS": { + "TITLE": "Set your availability", + "SUBTITLE": "Set your availability on your livechat widget", + "WEEKLY_TITLE": "Set your weekly hours", + "TIMEZONE_LABEL": "Select timezone", + "UPDATE": "Update business hours settings", + "TOGGLE_AVAILABILITY": "Enable business availability for this inbox", + "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors", + "UNAVAILABLE_MESSAGE_DEFAULT": "We are unavailable at the moment. Leave a message we will respond once we are back.", + "TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.", + "DAY": { + "ENABLE": "Enable availability for this day", + "UNAVAILABLE": "Unavailable", + "HOURS": "hours", + "VALIDATION_ERROR": "Starting time should be before closing time.", + "CHOOSE": "Choose" + }, + "ALL_DAY": "All-Day" + }, + "IMAP": { + "TITLE": "IMAP", + "SUBTITLE": "Set your IMAP details", + "NOTE_TEXT": "To enable SMTP, please configure IMAP.", + "UPDATE": "Update IMAP settings", + "TOGGLE_AVAILABILITY": "Enable IMAP configuration for this inbox", + "TOGGLE_HELP": "Enabling IMAP will help the user to recieve email", + "EDIT": { + "SUCCESS_MESSAGE": "IMAP settings updated successfully", + "ERROR_MESSAGE": "Unable to update IMAP settings" + }, + "ADDRESS": { + "LABEL": "Address", + "PLACE_HOLDER": "Address (Eg: imap.gmail.com)" + }, + "PORT": { + "LABEL": "Port", + "PLACE_HOLDER": "Port" + }, + "LOGIN": { + "LABEL": "Login", + "PLACE_HOLDER": "Login" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACE_HOLDER": "Password" + }, + "ENABLE_SSL": "Enable SSL" + }, + "SMTP": { + "TITLE": "SMTP", + "SUBTITLE": "Set your SMTP details", + "UPDATE": "Update SMTP settings", + "TOGGLE_AVAILABILITY": "Enable SMTP configuration for this inbox", + "TOGGLE_HELP": "Enabling SMTP will help the user to send email", + "EDIT": { + "SUCCESS_MESSAGE": "SMTP settings updated successfully", + "ERROR_MESSAGE": "Unable to update SMTP settings" + }, + "ADDRESS": { + "LABEL": "Address", + "PLACE_HOLDER": "Address (Eg: smtp.gmail.com)" + }, + "PORT": { + "LABEL": "Port", + "PLACE_HOLDER": "Port" + }, + "LOGIN": { + "LABEL": "Login", + "PLACE_HOLDER": "Login" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACE_HOLDER": "Password" + }, + "DOMAIN": { + "LABEL": "Domain", + "PLACE_HOLDER": "Domain" + }, + "ENCRYPTION": "Encryption", + "SSL_TLS": "SSL/TLS", + "START_TLS": "STARTTLS", + "OPEN_SSL_VERIFY_MODE": "Open SSL Verify Mode", + "AUTH_MECHANISM": "Authentication" + }, + "NOTE": "Note: ", + "WIDGET_BUILDER": { + "WIDGET_OPTIONS": { + "AVATAR": { + "LABEL": "Website Avatar", + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Avatar deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + } + }, + "WEBSITE_NAME": { + "LABEL": "Website Name", + "PLACE_HOLDER": "Enter your website name (eg: Acme Inc)", + "ERROR": "Please enter a valid website name" + }, + "WELCOME_HEADING": { + "LABEL": "Welcome Heading", + "PLACE_HOLDER": "Hi there!" + }, + "WELCOME_TAGLINE": { + "LABEL": "Welcome Tagline", + "PLACE_HOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + }, + "REPLY_TIME": { + "LABEL": "Reply Time", + "IN_A_FEW_MINUTES": "In a few minutes", + "IN_A_FEW_HOURS": "In a few hours", + "IN_A_DAY": "In a day" + }, + "WIDGET_COLOR_LABEL": "Widget Color", + "WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position", + "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type", + "WIDGET_BUBBLE_LAUNCHER_TITLE": { + "DEFAULT": "Chat with us", + "LABEL": "Widget Bubble Launcher Title", + "PLACE_HOLDER": "Chat with us" + }, + "UPDATE": { + "BUTTON_TEXT": "Update Widget Settings", + "API": { + "SUCCESS_MESSAGE": "Widget settings updated successfully", + "ERROR_MESSAGE": "Unable to update widget settings" + } + }, + "WIDGET_VIEW_OPTION": { + "PREVIEW": "Preview", + "SCRIPT": "Script" + }, + "WIDGET_BUBBLE_POSITION": { + "LEFT": "Left", + "RIGHT": "Right" + }, + "WIDGET_BUBBLE_TYPE": { + "STANDARD": "Standard", + "EXPANDED_BUBBLE": "Expanded Bubble" + } + }, + "WIDGET_SCREEN": { + "DEFAULT": "Default", + "CHAT": "Chat" + }, + "REPLY_TIME": { + "IN_A_FEW_MINUTES": "Typically replies in a few minutes", + "IN_A_FEW_HOURS": "Typically replies in a few hours", + "IN_A_DAY": "Typically replies in a day" + }, + "FOOTER": { + "START_CONVERSATION_BUTTON_TEXT": "Start Conversation", + "CHAT_INPUT_PLACEHOLDER": "Type your message" + }, + "BODY": { + "TEAM_AVAILABILITY": { + "ONLINE": "We are Online", + "OFFLINE": "We are away at the moment" + }, + "USER_MESSAGE": "Hi", + "AGENT_MESSAGE": "Hello" + }, + "BRANDING_TEXT": "Powered by Chatwoot", + "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/integrationApps.json b/app/javascript/dashboard/i18n/locale/lt/integrationApps.json new file mode 100644 index 000000000..a80ecb837 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/integrationApps.json @@ -0,0 +1,62 @@ +{ + "INTEGRATION_APPS": { + "FETCHING": "Fetching Integrations", + "NO_HOOK_CONFIGURED": "There are no %{integrationId} integrations configured in this account.", + "HEADER": "Applications", + "STATUS": { + "ENABLED": "Enabled", + "DISABLED": "Disabled" + }, + "CONFIGURE": "Configure", + "ADD_BUTTON": "Add a new hook", + "DELETE": { + "TITLE": { + "INBOX": "Confirm deletion", + "ACCOUNT": "Disconnect" + }, + "MESSAGE": { + "INBOX": "Are you sure to delete?", + "ACCOUNT": "Are you sure to disconnect?" + }, + "CONFIRM_BUTTON_TEXT": { + "INBOX": "Yes, Delete", + "ACCOUNT": "Yes, Disconnect" + }, + "CANCEL_BUTTON_TEXT": "Cancel", + "API": { + "SUCCESS_MESSAGE": "Hook deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "LIST": { + "FETCHING": "Fetching integration hooks", + "INBOX": "Inbox", + "DELETE": { + "BUTTON_TEXT": "Delete" + } + }, + "ADD": { + "FORM": { + "INBOX": { + "LABEL": "Select Inbox", + "PLACEHOLDER": "Select Inbox" + }, + "SUBMIT": "Create", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Integration hook added successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "CONNECT": { + "BUTTON_TEXT": "Connect" + }, + "DISCONNECT": { + "BUTTON_TEXT": "Disconnect" + }, + "SIDEBAR_DESCRIPTION": { + "DIALOGFLOW": "Dialogflow is a natural language understanding platform that makes it easy to design and integrate a conversational user interface into your mobile app, web application, device, bot, interactive voice response system, and so on.

Dialogflow integration with %{installationName} allows you to configure a Dialogflow bot with your inboxes which lets the bot handle the queries initially and hand them over to an agent when needed. Dialogflow can be used to qualifying the leads, reduce the workload of agents by providing frequently asked questions etc.

To add Dialogflow, you need to create a Service Account in your Google project console and share the credentials. Please refer to the Dialogflow docs for more information." + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/integrations.json b/app/javascript/dashboard/i18n/locale/lt/integrations.json new file mode 100644 index 000000000..6c6cecde9 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/integrations.json @@ -0,0 +1,135 @@ +{ + "INTEGRATION_SETTINGS": { + "HEADER": "Integrations", + "WEBHOOK": { + "SUBSCRIBED_EVENTS": "Subscribed Events", + "FORM": { + "CANCEL": "Cancel", + "DESC": "Webhook events provide you the realtime information about what's happening in your Chatwoot account. Please enter a valid URL to configure a callback.", + "SUBSCRIPTIONS": { + "LABEL": "Events", + "EVENTS": { + "CONVERSATION_CREATED": "Conversation Created", + "CONVERSATION_STATUS_CHANGED": "Conversation Status Changed", + "CONVERSATION_UPDATED": "Conversation Updated", + "MESSAGE_CREATED": "Message created", + "MESSAGE_UPDATED": "Message updated", + "WEBWIDGET_TRIGGERED": "Live chat widget opened by the user" + } + }, + "END_POINT": { + "LABEL": "Webhook URL", + "PLACEHOLDER": "Example: https://example/api/webhook", + "ERROR": "Please enter a valid URL" + }, + "EDIT_SUBMIT": "Update webhook", + "ADD_SUBMIT": "Create webhook" + }, + "TITLE": "Webhook", + "CONFIGURE": "Configure", + "HEADER": "Webhook settings", + "HEADER_BTN_TXT": "Add new webhook", + "LOADING": "Fetching attached webhooks", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "

Webhooks

Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.

For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.

", + "LIST": { + "404": "There are no webhooks configured for this account.", + "TITLE": "Manage webhooks", + "TABLE_HEADER": [ + "Webhook endpoint", + "Actions" + ] + }, + "EDIT": { + "BUTTON_TEXT": "Edit", + "TITLE": "Edit webhook", + "API": { + "SUCCESS_MESSAGE": "Webhook configuration updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "ADD": { + "CANCEL": "Cancel", + "TITLE": "Add new webhook", + "API": { + "SUCCESS_MESSAGE": "Webhook configuration added successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Webhook deleted successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the webhook? (%{webhookURL})", + "YES": "Yes, Delete ", + "NO": "No, Keep it" + } + } + }, + "SLACK": { + "HELP_TEXT": { + "TITLE": "Using Slack Integration", + "BODY": "

Chatwoot will now sync all the incoming conversations into the customer-conversations channel inside your slack workplace.

Replying to a conversation thread in customer-conversations slack channel will create a response back to the customer through chatwoot.

Start the replies with note: to create private notes instead of replies.

If the replier on slack has an agent profile in chatwoot under the same email, the replies will be associated accordingly.

When the replier doesn't have an associated agent profile, the replies will be made from the bot profile.

" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Integration deleted successfully" + } + }, + "CONNECT": { + "BUTTON_TEXT": "Connect" + }, + "DASHBOARD_APPS": { + "TITLE": "Dashboard Apps", + "HEADER_BTN_TXT": "Add a new dashboard app", + "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", + "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "LIST": { + "404": "There are no dashboard apps configured on this account yet", + "LOADING": "Fetching dashboard apps...", + "TABLE_HEADER": [ + "Name", + "Endpoint" + ], + "EDIT_TOOLTIP": "Edit app", + "DELETE_TOOLTIP": "Delete app" + }, + "FORM": { + "TITLE_LABEL": "Name", + "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", + "TITLE_ERROR": "A name for the dashboard app is required", + "URL_LABEL": "Endpoint", + "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", + "URL_ERROR": "A valid URL is required" + }, + "CREATE": { + "HEADER": "Add a new dashboard app", + "FORM_SUBMIT": "Submit", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app configured successfully", + "API_ERROR": "We couldn't create an app. Please try again later" + }, + "UPDATE": { + "HEADER": "Edit dashboard app", + "FORM_SUBMIT": "Update", + "FORM_CANCEL": "Cancel", + "API_SUCCESS": "Dashboard app updated successfully", + "API_ERROR": "We couldn't update the app. Please try again later" + }, + "DELETE": { + "CONFIRM_YES": "Yes, delete it", + "CONFIRM_NO": "No, keep it", + "TITLE": "Confirm deletion", + "MESSAGE": "Are you sure to delete the app - %{appName}?", + "API_SUCCESS": "Dashboard app deleted successfully", + "API_ERROR": "We couldn't delete the app. Please try again later" + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json new file mode 100644 index 000000000..db12fa32a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/labelsMgmt.json @@ -0,0 +1,70 @@ +{ + "LABEL_MGMT": { + "HEADER": "Labels", + "HEADER_BTN_TXT": "Add label", + "LOADING": "Fetching labels", + "SEARCH_404": "There are no items matching this query", + "SIDEBAR_TXT": "

Labels

Labels help you to categorize conversations and prioritize them. You can assign label to a conversation from the sidepanel.

Labels are tied to the account and can be used to create custom workflows in your organization. You can assign custom color to a label, it makes it easier to identify the label. You will be able to display the label on the sidebar to filter the conversations easily.

", + "LIST": { + "404": "There are no labels available in this account.", + "TITLE": "Manage labels", + "DESC": "Labels let you group the conversations together.", + "TABLE_HEADER": [ + "Name", + "Description", + "Color" + ] + }, + "FORM": { + "NAME": { + "LABEL": "Label Name", + "PLACEHOLDER": "Label name", + "REQUIRED_ERROR": "Label name is required", + "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", + "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Label Description" + }, + "COLOR": { + "LABEL": "Color" + }, + "SHOW_ON_SIDEBAR": { + "LABEL": "Show label on sidebar" + }, + "EDIT": "Edit", + "CREATE": "Create", + "DELETE": "Delete", + "CANCEL": "Cancel" + }, + "ADD": { + "TITLE": "Add label", + "DESC": "Labels let you group the conversations together.", + "API": { + "SUCCESS_MESSAGE": "Label added successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "EDIT": { + "TITLE": "Edit label", + "API": { + "SUCCESS_MESSAGE": "Label updated successfully", + "ERROR_MESSAGE": "There was an error, please try again" + } + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Label deleted successfully", + "ERROR_MESSAGE": "There was an error, please try again" + }, + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete ", + "YES": "Yes, Delete ", + "NO": "No, Keep " + } + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/login.json b/app/javascript/dashboard/i18n/locale/lt/login.json new file mode 100644 index 000000000..30f667052 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/login.json @@ -0,0 +1,21 @@ +{ + "LOGIN": { + "TITLE": "Login to Chatwoot", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Email eg: someone@example.com" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password" + }, + "API": { + "SUCCESS_MESSAGE": "Login Successful", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", + "UNAUTH": "Username / Password Incorrect. Please try again" + }, + "FORGOT_PASSWORD": "Forgot your password?", + "CREATE_NEW_ACCOUNT": "Create new account", + "SUBMIT": "Login" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/report.json b/app/javascript/dashboard/i18n/locale/lt/report.json new file mode 100644 index 000000000..0bd9b544d --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/report.json @@ -0,0 +1,447 @@ +{ + "REPORT": { + "HEADER": "Conversations", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + }, + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", + "DURATION_FILTER_LABEL": "Duration", + "GROUP_BY_DAY_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + } + ], + "GROUP_BY_WEEK_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + } + ], + "GROUP_BY_MONTH_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + } + ], + "GROUP_BY_YEAR_OPTIONS": [ + { + "id": 1, + "groupBy": "Day" + }, + { + "id": 2, + "groupBy": "Week" + }, + { + "id": 3, + "groupBy": "Month" + }, + { + "id": 4, + "groupBy": "Year" + } + ], + "BUSINESS_HOURS": "Business Hours" + }, + "AGENT_REPORTS": { + "HEADER": "Agents Overview", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "FILTER_DROPDOWN_LABEL": "Select Agent", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "LABEL_REPORTS": { + "HEADER": "Labels Overview", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_LABEL_REPORTS": "Download label reports", + "FILTER_DROPDOWN_LABEL": "Select Label", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "INBOX_REPORTS": { + "HEADER": "Inbox Overview", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", + "FILTER_DROPDOWN_LABEL": "Select Inbox", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "TEAM_REPORTS": { + "HEADER": "Team Overview", + "LOADING_CHART": "Loading chart data...", + "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", + "DOWNLOAD_TEAM_REPORTS": "Download team reports", + "FILTER_DROPDOWN_LABEL": "Select Team", + "METRICS": { + "CONVERSATIONS": { + "NAME": "Conversations", + "DESC": "( Total )" + }, + "INCOMING_MESSAGES": { + "NAME": "Incoming Messages", + "DESC": "( Total )" + }, + "OUTGOING_MESSAGES": { + "NAME": "Outgoing Messages", + "DESC": "( Total )" + }, + "FIRST_RESPONSE_TIME": { + "NAME": "First Response Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_TIME": { + "NAME": "Resolution Time", + "DESC": "( Avg )", + "INFO_TEXT": "Total number of conversations used for computation:", + "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + }, + "RESOLUTION_COUNT": { + "NAME": "Resolution Count", + "DESC": "( Total )" + } + }, + "DATE_RANGE": [ + { + "id": 0, + "name": "Last 7 days" + }, + { + "id": 1, + "name": "Last 30 days" + }, + { + "id": 2, + "name": "Last 3 months" + }, + { + "id": 3, + "name": "Last 6 months" + }, + { + "id": 4, + "name": "Last year" + }, + { + "id": 5, + "name": "Custom date range" + } + ], + "CUSTOM_DATE_RANGE": { + "CONFIRM": "Apply", + "PLACEHOLDER": "Select date range" + } + }, + "CSAT_REPORTS": { + "HEADER": "CSAT Reports", + "NO_RECORDS": "There are no CSAT survey responses available.", + "DOWNLOAD": "Download CSAT Reports", + "FILTERS": { + "AGENTS": { + "PLACEHOLDER": "Choose Agents" + } + }, + "TABLE": { + "HEADER": { + "CONTACT_NAME": "Contact", + "AGENT_NAME": "Assigned agent", + "RATING": "Rating", + "FEEDBACK_TEXT": "Feedback comment" + } + }, + "METRIC": { + "TOTAL_RESPONSES": { + "LABEL": "Total responses", + "TOOLTIP": "Total number of responses collected" + }, + "SATISFACTION_SCORE": { + "LABEL": "Satisfaction score", + "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + }, + "RESPONSE_RATE": { + "LABEL": "Response rate", + "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + } + } + }, + "OVERVIEW_REPORTS": { + "HEADER": "Overview", + "LIVE": "Live", + "ACCOUNT_CONVERSATIONS": { + "HEADER": "Open Conversations", + "LOADING_MESSAGE": "Loading conversation metrics...", + "OPEN": "Open", + "UNATTENDED": "Unattended", + "UNASSIGNED": "Unassigned" + }, + "AGENT_CONVERSATIONS": { + "HEADER": "Conversations by agents", + "LOADING_MESSAGE": "Loading agent metrics...", + "NO_AGENTS": "There are no conversations by agents", + "TABLE_HEADER": { + "AGENT": "Agent", + "OPEN": "OPEN", + "UNATTENDED": "Unattended", + "STATUS": "Status" + } + }, + "AGENT_STATUS": { + "HEADER": "Agent status", + "ONLINE": "Online", + "BUSY": "Busy", + "OFFLINE": "Offline" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/resetPassword.json b/app/javascript/dashboard/i18n/locale/lt/resetPassword.json new file mode 100644 index 000000000..bb678e809 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/resetPassword.json @@ -0,0 +1,15 @@ +{ + "RESET_PASSWORD": { + "TITLE": "Reset Password", + "EMAIL": { + "LABEL": "Email", + "PLACEHOLDER": "Please enter your email", + "ERROR": "Please enter a valid email" + }, + "API": { + "SUCCESS_MESSAGE": "Password reset link has been sent to your email", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json b/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json new file mode 100644 index 000000000..ec2d94744 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/setNewPassword.json @@ -0,0 +1,23 @@ +{ + "SET_NEW_PASSWORD": { + "TITLE": "Set New Password", + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Passwords do not match" + }, + "API": { + "SUCCESS_MESSAGE": "Successfully changed the password", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "CAPTCHA": { + "ERROR": "Verification expired. Please solve captcha again." + }, + "SUBMIT": "Submit" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/settings.json b/app/javascript/dashboard/i18n/locale/lt/settings.json new file mode 100644 index 000000000..93ebbbc9a --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/settings.json @@ -0,0 +1,269 @@ +{ + "PROFILE_SETTINGS": { + "LINK": "Profile Settings", + "TITLE": "Profile Settings", + "BTN_TEXT": "Update Profile", + "DELETE_AVATAR": "Delete Avatar", + "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", + "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", + "UPDATE_SUCCESS": "Your profile has been updated successfully", + "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", + "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "FORM": { + "AVATAR": "Profile Image", + "ERROR": "Please fix form errors", + "REMOVE_IMAGE": "Remove", + "UPLOAD_IMAGE": "Upload image", + "UPDATE_IMAGE": "Update image", + "PROFILE_SECTION": { + "TITLE": "Profile", + "NOTE": "Your email address is your identity and is used to log in." + }, + "MESSAGE_SIGNATURE_SECTION": { + "TITLE": "Personal message signature", + "NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.", + "BTN_TEXT": "Save message signature", + "API_ERROR": "Couldn't save signature! Try again", + "API_SUCCESS": "Signature saved successfully" + }, + "MESSAGE_SIGNATURE": { + "LABEL": "Message Signature", + "ERROR": "Message Signature cannot be empty", + "PLACEHOLDER": "Insert your personal message signature here." + }, + "PASSWORD_SECTION": { + "TITLE": "Password", + "NOTE": "Updating your password would reset your logins in multiple devices.", + "BTN_TEXT": "Change password" + }, + "ACCESS_TOKEN": { + "TITLE": "Access Token", + "NOTE": "This token can be used if you are building an API based integration" + }, + "AUDIO_NOTIFICATIONS_SECTION": { + "TITLE": "Audio Notifications", + "NOTE": "Enable audio notifications in dashboard for new messages and conversations.", + "NONE": "None", + "ASSIGNED": "Assigned Conversations", + "ALL_CONVERSATIONS": "All Conversations" + }, + "EMAIL_NOTIFICATIONS_SECTION": { + "TITLE": "Email Notifications", + "NOTE": "Update your email notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation" + }, + "API": { + "UPDATE_SUCCESS": "Your notification preferences are updated successfully", + "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + }, + "PUSH_NOTIFICATIONS_SECTION": { + "TITLE": "Push Notifications", + "NOTE": "Update your push notification preferences here", + "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", + "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", + "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", + "HAS_ENABLED_PUSH": "You have enabled push for this browser.", + "REQUEST_PUSH": "Enable push notifications" + }, + "PROFILE_IMAGE": { + "LABEL": "Profile Image" + }, + "NAME": { + "LABEL": "Your full name", + "ERROR": "Please enter a valid full name", + "PLACEHOLDER": "Please enter your full name" + }, + "DISPLAY_NAME": { + "LABEL": "Display name", + "ERROR": "Please enter a valid display name", + "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + }, + "AVAILABILITY": { + "LABEL": "Availability", + "STATUSES_LIST": [ + "Online", + "Busy", + "Offline" + ] + }, + "EMAIL": { + "LABEL": "Your email address", + "ERROR": "Please enter a valid email address", + "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + }, + "CURRENT_PASSWORD": { + "LABEL": "Current password", + "ERROR": "Please enter the current password", + "PLACEHOLDER": "Please enter the current password" + }, + "PASSWORD": { + "LABEL": "New password", + "ERROR": "Please enter a password of length 6 or more", + "PLACEHOLDER": "Please enter a new password" + }, + "PASSWORD_CONFIRMATION": { + "LABEL": "Confirm new password", + "ERROR": "Confirm password should match the password", + "PLACEHOLDER": "Please re-enter your new password" + } + } + }, + "SIDEBAR_ITEMS": { + "CHANGE_AVAILABILITY_STATUS": "Change", + "CHANGE_ACCOUNTS": "Switch Account", + "CONTACT_SUPPORT": "Contact Support", + "SELECTOR_SUBTITLE": "Select an account from the following list", + "PROFILE_SETTINGS": "Profile Settings", + "KEYBOARD_SHORTCUTS": "Keyboard Shortcuts", + "LOGOUT": "Logout" + }, + "APP_GLOBAL": { + "TRIAL_MESSAGE": "days trial remaining.", + "TRAIL_BUTTON": "Buy Now", + "DELETED_USER": "Deleted User", + "ACCOUNT_SUSPENDED": { + "TITLE": "Account Suspended", + "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + } + }, + "COMPONENTS": { + "CODE": { + "BUTTON_TEXT": "Copy", + "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + }, + "SHOW_MORE_BLOCK": { + "SHOW_MORE": "Show More", + "SHOW_LESS": "Show Less" + }, + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading..." + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + } + }, + "CONFIRM_EMAIL": "Verifying...", + "SETTINGS": { + "INBOXES": { + "NEW_INBOX": "Add Inbox" + } + }, + "SIDEBAR": { + "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", + "SWITCH": "Switch", + "CONVERSATIONS": "Conversations", + "ALL_CONVERSATIONS": "All Conversations", + "MENTIONED_CONVERSATIONS": "Mentions", + "REPORTS": "Reports", + "SETTINGS": "Settings", + "CONTACTS": "Contacts", + "HOME": "Home", + "AGENTS": "Agents", + "INBOXES": "Inboxes", + "NOTIFICATIONS": "Notifications", + "CANNED_RESPONSES": "Canned Responses", + "INTEGRATIONS": "Integrations", + "PROFILE_SETTINGS": "Profile Settings", + "ACCOUNT_SETTINGS": "Account Settings", + "APPLICATIONS": "Applications", + "LABELS": "Labels", + "CUSTOM_ATTRIBUTES": "Custom Attributes", + "AUTOMATION": "Automation", + "TEAMS": "Teams", + "BILLING": "Billing", + "CUSTOM_VIEWS_FOLDER": "Folders", + "CUSTOM_VIEWS_SEGMENTS": "Segments", + "ALL_CONTACTS": "All Contacts", + "TAGGED_WITH": "Tagged with", + "NEW_LABEL": "New label", + "NEW_TEAM": "New team", + "NEW_INBOX": "New inbox", + "REPORTS_CONVERSATION": "Conversations", + "CSAT": "CSAT", + "CAMPAIGNS": "Campaigns", + "ONGOING": "Ongoing", + "ONE_OFF": "One off", + "REPORTS_AGENT": "Agents", + "REPORTS_LABEL": "Labels", + "REPORTS_INBOX": "Inbox", + "REPORTS_TEAM": "Team", + "SET_AVAILABILITY_TITLE": "Set yourself as", + "BETA": "Beta", + "REPORTS_OVERVIEW": "Overview", + "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", + "HELP_CENTER": { + "TITLE": "Help Center (Beta)", + "ALL_ARTICLES": "All Articles", + "MY_ARTICLES": "My Articles", + "DRAFT": "Draft", + "ARCHIVED": "Archived", + "CATEGORY": "Category", + "CATEGORY_EMPTY_MESSAGE": "No categories found" + }, + "DOCS": "Read docs" + }, + "BILLING_SETTINGS": { + "TITLE": "Billing", + "CURRENT_PLAN": { + "TITLE": "Current Plan", + "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + }, + "MANAGE_SUBSCRIPTION": { + "TITLE": "Manage your subscription", + "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", + "BUTTON_TXT": "Go to the billing portal" + }, + "CHAT_WITH_US": { + "TITLE": "Need help?", + "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "BUTTON_TXT": "Chat with us" + }, + "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + }, + "CREATE_ACCOUNT": { + "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", + "NEW_ACCOUNT": "New Account", + "SELECTOR_SUBTITLE": "Create a new account", + "API": { + "SUCCESS_MESSAGE": "Account created successfully", + "EXIST_MESSAGE": "Account already exists", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "FORM": { + "NAME": { + "LABEL": "Account Name", + "PLACEHOLDER": "Wayne Enterprises" + }, + "SUBMIT": "Submit" + } + }, + "KEYBOARD_SHORTCUTS": { + "TITLE": { + "OPEN_CONVERSATION": "Open conversation", + "RESOLVE_AND_NEXT": "Resolve and move to next", + "NAVIGATE_DROPDOWN": "Navigate dropdown items", + "RESOLVE_CONVERSATION": "Resolve Conversation", + "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", + "ADD_ATTACHMENT": "Add Attachment", + "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", + "TOGGLE_SIDEBAR": "Toggle Sidebar", + "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", + "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", + "GO_TO_SETTINGS": "Go to Settings", + "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", + "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", + "SWITCH_TO_REPLY": "Switch to Reply", + "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + }, + "KEYS": { + "WINDOWS_KEY_AND_COMMAND_KEY": "Win / ⌘", + "ALT_OR_OPTION_KEY": "Alt / ⌥", + "FORWARD_SLASH_KEY": "/" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/signup.json b/app/javascript/dashboard/i18n/locale/lt/signup.json new file mode 100644 index 000000000..8dd5c0d4e --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/signup.json @@ -0,0 +1,39 @@ +{ + "REGISTER": { + "TRY_WOOT": "Register an account", + "TITLE": "Register", + "TERMS_ACCEPT": "By signing up, you agree to our T & C and Privacy policy", + "ACCOUNT_NAME": { + "LABEL": "Account name", + "PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises", + "ERROR": "Account name is too short" + }, + "FULL_NAME": { + "LABEL": "Full name", + "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", + "ERROR": "Full name is too short" + }, + "EMAIL": { + "LABEL": "Work email", + "PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises", + "ERROR": "Email address is invalid" + }, + "PASSWORD": { + "LABEL": "Password", + "PLACEHOLDER": "Password", + "ERROR": "Password is too short", + "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character" + }, + "CONFIRM_PASSWORD": { + "LABEL": "Confirm Password", + "PLACEHOLDER": "Confirm Password", + "ERROR": "Password doesnot match" + }, + "API": { + "SUCCESS_MESSAGE": "Registration Successfull", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + }, + "SUBMIT": "Submit", + "HAVE_AN_ACCOUNT": "Already have an account?" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json b/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json new file mode 100644 index 000000000..f9ecaaaae --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/teamsSettings.json @@ -0,0 +1,125 @@ +{ + "TEAMS_SETTINGS": { + "NEW_TEAM": "Create new team", + "HEADER": "Teams", + "SIDEBAR_TXT": "

Teams

Teams let you organize your agents into groups based on their responsibilities.
An agent can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.

", + "LIST": { + "404": "There are no teams created on this account.", + "EDIT_TEAM": "Edit team" + }, + "CREATE_FLOW": { + "CREATE": { + "TITLE": "Create a new team", + "DESC": "Add a title and description to your new team." + }, + "AGENTS": { + "BUTTON_TEXT": "Add agents to team", + "TITLE": "Add agents to team - %{teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + }, + "WIZARD": [ + { + "title": "Create", + "route": "settings_teams_new", + "body": "Create a new team of agents." + }, + { + "title": "Add Agents", + "route": "settings_teams_add_agents", + "body": "Add agents to the team." + }, + { + "title": "Finish", + "route": "settings_teams_finish", + "body": "You are all set to go!" + } + ] + }, + "EDIT_FLOW": { + "CREATE": { + "TITLE": "Edit your team details", + "DESC": "Edit title and description to your team.", + "BUTTON_TEXT": "Update team" + }, + "AGENTS": { + "BUTTON_TEXT": "Update agents in team", + "TITLE": "Add agents to team - %{teamName}", + "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + }, + "WIZARD": [ + { + "title": "Team details", + "route": "settings_teams_edit", + "body": "Change name, description and other details." + }, + { + "title": "Edit Agents", + "route": "settings_teams_edit_members", + "body": "Edit agents in your team." + }, + { + "title": "Finish", + "route": "settings_teams_edit_finish", + "body": "You are all set to go!" + } + ] + }, + "TEAM_FORM": { + "ERROR_MESSAGE": "Couldn't save the team details. Try again." + }, + "AGENTS": { + "AGENT": "AGENT", + "EMAIL": "EMAIL", + "BUTTON_TEXT": "Add agents", + "ADD_AGENTS": "Adding Agents to your Team...", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "%{selected} out of %{total} agents selected." + }, + "ADD": { + "TITLE": "Add agents to team - %{teamName}", + "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", + "SELECT": "select", + "SELECT_ALL": "select all agents", + "SELECTED_COUNT": "%{selected} out of %{total} agents selected.", + "BUTTON_TEXT": "Add agents", + "AGENT_VALIDATION_ERROR": "Select at least one agent." + }, + "FINISH": { + "TITLE": "Your team is ready!", + "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", + "BUTTON_TEXT": "Finish" + }, + "DELETE": { + "BUTTON_TEXT": "Delete", + "API": { + "SUCCESS_MESSAGE": "Team deleted successfully.", + "ERROR_MESSAGE": "Couldn't delete the team. Try again." + }, + "CONFIRM": { + "TITLE": "Are you sure want to delete - %{teamName}", + "PLACE_HOLDER": "Please type {teamName} to confirm", + "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", + "YES": "Delete ", + "NO": "Cancel" + } + }, + "SETTINGS": "Settings", + "FORM": { + "UPDATE": "Update team", + "CREATE": "Create team", + "NAME": { + "LABEL": "Team name", + "PLACEHOLDER": "Example: Sales, Customer Support" + }, + "DESCRIPTION": { + "LABEL": "Team Description", + "PLACEHOLDER": "Short description about this team." + }, + "AUTO_ASSIGN": { + "LABEL": "Allow auto assign for this team." + }, + "SUBMIT_CREATE": "Create team" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/webhooks.json b/app/javascript/dashboard/i18n/locale/lt/webhooks.json new file mode 100644 index 000000000..347c96893 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/webhooks.json @@ -0,0 +1,5 @@ +{ + "WEBHOOKS_SETTINGS": { + "HEADER": "Webhook Settings" + } +} diff --git a/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json new file mode 100644 index 000000000..bbcf28156 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/lt/whatsappTemplates.json @@ -0,0 +1,25 @@ +{ + "WHATSAPP_TEMPLATES": { + "MODAL": { + "TITLE": "Whatsapp Templates", + "SUBTITLE": "Select the whatsapp template you want to send", + "TEMPLATE_SELECTED_SUBTITLE": "Process %{templateName}" + }, + "PICKER": { + "SEARCH_PLACEHOLDER": "Search Templates", + "NO_TEMPLATES_FOUND": "No templates found for", + "LABELS": { + "LANGUAGE": "Language", + "TEMPLATE_BODY": "Template Body", + "CATEGORY": "Category" + } + }, + "PARSER": { + "VARIABLES_LABEL": "Variables", + "VARIABLE_PLACEHOLDER": "Enter %{variable} value", + "GO_BACK_LABEL": "Go Back", + "SEND_MESSAGE_LABEL": "Send Message", + "FORM_ERROR_MESSAGE": "Please fill all variables before sending" + } + } +} diff --git a/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json b/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json index 46a573c42..44b7d7324 100644 --- a/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/lv/advancedFilters.json @@ -1,91 +1,91 @@ { "FILTER": { - "TITLE": "Filter Conversations", - "SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.", - "ADD_NEW_FILTER": "Add Filter", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", - "SUBMIT_BUTTON_LABEL": "Apply filters", - "CANCEL_BUTTON_LABEL": "Cancel", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter conversations", + "TITLE": "Filtrēt Sarunas", + "SUBTITLE": "Pievienojiet filtrus un noklikšķiniet uz 'Lietot filtrus', lai filtrētu sarunas.", + "ADD_NEW_FILTER": "Pievienot Filtru", + "FILTER_DELETE_ERROR": "Lai saglabātu, Jums ir jābūt vismaz vienam filtram", + "SUBMIT_BUTTON_LABEL": "Lietot filtrus", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CLEAR_BUTTON_LABEL": "Atcelt Filtrus", + "EMPTY_VALUE_ERROR": "Nepieciešama vērtība", + "TOOLTIP_LABEL": "Filtrēt sarunas", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "UN", + "OR": "VAI" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_less_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Vienāds ar", + "not_equal_to": "Nav vienāds ar", + "contains": "Satur", + "does_not_contain": "Nesatur", + "is_present": "Iekļauj sevī", + "is_not_present": "Neiekļauj sevī", + "is_greater_than": "Ir lielāks par", + "is_less_than": "Ir mazāks par", + "days_before": "Ir x dienas pirms" }, "ATTRIBUTE_LABELS": { - "TRUE": "True", - "FALSE": "False" + "TRUE": "Patiesi", + "FALSE": "Nepatiesi" }, "ATTRIBUTES": { - "STATUS": "Status", - "ASSIGNEE_NAME": "Assignee Name", - "INBOX_NAME": "Inbox Name", - "TEAM_NAME": "Team Name", - "CONVERSATION_IDENTIFIER": "Conversation Identifier", - "CAMPAIGN_NAME": "Campaign Name", - "LABELS": "Labels", - "BROWSER_LANGUAGE": "Browser Language", - "COUNTRY_NAME": "Country Name", - "REFERER_LINK": "Referer link", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", - "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", - "LAST_ACTIVITY": "Last Activity" + "STATUS": "Statuss", + "ASSIGNEE_NAME": "Piešķīrēja Vārds", + "INBOX_NAME": "Iesūtnes Nosaukums", + "TEAM_NAME": "Komandas Nosaukums", + "CONVERSATION_IDENTIFIER": "Sarunas Identifikators", + "CAMPAIGN_NAME": "Kampaņas Nosaukums", + "LABELS": "Etiķetes", + "BROWSER_LANGUAGE": "Pārlūkprogrammas Valoda", + "COUNTRY_NAME": "Valsts Nosaukums", + "REFERER_LINK": "Atsauces saite", + "CUSTOM_ATTRIBUTE_LIST": "Saraksts", + "CUSTOM_ATTRIBUTE_TEXT": "Teksts", + "CUSTOM_ATTRIBUTE_NUMBER": "Numurs", + "CUSTOM_ATTRIBUTE_LINK": "Saite", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Izvēles rūtiņa", + "CREATED_AT": "Izveidots", + "LAST_ACTIVITY": "Pēdējās Darbības" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", - "CUSTOM_ATTRIBUTES": "Custom Attributes" + "STANDARD_FILTERS": "Standarta Filtri", + "ADDITIONAL_FILTERS": "Papildu Filtri", + "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības" }, "CUSTOM_VIEWS": { "ADD": { - "TITLE": "Do you want to save this filter?", - "LABEL": "Name this filter", - "PLACEHOLDER": "Enter a name for this filter", - "ERROR_MESSAGE": "Name is required", - "SAVE_BUTTON": "Save filter", - "CANCEL_BUTTON": "Cancel", + "TITLE": "Vai vēlaties saglabāt šo filtru?", + "LABEL": "Piešķiriet filtram nosaukumu", + "PLACEHOLDER": "Ievadiet šī filtra nosaukumu", + "ERROR_MESSAGE": "Nepieciešams nosaukums", + "SAVE_BUTTON": "Saglabāt filtru", + "CANCEL_BUTTON": "Atcelt", "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder created successfully", - "ERROR_MESSAGE": "Error while creating folder" + "SUCCESS_MESSAGE": "Mape ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Izveidojot mapi, radās kļūda" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment created successfully", - "ERROR_MESSAGE": "Error while creating segment" + "SUCCESS_MESSAGE": "Segments ir veiksmīgi izveidots", + "ERROR_MESSAGE": "Izveidojot segmentu, radās kļūda" } }, "DELETE": { - "DELETE_BUTTON": "Delete filter", + "DELETE_BUTTON": "Dzēst filtru", "MODAL": { "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete the filter ", - "YES": "Yes, Delete", - "NO": "No, Keep it" + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēsīsiet šo filtru ", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" } }, "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder deleted successfully", - "ERROR_MESSAGE": "Error while deleting folder" + "SUCCESS_MESSAGE": "Mape ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Dzēšot mapi, radās kļūda" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment deleted successfully", - "ERROR_MESSAGE": "Error while deleting segment" + "SUCCESS_MESSAGE": "Segments ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot segmentu, radās kļūda" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json index 0f965c717..5b4319962 100644 --- a/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json @@ -1,111 +1,111 @@ { "AGENT_MGMT": { - "HEADER": "Agents", - "HEADER_BTN_TXT": "Add Agent", - "LOADING": "Fetching Agent List", - "SIDEBAR_TXT": "

Agents

An Agent is a member of your Customer Support team.

Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account.

Click on Add Agent to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages.

Access to Chatwoot's features are based on following roles.

Agent - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.

Administrator - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.

", + "HEADER": "Aģenti", + "HEADER_BTN_TXT": "Pievienot Aģentu", + "LOADING": "Aģentu Saraksta Iegūšana", + "SIDEBAR_TXT": "

Aģenti

Aģents ir Jūsu Klientu Atbalsta komandas biedrs.

Aģenti varēs skatīt jūsu lietotāju ziņojumus un atbildēt uz tiem. Sarakstā ir redzami visi aģenti, kas pašlaik ir jūsu kontā.

Klikšķiniet uz Pievienot Aģentu lai pievienotu jaunu aģentu. Jūsu pievienotais aģents saņems e-pasta ziņojumu ar apstiprinājuma saiti, lai aktivizētu savu kontu, pēc tam viņš varēs piekļūt Chatwoot un atbildēt uz ziņojumiem.

Piekļuve Chatwoot funkcijām ir balstīta uz šādām lomām.

Aģents - Šīs lomas aģentiem ir piekļuve tikai pie iesūtnēm, pārskatiem un sarunām. Viņi var piešķirt sarunas citiem aģentiem, vai sev, un atrisināt sarunas.

Administrators - Administratoram būs piekļuve pie visām jūsu kontam iespējotajām Chatwoot funkcijām, tostarp iestatījumiem, kā arī visām parasto aģentu privilēģijām.

", "AGENT_TYPES": { - "ADMINISTRATOR": "Administrator", - "AGENT": "Agent" + "ADMINISTRATOR": "Administrators", + "AGENT": "Aģents" }, "LIST": { - "404": "There are no agents associated to this account", - "TITLE": "Manage agents in your team", - "DESC": "You can add/remove agents to/in your team.", - "NAME": "Name", - "EMAIL": "EMAIL", - "STATUS": "Status", - "ACTIONS": "Actions", - "VERIFIED": "Verified", - "VERIFICATION_PENDING": "Verification Pending" + "404": "Šim kontam nav piesaistīts neviens aģents", + "TITLE": "Pārvaldīt Jūsu komandas aģentus", + "DESC": "Jūs varat pievienot/noņemt aģentus pie/no savas komandas.", + "NAME": "Vārds", + "EMAIL": "e-pasts", + "STATUS": "Statuss", + "ACTIONS": "Darbības", + "VERIFIED": "Pārbaudīts", + "VERIFICATION_PENDING": "Gaida apstiprinājumu" }, "ADD": { - "TITLE": "Add agent to your team", - "DESC": "You can add people who will be able to handle support for your inboxes.", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Pievienot aģentu Jūsu komandai", + "DESC": "Jūs varat pievienot personas, kuras būs spējīgas apstrādāt iesūtnes un sniegt atbalstu.", + "CANCEL_BUTTON_TEXT": "Atcelt", "FORM": { "NAME": { - "LABEL": "Agent Name", - "PLACEHOLDER": "Please enter a name of the agent" + "LABEL": "Aģenta Vārds", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta vārdu" }, "AGENT_TYPE": { - "LABEL": "Role", - "PLACEHOLDER": "Please select a role", - "ERROR": "Role is required" + "LABEL": "Loma", + "PLACEHOLDER": "Lūdzu, izvēlieties lomu", + "ERROR": "Nepieciešama loma" }, "EMAIL": { - "LABEL": "Email Address", - "PLACEHOLDER": "Please enter an email address of the agent" + "LABEL": "e-pasta Adrese", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta e-pasta adresi" }, - "SUBMIT": "Add Agent" + "SUBMIT": "Pievienot Aģentu" }, "API": { - "SUCCESS_MESSAGE": "Agent added successfully", - "EXIST_MESSAGE": "Agent email already in use, Please try another email address", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi pievienots", + "EXIST_MESSAGE": "Aģenta e-pasts jau tiek izmantots. Lūdzu, pamēģiniet citu e-pasta adresi", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Agent deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " } }, "EDIT": { - "TITLE": "Edit agent", + "TITLE": "Rediģēt aģentu", "FORM": { "NAME": { - "LABEL": "Agent Name", - "PLACEHOLDER": "Please enter a name of the agent" + "LABEL": "Aģenta Vārds", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta vārdu" }, "AGENT_TYPE": { - "LABEL": "Role", - "PLACEHOLDER": "Please select a role", - "ERROR": "Role is required" + "LABEL": "Loma", + "PLACEHOLDER": "Lūdzu, izvēlieties lomu", + "ERROR": "Nepieciešama loma" }, "EMAIL": { - "LABEL": "Email Address", - "PLACEHOLDER": "Please enter an email address of the agent" + "LABEL": "e-pasta Adrese", + "PLACEHOLDER": "Lūdzu, ievadiet aģenta e-pasta adresi" }, - "SUBMIT": "Edit Agent" + "SUBMIT": "Rediģēt Aģentu" }, - "BUTTON_TEXT": "Edit", - "CANCEL_BUTTON_TEXT": "Cancel", + "BUTTON_TEXT": "Rediģēt", + "CANCEL_BUTTON_TEXT": "Atcelt", "API": { - "SUCCESS_MESSAGE": "Agent updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Aģents ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "PASSWORD_RESET": { - "ADMIN_RESET_BUTTON": "Reset Password", - "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", - "SUCCESS_MESSAGE": "Agent password reset successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ADMIN_RESET_BUTTON": "Atiestatīt Paroli", + "ADMIN_SUCCESS_MESSAGE": "Aģentam tika nosūtīts e-pasta ziņojums ar paroles atiestatīšanas norādījumiem", + "SUCCESS_MESSAGE": "Aģenta parole ir veiksmīgi atiestatīta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "SEARCH": { - "NO_RESULTS": "No results found." + "NO_RESULTS": "Nav atrasts." }, "MULTI_SELECTOR": { - "PLACEHOLDER": "None", + "PLACEHOLDER": "Nav", "TITLE": { - "AGENT": "Select agent", - "TEAM": "Select team" + "AGENT": "Izvēlieties aģentu", + "TEAM": "Izvēlieties komandu" }, "SEARCH": { "NO_RESULTS": { - "AGENT": "No agents found", - "TEAM": "No teams found" + "AGENT": "Aģenti nav atrasti", + "TEAM": "Komandas nav atrastas" }, "PLACEHOLDER": { - "AGENT": "Search agents", - "TEAM": "Search teams" + "AGENT": "Meklēt aģentus", + "TEAM": "Meklēt komandas" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json index ff4904c34..716f98705 100644 --- a/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json @@ -1,98 +1,98 @@ { "ATTRIBUTES_MGMT": { - "HEADER": "Custom Attributes", - "HEADER_BTN_TXT": "Add Custom Attribute", - "LOADING": "Fetching custom attributes", - "SIDEBAR_TXT": "

Custom Attributes

A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc.

For creating a Custom Attribute, just click on the Add Custom Attribute. You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.

", + "HEADER": "Pielāgotas Īpašības", + "HEADER_BTN_TXT": "Pievienot Pielāgotu Īpašību", + "LOADING": "Notiek pielāgotu īpašību iegūšana", + "SIDEBAR_TXT": "

Pielāgotas Īpašības

Pielāgotas īpašības izseko faktus par jūsu kontaktpersonām/sarunu, piemēram, abonēšanas plānu vai kad viņi pasūtīja pirmo preci utt.

Lai izveidotu Pielāgotu Īpašību, noklikšķiniet uz Pievienot Pielāgotu Īpašību. Jūs varat arī rediģēt vai dzēst esošu Pielāgotu Īpašību, noklikšķinot uz Rediģēt vai Dzēst pogas.

", "ADD": { - "TITLE": "Add Custom Attribute", - "SUBMIT": "Create", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Pievienot Pielāgotu Īpašību", + "SUBMIT": "Izveidot", + "CANCEL_BUTTON_TEXT": "Atcelt", "FORM": { "NAME": { - "LABEL": "Display Name", - "PLACEHOLDER": "Enter custom attribute display name", - "ERROR": "Name is required" + "LABEL": "Parādāmais Nosaukums", + "PLACEHOLDER": "Ievadiet pielāgotās īpašības parādāmo nosaukumu", + "ERROR": "Nepieciešams nosaukums" }, "DESC": { - "LABEL": "Description", - "PLACEHOLDER": "Enter custom attribute description", - "ERROR": "Description is required" + "LABEL": "Apraksts", + "PLACEHOLDER": "Ievadiet pielāgotās īpašības aprakstu", + "ERROR": "Nepieciešams apraksts" }, "MODEL": { - "LABEL": "Applies to", - "PLACEHOLDER": "Please select one", - "ERROR": "Model is required" + "LABEL": "Attiecas uz", + "PLACEHOLDER": "Lūdzu, izvēlieties vienu", + "ERROR": "Nepieciešams modelis" }, "TYPE": { - "LABEL": "Type", - "PLACEHOLDER": "Please select a type", - "ERROR": "Type is required", + "LABEL": "Tips", + "PLACEHOLDER": "Lūdzu, izvēlieties tipu", + "ERROR": "Nepieciešams tips", "LIST": { - "LABEL": "List Values", - "PLACEHOLDER": "Please enter value and press enter key", - "ERROR": "Must have at least one value" + "LABEL": "Parādīt Vērtības", + "PLACEHOLDER": "Lūdzu, ievadiet vērtību un nospiediet taustiņu enter", + "ERROR": "Jābūt vismaz vienai vērtībai" } }, "KEY": { - "LABEL": "Key", - "PLACEHOLDER": "Enter custom attribute key", - "ERROR": "Key is required", - "IN_VALID": "Invalid key" + "LABEL": "Atslēga", + "PLACEHOLDER": "Ievadiet pielāgotas īpašības atslēgu", + "ERROR": "Nepieciešama atslēga", + "IN_VALID": "Nederīga atslēga" } }, "API": { - "SUCCESS_MESSAGE": "Custom Attribute added successfully", - "ERROR_MESSAGE": "Could not able to create a custom attribute, Please try again later" + "SUCCESS_MESSAGE": "Pielāgotā īpašība ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevarēja izveidot pielāgotu īpašību. Lūdzu, vēlāk mēģiniet vēlreiz" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", - "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." + "SUCCESS_MESSAGE": "Pielāgotā Īpašība ir veiksmīgi izdzēsta.", + "ERROR_MESSAGE": "Nevarēja izdzēst pielāgoto īpašību. Mēģiniet vēlreiz." }, "CONFIRM": { - "TITLE": "Are you sure want to delete - %{attributeName}", - "PLACE_HOLDER": "Please type {attributeName} to confirm", - "MESSAGE": "Deleting will remove the custom attribute", - "YES": "Delete ", - "NO": "Cancel" + "TITLE": "Vai tiešām vēlaties dzēst - %{attributeName}", + "PLACE_HOLDER": "Lai apstiprinātu, lūdzu, uzrakstiet {attributeName}", + "MESSAGE": "Dzēšana noņems pielāgoto īpašību", + "YES": "Dzēst ", + "NO": "Atcelt" } }, "EDIT": { - "TITLE": "Edit Custom Attribute", - "UPDATE_BUTTON_TEXT": "Update", + "TITLE": "Rediģēt Pielāgoto Īpašību", + "UPDATE_BUTTON_TEXT": "Atjaunināt", "TYPE": { "LIST": { - "LABEL": "List Values", - "PLACEHOLDER": "Please enter values and press enter key" + "LABEL": "Parādīt Vērtības", + "PLACEHOLDER": "Lūdzu, ievadiet vērtības un nospiediet taustiņu enter" } }, "API": { - "SUCCESS_MESSAGE": "Custom Attribute updated successfully", - "ERROR_MESSAGE": "There was an error updating custom attribute, please try again" + "SUCCESS_MESSAGE": "Pielāgotā Īpašība ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Atjauninot pielāgoto īpašību, radās kļūda. Lūdzu, mēģiniet vēlreiz" } }, "TABS": { - "HEADER": "Custom Attributes", - "CONVERSATION": "Conversation", - "CONTACT": "Contact" + "HEADER": "Pielāgotās Īpašības", + "CONVERSATION": "Saruna", + "CONTACT": "Kontaktpersona" }, "LIST": { "TABLE_HEADER": [ - "Name", - "Description", - "Type", - "Key" + "Vārds", + "Apraksts", + "Tips", + "Atslēga" ], "BUTTONS": { - "EDIT": "Edit", - "DELETE": "Delete" + "EDIT": "Rediģēt", + "DELETE": "Dzēst" }, "EMPTY_RESULT": { - "404": "There are no custom attributes created", - "NOT_FOUND": "There are no custom attributes configured" + "404": "Nav izveidotas pielāgotas īpašības", + "NOT_FOUND": "Nav nokonfigurētas pielāgotas īpašības" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/automation.json b/app/javascript/dashboard/i18n/locale/lv/automation.json index 5d291814e..a7edf9c25 100644 --- a/app/javascript/dashboard/i18n/locale/lv/automation.json +++ b/app/javascript/dashboard/i18n/locale/lv/automation.json @@ -1,116 +1,116 @@ { "AUTOMATION": { - "HEADER": "Automations", - "HEADER_BTN_TXT": "Add Automation Rule", - "LOADING": "Fetching automation rules", - "SIDEBAR_TXT": "

Automation Rules

Automation can replace and automate existing processes that require manual effort. You can do many things with automation, including adding labels and assigning conversation to the best agent. So the team focuses on what they do best and spends more little time on manual tasks.

", + "HEADER": "Automatizācijas", + "HEADER_BTN_TXT": "Pievienot Automatizācijas Noteikumu", + "LOADING": "Notiek automatizācijas noteikumu iegūšana", + "SIDEBAR_TXT": "

Automatizācijas Noteikumi

Automatizācija var aizstāt un automatizēt esošos procesus, kuriem nepieciešama manuāla piepūle. Izmantojot automatizāciju, Jūs varat veikt daudzas darbības, tostarp pievienot etiķetes un piešķirt sarunu labākajam aģentam. Šādi komanda koncentrēsies uz to, kas viņiem padodas vislabāk, un mazāk laika veltītīs manuāliem uzdevumiem.

", "ADD": { - "TITLE": "Add Automation Rule", - "SUBMIT": "Create", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Pievienot Automatizācijas Noteikumu", + "SUBMIT": "Izveidot", + "CANCEL_BUTTON_TEXT": "Atcelt", "FORM": { "NAME": { - "LABEL": "Rule Name", - "PLACEHOLDER": "Enter rule name", - "ERROR": "Name is required" + "LABEL": "Noteikuma Nosaukums", + "PLACEHOLDER": "Ievadiet noteikuma nosaukumu", + "ERROR": "Nepieciešams nosaukums" }, "DESC": { - "LABEL": "Description", - "PLACEHOLDER": "Enter rule description", - "ERROR": "Description is required" + "LABEL": "Apraksts", + "PLACEHOLDER": "Ievadiet noteikuma aprakstu", + "ERROR": "Nepieciešams apraksts" }, "EVENT": { - "LABEL": "Event", - "PLACEHOLDER": "Please select one", - "ERROR": "Event is required" + "LABEL": "Notikums", + "PLACEHOLDER": "Lūdzu, izvēlieties vienu", + "ERROR": "Nepieciešams notikums" }, "CONDITIONS": { - "LABEL": "Conditions" + "LABEL": "Nosacījumi" }, "ACTIONS": { - "LABEL": "Actions" + "LABEL": "Darbības" } }, - "CONDITION_BUTTON_LABEL": "Add Condition", - "ACTION_BUTTON_LABEL": "Add Action", + "CONDITION_BUTTON_LABEL": "Pievienot Nosacījumu", + "ACTION_BUTTON_LABEL": "Pievienot Darbību", "API": { - "SUCCESS_MESSAGE": "Automation rule added successfully", - "ERROR_MESSAGE": "Could not able to create a automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi pievienots", + "ERROR_MESSAGE": "Nevarēja izveidot automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" } }, "LIST": { "TABLE_HEADER": [ - "Name", - "Description", - "Active", - "Created on" + "Vārds", + "Apraksts", + "Aktīvs", + "Izveidots" ], - "404": "No automation rules found" + "404": "Automatizācijas noteikumi nav atrasti" }, "DELETE": { - "TITLE": "Delete Automation Rule", - "SUBMIT": "Delete", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Dzēst automatizācijas noteikumu", + "SUBMIT": "Dzēst", + "CANCEL_BUTTON_TEXT": "Atcelt", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " }, "API": { - "SUCCESS_MESSAGE": "Automation rule deleted successfully", - "ERROR_MESSAGE": "Could not able to delete a automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevarēja izdzēst automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" } }, "EDIT": { - "TITLE": "Edit Automation Rule", - "SUBMIT": "Update", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Rediģēt Automatizācijas Noteikumu", + "SUBMIT": "Atjaunināt", + "CANCEL_BUTTON_TEXT": "Atcelt", "API": { - "SUCCESS_MESSAGE": "Automation rule updated successfully", - "ERROR_MESSAGE": "Could not update automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatizācijas noteikums ir veiksmīgi atjaunināts", + "ERROR_MESSAGE": "Nevarēja atjaunināt automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" } }, "CLONE": { - "TOOLTIP": "Clone", + "TOOLTIP": "Klonēt", "API": { - "SUCCESS_MESSAGE": "Automation cloned successfully", - "ERROR_MESSAGE": "Could not clone automation rule, Please try again later" + "SUCCESS_MESSAGE": "Automatizācija ir veiksmīgi noklonēta", + "ERROR_MESSAGE": "Nevarēja noklonēt automatizācijas noteikumu. Lūdzu, vēlāk mēģiniet vēlreiz" } }, "FORM": { - "EDIT": "Edit", - "CREATE": "Create", - "DELETE": "Delete", - "CANCEL": "Cancel", - "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" + "EDIT": "Rediģēt", + "CREATE": "Izveidot", + "DELETE": "Dzēst", + "CANCEL": "Atcelt", + "RESET_MESSAGE": "Mainot notikuma tipu tiks atiestatīti tālāk pievienotie nosacījumi un notikumi" }, "CONDITION": { - "DELETE_MESSAGE": "You need to have atleast one condition to save" + "DELETE_MESSAGE": "Lai saglabātu, Jums ir nepieciešams vismaz viens nosacījums" }, "ACTION": { - "DELETE_MESSAGE": "You need to have atleast one action to save", - "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Enter your message here", - "TEAM_DROPDOWN_PLACEHOLDER": "Select teams" + "DELETE_MESSAGE": "Lai saglabātu, ir nepieciešama vismaz viena darbība", + "TEAM_MESSAGE_INPUT_PLACEHOLDER": "Ievadiet savu ziņojumu šeit", + "TEAM_DROPDOWN_PLACEHOLDER": "Izvēlieties komandas" }, "TOGGLE": { - "ACTIVATION_TITLE": "Activate Automation Rule", - "DEACTIVATION_TITLE": "Deactivate Automation Rule", - "ACTIVATION_DESCRIPTION": "This action will activate the automation rule '{automationName}'. Are you sure you want to proceed?", - "DEACTIVATION_DESCRIPTION": "This action will deactivate the automation rule '{automationName}'. Are you sure you want to proceed?", - "ACTIVATION_SUCCESFUL": "Automation Rule Activated Successfully", - "DEACTIVATION_SUCCESFUL": "Automation Rule Deactivated Successfully", - "ACTIVATION_ERROR": "Could not Activate Automation, Please try again later", - "DEACTIVATION_ERROR": "Could not Deactivate Automation, Please try again later", - "CONFIRMATION_LABEL": "Yes", - "CANCEL_LABEL": "No" + "ACTIVATION_TITLE": "Aktivizēt Automatizācijas Noteikumu", + "DEACTIVATION_TITLE": "Deaktivizēt Automatizācijas Noteikumu", + "ACTIVATION_DESCRIPTION": "Šī darbība aktivizēs automatizācijas noteikumu '{automationName}'. Vai tiešām vēlaties turpināt?", + "DEACTIVATION_DESCRIPTION": "Šī darbība deaktivizēs automatizācijas noteikumu '{automationName}'. Vai tiešām vēlaties turpināt?", + "ACTIVATION_SUCCESFUL": "Automatizācijas Noteikums ir Veiksmīgi Aktivizēts", + "DEACTIVATION_SUCCESFUL": "Automatizācijas Noteikums ir Veiksmīgi Deaktivizēts", + "ACTIVATION_ERROR": "Nevarēja Aktivizēt Automatizāciju. Lūdzu, vēlāk mēģiniet vēlreiz", + "DEACTIVATION_ERROR": "Nevarēja Deaktivizēt Automatizāciju. Lūdzu, vēlāk mēģiniet vēlreiz", + "CONFIRMATION_LABEL": "Jā", + "CANCEL_LABEL": "Nē" }, "ATTACHMENT": { - "UPLOAD_ERROR": "Could not upload attachment, Please try again", - "LABEL_IDLE": "Upload Attachment", - "LABEL_UPLOADING": "Uploading...", - "LABEL_UPLOADED": "Succesfully Uploaded", - "LABEL_UPLOAD_FAILED": "Upload Failed" + "UPLOAD_ERROR": "Nevarēja augšupielādēt pielikumu. Lūdzu, mēģiniet vēlreiz", + "LABEL_IDLE": "Augšupielādēt pielikumu", + "LABEL_UPLOADING": "Notiek augšupielāde...", + "LABEL_UPLOADED": "Veiksmīgi augšupielādēts", + "LABEL_UPLOAD_FAILED": "Augšupielāde neizdevās" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/bulkActions.json b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json index 7061e5e70..cb7b58ef9 100644 --- a/app/javascript/dashboard/i18n/locale/lv/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/lv/bulkActions.json @@ -1,29 +1,29 @@ { "BULK_ACTION": { - "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", - "AGENT_SELECT_LABEL": "Select Agent", - "ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", - "GO_BACK_LABEL": "Go back", - "ASSIGN_LABEL": "Assign", - "ASSIGN_AGENT_TOOLTIP": "Assign Agent", - "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", + "CONVERSATIONS_SELECTED": "Izvēlētas %{conversationCount} sarunas", + "AGENT_SELECT_LABEL": "Izvēlieties Aģentu", + "ASSIGN_CONFIRMATION_LABEL": "Vai tiešām vēlaties piešķirt %{conversationCount} %{conversationLabel}", + "GO_BACK_LABEL": "Atgriezties", + "ASSIGN_LABEL": "Piešķirt", + "ASSIGN_AGENT_TOOLTIP": "Piešķirt Aģentu", + "ASSIGN_SUCCESFUL": "Sarunas ir veiksmīgi piešķirtas", + "ASSIGN_FAILED": "Neizdevās piešķirt sarunas. Lūdzu, mēģiniet vēlreiz", + "RESOLVE_SUCCESFUL": "Sarunas ir veiksmīgi atrisinātas", + "RESOLVE_FAILED": "Neizdevās atrisināt sarunas. Lūdzu, mēģiniet vēlreiz", + "ALL_CONVERSATIONS_SELECTED_ALERT": "Šajā lapā redzamās sarunas ir tikai izvēlētas.", + "AGENT_LIST_LOADING": "Notiek Aģentu Ielāde", "UPDATE": { - "CHANGE_STATUS": "Change status", - "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", - "UPDATE_SUCCESFUL": "Conversation status updated successfully.", - "UPDATE_FAILED": "Failed to update conversations, please try again" + "CHANGE_STATUS": "Mainīt statusu", + "SNOOZE_UNTIL_NEXT_REPLY": "Atlikt līdz nākamajai atbildei", + "UPDATE_SUCCESFUL": "Sarunas statuss ir veiksmīgi atjaunināts.", + "UPDATE_FAILED": "Neizdevās atjaunināt sarunas. Lūdzu, mēģiniet vēlreiz" }, "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_LABELS": "Piešķirt Etiķetes", + "NO_LABELS_FOUND": "Etiķetes nav atrastas", + "ASSIGN_SELECTED_LABELS": "Piešķirt izvēlētās etiķetes", + "ASSIGN_SUCCESFUL": "Etiķetes ir veiksmīgi piešķirtas", + "ASSIGN_FAILED": "Neizdevās piešķirt etiķetes. Lūdzu, mēģiniet vēlreiz" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/campaign.json b/app/javascript/dashboard/i18n/locale/lv/campaign.json index bbcc463ee..c28aa96fb 100644 --- a/app/javascript/dashboard/i18n/locale/lv/campaign.json +++ b/app/javascript/dashboard/i18n/locale/lv/campaign.json @@ -1,126 +1,126 @@ { "CAMPAIGN": { - "HEADER": "Campaigns", - "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.", + "HEADER": "Kampaņas", + "SIDEBAR_TXT": "Proaktīvi ziņojumi ļauj klientam nosūtīt izejošos ziņojumus savām kontaktpersonām, kas aktivizē citas sarunas. Noklikšķiniet uz Pievienot Kampaņu lai izveidotu jaunu kampaņu. Jūs varat arī rediģēt vai dzēst esošu kampaņu, noklikšķinot uz Rediģēt vai Dzēst pogas.", "HEADER_BTN_TXT": { - "ONE_OFF": "Create a one off campaign", - "ONGOING": "Create a ongoing campaign" + "ONE_OFF": "Izveidot vienreizēju kampaņu", + "ONGOING": "Izveidot notiekošu kampaņu" }, "ADD": { - "TITLE": "Create a campaign", - "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", - "CANCEL_BUTTON_TEXT": "Cancel", - "CREATE_BUTTON_TEXT": "Create", + "TITLE": "Izveidot kampaņu", + "DESC": "Proaktīvi ziņojumi ļauj klientam nosūtīt izejošos ziņojumus savām kontaktpersonām, kas aktivizē citas sarunas.", + "CANCEL_BUTTON_TEXT": "Atcelt", + "CREATE_BUTTON_TEXT": "Izveidot", "FORM": { "TITLE": { - "LABEL": "Title", - "PLACEHOLDER": "Please enter the title of campaign", - "ERROR": "Title is required" + "LABEL": "Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas nosaukumu", + "ERROR": "Nepieciešams nosaukums" }, "SCHEDULED_AT": { - "LABEL": "Scheduled time", - "PLACEHOLDER": "Please select the time", - "CONFIRM": "Confirm", - "ERROR": "Scheduled time is required" + "LABEL": "Plānotais laiks", + "PLACEHOLDER": "Lūdzu, izvēlieties laiku", + "CONFIRM": "Apstiprināt", + "ERROR": "Nepieciešams ieplānotais laiks" }, "AUDIENCE": { - "LABEL": "Audience", - "PLACEHOLDER": "Select the customer labels", - "ERROR": "Audience is required" + "LABEL": "Auditorija", + "PLACEHOLDER": "Izvēlieties klientu etiķetes", + "ERROR": "Nepieciešama auditorija" }, "INBOX": { - "LABEL": "Select Inbox", - "PLACEHOLDER": "Select Inbox", - "ERROR": "Inbox is required" + "LABEL": "Izvēlieties Iesūtni", + "PLACEHOLDER": "Izvēlieties Iesūtni", + "ERROR": "Nepieciešama iesūtne" }, "MESSAGE": { - "LABEL": "Message", - "PLACEHOLDER": "Please enter the message of campaign", - "ERROR": "Message is required" + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, ievadiet kampaņas ziņojumu", + "ERROR": "Nepieciešams ziņojums" }, "SENT_BY": { - "LABEL": "Sent by", - "PLACEHOLDER": "Please select the the content of campaign", - "ERROR": "Sender is required" + "LABEL": "Sūtīja", + "PLACEHOLDER": "Lūdzu, izvēlieties kampaņas saturu", + "ERROR": "Nepieciešams sūtītājs" }, "END_POINT": { "LABEL": "URL", - "PLACEHOLDER": "Please enter the URL", - "ERROR": "Please enter a valid URL" + "PLACEHOLDER": "Lūdzu, ievadiet URL", + "ERROR": "Lūdzu, ievadiet derīgu URL" }, "TIME_ON_PAGE": { - "LABEL": "Time on page(Seconds)", - "PLACEHOLDER": "Please enter the time", - "ERROR": "Time on page is required" + "LABEL": "Lapā pavadītais laiks (Sekundes)", + "PLACEHOLDER": "Lūdzu, ievadiet laiku", + "ERROR": "Nepieciešams lapā pavadītais laiks" }, - "ENABLED": "Enable campaign", - "TRIGGER_ONLY_BUSINESS_HOURS": "Trigger only during business hours", - "SUBMIT": "Add Campaign" + "ENABLED": "Iespējot kampaņu", + "TRIGGER_ONLY_BUSINESS_HOURS": "Aktivizēt tikai darba laikā", + "SUBMIT": "Pievienot Kampaņu" }, "API": { - "SUCCESS_MESSAGE": "Campaign created successfully", - "ERROR_MESSAGE": "There was an error. Please try again." + "SUCCESS_MESSAGE": "Kampaņa ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu mēģiniet vēlreiz." } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete?", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst?", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " }, "API": { - "SUCCESS_MESSAGE": "Campaign deleted successfully", - "ERROR_MESSAGE": "Could not delete the campaign. Please try again later." + "SUCCESS_MESSAGE": "Kampaņa ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevarēja izdzēst kampaņu. Lūdzu, pamēģiniet vēlāk vēlreiz." } }, "EDIT": { - "TITLE": "Edit campaign", - "UPDATE_BUTTON_TEXT": "Update", + "TITLE": "Rediģēt kampaņu", + "UPDATE_BUTTON_TEXT": "Atjaunināt", "API": { - "SUCCESS_MESSAGE": "Campaign updated successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Kampaņa ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" } }, "LIST": { - "LOADING_MESSAGE": "Loading campaigns...", - "404": "There are no campaigns created for this inbox.", + "LOADING_MESSAGE": "Notiek kampaņu ielāde...", + "404": "Šai iesūtnei nav izveidota neviena kampaņa.", "TABLE_HEADER": { - "TITLE": "Title", - "MESSAGE": "Message", - "INBOX": "Inbox", - "STATUS": "Status", - "SENDER": "Sender", + "TITLE": "Nosaukums", + "MESSAGE": "Ziņojums", + "INBOX": "Iesūtne", + "STATUS": "Statuss", + "SENDER": "Sūtītājs", "URL": "URL", - "SCHEDULED_AT": "Scheduled time", - "TIME_ON_PAGE": "Time(Seconds)", - "CREATED_AT": "Created at" + "SCHEDULED_AT": "Plānotais laiks", + "TIME_ON_PAGE": "Laiks (Sekundes)", + "CREATED_AT": "Izveidots plkst" }, "BUTTONS": { - "ADD": "Add", - "EDIT": "Edit", - "DELETE": "Delete" + "ADD": "Pievienot", + "EDIT": "Rediģēt", + "DELETE": "Dzēst" }, "STATUS": { - "ENABLED": "Enabled", - "DISABLED": "Disabled", - "COMPLETED": "Completed", - "ACTIVE": "Active" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots", + "COMPLETED": "Pabeigts", + "ACTIVE": "Aktīvs" }, "SENDER": { "BOT": "Bot" } }, "ONE_OFF": { - "HEADER": "One off campaigns", - "404": "There are no one off campaigns created", - "INBOXES_NOT_FOUND": "Please create an sms inbox and start adding campaigns" + "HEADER": "Vienreizējas kampaņas", + "404": "Nav izveidota neviena vienreizēja kampaņa", + "INBOXES_NOT_FOUND": "Lūdzu, izveidojiet sms iesūtni un sāciet pievienot kampaņas" }, "ONGOING": { - "HEADER": "Ongoing campaigns", - "404": "There are no ongoing campaigns created", - "INBOXES_NOT_FOUND": "Please create an website inbox and start adding campaigns" + "HEADER": "Notiekošās kampaņas", + "404": "Nav izveidota neviena notiekoša kampaņa", + "INBOXES_NOT_FOUND": "Lūdzu, izveidojiet tīmekļa vietnes iesūtni un sāciet pievienot kampaņas" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json index 9c14f5a52..1d1757267 100644 --- a/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/cannedMgmt.json @@ -1,75 +1,75 @@ { "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": "Sagatavotās Atbildes", + "HEADER_BTN_TXT": "Pievienot Sagatavoto Atbildi", + "LOADING": "Sagatavoto Atbilžu Iegūšana", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu", + "SIDEBAR_TXT": "

Sagatavotās Atbildes

Sagatavotās Atbildes ir saglabātas atbilžu veidnes, kuras var izmantot, lai ātri nosūtītu atbildi uz sarunu.

Lai izveidotu sagatavotu atbildi, noklikšķiniet uz Pievienot Sagatavoto Atbildi. Jūs varat arī rediģēt vai dzēst esošas Sagatavotās Atbildes noklikšķinot uz pogas Rediģēt vai Dzēst

Sagatavotās atbildes tiek izmantotas ar Īso Kodu palīdzību. Aģenti var piekļūt sagatavotajām atbildēm tērzēšanas laikā, rakstot '/' kam seko īsais kods.

", "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.", + "404": "Šajā kontā nav pieejama neviena sagatavota atbilde.", + "TITLE": "Pārvaldīt sagatavotās atbildes", + "DESC": "Sagatavotās Atbildes ir iepriekš definētas atbilžu veidnes, kuras var izmantot, lai ātri nosūtītu atbildes uz biļetēm.", "TABLE_HEADER": [ - "Short Code", - "Content", - "Actions" + "Īsais Kods", + "Saturs", + "Darbības" ] }, "ADD": { - "TITLE": "Add Canned Response", - "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Pievienot Sagatavoto Atbildi", + "DESC": "Sagatavotās Atbildes ir saglabātas atbilžu veidnes, kuras var izmantot, lai ātri nosūtītu atbildes uz sarunu.", + "CANCEL_BUTTON_TEXT": "Atcelt", "FORM": { "SHORT_CODE": { - "LABEL": "Short Code", - "PLACEHOLDER": "Please enter a short code", - "ERROR": "Short Code is required" + "LABEL": "Īsais Kods", + "PLACEHOLDER": "Lūdzu, ievadiet īso kodu", + "ERROR": "Nepieciešams īsais kods" }, "CONTENT": { - "LABEL": "Content", - "PLACEHOLDER": "Please enter a content", - "ERROR": "Content is required" + "LABEL": "Saturs", + "PLACEHOLDER": "Lūdzu, ievadiet saturu", + "ERROR": "Nepieciešams saturs" }, - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" }, "API": { - "SUCCESS_MESSAGE": "Canned Response added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Sagatavotā Atbilde ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "EDIT": { - "TITLE": "Edit Canned Response", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Rediģēt Sagatavoto Atbildi", + "CANCEL_BUTTON_TEXT": "Atcelt", "FORM": { "SHORT_CODE": { - "LABEL": "Short Code", - "PLACEHOLDER": "Please enter a shortcode", - "ERROR": "Short Code is required" + "LABEL": "Īsais Kods", + "PLACEHOLDER": "Lūdzu, ievadiet īskodu", + "ERROR": "Nepieciešams īsais kods" }, "CONTENT": { - "LABEL": "Content", - "PLACEHOLDER": "Please enter a content", - "ERROR": "Content is required" + "LABEL": "Saturs", + "PLACEHOLDER": "Lūdzu, ievadiet saturu", + "ERROR": "Nepieciešams saturs" }, - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" }, - "BUTTON_TEXT": "Edit", + "BUTTON_TEXT": "Rediģēt", "API": { - "SUCCESS_MESSAGE": "Canned Response updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Sagatavotā Atbilde ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Canned response deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Sagatavotā Atbilde ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/chatlist.json b/app/javascript/dashboard/i18n/locale/lv/chatlist.json index 93bba4aab..5c66abf11 100644 --- a/app/javascript/dashboard/i18n/locale/lv/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/lv/chatlist.json @@ -1,65 +1,65 @@ { "CHAT_LIST": { - "LOADING": "Fetching conversations", - "LOAD_MORE_CONVERSATIONS": "Load more conversations", - "EOF": "All conversations loaded 🎉", + "LOADING": "Notiek sarunu iegūšana", + "LOAD_MORE_CONVERSATIONS": "Ielādēt vairāk sarunu", + "EOF": "Visas sarunas ir ielādētas 🎉", "LIST": { - "404": "There are no active conversations in this group." + "404": "Šajā grupā nav aktīvu sarunu." }, - "TAB_HEADING": "Conversations", - "MENTION_HEADING": "Mentions", + "TAB_HEADING": "Sarunas", + "MENTION_HEADING": "Pieminēšanas", "SEARCH": { - "INPUT": "Search for People, Chats, Saved Replies .." + "INPUT": "Meklēt Cilvēkus, Tērzēšanas, Saglabātās Atbildes.." }, - "FILTER_ALL": "All", + "FILTER_ALL": "Visi", "ASSIGNEE_TYPE_TABS": { - "me": "Mine", - "unassigned": "Unassigned", - "all": "All" + "me": "Mani", + "unassigned": "Nepiešķirtie", + "all": "Visi" }, "CHAT_STATUS_FILTER_ITEMS": { "open": { - "TEXT": "Open" + "TEXT": "Atvērt" }, "resolved": { - "TEXT": "Resolved" + "TEXT": "Atrisināts" }, "pending": { - "TEXT": "Pending" + "TEXT": "Gaida" }, "snoozed": { - "TEXT": "Snoozed" + "TEXT": "Atlikts" } }, "ATTACHMENTS": { "image": { - "CONTENT": "Picture message" + "CONTENT": "Attēla ziņojums" }, "audio": { - "CONTENT": "Audio message" + "CONTENT": "Audio ziņojums" }, "video": { - "CONTENT": "Video message" + "CONTENT": "Video ziņojums" }, "file": { - "CONTENT": "File Attachment" + "CONTENT": "Faila pielikums" }, "location": { - "CONTENT": "Location" + "CONTENT": "Atrašanās vieta" }, "fallback": { - "CONTENT": "has shared a url" + "CONTENT": "ir kopīgojis URL" } }, - "RECEIVED_VIA_EMAIL": "Received via email", - "VIEW_TWEET_IN_TWITTER": "View tweet in Twitter", - "REPLY_TO_TWEET": "Reply to this tweet", - "LINK_TO_STORY": "Go to instagram story", - "SENT": "Sent successfully", - "NO_MESSAGES": "No Messages", - "NO_CONTENT": "No content available", - "HIDE_QUOTED_TEXT": "Hide Quoted Text", - "SHOW_QUOTED_TEXT": "Show Quoted Text", - "MESSAGE_READ": "Read" + "RECEIVED_VIA_EMAIL": "Saņemts pa e-pastu", + "VIEW_TWEET_IN_TWITTER": "Skatīt tvītu pakalpojumā Twitter", + "REPLY_TO_TWEET": "Atbildēt uz šo tvītu", + "LINK_TO_STORY": "Doties uz instagram stāstu", + "SENT": "Veiksmīgi nosūtīts", + "NO_MESSAGES": "Nav Ziņojumu", + "NO_CONTENT": "Saturs nav pieejams", + "HIDE_QUOTED_TEXT": "Paslēpt Citēto Tekstu", + "SHOW_QUOTED_TEXT": "Rādīt Citēto Tekstu", + "MESSAGE_READ": "Lasīt" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/contact.json b/app/javascript/dashboard/i18n/locale/lv/contact.json index 0bc399ba1..2e167ae2c 100644 --- a/app/javascript/dashboard/i18n/locale/lv/contact.json +++ b/app/javascript/dashboard/i18n/locale/lv/contact.json @@ -1,346 +1,347 @@ { "CONTACT_PANEL": { - "NOT_AVAILABLE": "Not Available", - "EMAIL_ADDRESS": "Email Address", - "PHONE_NUMBER": "Phone number", - "COPY_SUCCESSFUL": "Copied to clipboard successfully", - "COMPANY": "Company", - "LOCATION": "Location", - "BROWSER_LANGUAGE": "Browser Language", - "CONVERSATION_TITLE": "Conversation Details", - "VIEW_PROFILE": "View Profile", - "BROWSER": "Browser", - "OS": "Operating System", - "INITIATED_FROM": "Initiated from", - "INITIATED_AT": "Initiated at", - "IP_ADDRESS": "IP Address", - "NEW_MESSAGE": "New message", + "NOT_AVAILABLE": "Nav Pieejams", + "EMAIL_ADDRESS": "e-pasta Adrese", + "PHONE_NUMBER": "Telefona numurs", + "IDENTIFIER": "Identifikators", + "COPY_SUCCESSFUL": "Veiksmīgi nokopēts uz clipboard", + "COMPANY": "Uzņēmums", + "LOCATION": "Atrašanās Vieta", + "BROWSER_LANGUAGE": "Pārlūkprogrammas Valoda", + "CONVERSATION_TITLE": "Informācija Par Sarunu", + "VIEW_PROFILE": "Skatīt Profilu", + "BROWSER": "Pārlūkprogramma", + "OS": "Operētājsistēma", + "INITIATED_FROM": "Uzsākts no", + "INITIATED_AT": "Uzsākts plkst", + "IP_ADDRESS": "IP adrese", + "NEW_MESSAGE": "Jauns ziņojums", "CONVERSATIONS": { - "NO_RECORDS_FOUND": "There are no previous conversations associated to this contact.", - "TITLE": "Previous Conversations" + "NO_RECORDS_FOUND": "Ar šo kontaktpersonu nav saistītas iepriekšējās sarunas.", + "TITLE": "Iepriekšējās Sarunas" }, "LABELS": { "CONTACT": { - "TITLE": "Contact Labels", - "ERROR": "Couldn't update labels" + "TITLE": "Kontaktpersonu Etiķetes", + "ERROR": "Nevarēja atjaunināt etiķetes" }, "CONVERSATION": { - "TITLE": "Conversation Labels", - "ADD_BUTTON": "Add Labels" + "TITLE": "Sarunu Etiķetes", + "ADD_BUTTON": "Pievienot Etiķetes" }, "LABEL_SELECT": { - "TITLE": "Add Labels", - "PLACEHOLDER": "Search labels", - "NO_RESULT": "No labels found" + "TITLE": "Pievienot Etiķetes", + "PLACEHOLDER": "Meklēt etiķetes", + "NO_RESULT": "Etiķetes nav atrastas" } }, - "MERGE_CONTACT": "Merge contact", - "CONTACT_ACTIONS": "Contact actions", - "MUTE_CONTACT": "Mute Conversation", - "UNMUTE_CONTACT": "Unmute Conversation", - "MUTED_SUCCESS": "This conversation is muted for 6 hours", - "UNMUTED_SUCCESS": "This conversation is unmuted", - "SEND_TRANSCRIPT": "Send Transcript", - "EDIT_LABEL": "Edit", + "MERGE_CONTACT": "Apvienot kontaktu", + "CONTACT_ACTIONS": "Kontaktpersonu darbības", + "MUTE_CONTACT": "Izslēgt Sarunu", + "UNMUTE_CONTACT": "Ieslēgt Sarunu", + "MUTED_SUCCESS": "Šī saruna ir izslēgta uz 6 stundām", + "UNMUTED_SUCCESS": "Šī saruna ir ieslēgta", + "SEND_TRANSCRIPT": "Nosūtīt Transkriptu", + "EDIT_LABEL": "Rediģēt", "SIDEBAR_SECTIONS": { - "CUSTOM_ATTRIBUTES": "Custom Attributes", - "CONTACT_LABELS": "Contact Labels", - "PREVIOUS_CONVERSATIONS": "Previous Conversations" + "CUSTOM_ATTRIBUTES": "Pielāgot Īpašības", + "CONTACT_LABELS": "Kontaktpersonu Etiķetes", + "PREVIOUS_CONVERSATIONS": "Iepriekšējās Sarunas" } }, "EDIT_CONTACT": { - "BUTTON_LABEL": "Edit Contact", - "TITLE": "Edit contact", - "DESC": "Edit contact details" + "BUTTON_LABEL": "Rediģēt Kontaktpersonu", + "TITLE": "Rediģēt kontaktpersonu", + "DESC": "Rediģēt kontaktinformāciju" }, "CREATE_CONTACT": { - "BUTTON_LABEL": "New Contact", - "TITLE": "Create new contact", - "DESC": "Add basic information details about the contact." + "BUTTON_LABEL": "Jauna Kontaktpersona", + "TITLE": "Izveidot jaunu kontaktpersonu", + "DESC": "Pievienot pamatinformāciju par kontaktpersonu." }, "IMPORT_CONTACTS": { - "BUTTON_LABEL": "Import", - "TITLE": "Import Contacts", - "DESC": "Import contacts through a CSV file.", - "DOWNLOAD_LABEL": "Download a sample csv.", + "BUTTON_LABEL": "Importēt", + "TITLE": "Importēt Kontaktpersonas", + "DESC": "Importēt kontaktpersonas, izmantojot CSV failu.", + "DOWNLOAD_LABEL": "Lejupielādēt csv paraugu.", "FORM": { - "LABEL": "CSV File", - "SUBMIT": "Import", - "CANCEL": "Cancel" + "LABEL": "CSV Fails", + "SUBMIT": "Importēt", + "CANCEL": "Atcelt" }, - "SUCCESS_MESSAGE": "Contacts saved successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Kontaktpersonas ir veiksmīgi saglabātas", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" }, "DELETE_NOTE": { "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you want sure to delete this note?", - "YES": "Yes, Delete it", - "NO": "No, Keep it" + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties dzēst šo piezīmi?", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" } }, "DELETE_CONTACT": { - "BUTTON_LABEL": "Delete Contact", - "TITLE": "Delete contact", - "DESC": "Delete contact details", + "BUTTON_LABEL": "Dzēst Kontaktpersonu", + "TITLE": "Dzēst kontaktpersonu", + "DESC": "Dzēst kontaktinformāciju", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete", - "NO": "No, Keep" + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" }, "API": { - "SUCCESS_MESSAGE": "Contact deleted successfully", - "ERROR_MESSAGE": "Could not delete contact. Please try again later." + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevarēja izdzēst kontaktpersonu. Lūdzu, vēlāk pamēģiniet vēlreiz." } }, "CONTACT_FORM": { "FORM": { - "SUBMIT": "Submit", - "CANCEL": "Cancel", + "SUBMIT": "Iesniegt", + "CANCEL": "Atcelt", "AVATAR": { - "LABEL": "Contact Avatar" + "LABEL": "Kontaktpersonas Avatārs" }, "NAME": { - "PLACEHOLDER": "Enter the full name of the contact", - "LABEL": "Full Name" + "PLACEHOLDER": "Ievadiet kontaktpersonas pilno vārdu", + "LABEL": "Pilnais Vārds" }, "BIO": { - "PLACEHOLDER": "Enter the bio of the contact", - "LABEL": "Bio" + "PLACEHOLDER": "Ievadiet kontaktpersonas biogrāfiju", + "LABEL": "Biogrāfija" }, "EMAIL_ADDRESS": { - "PLACEHOLDER": "Enter the email address of the contact", - "LABEL": "Email Address", - "DUPLICATE": "This email address is in use for another contact.", - "ERROR": "Please enter a valid email address." + "PLACEHOLDER": "Ievadiet kontaktpersonas e-pasta adresi", + "LABEL": "e-pasta Adrese", + "DUPLICATE": "Šī e-pasta adrese tiek izmantota citai kontaktpersonai.", + "ERROR": "Lūdzu ievadiet derīgu e-pasta adresi." }, "PHONE_NUMBER": { - "PLACEHOLDER": "Enter the phone number of the contact", - "LABEL": "Phone Number", - "HELP": "Phone number should be of E.164 format eg: +1415555555 [+][country code][area code][local phone number]", - "ERROR": "Phone number should be either empty or of E.164 format", - "DUPLICATE": "This phone number is in use for another contact." + "PLACEHOLDER": "Ievadiet kontaktpersonas tālruņa numuru", + "LABEL": "Telefona numurs", + "HELP": "Tālruņa numuram ir jābūt E.164 formātā, piemēram: +37155555555", + "ERROR": "Tālruņa numuram ir jābūt tukšam, vai E.164 formātā", + "DUPLICATE": "Šis tālruņa numurs tiek izmantots citai kontaktpersonai." }, "LOCATION": { - "PLACEHOLDER": "Enter the location of the contact", - "LABEL": "Location" + "PLACEHOLDER": "Ievadiet kontaktpersonas atrašanās vietu", + "LABEL": "Atrašanās vieta" }, "COMPANY_NAME": { - "PLACEHOLDER": "Enter the company name", - "LABEL": "Company Name" + "PLACEHOLDER": "Ievadiet uzņēmuma nosaukumu", + "LABEL": "Uzņēmuma Nosaukums" }, "SOCIAL_PROFILES": { "FACEBOOK": { - "PLACEHOLDER": "Enter the Facebook username", + "PLACEHOLDER": "Ievadiet Facebook lietotājvārdu", "LABEL": "Facebook" }, "TWITTER": { - "PLACEHOLDER": "Enter the Twitter username", + "PLACEHOLDER": "Ievadiet Twitter lietotājvārdu", "LABEL": "Twitter" }, "LINKEDIN": { - "PLACEHOLDER": "Enter the LinkedIn username", + "PLACEHOLDER": "Ievadiet LinkedIn lietotājvārdu", "LABEL": "LinkedIn" }, "GITHUB": { - "PLACEHOLDER": "Enter the Github username", + "PLACEHOLDER": "Ievadiet Github lietotājvārdu", "LABEL": "Github" } } }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", - "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + "SUCCESS_MESSAGE": "Kontaktpersonas avatars ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevarēja izdzēst kontaktpersonas avataru. Lūdzu, vēlāk pamēģiniet vēlreiz." } }, - "SUCCESS_MESSAGE": "Contact saved successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi saglabāta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" }, "NEW_CONVERSATION": { - "BUTTON_LABEL": "Start conversation", - "TITLE": "New conversation", - "DESC": "Start a new conversation by sending a new message.", - "NO_INBOX": "Couldn't find an inbox to initiate a new conversation with this contact.", + "BUTTON_LABEL": "Sākt sarunu", + "TITLE": "Jauna saruna", + "DESC": "Sākt jaunu sarunu, nosūtot jaunu ziņojumu.", + "NO_INBOX": "Nevarēja atrast iesūtni, lai sāktu jaunu sarunu ar šo kontaktpersonu.", "FORM": { "TO": { - "LABEL": "To" + "LABEL": "Kam" }, "INBOX": { - "LABEL": "Inbox", - "ERROR": "Select an inbox" + "LABEL": "Iesūtne", + "ERROR": "Izvēlieties iesūtni" }, "SUBJECT": { - "LABEL": "Subject", - "PLACEHOLDER": "Subject", - "ERROR": "Subject can't be empty" + "LABEL": "Temats", + "PLACEHOLDER": "Temats", + "ERROR": "Temata lauks nedrīkst būt tukšs" }, "MESSAGE": { - "LABEL": "Message", - "PLACEHOLDER": "Write your message here", - "ERROR": "Message can't be empty" + "LABEL": "Ziņojums", + "PLACEHOLDER": "Rakstiet savu ziņojumu šeit", + "ERROR": "Ziņojuma lauks nedrīkst būt tukšs" }, - "SUBMIT": "Send message", - "CANCEL": "Cancel", - "SUCCESS_MESSAGE": "Message sent!", - "GO_TO_CONVERSATION": "View", - "ERROR_MESSAGE": "Couldn't send! try again" + "SUBMIT": "Sūtīt ziņojumu", + "CANCEL": "Atcelt", + "SUCCESS_MESSAGE": "Ziņojums nosūtīts!", + "GO_TO_CONVERSATION": "Skatīt", + "ERROR_MESSAGE": "Nevarēja nosūtīt! mēģiniet vēlreiz" } }, "CONTACTS_PAGE": { - "HEADER": "Contacts", - "FIELDS": "Contact fields", - "SEARCH_BUTTON": "Search", - "SEARCH_INPUT_PLACEHOLDER": "Search for contacts", - "FILTER_CONTACTS": "Filter", - "FILTER_CONTACTS_SAVE": "Save filter", - "FILTER_CONTACTS_DELETE": "Delete filter", + "HEADER": "Kontaktpersonas", + "FIELDS": "Kontaktpersonu lauki", + "SEARCH_BUTTON": "Meklēt", + "SEARCH_INPUT_PLACEHOLDER": "Meklēt kontaktpersonas", + "FILTER_CONTACTS": "Filtrs", + "FILTER_CONTACTS_SAVE": "Saglabāt filtru", + "FILTER_CONTACTS_DELETE": "Dzēst filtru", "LIST": { - "LOADING_MESSAGE": "Loading contacts...", - "404": "No contacts matches your search 🔍", - "NO_CONTACTS": "There are no available contacts", + "LOADING_MESSAGE": "Notiek kontaktpersonu ielāde...", + "404": "Neviena kontaktpersona neatbilst jūsu meklēšanas vaicājumam 🔍", + "NO_CONTACTS": "Nav pieejamu kontaktpersonu", "TABLE_HEADER": { - "NAME": "Name", - "PHONE_NUMBER": "Phone Number", - "CONVERSATIONS": "Conversations", - "LAST_ACTIVITY": "Last Activity", - "COUNTRY": "Country", - "CITY": "City", - "SOCIAL_PROFILES": "Social Profiles", - "COMPANY": "Company", - "EMAIL_ADDRESS": "Email Address" + "NAME": "Vārds", + "PHONE_NUMBER": "Telefona Numurs", + "CONVERSATIONS": "Sarunas", + "LAST_ACTIVITY": "Pēdējās Darbības", + "COUNTRY": "Valsts", + "CITY": "Pilsēta", + "SOCIAL_PROFILES": "Sociālie Profili", + "COMPANY": "Uzņēmums", + "EMAIL_ADDRESS": "e-pasta Adrese" }, - "VIEW_DETAILS": "View details" + "VIEW_DETAILS": "Skatīt detalizētu informāciju" } }, "CONTACT_PROFILE": { - "BACK_BUTTON": "Contacts", - "LOADING": "Loading contact profile..." + "BACK_BUTTON": "Kontaktpersonas", + "LOADING": "Notiek kontaktpersonas profila ielāde..." }, "REMINDER": { "ADD_BUTTON": { - "BUTTON": "Add", - "TITLE": "Shift + Enter to create a task" + "BUTTON": "Pievienot", + "TITLE": "Shift + Enter, lai izveidotu uzdevumu" }, "FOOTER": { - "DUE_DATE": "Due date", - "LABEL_TITLE": "Set type" + "DUE_DATE": "Gala termiņš", + "LABEL_TITLE": "Iestatīt tipu" } }, "NOTES": { - "FETCHING_NOTES": "Fetching notes...", - "NOT_AVAILABLE": "There are no notes created for this contact", + "FETCHING_NOTES": "Notiek piezīmju iegūšana...", + "NOT_AVAILABLE": "Šai kontaktpersonai nav izveidota neviena piezīme", "HEADER": { - "TITLE": "Notes" + "TITLE": "Piezīmes" }, "LIST": { - "LABEL": "added a note" + "LABEL": "pievienoja piezīmi" }, "ADD": { - "BUTTON": "Add", - "PLACEHOLDER": "Add a note", - "TITLE": "Shift + Enter to create a note" + "BUTTON": "Pievienot", + "PLACEHOLDER": "Pievienot piezīmi", + "TITLE": "Shift + Enter, lai izveidotu piezīmi" }, "CONTENT_HEADER": { - "DELETE": "Delete note" + "DELETE": "Dzēst piezīmi" } }, "EVENTS": { "HEADER": { - "TITLE": "Activities" + "TITLE": "Darbības" }, "BUTTON": { - "PILL_BUTTON_NOTES": "notes", - "PILL_BUTTON_EVENTS": "events", - "PILL_BUTTON_CONVO": "conversations" + "PILL_BUTTON_NOTES": "piezīmes", + "PILL_BUTTON_EVENTS": "notikumi", + "PILL_BUTTON_CONVO": "sarunas" } }, "CUSTOM_ATTRIBUTES": { - "ADD_BUTTON_TEXT": "Add attributes", - "BUTTON": "Add custom attribute", - "NOT_AVAILABLE": "There are no custom attributes available for this contact.", - "COPY_SUCCESSFUL": "Copied to clipboard successfully", + "ADD_BUTTON_TEXT": "Pievienot īpašības", + "BUTTON": "Pievienot pielāgotu īpašību", + "NOT_AVAILABLE": "Šai kontaktpersonai nav pieejamas pielāgotas īpašības.", + "COPY_SUCCESSFUL": "Veiksmīgi nokopēts uz clipboard", "ACTIONS": { - "COPY": "Copy attribute", - "DELETE": "Delete attribute", - "EDIT": "Edit attribute" + "COPY": "Kopēt īpašību", + "DELETE": "Dzēst īpašību", + "EDIT": "Rediģēt īpašību" }, "ADD": { - "TITLE": "Create custom attribute", - "DESC": "Add custom information to this contact." + "TITLE": "Izveidot pielāgotu īpašību", + "DESC": "Pievienot šai kontaktpersonai pielāgotu informāciju." }, "FORM": { - "CREATE": "Add attribute", - "CANCEL": "Cancel", + "CREATE": "Pievienot īpašību", + "CANCEL": "Atcelt", "NAME": { - "LABEL": "Custom attribute name", - "PLACEHOLDER": "Eg: shopify id", - "ERROR": "Invalid custom attribute name" + "LABEL": "Pielāgotās īpašības nosaukums", + "PLACEHOLDER": "Piemēram: shopify id", + "ERROR": "Nederīgs pielāgotās īpašības nosaukums" }, "VALUE": { - "LABEL": "Attribute value", - "PLACEHOLDER": "Eg: 11901 " + "LABEL": "Īpašības vērtība", + "PLACEHOLDER": "Piemēram: 11901 " }, "ADD": { - "TITLE": "Create new attribute ", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "TITLE": "Izveidot jaunu īpašību ", + "SUCCESS": "Īpašība ir veiksmīgi pievienota", + "ERROR": "Nevar pievienot īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Īpašība ir veiksmīgi atjaunināta", + "ERROR": "Nevar atjaunināt īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Īpašība ir veiksmīgi izdzēsta", + "ERROR": "Nevar izdzēst īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Pievienot īpašības", + "PLACEHOLDER": "Meklēt īpašības", + "NO_RESULT": "Īpašības nav atrastas" }, "ATTRIBUTE_TYPE": { "LIST": { - "PLACEHOLDER": "Select value", - "SEARCH_INPUT_PLACEHOLDER": "Search value", - "NO_RESULT": "No result found" + "PLACEHOLDER": "Izvēlieties vērtību", + "SEARCH_INPUT_PLACEHOLDER": "Meklēšanas vērtība", + "NO_RESULT": "Nav atrasts" } } }, "VALIDATIONS": { - "REQUIRED": "Valid value is required", - "INVALID_URL": "Invalid URL" + "REQUIRED": "Nepieciešama derīga vērtība", + "INVALID_URL": "Nederīgs URL" } }, "MERGE_CONTACTS": { - "TITLE": "Merge contacts", - "DESCRIPTION": "Merge contacts to combine two profiles into one, including all attributes and conversations. In case of conflict, the Primary contact’ s attributes will take precedence.", + "TITLE": "Apvienot kontaktpersonas", + "DESCRIPTION": "Apvienojiet kontaktpersonas, lai apvienotu divus profilus vienā, tostarp visas īpašības un sarunas. Konfliktu gadījumā primārās kontaktpersonas īpašībām būs prioritāte.", "PRIMARY": { - "TITLE": "Primary contact", - "HELP_LABEL": "To be kept" + "TITLE": "Primārā kontaktpersona", + "HELP_LABEL": "Jāpatur" }, "CHILD": { - "TITLE": "Contact to merge", - "PLACEHOLDER": "Search for a contact", - "HELP_LABEL": "To be deleted" + "TITLE": "Apvienojamā Kontaktpersona", + "PLACEHOLDER": "Meklēt kontaktpersonu", + "HELP_LABEL": "Jādzēš" }, "SUMMARY": { - "TITLE": "Summary", - "DELETE_WARNING": "Contact of %{childContactName} will be deleted.", - "ATTRIBUTE_WARNING": "Contact details of %{childContactName} will be copied to %{primaryContactName}." + "TITLE": "Kopsavilkums", + "DELETE_WARNING": "Kontaktpersona %{childContactName} tiks dzēsta.", + "ATTRIBUTE_WARNING": "Kontaktpersonas %{childContactName} informācija tiks kopēta uz %{primaryContactName}." }, "SEARCH": { - "ERROR": "ERROR_MESSAGE" + "ERROR": "KĻŪDAS_PAZIŅOJUMS" }, "FORM": { - "SUBMIT": " Merge contacts", - "CANCEL": "Cancel", + "SUBMIT": " Apvienot kontaktpersonas", + "CANCEL": "Atcelt", "CHILD_CONTACT": { - "ERROR": "Select a child contact to merge" + "ERROR": "Izvēlieties pakārtoto kontaktpersonu, ko apvienot" }, - "SUCCESS_MESSAGE": "Contact merged successfully", - "ERROR_MESSAGE": "Could not merge contacts, try again!" + "SUCCESS_MESSAGE": "Kontaktpersona ir veiksmīgi apvienota", + "ERROR_MESSAGE": "Nevarēja apvienot kontaktpersonas, mēģiniet vēlreiz!" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/contactFilters.json b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json index 3f84a8476..e86ac2152 100644 --- a/app/javascript/dashboard/i18n/locale/lv/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json @@ -1,50 +1,50 @@ { "CONTACTS_FILTER": { - "TITLE": "Filter Contacts", - "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", - "ADD_NEW_FILTER": "Add Filter", - "CLEAR_ALL_FILTERS": "Clear All Filters", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", - "SUBMIT_BUTTON_LABEL": "Submit", - "CANCEL_BUTTON_LABEL": "Cancel", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter contacts", + "TITLE": "Filtrēt Kontaktpersonas", + "SUBTITLE": "Pievienojiet filtrus un noklikšķiniet uz 'Iesniegt', lai filtrētu kontaktpersonas.", + "ADD_NEW_FILTER": "Pievienot Filtru", + "CLEAR_ALL_FILTERS": "Atcelt Visus Filtrus", + "FILTER_DELETE_ERROR": "Lai saglabātu, Jums ir jābūt vismaz vienam filtram", + "SUBMIT_BUTTON_LABEL": "Iesniegt", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CLEAR_BUTTON_LABEL": "Atcelt Filtrus", + "EMPTY_VALUE_ERROR": "Nepieciešama vērtība", + "TOOLTIP_LABEL": "Filtrēt kontaktpersonas", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "UN", + "OR": "VAI" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_lesser_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Vienāds ar", + "not_equal_to": "Nav vienāds ar", + "contains": "Satur", + "does_not_contain": "Nesatur", + "is_present": "Iekļauj sevī", + "is_not_present": "Neiekļauj sevī", + "is_greater_than": "Ir lielāks par", + "is_lesser_than": "Ir mazāks par", + "days_before": "Ir x dienas pirms" }, "ATTRIBUTES": { - "NAME": "Name", - "EMAIL": "Email", - "PHONE_NUMBER": "Phone number", - "IDENTIFIER": "Identifier", - "CITY": "City", - "COUNTRY": "Country", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", - "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", - "LAST_ACTIVITY": "Last Activity", - "REFERER_LINK": "Referrer link" + "NAME": "Vārds", + "EMAIL": "E-pasts", + "PHONE_NUMBER": "Tālruņa numurs", + "IDENTIFIER": "Identifikators", + "CITY": "Pilsēta", + "COUNTRY": "Valsts", + "CUSTOM_ATTRIBUTE_LIST": "Saraksts", + "CUSTOM_ATTRIBUTE_TEXT": "Teksts", + "CUSTOM_ATTRIBUTE_NUMBER": "Numurs", + "CUSTOM_ATTRIBUTE_LINK": "Saite", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Izvēles rūtiņa", + "CREATED_AT": "Izveidots", + "LAST_ACTIVITY": "Pēdējās Darbības", + "REFERER_LINK": "Atsauces sniedzēja saite" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", - "CUSTOM_ATTRIBUTES": "Custom Attributes" + "STANDARD_FILTERS": "Standarta Filtri", + "ADDITIONAL_FILTERS": "Papildu Filtri", + "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/conversation.json b/app/javascript/dashboard/i18n/locale/lv/conversation.json index 7adac123f..e476cf264 100644 --- a/app/javascript/dashboard/i18n/locale/lv/conversation.json +++ b/app/javascript/dashboard/i18n/locale/lv/conversation.json @@ -1,241 +1,242 @@ { "CONVERSATION": { - "SELECT_A_CONVERSATION": "Please select a conversation from left pane", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", - "DASHBOARD_APP_TAB_MESSAGES": "Messages", - "UNVERIFIED_SESSION": "The identity of this user is not verified", - "NO_MESSAGE_1": "Uh oh! Looks like there are no messages from customers in your inbox.", - "NO_MESSAGE_2": " to send a message to your page!", - "NO_INBOX_1": "Hola! Looks like you haven't added any inboxes yet.", - "NO_INBOX_2": " to get started", - "NO_INBOX_AGENT": "Uh Oh! Looks like you are not part of any inbox. Please contact your administrator", - "SEARCH_MESSAGES": "Search for messages in conversations", + "SELECT_A_CONVERSATION": "Lūdzu, izvēlieties sarunu kreisajā rūtī", + "CSAT_REPLY_MESSAGE": "Lūdzu, novērtējiet sarunu", + "404": "Atvainojiet, mēs nevaram atrast sarunu. Lūdzu mēģiniet vēlreiz", + "SWITCH_VIEW_LAYOUT": "Pārslēgt izkārtojumu", + "DASHBOARD_APP_TAB_MESSAGES": "Ziņojumi", + "UNVERIFIED_SESSION": "Šā lietotāja identitāte nav pārbaudīta", + "NO_MESSAGE_1": "Ak, vai! Izskatās, ka Jūsu iesūtnē nav ziņojumu no klientiem.", + "NO_MESSAGE_2": " lai nosūtītu ziņojumu uz savu lapu!", + "NO_INBOX_1": "Hola! Izskatās, ka jūs vēl neesat pievienojis nevienu iesūtni.", + "NO_INBOX_2": " lai sāktu", + "NO_INBOX_AGENT": "Ak, vai! Izskatās, ka Jūs neesat nevienas iesūtnes dalībnieks. Lūdzu, sazinieties ar savu administratoru", + "SEARCH_MESSAGES": "Meklēt ziņojumus sarunās", "SEARCH": { - "TITLE": "Search messages", - "RESULT_TITLE": "Search Results", - "LOADING_MESSAGE": "Crunching data...", - "PLACEHOLDER": "Type any text to search messages", - "NO_MATCHING_RESULTS": "No results found." + "TITLE": "Meklēt ziņojumus", + "RESULT_TITLE": "Meklēšanas Rezultāti", + "LOADING_MESSAGE": "Tiek apkopoti dati...", + "PLACEHOLDER": "Ievadiet jebkuru tekstu, lai meklētu ziņojumus", + "NO_MATCHING_RESULTS": "Nav atrasts." }, - "UNREAD_MESSAGES": "Unread Messages", - "UNREAD_MESSAGE": "Unread Message", - "CLICK_HERE": "Click here", - "LOADING_INBOXES": "Loading inboxes", - "LOADING_CONVERSATIONS": "Loading Conversations", - "CANNOT_REPLY": "You cannot reply due to", - "24_HOURS_WINDOW": "24 hour message window restriction", - "NOT_ASSIGNED_TO_YOU": "This conversation is not assigned to you. Would you like to assign this conversation to yourself?", - "ASSIGN_TO_ME": "Assign to me", - "TWILIO_WHATSAPP_CAN_REPLY": "You can only reply to this conversation using a template message due to", - "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 hour message window restriction", - "SELECT_A_TWEET_TO_REPLY": "Please select a tweet to reply to.", - "REPLYING_TO": "You are replying to:", - "REMOVE_SELECTION": "Remove Selection", - "DOWNLOAD": "Download", - "UNKNOWN_FILE_TYPE": "Unknown File", - "UPLOADING_ATTACHMENTS": "Uploading attachments...", - "SUCCESS_DELETE_MESSAGE": "Message deleted successfully", - "FAIL_DELETE_MESSSAGE": "Couldn't delete message! Try again", - "NO_RESPONSE": "No response", - "RATING_TITLE": "Rating", - "FEEDBACK_TITLE": "Feedback", + "UNREAD_MESSAGES": "Nelasītie ziņojumi", + "UNREAD_MESSAGE": "Nelasīts ziņojums", + "CLICK_HERE": "Noklikšķiniet šeit", + "LOADING_INBOXES": "Notiek iesūtņu ielāde", + "LOADING_CONVERSATIONS": "Notiek sarunu ielāde", + "CANNOT_REPLY": "Jūs nevarat atbildēt, jo", + "24_HOURS_WINDOW": "24 stundu ziņojuma loga ierobežojums", + "NOT_ASSIGNED_TO_YOU": "Šī saruna nav Jums piešķirta. Vai vēlaties piešķirt šo sarunu sev?", + "ASSIGN_TO_ME": "Piešķirt sev", + "TWILIO_WHATSAPP_CAN_REPLY": "Jūs varat atbildēt uz šo sarunu, tikai izmantojot veidnes ziņojumu, jo", + "TWILIO_WHATSAPP_24_HOURS_WINDOW": "24 stundu ziņojuma loga ierobežojums", + "SELECT_A_TWEET_TO_REPLY": "Lūdzu, izvēlieties tvītu, uz kuru atbildēt.", + "REPLYING_TO": "Jūs atbildat uz:", + "REMOVE_SELECTION": "Noņemt Izvēli", + "DOWNLOAD": "Lejupielādēt", + "UNKNOWN_FILE_TYPE": "Nezināms Fails", + "UPLOADING_ATTACHMENTS": "Notiek pielikumu augšupielāde...", + "SUCCESS_DELETE_MESSAGE": "Ziņojums veiksmīgi izdzēsts", + "FAIL_DELETE_MESSSAGE": "Nevarēja izdzēst ziņojumu! Mēģiniet vēlreiz", + "NO_RESPONSE": "Nav atbildes", + "RATING_TITLE": "Vērtējums", + "FEEDBACK_TITLE": "Atsauksmes", "HEADER": { - "RESOLVE_ACTION": "Resolve", - "REOPEN_ACTION": "Reopen", - "OPEN_ACTION": "Open", - "OPEN": "More", - "CLOSE": "Close", - "DETAILS": "details", - "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", - "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", - "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply" + "RESOLVE_ACTION": "Atrisināt", + "REOPEN_ACTION": "Atkārtoti atvērt", + "OPEN_ACTION": "Atvērt", + "OPEN": "Papildu", + "CLOSE": "Aizvērt", + "DETAILS": "detalizēta informācija", + "SNOOZED_UNTIL_TOMORROW": "Atlikts līdz rītdienai", + "SNOOZED_UNTIL_NEXT_WEEK": "Atlikts līdz nākamajai nedēļai", + "SNOOZED_UNTIL_NEXT_REPLY": "Atlikts līdz nākamajai atbildei" }, "RESOLVE_DROPDOWN": { - "MARK_PENDING": "Mark as pending", + "MARK_PENDING": "Atzīmēt kā neapstiprinātu", "SNOOZE": { - "TITLE": "Snooze until", - "NEXT_REPLY": "Next reply", - "TOMORROW": "Tomorrow", - "NEXT_WEEK": "Next week" + "TITLE": "Atlikt līdz", + "NEXT_REPLY": "Nākamā atbilde", + "TOMORROW": "Rītdiena", + "NEXT_WEEK": "Nākamā nedēļa" } }, "CARD_CONTEXT_MENU": { - "PENDING": "Mark as pending", - "RESOLVED": "Mark as resolved", - "REOPEN": "Reopen conversation", + "PENDING": "Atzīmēt kā neapstiprinātu", + "RESOLVED": "Atzīmēt kā atrisinātu", + "REOPEN": "Atkārtoti atvērt sarunu", "SNOOZE": { - "TITLE": "Snooze", - "NEXT_REPLY": "Until next reply", - "TOMORROW": "Until tomorrow", - "NEXT_WEEK": "Until next week" + "TITLE": "Atlikt", + "NEXT_REPLY": "Līdz nākamajai atbildei", + "TOMORROW": "Līdz rītdienai", + "NEXT_WEEK": "Līdz nākamajai nedēļai" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Piešķirt aģentu", + "ASSIGN_LABEL": "Piešķirt etiķeti", + "AGENTS_LOADING": "Notiek aģentu ielāde...", + "ASSIGN_TEAM": "Piešķirt komandu", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "Sarunas ID %{conversationId} piešķirts \"%{agentName}\"", + "FAILED": "Nevarēja piešķirt aģentu. Lūdzu, mēģiniet vēlreiz." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Sarunai ar ID %{conversationId} tika piešķirta etiķete #%{labelName}", + "FAILED": "Nevarēja piešķirt etiķeti. Lūdzu, mēģiniet vēlreiz." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Sarunai ar ID %{conversationId} tika piešķirta komanda \"%{team}\"", + "FAILED": "Nevarēja piešķirt komandu. Lūdzu, mēģiniet vēlreiz." } } }, "FOOTER": { - "MESSAGE_SIGN_TOOLTIP": "Message signature", - "ENABLE_SIGN_TOOLTIP": "Enable signature", - "DISABLE_SIGN_TOOLTIP": "Disable signature", - "MSG_INPUT": "Shift + enter for new line. Start with '/' to select a Canned Response.", - "PRIVATE_MSG_INPUT": "Shift + enter for new line. This will be visible only to Agents", - "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", - "CLICK_HERE": "Click here to update" + "MESSAGE_SIGN_TOOLTIP": "Ziņojuma paraksts", + "ENABLE_SIGN_TOOLTIP": "Iespējot parakstu", + "DISABLE_SIGN_TOOLTIP": "Atspējot parakstu", + "MSG_INPUT": "Shift + Enter, lai pārietu uz jaunu rindu. Sāciet ar '/' lai izvēlētos sagatavotu atbildi.", + "PRIVATE_MSG_INPUT": "Shift + Enter, lai pārietu uz jaunu rindu. Ziņojums būs redzams tikai Aģentiem", + "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Ziņojuma paraksts nav nokonfigurēts. Lūdzu, nokonfigurējiet to profila iestatījumos.", + "CLICK_HERE": "Noklikšķiniet šeit, lai atjauninātu" }, "REPLYBOX": { - "REPLY": "Reply", - "PRIVATE_NOTE": "Private Note", - "SEND": "Send", - "CREATE": "Add Note", - "TWEET": "Tweet", - "TIP_FORMAT_ICON": "Show rich text editor", - "TIP_EMOJI_ICON": "Show emoji selector", - "TIP_ATTACH_ICON": "Attach files", - "TIP_AUDIORECORDER_ICON": "Record audio", - "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", - "TIP_AUDIORECORDER_ERROR": "Could not open the audio", - "ENTER_TO_SEND": "Enter to send", - "DRAG_DROP": "Drag and drop here to attach", - "START_AUDIO_RECORDING": "Start audio recording", - "STOP_AUDIO_RECORDING": "Stop audio recording", + "REPLY": "Atbildēt", + "PRIVATE_NOTE": "Privāta Piezīme", + "SEND": "Nosūtīt", + "CREATE": "Pievienot Piezīmi", + "TWEET": "Tvīts", + "TIP_FORMAT_ICON": "Rādīt bagātinātā teksta redaktoru", + "TIP_EMOJI_ICON": "Rādīt emocijzīmju atlasītāju", + "TIP_ATTACH_ICON": "Pievienot failus", + "TIP_AUDIORECORDER_ICON": "Ierakstīt audio", + "TIP_AUDIORECORDER_PERMISSION": "Atļaut piekļuvi pie audio", + "TIP_AUDIORECORDER_ERROR": "Nevarēja atvērt audio", + "ENTER_TO_SEND": "Enter, lai nosūtītu", + "DRAG_DROP": "Velciet un nometiet šeit, lai pievienotu", + "START_AUDIO_RECORDING": "Sākt audio ierakstīšanu", + "STOP_AUDIO_RECORDING": "Apturēt audio ierakstīšanu", "": "", "EMAIL_HEAD": { - "ADD_BCC": "Add bcc", + "ADD_BCC": "Pievienot bcc", "CC": { "LABEL": "CC", - "PLACEHOLDER": "Emails separated by commas", - "ERROR": "Please enter valid email addresses" + "PLACEHOLDER": "E-pasta adreses, atdalītas ar komatiem", + "ERROR": "Lūdzu, ievadiet derīgas e-pasta adreses" }, "BCC": { "LABEL": "BCC", - "PLACEHOLDER": "Emails separated by commas", - "ERROR": "Please enter valid email addresses" + "PLACEHOLDER": "E-pasta adreses, atdalītas ar komatiem", + "ERROR": "Lūdzu, ievadiet derīgas e-pasta adreses" } } }, - "VISIBLE_TO_AGENTS": "Private Note: Only visible to you and your team", - "CHANGE_STATUS": "Conversation status changed", - "CHANGE_STATUS_FAILED": "Conversation status change failed", - "CHANGE_AGENT": "Conversation Assignee changed", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", - "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", - "MESSAGE_ERROR": "Unable to send this message, please try again later", - "SENT_BY": "Sent by:", + "VISIBLE_TO_AGENTS": "Privāta Piezīme: Redzama tikai Jums un Jūsu komandai", + "CHANGE_STATUS": "Sarunas statuss ir mainīts", + "CHANGE_STATUS_FAILED": "Sarunas statusa maiņa neizdevās", + "CHANGE_AGENT": "Mainīts sarunas Pilnvarotais", + "CHANGE_AGENT_FAILED": "Pilnvarotā maiņa neizdevās", + "ASSIGN_LABEL_SUCCESFUL": "Etiķete ir veiksmīgi piešķirta", + "ASSIGN_LABEL_FAILED": "Etiķetes piešķiršana neizdevās", + "CHANGE_TEAM": "Sarunu komanda mainīta", + "FILE_SIZE_LIMIT": "Fails pārsniedz {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB pielikuma ierobežojumu", + "MESSAGE_ERROR": "Nevar nosūtīt šo ziņojumu. Lūdzu, vēlāk mēģiniet vēlreiz", + "SENT_BY": "Sūtīja:", "BOT": "Bot", - "SEND_FAILED": "Couldn't send message! Try again", - "TRY_AGAIN": "retry", + "SEND_FAILED": "Nevarēja nosūtīt ziņojumu! Mēģiniet vēlreiz", + "TRY_AGAIN": "mēģināt vēlreiz", "ASSIGNMENT": { - "SELECT_AGENT": "Select Agent", - "REMOVE": "Remove", - "ASSIGN": "Assign" + "SELECT_AGENT": "Izvēlieties Aģentu", + "REMOVE": "Noņemt", + "ASSIGN": "Piešķirt" }, "CONTEXT_MENU": { - "COPY": "Copy", - "DELETE": "Delete" + "COPY": "Kopēt", + "DELETE": "Dzēst" } }, "EMAIL_TRANSCRIPT": { - "TITLE": "Send conversation transcript", - "DESC": "Send a copy of the conversation transcript to the specified email address", - "SUBMIT": "Submit", - "CANCEL": "Cancel", - "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", - "SEND_EMAIL_ERROR": "There was an error, please try again", + "TITLE": "Nosūtīt sarunas transkriptu", + "DESC": "Nosūtīt sarunas transkripta kopiju uz norādīto e-pasta adresi", + "SUBMIT": "Iesniegt", + "CANCEL": "Atcelt", + "SEND_EMAIL_SUCCESS": "Sarunas transkripts tika veiksmīgi nosūtīts", + "SEND_EMAIL_ERROR": "Radās kļūda. Lūdzu, mēģiniet vēlreiz", "FORM": { - "SEND_TO_CONTACT": "Send the transcript to the customer", - "SEND_TO_AGENT": "Send the transcript to the assigned agent", - "SEND_TO_OTHER_EMAIL_ADDRESS": "Send the transcript to another email address", + "SEND_TO_CONTACT": "Nosūtīt transkriptu klientam", + "SEND_TO_AGENT": "Nosūtīt transkriptu piešķirtajam aģentam", + "SEND_TO_OTHER_EMAIL_ADDRESS": "Nosūtīt transkriptu uz citu e-pasta adresi", "EMAIL": { - "PLACEHOLDER": "Enter an email address", - "ERROR": "Please enter a valid email address" + "PLACEHOLDER": "Ievadiet e-pasta adresi", + "ERROR": "Lūdzu ievadiet derīgu e-pasta adresi" } } }, "ONBOARDING": { - "TITLE": "Hey 👋, Welcome to %{installationName}!", - "DESCRIPTION": "Thanks for signing up. We want you to get the most out of %{installationName}. Here are a few things you can do in %{installationName} to make the experience delightful.", - "READ_LATEST_UPDATES": "Read our latest updates", + "TITLE": "Sveicināti 👋, Laipni lūdzam %{installationName}!", + "DESCRIPTION": "Paldies, ka reģistrējāties. Mēs vēlamies, lai Jūs gūtu maksimālu labumu no %{installationName}. Šeit ir dažas lietas, ko varat darīt %{installationName} lai Jūsu pieredze būtu patīkamāka.", + "READ_LATEST_UPDATES": "Izlasīt mūsu aktuālākos jaunumus", "ALL_CONVERSATION": { - "TITLE": "All your conversations in one place", - "DESCRIPTION": "View all the conversations from your customers in one single dashboard. You can filter the conversations by the incoming channel, label and status." + "TITLE": "Visas Jūsu sarunas vienuviet", + "DESCRIPTION": "Skatīt visas sarunas ar klientiem vienā informācijas panelī. Jūs varat filtrēt sarunas pēc ienākošā kanāla, etiķetes un statusa." }, "TEAM_MEMBERS": { - "TITLE": "Invite your team members", - "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", - "NEW_LINK": "Click here to invite a team member" + "TITLE": "Uzaicināt savas komandas biedrus", + "DESCRIPTION": "Tā kā Jūs gatavojaties runāt ar savu klientu, piesaistiet savus komandas biedrus, lai viņi Jums palīdzētu. Jūs varat uzaicināt savus komandas biedrus, pievienojot viņu e-pasta adreses aģentu sarakstam.", + "NEW_LINK": "Noklikšķiniet šeit, lai uzaicinātu komandas biedru" }, "INBOXES": { - "TITLE": "Connect Inboxes", - "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.", - "NEW_LINK": "Click here to create an inbox" + "TITLE": "Pievienot Iesūtnes", + "DESCRIPTION": "Pievienot dažādus kanālus, caur kuriem Jūsu klienti ar Jums runās. Tie var būt tīmekļa vietņu tiešraides tērzētavas, Jūsu Facebook vai Twitter lapa, vai pat jūsu WhatsApp numurs.", + "NEW_LINK": "Noklikšķiniet šeit, lai izveidotu iesūtni" }, "LABELS": { - "TITLE": "Organize conversations with labels", - "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", - "NEW_LINK": "Click here to create tags" + "TITLE": "Organizēt sarunas ar etiķetēm", + "DESCRIPTION": "Etiķetes nodrošina vienkāršāku veidu, kā klasificēt sarunu. Izveidojiet dažas etiķetes, piemēram, #atbalsta-pieprasījums, #norēķinu-jautājums utt., lai vēlāk varētu tās izmantot sarunas laikā.", + "NEW_LINK": "Noklikšķiniet šeit, lai izveidotu atzīmes" } }, "CONVERSATION_SIDEBAR": { - "ASSIGNEE_LABEL": "Assigned Agent", - "SELF_ASSIGN": "Assign to me", - "TEAM_LABEL": "Assigned Team", + "ASSIGNEE_LABEL": "Piešķirts Aģentam", + "SELF_ASSIGN": "Piešķirts man", + "TEAM_LABEL": "Piešķirtā Komanda", "SELECT": { - "PLACEHOLDER": "None" + "PLACEHOLDER": "Nav" }, "ACCORDION": { - "CONTACT_DETAILS": "Contact Details", - "CONVERSATION_ACTIONS": "Conversation Actions", - "CONVERSATION_LABELS": "Conversation Labels", - "CONVERSATION_INFO": "Conversation Information", - "CONTACT_ATTRIBUTES": "Contact Attributes", - "PREVIOUS_CONVERSATION": "Previous Conversations" + "CONTACT_DETAILS": "Kontaktpersonas Informācija", + "CONVERSATION_ACTIONS": "Sarunas Darbības", + "CONVERSATION_LABELS": "Sarunu Etiķetes", + "CONVERSATION_INFO": "Sarunas Informācija", + "CONTACT_ATTRIBUTES": "Kontaktpersonas Īpašības", + "PREVIOUS_CONVERSATION": "Iepriekšējās Sarunas" } }, "CONVERSATION_CUSTOM_ATTRIBUTES": { - "ADD_BUTTON_TEXT": "Create attribute", + "ADD_BUTTON_TEXT": "Izveidot Īpašību", "UPDATE": { - "SUCCESS": "Attribute updated successfully", - "ERROR": "Unable to update attribute. Please try again later" + "SUCCESS": "Īpašība ir veiksmīgi atjaunināta", + "ERROR": "Nevar atjaunināt īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "ADD": { - "TITLE": "Add", - "SUCCESS": "Attribute added successfully", - "ERROR": "Unable to add attribute. Please try again later" + "TITLE": "Pievienot", + "SUCCESS": "Īpašība ir veiksmīgi pievienota", + "ERROR": "Nevar pievienot īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "DELETE": { - "SUCCESS": "Attribute deleted successfully", - "ERROR": "Unable to delete attribute. Please try again later" + "SUCCESS": "Īpašība ir veiksmīgi izdzēsta", + "ERROR": "Nevar izdzēst īpašību. Lūdzu, pamēģiniet vēlāk vēlreiz" }, "ATTRIBUTE_SELECT": { - "TITLE": "Add attributes", - "PLACEHOLDER": "Search attributes", - "NO_RESULT": "No attributes found" + "TITLE": "Pievienot īpašības", + "PLACEHOLDER": "Meklēt īpašības", + "NO_RESULT": "Īpašības nav atrastas" } }, "EMAIL_HEADER": { - "FROM": "From", - "TO": "To", + "FROM": "No", + "TO": "Kam", "BCC": "Bcc", "CC": "Cc", - "SUBJECT": "Subject" + "SUBJECT": "Tēma" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json b/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json index d7d2efc2a..eeb408e6a 100644 --- a/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/csatMgmt.json @@ -1,6 +1,6 @@ { "CSAT": { - "TITLE": "Rate your conversation", - "PLACEHOLDER": "Tell us more..." + "TITLE": "Novērtējiet Jūsu sarunu", + "PLACEHOLDER": "Pastāsti mums vairāk..." } } diff --git a/app/javascript/dashboard/i18n/locale/lv/generalSettings.json b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json index 5a0c4f7d7..f2a3c3b6f 100644 --- a/app/javascript/dashboard/i18n/locale/lv/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json @@ -1,140 +1,140 @@ { "GENERAL_SETTINGS": { - "TITLE": "Account settings", - "SUBMIT": "Update settings", - "BACK": "Back", + "TITLE": "Konta iestatījumi", + "SUBMIT": "Atjaunināt iestatījumus", + "BACK": "Atpakaļ", "UPDATE": { - "ERROR": "Could not update settings, try again!", - "SUCCESS": "Successfully updated account settings" + "ERROR": "Nevarēja atjaunināt iestatījumus, mēģiniet vēlreiz!", + "SUCCESS": "Konta iestatījumi ir veiksmīgi atjaunināti" }, "FORM": { - "ERROR": "Please fix form errors", + "ERROR": "Lūdzu, izlabojiet veidlapas kļūdas", "GENERAL_SECTION": { - "TITLE": "General settings", + "TITLE": "Vispārīgie iestatījumi", "NOTE": "" }, "ACCOUNT_ID": { - "TITLE": "Account ID", - "NOTE": "This ID is required if you are building an API based integration" + "TITLE": "Konta ID", + "NOTE": "Šis ID ir nepieciešams, ja veidojat uz API balstītu integrāciju" }, "NAME": { - "LABEL": "Account name", - "PLACEHOLDER": "Your account name", - "ERROR": "Please enter a valid account name" + "LABEL": "Konta nosaukums", + "PLACEHOLDER": "Jūsu konta nosaukums", + "ERROR": "Lūdzu, ievadiet derīgu konta nosaukumu" }, "LANGUAGE": { - "LABEL": "Site language (Beta)", - "PLACEHOLDER": "Your account name", + "LABEL": "Vietnes valoda (Beta)", + "PLACEHOLDER": "Jūsu konta nosaukums", "ERROR": "" }, "DOMAIN": { - "LABEL": "Incoming Email Domain", - "PLACEHOLDER": "The domain where you will receive the emails", + "LABEL": "Ienākošā e-pasta domēns", + "PLACEHOLDER": "Domēns, kurā saņemsiet e-pastus", "ERROR": "" }, "SUPPORT_EMAIL": { - "LABEL": "Support Email", - "PLACEHOLDER": "Your company's support email", + "LABEL": "Atbalsta e-pasts", + "PLACEHOLDER": "Jūsu uzņēmuma atbalsta e-pasts", "ERROR": "" }, "AUTO_RESOLVE_DURATION": { - "LABEL": "Number of days after a ticket should auto resolve if there is no activity", + "LABEL": "Dienu skaits pēc kā biļetei ir automātiski jāatrisinās, ja nenotiek nekādas darbības", "PLACEHOLDER": "30", - "ERROR": "Please enter a valid auto resolve duration (minimum 1 day and maximum 999 days)" + "ERROR": "Lūdzu, ievadiet derīgu automātiskās atrisināšanas ilgumu (vismaz 1 diena un ne vairāk kā 999 dienas)" }, "FEATURES": { - "INBOUND_EMAIL_ENABLED": "Conversation continuity with emails is enabled for your account.", - "CUSTOM_EMAIL_DOMAIN_ENABLED": "You can receive emails in your custom domain now." + "INBOUND_EMAIL_ENABLED": "Jūsu kontam ir iespējota sarunu nepārtrauktība ar e-pastiem.", + "CUSTOM_EMAIL_DOMAIN_ENABLED": "Tagad Jūs varat saņemt e-pasta ziņojumus savā pielāgotajā domēnā." } }, - "UPDATE_CHATWOOT": "An update %{latestChatwootVersion} for Chatwoot is available. Please update your instance.", - "LEARN_MORE": "Learn more" + "UPDATE_CHATWOOT": "Ir pieejams Chatwoot %{latestChatwootVersion} jauninājums. Lūdzu, atjauniniet savu programmatūru.", + "LEARN_MORE": "Uzzināt vairāk" }, "FORMS": { "MULTISELECT": { - "ENTER_TO_SELECT": "Press enter to select", - "ENTER_TO_REMOVE": "Press enter to remove", - "SELECT_ONE": "Select one" + "ENTER_TO_SELECT": "Nospiediet enter, lai izvēlētos", + "ENTER_TO_REMOVE": "Nospiediet enter, lai noņemtu", + "SELECT_ONE": "Izvēlieties vienu" } }, "NOTIFICATIONS_PAGE": { - "HEADER": "Notifications", - "MARK_ALL_DONE": "Mark All Done", - "DELETE_TITLE": "deleted", + "HEADER": "Paziņojumi", + "MARK_ALL_DONE": "Atzīmēt visu kā pabeigtu", + "DELETE_TITLE": "dzēsts", "UNREAD_NOTIFICATION": { - "TITLE": "Unread Notifications", - "ALL_NOTIFICATIONS": "View all notifications", - "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", - "EMPTY_MESSAGE": "You have no unread notifications" + "TITLE": "Nelasīti paziņojumi", + "ALL_NOTIFICATIONS": "Skatīt visus paziņojumus", + "LOADING_UNREAD_MESSAGE": "Notiek nelasītu paziņojumu ielāde...", + "EMPTY_MESSAGE": "Jums nav nelasītu paziņojumu" }, "LIST": { - "LOADING_MESSAGE": "Loading notifications...", - "404": "No Notifications", + "LOADING_MESSAGE": "Notiek paziņojumu ielāde...", + "404": "Nav paziņojumu", "TABLE_HEADER": [ - "Name", - "Phone Number", - "Conversations", - "Last Contacted" + "Vārds", + "Telefona numurs", + "Sarunas", + "Pēdējā Sazināšanās" ] }, "TYPE_LABEL": { - "conversation_creation": "New conversation", - "conversation_assignment": "Conversation Assigned", - "assigned_conversation_new_message": "New Message", - "conversation_mention": "Mention" + "conversation_creation": "Jauna saruna", + "conversation_assignment": "Saruna Piešķirta", + "assigned_conversation_new_message": "Jauns ziņojums", + "conversation_mention": "Pieminēt" } }, "NETWORK": { "NOTIFICATION": { - "TEXT": "Disconnected from Chatwoot" + "TEXT": "Atvienots no Chatwoot" }, "BUTTON": { - "REFRESH": "Refresh" + "REFRESH": "Atjaunot" } }, "COMMAND_BAR": { - "SEARCH_PLACEHOLDER": "Search or jump to", + "SEARCH_PLACEHOLDER": "Meklēt vai pāriet uz", "SECTIONS": { - "GENERAL": "General", - "REPORTS": "Reports", - "CONVERSATION": "Conversation", - "CHANGE_ASSIGNEE": "Change Assignee", - "CHANGE_TEAM": "Change Team", - "ADD_LABEL": "Add label to the conversation", - "REMOVE_LABEL": "Remove label from the conversation", - "SETTINGS": "Settings" + "GENERAL": "Vispārēji", + "REPORTS": "Pārskati", + "CONVERSATION": "Saruna", + "CHANGE_ASSIGNEE": "Mainīt Pilnvaroto", + "CHANGE_TEAM": "Mainīt Komandu", + "ADD_LABEL": "Pievienot sarunai etiķeti", + "REMOVE_LABEL": "Noņemt etiķeti no sarunas", + "SETTINGS": "Iestatījumi" }, "COMMANDS": { - "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", - "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", - "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", - "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", - "GO_TO_AGENT_REPORTS": "Go to Agent Reports", - "GO_TO_LABEL_REPORTS": "Go to Label Reports", - "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", - "GO_TO_TEAM_REPORTS": "Go to Team Reports", - "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", - "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", - "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", - "GO_TO_SETTINGS_LABELS": "Go to Label Settings", - "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", - "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", - "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", - "GO_TO_SETTINGS_PROFILE": "Go to Profile Settings", - "GO_TO_NOTIFICATIONS": "Go to Notifications", - "ADD_LABELS_TO_CONVERSATION": "Add label to the conversation", - "ASSIGN_AN_AGENT": "Assign an agent", - "ASSIGN_A_TEAM": "Assign a team", - "MUTE_CONVERSATION": "Mute conversation", - "UNMUTE_CONVERSATION": "Unmute conversation", - "REMOVE_LABEL_FROM_CONVERSATION": "Remove label from the conversation", - "REOPEN_CONVERSATION": "Reopen conversation", - "RESOLVE_CONVERSATION": "Resolve conversation", - "SEND_TRANSCRIPT": "Send an email transcript", - "SNOOZE_CONVERSATION": "Snooze Conversation", - "UNTIL_NEXT_REPLY": "Until next reply", - "UNTIL_NEXT_WEEK": "Until next week", - "UNTIL_TOMORROW": "Until tomorrow" + "GO_TO_CONVERSATION_DASHBOARD": "Doties uz Sarunu Informācijas Paneli", + "GO_TO_CONTACTS_DASHBOARD": "Doties uz Kontaktpersonu Informācijas Paneli", + "GO_TO_REPORTS_OVERVIEW": "Doties uz Pārskatu Kopsavilkumu", + "GO_TO_CONVERSATION_REPORTS": "Doties uz Sarunu Pārskatiem", + "GO_TO_AGENT_REPORTS": "Doties uz Aģentu Pārskatiem", + "GO_TO_LABEL_REPORTS": "Doties uz Etiķešu Pārskatiem", + "GO_TO_INBOX_REPORTS": "Doties uz Iesūtnes Pārskatiem", + "GO_TO_TEAM_REPORTS": "Doties uz Komandas Pārskatiem", + "GO_TO_SETTINGS_AGENTS": "Doties uz Aģentu Iestatījumiem", + "GO_TO_SETTINGS_TEAMS": "Doties uz Komandas Iestatījumiem", + "GO_TO_SETTINGS_INBOXES": "Doties uz Iesūtnes Iestatījumiem", + "GO_TO_SETTINGS_LABELS": "Doties uz Etiķešu Iestatījumiem", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Doties uz Sagatavoto Atbilžu Iestatījumiem", + "GO_TO_SETTINGS_APPLICATIONS": "Doties uz Lietojumprogrammas Iestatījumiem", + "GO_TO_SETTINGS_ACCOUNT": "Doties uz Konta Iestatījumiem", + "GO_TO_SETTINGS_PROFILE": "Doties uz Profila Iestatījumiem", + "GO_TO_NOTIFICATIONS": "Doties uz Paziņojumiem", + "ADD_LABELS_TO_CONVERSATION": "Pievienot sarunai etiķeti", + "ASSIGN_AN_AGENT": "Piešķirt aģentu", + "ASSIGN_A_TEAM": "Piešķirt komandu", + "MUTE_CONVERSATION": "Izslēgt sarunu", + "UNMUTE_CONVERSATION": "Ieslēgt sarunu", + "REMOVE_LABEL_FROM_CONVERSATION": "Noņemt etiķeti no sarunas", + "REOPEN_CONVERSATION": "Atkārtoti atvērt sarunu", + "RESOLVE_CONVERSATION": "Atrisināt sarunu", + "SEND_TRANSCRIPT": "Nosūtīt uz e-pastu transkriptu", + "SNOOZE_CONVERSATION": "Atlikt Sarunu", + "UNTIL_NEXT_REPLY": "Līdz nākamajai atbildei", + "UNTIL_NEXT_WEEK": "Līdz nākamajai nedēļai", + "UNTIL_TOMORROW": "Līdz rītdienai" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json index d0c7b2411..c877bdb20 100644 --- a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json @@ -1,267 +1,409 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", - "SETTINGS_BUTTON": "Settings", - "NEW_BUTTON": "New Article", + "FILTER": "Filtrēt pēc", + "SORT": "Kārtot pēc", + "SETTINGS_BUTTON": "Iestatījumi", + "NEW_BUTTON": "Jauns Raksts", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Publicēts", + "DRAFT": "Melnraksts", + "ARCHIVED": "Arhivēts" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Visi Raksti", + "MINE": "Mani Raksti", + "DRAFT": "Melnraksti", + "ARCHIVED": "Arhivētie Raksti" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Visi Raksti", + "PUBLISH_BUTTON": "Publicēt", + "MOVE_TO_ARCHIVE_BUTTON": "Pārvietot uz arhivēts", + "PREVIEW": "Priekšskatījums", + "ADD_TRANSLATION": "Pievienojiet tulkojumu", + "OPEN_SIDEBAR": "Atvērt sānjoslu", + "CLOSE_SIDEBAR": "Aizvērt sānjoslu", + "SAVING": "Notiek saglabāšana...", + "SAVED": "Saglabāts" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Raksta iestatījumi", "FORM": { "CATEGORY": { - "LABEL": "Category", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "LABEL": "Kategorija", + "TITLE": "Izvēlieties kategoriju", + "PLACEHOLDER": "Izvēlieties kategoriju", + "NO_RESULT": "Kategorija nav atrasta", + "SEARCH_PLACEHOLDER": "Meklēt kategoriju" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Autors", + "TITLE": "Izvēlieties autoru", + "PLACEHOLDER": "Izvēlieties autoru", + "NO_RESULT": "Autors nav atrasts", + "SEARCH_PLACEHOLDER": "Meklēt autoru" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Meta virsraksts", + "PLACEHOLDER": "Pievienot meta virsrakstu" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Meta apraksts", + "PLACEHOLDER": "Pievienojiet savu meta aprakstu, lai iegūtu labākus meklētājprogrammas optimizācijas rezultātus..." }, "META_TAGS": { - "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "LABEL": "Meta tagi", + "PLACEHOLDER": "Pievienojiet meta tagus, atdalot tos ar komatu..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Arhivēt rakstu", + "DELETE": "Dzēst rakstu" } }, "PORTAL": { - "HEADER": "Portals", - "NEW_BUTTON": "New Portal", - "ACTIVE_BADGE": "active", - "CHOOSE_LOCALE_LABEL": "Choose a locale", - "LOADING_MESSAGE": "Loading portals...", - "ARTICLES_LABEL": "articles", - "NO_PORTALS_MESSAGE": "There are no available portals", - "ADD_NEW_LOCALE": "Add a new locale", + "HEADER": "Portāli", + "DEFAULT": "Noklusēts", + "NEW_BUTTON": "Jauns Portāls", + "ACTIVE_BADGE": "aktīvs", + "CHOOSE_LOCALE_LABEL": "Izvēlieties lokalizāciju", + "LOADING_MESSAGE": "Notiek portālu ielāde...", + "ARTICLES_LABEL": "raksti", + "NO_PORTALS_MESSAGE": "Nav pieejami portāli", + "ADD_NEW_LOCALE": "Pievienot jaunu lokalizāciju", "POPOVER": { - "TITLE": "Portals", - "PORTAL_SETTINGS": "Portal settings", - "SUBTITLE": "You have multiple portals and can have different locales for each portal.", - "CANCEL_BUTTON_LABEL": "Cancel", - "CHOOSE_LOCALE_BUTTON": "Choose Locale" + "TITLE": "Portāli", + "PORTAL_SETTINGS": "Portāla iestatījumi", + "SUBTITLE": "Jums ir vairāki portāli, un katram portālam var būt dažādas lokalizācijas.", + "CANCEL_BUTTON_LABEL": "Atcelt", + "CHOOSE_LOCALE_BUTTON": "Izvēlieties Lokalizāciju" }, "PORTAL_SETTINGS": { "LIST_ITEM": { "HEADER": { - "COUNT_LABEL": "articles", - "ADD": "Add locale", - "VISIT": "Visit site", - "SETTINGS": "Settings" + "COUNT_LABEL": "raksti", + "ADD": "Pievienot lokalizāciju", + "VISIT": "Apmeklēt tīmekļa vietni", + "SETTINGS": "Iestatījumi", + "DELETE": "Dzēst" }, "PORTAL_CONFIG": { - "TITLE": "Portal Configurations", + "TITLE": "Portāla Konfigurācijas", "ITEMS": { - "NAME": "Name", - "DOMAIN": "Custom domain", + "NAME": "Vārds", + "DOMAIN": "Pielāgots domēns", "SLUG": "Slug", - "TITLE": "Portal title", - "THEME": "Theme color", - "SUB_TEXT": "Portal sub text" + "TITLE": "Portāla nosaukums", + "THEME": "Tēmas krāsa", + "SUB_TEXT": "Portāla apakšteksts" } }, "AVAILABLE_LOCALES": { - "TITLE": "Available locales", + "TITLE": "Pieejamās lokalizācijas", "TABLE": { - "NAME": "Locale name", - "CODE": "Locale code", - "ARTICLE_COUNT": "No. of articles", - "CATEGORIES": "No. of categories", - "SWAP": "Swap", - "DELETE": "Delete", - "DEFAULT_LOCALE": "Default" + "NAME": "Lokalizācijas nosaukums", + "CODE": "Lokalizācijas kods", + "ARTICLE_COUNT": "Rakstu skaits", + "CATEGORIES": "Kategoriju skaits", + "SWAP": "Apmainīt", + "DELETE": "Dzēst", + "DEFAULT_LOCALE": "Noklusējums" } } + }, + "DELETE_PORTAL": { + "TITLE": "Dzēst portālu", + "MESSAGE": "Vai tiešām vēlaties dzēst šo portālu", + "YES": "Jā, dzēst portālu", + "NO": "Nē, paturēt portālu", + "API": { + "DELETE_SUCCESS": "Portāls veiksmīgi izdzēsts", + "DELETE_ERROR": "Dzēšot portālu, radās kļūda" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Rediģēt portālu", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Pamatinformācija" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portāla pielāgošana" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Kategorijas" + }, + "LOCALE_SETTINGS": { + "TITLE": "Lokalizācijas" + } + }, + "CATEGORIES": { + "TITLE": "Kategorijas iekš", + "NEW_CATEGORY": "Jauna kategorija", + "TABLE": { + "NAME": "Vārds", + "DESCRIPTION": "Apraksts", + "LOCALE": "Lokalizācija", + "ARTICLE_COUNT": "Rakstu skaits", + "ACTION_BUTTON": { + "EDIT": "Rediģēt kategoriju", + "DELETE": "Dzēst kategoriju" + }, + "EMPTY_TEXT": "Kategorijas nav atrastas" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atjaunināt pamata iestatījumus" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Palīdzības centra informācija", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Pamatinformācija par portālu", + "CREATE_BASIC_SETTING_BUTTON": "Izveidot portāla pamatiestatījumus" }, { - "title": "Help center customization", + "title": "Palīdzības centra pielāgošana", "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "body": "Pielāgot portālu", + "UPDATE_PORTAL_BUTTON": "Atjaunināt portāla iestatījumus" }, { - "title": "Voila! 🎉", + "title": "Gatavs", "route": "portal_finish", - "body": "You're all set!", - "FINISH": "Finish" + "body": "Viss ir gatavs!", + "FINISH": "Pabeigt" } ], "CREATE_FLOW_PAGE": { - "BACK_BUTTON": "Back", + "BACK_BUTTON": "Atpakaļ", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Izveidot Portālu", + "TITLE": "Palīdzības centra informācija", + "CREATE_BASIC_SETTING_BUTTON": "Izveidot portāla pamatiestatījumus" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Portāla pielāgošana", + "TITLE": "Palīdzības centra pielāgošana", + "UPDATE_PORTAL_BUTTON": "Atjaunināt portāla iestatījumus" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Gatavs!", + "MESSAGE": "Tagad Jūs šo izveidoto portālu varat redzēt savā visu portālu lapā.", + "FINISH": "Dodieties uz visu portālu lapu" } }, "LOGO": { - "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "LABEL": "Logotips", + "UPLOAD_BUTTON": "Augšupielādēt logotipu", + "HELP_TEXT": "Šis logotips tiks attēlots portāla galvenē." }, "NAME": { - "LABEL": "Name", - "PLACEHOLDER": "Portal name", - "HELP_TEXT": "The name will be used in the public facing portal internally.", - "ERROR": "Name is required" + "LABEL": "Vārds", + "PLACEHOLDER": "Portāla nosaukums", + "HELP_TEXT": "Nosaukums tiks izmantots publiskajā portālā iekšēji.", + "ERROR": "Nepieciešams nosaukums" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Portal slug for urls", - - "ERROR": "Slug is required" + "PLACEHOLDER": "Portāla slug priekš URL", + "ERROR": "Nepieciešams slug" }, "DOMAIN": { - "LABEL": "Custom Domain", - "PLACEHOLDER": "Portal custom domain", - "HELP_TEXT": "Add only If you want to use a custom domain for your portals.", - "ERROR": "Custom Domain is required" + "LABEL": "Pielāgots domēns", + "PLACEHOLDER": "Portāla pielāgots domēns", + "HELP_TEXT": "Pievienojiet tikai tad Ja vēlaties saviem portāliem izmantot pielāgotu domēnu.", + "ERROR": "Nepieciešams pielāgots domēns" }, "HOME_PAGE_LINK": { - "LABEL": "Home Page Link", - "PLACEHOLDER": "Portal home page link", - "HELP_TEXT": "The link used to return from the portal to the home page.", - "ERROR": "Home Page Link is required" + "LABEL": "Mājaslapas saite", + "PLACEHOLDER": "Portāla mājaslapas saite", + "HELP_TEXT": "Saite, ko izmanto lai atgrieztos no portāla uz mājaslapu.", + "ERROR": "Nepieciešama saite uz mājaslapu" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Portāla tēmas krāsa", + "HELP_TEXT": "Šī krāsa tiks parādīta kā portāla motīva krāsa." }, "PAGE_TITLE": { - "LABEL": "Page Title", - "PLACEHOLDER": "Portal page title", - "HELP_TEXT": "The page title will be used in the public facing portal.", - "ERROR": "Page title is required" + "LABEL": "Lapas Nosaukums", + "PLACEHOLDER": "Portāla lapas nosaukums", + "HELP_TEXT": "Lapas nosaukums tiks izmantots publiskajā portālā.", + "ERROR": "Nepieciešams lapas nosaukums" }, "HEADER_TEXT": { - "LABEL": "Header Text", - "PLACEHOLDER": "Portal header text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", - "ERROR": "Portal header text is required" + "LABEL": "Galvenes Teksts", + "PLACEHOLDER": "Portāla galvenes teksts", + "HELP_TEXT": "Portāla galvenes teksts tiks izmantots publiskajā portālā.", + "ERROR": "Nepieciešams portāla galvenes teksts" }, "API": { - "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_BASIC": "Portāls ir veiksmīgi izveidots.", + "ERROR_MESSAGE_FOR_BASIC": "Nevarēja izveidot portālu. Mēģiniet vēlreiz.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portāls ir veiksmīgi atjaunināts.", + "ERROR_MESSAGE_FOR_UPDATE": "Nevarēja atjaunināt portālu. Mēģiniet vēlreiz." + } + }, + "ADD_LOCALE": { + "TITLE": "Pievienot jaunu lokalizāciju", + "SUB_TITLE": "Tādējādi pieejamo tulkojumu sarakstam tiek pievienota jauna lokalizācija.", + "PORTAL": "Portāls", + "LOCALE": { + "LABEL": "Lokalizācija", + "PLACEHOLDER": "Izvēlieties lokalizāciju", + "ERROR": "Nepieciešama lokalizācija" + }, + "BUTTONS": { + "CREATE": "Izveidot lokalizāciju", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Lokalizācija ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevar pievienot lokalizāciju. Mēģiniet vēlreiz." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Noklusējuma lokalizācija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt noklusējuma lokalizāciju. Mēģiniet vēlreiz." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Lokalizācija veiksmīgi noņemta no portāla", + "ERROR_MESSAGE": "Nevar noņemt lokalizāciju no portāla. Mēģiniet vēlreiz." } } }, "TABLE": { - "LOADING_MESSAGE": "Loading articles...", - "404": "No articles matches your search 🔍", - "NO_ARTICLES": "There are no available articles", + "LOADING_MESSAGE": "Notiek rakstu ielāde...", + "404": "Neviens raksts neatbilst jūsu meklēšanas vaicājumam 🔍", + "NO_ARTICLES": "Raksti nav pieejami", "HEADERS": { - "TITLE": "Title", - "CATEGORY": "Category", - "READ_COUNT": "Read count", - "STATUS": "Status", - "LAST_EDITED": "Last edited" + "TITLE": "Nosaukums", + "CATEGORY": "Kategorija", + "READ_COUNT": "Lasīšanas skaits", + "STATUS": "Statuss", + "LAST_EDITED": "Pēdējo reizi rediģēts" }, "COLUMNS": { - "BY": "by" + "BY": "persona" } }, "EDIT_ARTICLE": { - "LOADING": "Loading article...", - "TITLE_PLACEHOLDER": "Article title goes here", - "CONTENT_PLACEHOLDER": "Write your article here", + "LOADING": "Notiek raksta ielāde...", + "TITLE_PLACEHOLDER": "Šeit ir raksta nosaukums", + "CONTENT_PLACEHOLDER": "Uzrakstiet savu rakstu šeit", "API": { - "ERROR": "Error while saving article" + "ERROR": "Saglabājot rakstu, radās kļūda" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Publicējot rakstu, radās kļūda", + "SUCCESS": "Raksts veiksmīgi publicēts" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Arhivējot rakstu, radās kļūda", + "SUCCESS": "Raksts ir veiksmīgi arhivēts" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst šo rakstu?", + "YES": "Jā, Dzēst", + "NO": "Nē, Paturēt" + } + }, + "API": { + "SUCCESS_MESSAGE": "Raksts ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Dzēšot rakstu, radās kļūda" } }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Lūdzu, pievienojiet raksta virsrakstu un saturu. Tikai tad Jūs varat atjaunināt iestatījumus" }, "SIDEBAR": { "SEARCH": { - "PLACEHOLDER": "Search for articles" + "PLACEHOLDER": "Meklēt rakstus" } }, "CATEGORY": { "ADD": { - "TITLE": "Create a category", - "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", - "PORTAL": "Portal", - "LOCALE": "Locale", + "TITLE": "Izveidot kategoriju", + "SUB_TITLE": "Kategorija tiks izmantota publiskajā portālā, lai klasificētu rakstus.", + "PORTAL": "Portāls", + "LOCALE": "Lokalizācija", "NAME": { - "LABEL": "Name", - "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", - "ERROR": "Name is required" + "LABEL": "Vārds", + "PLACEHOLDER": "Kategorijas nosaukums", + "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", + "ERROR": "Nepieciešams nosaukums" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Category slug for urls", + "PLACEHOLDER": "Kategorijas slug priekš URL", "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", - "ERROR": "Slug is required" + "ERROR": "Nepieciešams slug" }, "DESCRIPTION": { - "LABEL": "Description", - "PLACEHOLDER": "Give a short description about the category.", - "ERROR": "Description is required" + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, sniedziet īsu kategorijas aprakstu.", + "ERROR": "Nepieciešams apraksts" }, "BUTTONS": { - "CREATE": "Create category", - "CANCEL": "Cancel" + "CREATE": "Izveidot kategoriju", + "CANCEL": "Atcelt" }, "API": { - "SUCCESS_MESSAGE": "Category created successfully", - "ERROR_MESSAGE": "Unable to create category" + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izveidota", + "ERROR_MESSAGE": "Nevar izveidot kategoriju" + } + }, + "EDIT": { + "TITLE": "Rediģēt kategoriju", + "SUB_TITLE": "Rediģējot kategoriju, kategorija tiks atjaunināta publiskajā portālā.", + "PORTAL": "Portāls", + "LOCALE": "Lokalizācija", + "NAME": { + "LABEL": "Vārds", + "PLACEHOLDER": "Kategorijas nosaukums", + "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", + "ERROR": "Nepieciešams nosaukums" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Kategorijas slug priekš URL", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Nepieciešams slug" + }, + "DESCRIPTION": { + "LABEL": "Apraksts", + "PLACEHOLDER": "Lūdzu, sniedziet īsu kategorijas aprakstu.", + "ERROR": "Nepieciešams apraksts" + }, + "BUTTONS": { + "CREATE": "Atjaunināt kategoriju", + "CANCEL": "Atcelt" + }, + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar atjaunināt kategoriju" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Kategorija ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevar izdzēst kategoriju" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json index 09a6210da..12f32f6f0 100644 --- a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json @@ -1,662 +1,662 @@ { "INBOX_MGMT": { - "HEADER": "Inboxes", - "SIDEBAR_TXT": "

Inbox

When you connect a website or a facebook Page to Chatwoot, it is called an Inbox. You can have unlimited inboxes in your Chatwoot account.

Click on Add Inbox to connect a website or a Facebook Page.

In the Dashboard, you can see all the conversations from all your inboxes in a single place and respond to them under the `Conversations` tab.

You can also see conversations specific to an inbox by clicking on the inbox name on the left pane of the dashboard.

", + "HEADER": "Iesūtnes", + "SIDEBAR_TXT": "

Inbox

Chatwoot risinājumam pievienoto tīmekļa vietni vai Facebook lapu sauc par Iesūtni. Jūsu Chatwoot kontā var atrasties neierobežots iesūtņu skaits.

Noklikšķiniet uz Pievienot Iesūtni lai pievienotu tīmekļa vietni vai Facebook lapu.

Informācijas panelī Jūs varat apskatīt visas sarunas, no visām savām iesūtnēm, un atbildēt uz tām cilnē `Sarunas`.

Jūs varat arī apskatīt sarunas, kas piesaistītas noteiktai iesūtnei, noklikšķinot uz iesūtnes nosaukuma informācijas paneļa kreisajā rūtī.

", "LIST": { - "404": "There are no inboxes attached to this account." + "404": "Šim kontam nav pievienota neviena Iesūtne." }, "CREATE_FLOW": [ { - "title": "Choose Channel", + "title": "Izvēlieties Kanālu", "route": "settings_inbox_new", - "body": "Choose the provider you want to integrate with Chatwoot." + "body": "Izvēlieties pakalpojumu sniedzēju, kuru vēlaties integrēt ar Chatwoot." }, { - "title": "Create Inbox", + "title": "Izveidot Iesūtni", "route": "settings_inboxes_page_channel", - "body": "Authenticate your account and create an inbox." + "body": "Autentificēt savu kontu un izveidot iesūtni." }, { - "title": "Add Agents", + "title": "Pievienot Aģentus", "route": "settings_inboxes_add_agents", - "body": "Add agents to the created inbox." + "body": "Pievienojiet aģentus izveidotajai iesūtnei." }, { - "title": "Voila!", + "title": "Gatavs!", "route": "settings_inbox_finish", - "body": "You are all set to go!" + "body": "Jūs varat sākt darboties!" } ], "ADD": { "CHANNEL_NAME": { - "LABEL": "Inbox Name", - "PLACEHOLDER": "Enter your inbox name (eg: Acme Inc)", - "ERROR": "Please enter a valid inbox name" + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Ievadiet Jūsu iesūtnes nosaukumu (piemēram: Acme Inc)", + "ERROR": "Lūdzu, ievadiet derīgu iesūtnes nosaukumu" }, "WEBSITE_NAME": { - "LABEL": "Website Name", - "PLACEHOLDER": "Enter your website name (eg: Acme Inc)" + "LABEL": "Tīmekļa Vietnes Nosaukums", + "PLACEHOLDER": "Ievadiet Jūsu tīmekļa vietnes nosaukumu (piemēram: Acme Inc)" }, "FB": { - "HELP": "PS: By signing in, we only get access to your Page's messages. Your private messages can never be accessed by Chatwoot.", - "CHOOSE_PAGE": "Choose Page", - "CHOOSE_PLACEHOLDER": "Select a page from the list", - "INBOX_NAME": "Inbox Name", - "ADD_NAME": "Add a name for your inbox", - "PICK_NAME": "Pick A Name Your Inbox", - "PICK_A_VALUE": "Pick a value" + "HELP": "PS: Pierakstoties mēs iegūstam piekļuvi tikai pie Jūsu lapas ziņojumiem. Chatwoot nekad nevar piekļūt jūsu privātajām ziņām.", + "CHOOSE_PAGE": "Izvēlieties Lapu", + "CHOOSE_PLACEHOLDER": "Izvēlieties lapu no saraksta", + "INBOX_NAME": "Iesūtnes Nosaukums", + "ADD_NAME": "Pievienojiet savas iesūtnes nosaukumu", + "PICK_NAME": "Izvēlieties savai iesūtnei nosaukumu", + "PICK_A_VALUE": "Izvēlieties vērtību" }, "TWITTER": { - "HELP": "To add your Twitter profile as a channel, you need to authenticate your Twitter Profile by clicking on 'Sign in with Twitter' ", - "ERROR_MESSAGE": "There was an error connecting to Twitter, please try again", + "HELP": "Lai pievienotu savu Twitter profilu kā kanālu, Jums ir jāautentificē savs Twitter profils, noklikšķinot uz \"Pierakstīties ar Twitter\"' ", + "ERROR_MESSAGE": "Radās kļūda, veidojot savienojumu ar Twitter. Lūdzu, mēģiniet vēlreiz", "TWEETS": { - "ENABLE": "Create conversations from mentioned Tweets" + "ENABLE": "Izveidot sarunas no minētajiem Tvītiem" } }, "WEBSITE_CHANNEL": { - "TITLE": "Website channel", - "DESC": "Create a channel for your website and start supporting your customers via our website widget.", - "LOADING_MESSAGE": "Creating Website Support Channel", + "TITLE": "Tīmekļa vietnes kanāls", + "DESC": "Izveidot savai tīmekļa vietnei kanālu un sākt atbalstīt savus klientus, izmantojot mūsu tīmekļu vietnes logrīku.", + "LOADING_MESSAGE": "Tiek Veikta Tīmekļa Vietnes Atbalsta Kanāla Izveide", "CHANNEL_AVATAR": { - "LABEL": "Channel Avatar" + "LABEL": "Kanāla Avatārs" }, "CHANNEL_WEBHOOK_URL": { "LABEL": "Webhook URL", - "PLACEHOLDER": "Enter your Webhook URL", - "ERROR": "Please enter a valid URL" + "PLACEHOLDER": "Ievadiet savu Webhook URL", + "ERROR": "Lūdzu, ievadiet derīgu URL" }, "CHANNEL_DOMAIN": { - "LABEL": "Website Domain", - "PLACEHOLDER": "Enter your website domain (eg: acme.com)" + "LABEL": "Tīmekļa Vietnes Domēns", + "PLACEHOLDER": "Ievadiet savas tīmekļa vietnes domēnu (piemēram: acme.com)" }, "CHANNEL_WELCOME_TITLE": { - "LABEL": "Welcome Heading", - "PLACEHOLDER": "Hi there !" + "LABEL": "Laipni lūdzam Virsraksts", + "PLACEHOLDER": "Sveicināti !" }, "CHANNEL_WELCOME_TAGLINE": { - "LABEL": "Welcome Tagline", - "PLACEHOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + "LABEL": "Laipni lūdzam Teksts", + "PLACEHOLDER": "Sazināties ar mums ir vienkārši. Vaicājiet mums jebko, vai dalieties ar savām atsauksmēm." }, "CHANNEL_GREETING_MESSAGE": { - "LABEL": "Channel greeting message", - "PLACEHOLDER": "Acme Inc typically replies in a few hours." + "LABEL": "Kanāla sveiciena paziņojums", + "PLACEHOLDER": "Acme Inc parasti atbild dažu stundu laikā." }, "CHANNEL_GREETING_TOGGLE": { - "LABEL": "Enable channel greeting", - "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "LABEL": "Iespējot kanāla sveicienu", + "HELP_TEXT": "Automātiski nosūtīt sveiciena paziņojumu, kad tiek izveidota jauna saruna.", + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, "REPLY_TIME": { - "TITLE": "Set Reply time", - "IN_A_FEW_MINUTES": "In a few minutes", - "IN_A_FEW_HOURS": "In a few hours", - "IN_A_DAY": "In a day", - "HELP_TEXT": "This reply time will be displayed on the live chat widget" + "TITLE": "Iestatīt Atbildes laiku", + "IN_A_FEW_MINUTES": "Dažās minutēs", + "IN_A_FEW_HOURS": "Dažās stundās", + "IN_A_DAY": "Dienas laikā", + "HELP_TEXT": "Šis atbildes laiks tiks parādīts tiešsaistes tērzēšanas logrīkā" }, "WIDGET_COLOR": { - "LABEL": "Widget Color", - "PLACEHOLDER": "Update the widget color used in widget" + "LABEL": "Logrīka Krāsa", + "PLACEHOLDER": "Atjaunināt logrīkā izmantoto logrīka krāsu" }, - "SUBMIT_BUTTON": "Create inbox", + "SUBMIT_BUTTON": "Izveidot iesūtni", "API": { - "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + "ERROR_MESSAGE": "Mēs nevarējām izveidot tīmekļa vietnes kanālu. Lūdzu, mēģiniet vēlreiz" } }, "TWILIO": { - "TITLE": "Twilio SMS/WhatsApp Channel", - "DESC": "Integrate Twilio and start supporting your customers via SMS or WhatsApp.", + "TITLE": "Twilio SMS/WhatsApp Kanāls", + "DESC": "Integrēt Twilio un sākt atbalstīt savus klientus, izmantojot SMS vai WhatsApp.", "ACCOUNT_SID": { - "LABEL": "Account SID", - "PLACEHOLDER": "Please enter your Twilio Account SID", - "ERROR": "This field is required" + "LABEL": "Konta SID", + "PLACEHOLDER": "Lūdzu, ievadiet sava Twilio konta SID", + "ERROR": "Šis lauks ir nepieciešams" }, "MESSAGING_SERVICE_SID": { - "LABEL": "Messaging Service SID", - "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", - "ERROR": "This field is required", - "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + "LABEL": "Ziņapmaiņas Pakalpojuma SID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Twilio ziņojumapmaiņas pakalpojuma SID", + "ERROR": "Šis lauks ir nepieciešams", + "USE_MESSAGING_SERVICE": "Izmantot Twilio Ziņojumapmaiņas Pakalpojumu" }, "CHANNEL_TYPE": { - "LABEL": "Channel Type", - "ERROR": "Please select your Channel Type" + "LABEL": "Kanāla Tips", + "ERROR": "Lūdzu, izvēlieties sava Kanāla Tipu" }, "AUTH_TOKEN": { "LABEL": "Auth Token", - "PLACEHOLDER": "Please enter your Twilio Auth Token", - "ERROR": "This field is required" + "PLACEHOLDER": "Lūdzu, ievadiet savu Twilio Auth Token", + "ERROR": "Šis lauks ir nepieciešams" }, "CHANNEL_NAME": { - "LABEL": "Inbox Name", - "PLACEHOLDER": "Please enter a inbox name", - "ERROR": "This field is required" + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "PHONE_NUMBER": { - "LABEL": "Phone number", - "PLACEHOLDER": "Please enter the phone number from which message will be sent.", - "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + "LABEL": "Tālruņa numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību. Tālruņa numuram ir jāsākas ar `+` zīmi." }, "API_CALLBACK": { - "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the message callback URL in Twilio with the URL mentioned here." + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums ir jānokonfigurē Twilio pakalpojumā ziņojumu atzvanīšanas URL, izmantojot šeit minēto URL." }, - "SUBMIT_BUTTON": "Create Twilio Channel", + "SUBMIT_BUTTON": "Izveidot Twilio Kanālu", "API": { - "ERROR_MESSAGE": "We were not able to authenticate Twilio credentials, please try again" + "ERROR_MESSAGE": "Mēs nevarējām autentificēt Twilio akreditācijas datus. Lūdzu, mēģiniet vēlreiz" } }, "SMS": { - "TITLE": "SMS Channel", - "DESC": "Start supporting your customers via SMS.", + "TITLE": "SMS Kanāls", + "DESC": "Sāciet atbalstīt savus klientus, izmantojot SMS.", "PROVIDERS": { - "LABEL": "API Provider", + "LABEL": "API Pakalpojumu Sniedzējs", "TWILIO": "Twilio", "BANDWIDTH": "Bandwidth" }, "API": { - "ERROR_MESSAGE": "We were not able to save the SMS channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt SMS kanālu" }, "BANDWIDTH": { "ACCOUNT_ID": { - "LABEL": "Account ID", - "PLACEHOLDER": "Please enter your Bandwidth Account ID", - "ERROR": "This field is required" + "LABEL": "Konta ID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwidth konta ID", + "ERROR": "Šis lauks ir nepieciešams" }, "API_KEY": { - "LABEL": "API Key", - "PLACEHOLDER": "Please enter your Bandwith API Key", - "ERROR": "This field is required" + "LABEL": "API atslēga", + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwith API atslēgu", + "ERROR": "Šis lauks ir nepieciešams" }, "API_SECRET": { "LABEL": "API Secret", - "PLACEHOLDER": "Please enter your Bandwith API Secret", - "ERROR": "This field is required" + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwith API Secret", + "ERROR": "Šis lauks ir nepieciešams" }, "APPLICATION_ID": { - "LABEL": "Application ID", - "PLACEHOLDER": "Please enter your Bandwidth Application ID", - "ERROR": "This field is required" + "LABEL": "Lietojumprogrammas ID", + "PLACEHOLDER": "Lūdzu, ievadiet savu Bandwidth lietojumprogrammas ID", + "ERROR": "Šis lauks ir nepieciešams" }, "INBOX_NAME": { - "LABEL": "Inbox Name", - "PLACEHOLDER": "Please enter a inbox name", - "ERROR": "This field is required" + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "PHONE_NUMBER": { - "LABEL": "Phone number", - "PLACEHOLDER": "Please enter the phone number from which message will be sent.", - "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + "LABEL": "Tālruņa numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību. Tālruņa numuram ir jāsākas ar `+` zīmi." }, - "SUBMIT_BUTTON": "Create Bandwidth Channel", + "SUBMIT_BUTTON": "Izveidot Bandwidth kanālu", "API": { - "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + "ERROR_MESSAGE": "Mēs nevarējām autentificēt Bandwidth akreditācijas datus. Lūdzu, mēģiniet vēlreiz" }, "API_CALLBACK": { - "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums ir jānokonfigurē Bandwidth ziņojumu atzvanīšanas URL, izmantojot šeit minēto URL." } } }, "WHATSAPP": { - "TITLE": "WhatsApp Channel", - "DESC": "Start supporting your customers via WhatsApp.", + "TITLE": "WhatsApp Kanāls", + "DESC": "Sāciet atbalstīt savus klientus, izmantojot WhatsApp.", "PROVIDERS": { - "LABEL": "API Provider", + "LABEL": "API Pakalpojumu Sniedzējs", "TWILIO": "Twilio", "WHATSAPP_CLOUD": "WhatsApp Cloud", "360_DIALOG": "360Dialog" }, "INBOX_NAME": { - "LABEL": "Inbox Name", - "PLACEHOLDER": "Please enter an inbox name", - "ERROR": "This field is required" + "LABEL": "Iesūtnes Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet iesūtnes nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "PHONE_NUMBER": { - "LABEL": "Phone number", - "PLACEHOLDER": "Please enter the phone number from which message will be sent.", - "ERROR": "Please enter a valid value. Phone number should start with `+` sign." + "LABEL": "Tālruņa numurs", + "PLACEHOLDER": "Lūdzu, ievadiet tālruņa numuru, no kura tiks nosūtīts ziņojums.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību. Tālruņa numuram ir jāsākas ar `+` zīmi." }, "PHONE_NUMBER_ID": { - "LABEL": "Phone number ID", - "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", - "ERROR": "Please enter a valid value." + "LABEL": "Tālruņa numura ID", + "PLACEHOLDER": "Lūdzu, ievadiet Tālruņa numura ID, kas iegūts no Facebook izstrādātāja informācijas paneļa.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." }, "BUSINESS_ACCOUNT_ID": { - "LABEL": "Business Account ID", - "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", - "ERROR": "Please enter a valid value." + "LABEL": "Biznesa Konta ID", + "PLACEHOLDER": "Lūdzu, ievadiet Biznesa Konta ID, kas iegūts no Facebook izstrādātāja informācijas paneļa.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." }, "WEBHOOK_VERIFY_TOKEN": { - "LABEL": "Webhook Verify Token", - "PLACEHOLDER": "Enter a verify token which you want to configure for facebook webhooks.", - "ERROR": "Please enter a valid value." + "LABEL": "Webhook Pārbaudes Token", + "PLACEHOLDER": "Ievadiet verifikācijas token, kuru vēlaties nokonfigurēt priekš Facebook webhooks.", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." }, "API_KEY": { - "LABEL": "API key", - "SUBTITLE": "Configure the WhatsApp API key.", - "PLACEHOLDER": "API key", - "ERROR": "Please enter a valid value." + "LABEL": "API atslēga", + "SUBTITLE": "Nokonfigurējiet WhatsApp API atslēgu.", + "PLACEHOLDER": "API atslēga", + "ERROR": "Lūdzu, ievadiet derīgu vērtību." }, "API_CALLBACK": { - "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the webhook URL in facebook developer portal with the URL mentioned here." + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums ir facebook izstrādātāju portālā jānokonfigurē webhook URL, izmantojot šeit minēto URL." }, - "SUBMIT_BUTTON": "Create WhatsApp Channel", + "SUBMIT_BUTTON": "Izveidot WhatsApp kanālu", "API": { - "ERROR_MESSAGE": "We were not able to save the WhatsApp channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt WhatsApp kanālu" } }, "API_CHANNEL": { - "TITLE": "API Channel", - "DESC": "Integrate with API channel and start supporting your customers.", + "TITLE": "API Kanāls", + "DESC": "Integrēt ar API kanālu un sākt atbalstīt savus klientus.", "CHANNEL_NAME": { - "LABEL": "Channel Name", - "PLACEHOLDER": "Please enter a channel name", - "ERROR": "This field is required" + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "WEBHOOK_URL": { "LABEL": "Webhook URL", - "SUBTITLE": "Configure the URL where you want to recieve callbacks on events.", + "SUBTITLE": "Konfigurēt URL, kurā vēlaties saņemt notikumu atzvanus.", "PLACEHOLDER": "Webhook URL" }, - "SUBMIT_BUTTON": "Create API Channel", + "SUBMIT_BUTTON": "Izveidot API kanālu", "API": { - "ERROR_MESSAGE": "We were not able to save the api channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt API kanālu" } }, "EMAIL_CHANNEL": { - "TITLE": "Email Channel", - "DESC": "Integrate you email inbox.", + "TITLE": "E-pasta Kanāls", + "DESC": "Integrēt savu e-pasta iesūtni.", "CHANNEL_NAME": { - "LABEL": "Channel Name", - "PLACEHOLDER": "Please enter a channel name", - "ERROR": "This field is required" + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "EMAIL": { - "LABEL": "Email", - "SUBTITLE": "Email where your customers sends you support tickets", - "PLACEHOLDER": "Email" + "LABEL": "E-pasts", + "SUBTITLE": "E-pasts, uz kuru Jūsu klienti nosūta atbalsta biļetes", + "PLACEHOLDER": "E-pasts" }, - "SUBMIT_BUTTON": "Create Email Channel", + "SUBMIT_BUTTON": "Izveidot E-pasta Kanālu", "API": { - "ERROR_MESSAGE": "We were not able to save the email channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt e-pasta kanālu" }, - "FINISH_MESSAGE": "Start forwarding your emails to the following email address." + "FINISH_MESSAGE": "Sākt pārsūtīt savus e-pasta ziņojumus uz tālāk norādīto e-pasta adresi." }, "LINE_CHANNEL": { - "TITLE": "LINE Channel", - "DESC": "Integrate with LINE channel and start supporting your customers.", + "TITLE": "LINE Kanāls", + "DESC": "Integrēt ar LINE kanālu un sākt atbalstīt savus klientus.", "CHANNEL_NAME": { - "LABEL": "Channel Name", - "PLACEHOLDER": "Please enter a channel name", - "ERROR": "This field is required" + "LABEL": "Kanāla Nosaukums", + "PLACEHOLDER": "Lūdzu, ievadiet kanāla nosaukumu", + "ERROR": "Šis lauks ir nepieciešams" }, "LINE_CHANNEL_ID": { - "LABEL": "LINE Channel ID", - "PLACEHOLDER": "LINE Channel ID" + "LABEL": "LINE Kanāla ID", + "PLACEHOLDER": "LINE Kanāla ID" }, "LINE_CHANNEL_SECRET": { - "LABEL": "LINE Channel Secret", - "PLACEHOLDER": "LINE Channel Secret" + "LABEL": "LINE Kanāla Secret", + "PLACEHOLDER": "LINE Kanāla Secret" }, "LINE_CHANNEL_TOKEN": { - "LABEL": "LINE Channel Token", - "PLACEHOLDER": "LINE Channel Token" + "LABEL": "LINE Kanāla Token", + "PLACEHOLDER": "LINE Kanāla Token" }, - "SUBMIT_BUTTON": "Create LINE Channel", + "SUBMIT_BUTTON": "Izveidot LINE Kanālu", "API": { - "ERROR_MESSAGE": "We were not able to save the LINE channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt LINE kanālu" }, "API_CALLBACK": { - "TITLE": "Callback URL", - "SUBTITLE": "You have to configure the webhook URL in LINE application with the URL mentioned here." + "TITLE": "Atzvanīšanas URL", + "SUBTITLE": "Jums LINE lietojumprogrammā ir jānokonfigurē webhook URL, ar šeit minēto URL." } }, "TELEGRAM_CHANNEL": { - "TITLE": "Telegram Channel", - "DESC": "Integrate with Telegram channel and start supporting your customers.", + "TITLE": "Telegram Kanāls", + "DESC": "Integrēt ar Telegram kanālu un sākt atbalstīt savus klientus.", "BOT_TOKEN": { "LABEL": "Bot Token", - "SUBTITLE": "Configure the bot token you have obtained from Telegram BotFather.", + "SUBTITLE": "Konfigurēt bot token, ko ieguvāt no Telegram BotFather.", "PLACEHOLDER": "Bot Token" }, - "SUBMIT_BUTTON": "Create Telegram Channel", + "SUBMIT_BUTTON": "Izveidot Telegram Kanālu", "API": { - "ERROR_MESSAGE": "We were not able to save the telegram channel" + "ERROR_MESSAGE": "Mēs nevarējām saglabāt Telegram kanālu" } }, "AUTH": { - "TITLE": "Choose a channel", - "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below." + "TITLE": "Izvēlieties kanālu", + "DESC": "Chatwoot atbalsta tiešraides tērzēšanas logrīkus, Facebook Messenger, Twitter profilus, WhatsApp, e-pastus kā kanālus. Ja vēlaties izveidot pielāgotu kanālu, varat to izveidot, izmantojot API kanālu. Lai sāktu, izvēlieties vienu no tālāk norādītajiem kanāliem." }, "AGENTS": { - "TITLE": "Agents", - "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.
PS: As an administrator, if you need access to all inboxes, you should add yourself as agent to all inboxes that you create.", - "VALIDATION_ERROR": "Add atleast one agent to your new Inbox", - "PICK_AGENTS": "Pick agents for the inbox" + "TITLE": "Aģenti", + "DESC": "Šeit Jūs varat pievienot aģentus, lai pārvaldītu savu jaunizveidoto iesūtni. Tikai šiem atlasītajiem aģentiem būs piekļuve Jūsu iesūtnei. Aģenti, kas neietilpst šajā iesūtnē, nevarēs redzēt ziņojumus vai atbildēt uz ziņojumiem šajā iesūtnē, kad būs pierakstījušies sistēmā.
PS: Ja jums kā administratoram ir nepieciešama piekļuve pie visām iesūtnēm, jums ir jāpievieno sevi kā aģentu visām izveidotajām iesūtnēm.", + "VALIDATION_ERROR": "Pievienojiet savai jaunajai Iesūtnei vismaz vienu aģentu", + "PICK_AGENTS": "Izvēlieties aģentus priekš iesūtnes" }, "DETAILS": { - "TITLE": "Inbox Details", - "DESC": "From the dropdown below, select the Facebook Page you want to connect to Chatwoot. You can also give a custom name to your inbox for better identification." + "TITLE": "Informācija par Iesūtni", + "DESC": "Tālāk esošajā nolaižamajā izvēlnē izvēlieties Facebook lapu, kuru vēlaties savienot ar Chatwoot. Jūs varat savai iesūtnei, lai to labāk atpazītu, piešķirt pielāgotu nosaukumu." }, "FINISH": { - "TITLE": "Nailed It!", - "DESC": "You have successfully finished integrating your Facebook Page with Chatwoot. Next time a customer messages your Page, the conversation will automatically appear on your inbox.
We are also providing you with a widget script that you can easily add to your website. Once this is live on your website, customers can message you right from your website without the help of any external tool and the conversation will appear right here, on Chatwoot.
Cool, huh? Well, we sure try to be :)" + "TITLE": "Sanāca!", + "DESC": "Jūs esat veiksmīgi pabeidzis savas Facebook lapas integrēšanu ar Chatwoot. Nākamreiz, kad klients nosūtīs ziņojumu Jūsu lapai, saruna automātiski parādīsies Jūsu iesūtnē.
Mēs nodrošinām Jums arī logrīka skriptu, ko varat viegli pievienot savai tīmekļa vietnei. Kad tas būs pieejams Jūsu vietnē, klienti varēs Jums nosūtīt ziņojumus tieši no Jūsu tīmekļa vietnes, neizmantojot ārējus rīkus, un saruna tiks parādīta tieši šeit, vietnē Chatwoot.
" } }, "DETAILS": { - "LOADING_FB": "Authenticating you with Facebook...", - "ERROR_FB_AUTH": "Something went wrong, Please refresh page...", - "CREATING_CHANNEL": "Creating your Inbox...", - "TITLE": "Configure Inbox Details", + "LOADING_FB": "Notiek Jūsu autentificēšana, izmantojot Facebook...", + "ERROR_FB_AUTH": "Radās kļūda. Lūdzu, atsvaidziniet lapu...", + "CREATING_CHANNEL": "Notiek Iesūtnes izveide...", + "TITLE": "Nokonfigurēt Iesūtnes Informāciju", "DESC": "" }, "AGENTS": { - "BUTTON_TEXT": "Add agents", - "ADD_AGENTS": "Adding Agents to your Inbox..." + "BUTTON_TEXT": "Pievienot aģentus", + "ADD_AGENTS": "Notiek aģentu pievienošana Jūsu iesūtnei..." }, "FINISH": { - "TITLE": "Your Inbox is ready!", - "MESSAGE": "You can now engage with your customers through your new Channel. Happy supporting ", - "BUTTON_TEXT": "Take me there", - "MORE_SETTINGS": "More settings", - "WEBSITE_SUCCESS": "You have successfully finished creating a website channel. Copy the code shown below and paste it on your website. Next time a customer use the live chat, the conversation will automatically appear on your inbox." + "TITLE": "Jūsu Iesūtne ir gatava!", + "MESSAGE": "Tagad Jūs varat izmantot savu jauno Kanālu lai sazinātos ar saviem klientiem. Priecīgu atbalstīšanu ", + "BUTTON_TEXT": "Iet uz", + "MORE_SETTINGS": "Papildu iestatījumi", + "WEBSITE_SUCCESS": "Jūs esat veiksmīgi pabeidzis tīmekļa vietnes kanāla izveidi. Nokopējiet tālāk redzamo kodu un ievietojiet to savā tīmekļa vietnē. Nākamreiz, kad klients izmantos tiešsaistes tērzēšanu, saruna automātiski tiks parādīta Jūsu iesūtnē." }, - "REAUTH": "Reauthorize", - "VIEW": "View", + "REAUTH": "Atkārtoti autorizēties", + "VIEW": "Apskatīt", "EDIT": { "API": { - "SUCCESS_MESSAGE": "Inbox settings updated successfully", - "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Auto assignment updated successfully", - "ERROR_MESSAGE": "We couldn't update inbox settings. Please try again later." + "SUCCESS_MESSAGE": "Iesūtnes iestatījumi ir veiksmīgi atjaunināti", + "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Automātiskā piešķiršana ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Mēs nevarējām atjaunināt iesūtnes iestatījumus. Lūdzu, vēlāk pamēģiniet vēlreiz." }, "EMAIL_COLLECT_BOX": { - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, "ENABLE_CSAT": { - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, "ALLOW_MESSAGES_AFTER_RESOLVED": { - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, "ENABLE_CONTINUITY_VIA_EMAIL": { - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, "ENABLE_HMAC": { - "LABEL": "Enable" + "LABEL": "Iespējot" } }, "DELETE": { - "BUTTON_TEXT": "Delete", - "AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar", + "BUTTON_TEXT": "Dzēst", + "AVATAR_DELETE_BUTTON_TEXT": "Dzēst Avatāru", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "PLACE_HOLDER": "Please type {inboxName} to confirm", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "PLACE_HOLDER": "Lūdzu, uzrakstiet {inboxName} lai apstiprinātu", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " }, "API": { - "SUCCESS_MESSAGE": "Inbox deleted successfully", - "ERROR_MESSAGE": "Could not delete inbox. Please try again later.", - "AVATAR_SUCCESS_MESSAGE": "Inbox avatar deleted successfully", - "AVATAR_ERROR_MESSAGE": "Could not delete the inbox avatar. Please try again later." + "SUCCESS_MESSAGE": "Iesūtne veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Nevarēja izdzēst iesūtni. Lūdzu, vēlāk pamēģiniet vēlreiz.", + "AVATAR_SUCCESS_MESSAGE": "Iesūtnes avatārs ir veiksmīgi izdzēsts", + "AVATAR_ERROR_MESSAGE": "Nevarēja izdzēst iesūtnes avatāru. Lūdzu, vēlāk pamēģiniet vēlreiz." } }, "TABS": { - "SETTINGS": "Settings", - "COLLABORATORS": "Collaborators", - "CONFIGURATION": "Configuration", - "CAMPAIGN": "Campaigns", - "PRE_CHAT_FORM": "Pre Chat Form", - "BUSINESS_HOURS": "Business Hours", - "WIDGET_BUILDER": "Widget Builder" + "SETTINGS": "Iestatījumi", + "COLLABORATORS": "Līdzstrādnieki", + "CONFIGURATION": "Konfigurācija", + "CAMPAIGN": "Kampaņas", + "PRE_CHAT_FORM": "Pirms-Tērzēšanas Veidlapa", + "BUSINESS_HOURS": "Darba Laiks", + "WIDGET_BUILDER": "Logrīku Veidotājs" }, - "SETTINGS": "Settings", + "SETTINGS": "Iestatījumi", "FEATURES": { - "LABEL": "Features", - "DISPLAY_FILE_PICKER": "Display file picker on the widget", - "DISPLAY_EMOJI_PICKER": "Display emoji picker on the widget", - "ALLOW_END_CONVERSATION": "Allow users to end conversation from the widget" + "LABEL": "Īpašības", + "DISPLAY_FILE_PICKER": "Logrīkā parādīt failu atlasītāju", + "DISPLAY_EMOJI_PICKER": "Logrīkā parādīt emocijzīmju atlasītāju", + "ALLOW_END_CONVERSATION": "Atļaut lietotājiem beigt sarunu no logrīka" }, "SETTINGS_POPUP": { - "MESSENGER_HEADING": "Messenger Script", - "MESSENGER_SUB_HEAD": "Place this button inside your body tag", - "INBOX_AGENTS": "Agents", - "INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox", - "AGENT_ASSIGNMENT": "Conversation Assignment", - "AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings", - "UPDATE": "Update", - "ENABLE_EMAIL_COLLECT_BOX": "Enable email collect box", - "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Enable or disable email collect box on new conversation", - "AUTO_ASSIGNMENT": "Enable auto assignment", - "ENABLE_CSAT": "Enable CSAT", - "ENABLE_CSAT_SUB_TEXT": "Enable/Disable CSAT(Customer satisfaction) survey after resolving a conversation", - "ENABLE_CONTINUITY_VIA_EMAIL": "Enable conversation continuity via email", - "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Conversations will continue over email if the contact email address is available.", - "INBOX_UPDATE_TITLE": "Inbox Settings", - "INBOX_UPDATE_SUB_TEXT": "Update your inbox settings", - "AUTO_ASSIGNMENT_SUB_TEXT": "Enable or disable the automatic assignment of new conversations to the agents added to this inbox.", - "HMAC_VERIFICATION": "User Identity Validation", - "HMAC_DESCRIPTION": "In order to validate the user's identity, you can pass an `identifier_hash` for each user. You can generate a HMAC sha256 hash using the `identifier` with the key shown here.", - "HMAC_MANDATORY_VERIFICATION": "Enforce User Identity Validation", - "HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.", - "INBOX_IDENTIFIER": "Inbox Identifier", - "INBOX_IDENTIFIER_SUB_TEXT": "Use the `inbox_identifier` token shown here to authentication your API clients.", - "FORWARD_EMAIL_TITLE": "Forward to Email", - "FORWARD_EMAIL_SUB_TEXT": "Start forwarding your emails to the following email address.", - "ALLOW_MESSAGES_AFTER_RESOLVED": "Allow messages after conversation resolved", - "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Allow the end-users to send messages even after the conversation is resolved.", - "WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.", - "WHATSAPP_SECTION_TITLE": "API Key" + "MESSENGER_HEADING": "Messenger Skripts", + "MESSENGER_SUB_HEAD": "Ievietojiet šo pogu savā body tagā", + "INBOX_AGENTS": "Aģenti", + "INBOX_AGENTS_SUB_TEXT": "Pievienot vai noņemt aģentus no šīs iesūtnes", + "AGENT_ASSIGNMENT": "Sarunas Piešķiršana", + "AGENT_ASSIGNMENT_SUB_TEXT": "Atjaunināt sarunas piešķiršanas iestatījumus", + "UPDATE": "Atjaunināt", + "ENABLE_EMAIL_COLLECT_BOX": "Iespējot e-pasta iegūšanas lodziņu", + "ENABLE_EMAIL_COLLECT_BOX_SUB_TEXT": "Iespējot vai atspējot e-pasta iegūšanas lodziņu jaunai sarunai", + "AUTO_ASSIGNMENT": "Iespējot automātisko piešķiršanu", + "ENABLE_CSAT": "Iespējot CSAT", + "ENABLE_CSAT_SUB_TEXT": "Iespējot/Atspējot CSAT (klientu apmierinātības) aptauju pēc sarunas atrisināšanas", + "ENABLE_CONTINUITY_VIA_EMAIL": "Iespējot sarunas nepārtrauktību, izmantojot e-pastu", + "ENABLE_CONTINUITY_VIA_EMAIL_SUB_TEXT": "Sarunas turpināsies pa e-pastu, ja saziņas e-pasta adrese ir pieejama.", + "INBOX_UPDATE_TITLE": "Iesūtnes Iestatījumi", + "INBOX_UPDATE_SUB_TEXT": "Atjaunināt Jūsu iesūtnes iestatījumus", + "AUTO_ASSIGNMENT_SUB_TEXT": "Iespējot vai atspējot jaunu sarunu automātisku piešķiršanu šai iesūtnei pievienotajiem aģentiem.", + "HMAC_VERIFICATION": "Lietotāja Identitātes Apstiprināšana", + "HMAC_DESCRIPTION": "Lai apstiprinātu lietotāja identitāti, katram lietotājam var izmantot `identifier_hash`. Jūs varat ģenerēt HMAC sha256 hash, izmantojot 'identifier' ar šeit uzrādīto atslēgu.", + "HMAC_MANDATORY_VERIFICATION": "Īstenot Lietotāja Identitātes Validāciju", + "HMAC_MANDATORY_DESCRIPTION": "Ja iespējots, pieprasījumi, kuros trūkst `identifier_hash`, tiks noraidīti.", + "INBOX_IDENTIFIER": "Iesūtnes identifikators", + "INBOX_IDENTIFIER_SUB_TEXT": "Izmantojiet šeit uzrādīto `inbox_identifier` token, lai autentificētu savus API klientus.", + "FORWARD_EMAIL_TITLE": "Pārsūtīt uz E-pastu", + "FORWARD_EMAIL_SUB_TEXT": "Sākt pārsūtīt savus e-pasta ziņojumus uz tālāk norādīto e-pasta adresi.", + "ALLOW_MESSAGES_AFTER_RESOLVED": "Atļaut ziņojumus pēc sarunas pabeigšanas", + "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Ļaut galalietotājiem sūtīt ziņojumus pat pēc sarunas atrisināšanas.", + "WHATSAPP_SECTION_SUBHEADER": "Šī API atslēga tiek izmantota integrācijai ar WhatsApp API.", + "WHATSAPP_SECTION_TITLE": "API atslēga" }, "AUTO_ASSIGNMENT": { - "MAX_ASSIGNMENT_LIMIT": "Auto assignment limit", - "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Please enter a value greater than 0", - "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Limit the maximum number of conversations from this inbox that can be auto assigned to an agent" + "MAX_ASSIGNMENT_LIMIT": "Automātiskās piešķiršanas ierobežojums", + "MAX_ASSIGNMENT_LIMIT_RANGE_ERROR": "Lūdzu, ievadiet vērtību, kas ir lielāka par 0", + "MAX_ASSIGNMENT_LIMIT_SUB_TEXT": "Ierobežo maksimālo sarunu skaitu no šīs iesūtnes, ko var automātiski piešķirt aģentam" }, "FACEBOOK_REAUTHORIZE": { - "TITLE": "Reauthorize", - "SUBTITLE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", - "MESSAGE_SUCCESS": "Reconnection successful", - "MESSAGE_ERROR": "There was an error, please try again" + "TITLE": "Atkārtoti autorizēties", + "SUBTITLE": "Jūsu Facebook savienojuma derīguma termiņš ir beidzies. Lūdzu, atkārtoti pievienojiet savu Facebook lapu, lai turpinātu pakalpojumus", + "MESSAGE_SUCCESS": "Atkārtota savienojuma izveide ir veiksmīga", + "MESSAGE_ERROR": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" }, "PRE_CHAT_FORM": { - "DESCRIPTION": "Pre chat forms enable you to capture user information before they start conversation with you.", - "SET_FIELDS": "Pre chat form fields", + "DESCRIPTION": "Pirms tērzēšanas veidlapas ļauj iegūt informāciju par lietotājiem, pirms viņi sāk ar Jums sarunu.", + "SET_FIELDS": "Pirms tērzēšanas veidlapas lauki", "SET_FIELDS_HEADER": { - "FIELDS": "Fields", - "LABEL": "Label", - "PLACE_HOLDER": "Placeholder", - "KEY": "Key", - "TYPE": "Type", - "REQUIRED": "Required" + "FIELDS": "Lauki", + "LABEL": "Etiķete", + "PLACE_HOLDER": "Vietturis", + "KEY": "Atslēga", + "TYPE": "Tips", + "REQUIRED": "Nepieciešams" }, "ENABLE": { - "LABEL": "Enable pre chat form", + "LABEL": "Iespējot pirms tērzēšanas veidlapu", "OPTIONS": { - "ENABLED": "Yes", - "DISABLED": "No" + "ENABLED": "Jā", + "DISABLED": "Nē" } }, "PRE_CHAT_MESSAGE": { - "LABEL": "Pre chat message", - "PLACEHOLDER": "This message would be visible to the users along with the form" + "LABEL": "Pirms tērzēšanas ziņojums", + "PLACEHOLDER": "Šis ziņojums būs redzams lietotājiem, kopā ar veidlapu" }, "REQUIRE_EMAIL": { - "LABEL": "Visitors should provide their name and email address before starting the chat" + "LABEL": "Apmeklētājiem pirms tērzēšanas ir jānorāda savs vārds un e-pasta adrese" } }, "BUSINESS_HOURS": { - "TITLE": "Set your availability", - "SUBTITLE": "Set your availability on your livechat widget", - "WEEKLY_TITLE": "Set your weekly hours", - "TIMEZONE_LABEL": "Select timezone", - "UPDATE": "Update business hours settings", - "TOGGLE_AVAILABILITY": "Enable business availability for this inbox", - "UNAVAILABLE_MESSAGE_LABEL": "Unavailable message for visitors", - "UNAVAILABLE_MESSAGE_DEFAULT": "We are unavailable at the moment. Leave a message we will respond once we are back.", - "TOGGLE_HELP": "Enabling business availability will show the available hours on live chat widget even if all the agents are offline. Outside available hours vistors can be warned with a message and a pre-chat form.", + "TITLE": "Iestatīt savu pieejamību", + "SUBTITLE": "Iestatīt savu pieejamību tiešraides tērzēšanas logrīkā", + "WEEKLY_TITLE": "Iestatīt savu darba laiku", + "TIMEZONE_LABEL": "Izvēlieties laika joslu", + "UPDATE": "Atjaunināt darba laika iestatījumus", + "TOGGLE_AVAILABILITY": "Iespējot biznesa pieejamību šai iesūtnei", + "UNAVAILABLE_MESSAGE_LABEL": "Ziņojums nav pieejams priekš apmeklētājiem", + "UNAVAILABLE_MESSAGE_DEFAULT": "Šobrīd neesam pieejami. Lūdzu atstājiet ziņojumu, mēs atbildēsim, kad būsim atpakaļ.", + "TOGGLE_HELP": "Iespējojot biznesa pieejamību, tiešraides tērzēšanas logrīkā tiks rādīts pieejamais laiks, pat ja visi aģenti būs bezsaistē. Ārpus pieejamā laika, apmeklētājus var brīdināt ar ziņojumu un pirms tērzēšanas veidlapu.", "DAY": { - "ENABLE": "Enable availability for this day", - "UNAVAILABLE": "Unavailable", - "HOURS": "hours", - "VALIDATION_ERROR": "Starting time should be before closing time.", - "CHOOSE": "Choose" + "ENABLE": "Iespējot pieejamību šai dienai", + "UNAVAILABLE": "Nav pieejams", + "HOURS": "darba laiks", + "VALIDATION_ERROR": "Sākuma laikam jābūt pirms slēgšanas laika.", + "CHOOSE": "Izvēlēties" }, - "ALL_DAY": "All-Day" + "ALL_DAY": "Visu dienu" }, "IMAP": { "TITLE": "IMAP", - "SUBTITLE": "Set your IMAP details", - "NOTE_TEXT": "To enable SMTP, please configure IMAP.", - "UPDATE": "Update IMAP settings", - "TOGGLE_AVAILABILITY": "Enable IMAP configuration for this inbox", - "TOGGLE_HELP": "Enabling IMAP will help the user to recieve email", + "SUBTITLE": "Iestatīt IMAP informāciju", + "NOTE_TEXT": "Lai iespējotu SMTP, lūdzu, nokonfigurējiet IMAP.", + "UPDATE": "Atjaunināt IMAP iestatījumus", + "TOGGLE_AVAILABILITY": "Iespējot IMAP konfigurāciju šai iesūtnei", + "TOGGLE_HELP": "Iespējojot IMAP, lietotājs varēs saņemt e-pastu", "EDIT": { - "SUCCESS_MESSAGE": "IMAP settings updated successfully", - "ERROR_MESSAGE": "Unable to update IMAP settings" + "SUCCESS_MESSAGE": "IMAP iestatījumi ir veiksmīgi atjaunināti", + "ERROR_MESSAGE": "Nevar atjaunināt IMAP iestatījumus" }, "ADDRESS": { - "LABEL": "Address", - "PLACE_HOLDER": "Address (Eg: imap.gmail.com)" + "LABEL": "Adrese", + "PLACE_HOLDER": "Adrese (piemēram: imap.gmail.com)" }, "PORT": { - "LABEL": "Port", - "PLACE_HOLDER": "Port" + "LABEL": "Ports", + "PLACE_HOLDER": "Ports" }, "LOGIN": { - "LABEL": "Login", - "PLACE_HOLDER": "Login" + "LABEL": "Lietotājvārds", + "PLACE_HOLDER": "Lietotājvārds" }, "PASSWORD": { - "LABEL": "Password", - "PLACE_HOLDER": "Password" + "LABEL": "Parole", + "PLACE_HOLDER": "Parole" }, - "ENABLE_SSL": "Enable SSL" + "ENABLE_SSL": "Iespējot SSL" }, "SMTP": { "TITLE": "SMTP", - "SUBTITLE": "Set your SMTP details", - "UPDATE": "Update SMTP settings", - "TOGGLE_AVAILABILITY": "Enable SMTP configuration for this inbox", - "TOGGLE_HELP": "Enabling SMTP will help the user to send email", + "SUBTITLE": "Iestatīt SMTP informāciju", + "UPDATE": "Atjaunināt SMTP iestatījumus", + "TOGGLE_AVAILABILITY": "Iespējot SMTP konfigurāciju šai iesūtnei", + "TOGGLE_HELP": "Iespējojot SMTP lietotājs varēs nosūtīt e-pastu", "EDIT": { - "SUCCESS_MESSAGE": "SMTP settings updated successfully", - "ERROR_MESSAGE": "Unable to update SMTP settings" + "SUCCESS_MESSAGE": "SMTP iestatījumi ir veiksmīgi atjaunināti", + "ERROR_MESSAGE": "Nevar atjaunināt SMTP iestatījumus" }, "ADDRESS": { - "LABEL": "Address", - "PLACE_HOLDER": "Address (Eg: smtp.gmail.com)" + "LABEL": "Adrese", + "PLACE_HOLDER": "Adrese (piemēram: smtp.gmail.com)" }, "PORT": { - "LABEL": "Port", - "PLACE_HOLDER": "Port" + "LABEL": "Ports", + "PLACE_HOLDER": "Ports" }, "LOGIN": { - "LABEL": "Login", - "PLACE_HOLDER": "Login" + "LABEL": "Lietotājvārds", + "PLACE_HOLDER": "Lietotājvārds" }, "PASSWORD": { - "LABEL": "Password", - "PLACE_HOLDER": "Password" + "LABEL": "Parole", + "PLACE_HOLDER": "Parole" }, "DOMAIN": { - "LABEL": "Domain", - "PLACE_HOLDER": "Domain" + "LABEL": "Domēns", + "PLACE_HOLDER": "Domēns" }, - "ENCRYPTION": "Encryption", + "ENCRYPTION": "Šifrēšana", "SSL_TLS": "SSL/TLS", "START_TLS": "STARTTLS", - "OPEN_SSL_VERIFY_MODE": "Open SSL Verify Mode", - "AUTH_MECHANISM": "Authentication" + "OPEN_SSL_VERIFY_MODE": "Open SSL Verify Režīms", + "AUTH_MECHANISM": "Autentifikācija" }, - "NOTE": "Note: ", + "NOTE": "Piezīme: ", "WIDGET_BUILDER": { "WIDGET_OPTIONS": { "AVATAR": { - "LABEL": "Website Avatar", + "LABEL": "Tīmekļa Vietnes Avatārs", "DELETE": { "API": { - "SUCCESS_MESSAGE": "Avatar deleted successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Avatārs ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" } } }, "WEBSITE_NAME": { - "LABEL": "Website Name", - "PLACE_HOLDER": "Enter your website name (eg: Acme Inc)", - "ERROR": "Please enter a valid website name" + "LABEL": "Tīmekļa Vietnes Nosaukums", + "PLACE_HOLDER": "Ievadiet Jūsu tīmekļa vietnes nosaukumu (piemēram: Acme Inc)", + "ERROR": "Lūdzu, ievadiet derīgu tīmekļa vietnes nosaukumu" }, "WELCOME_HEADING": { - "LABEL": "Welcome Heading", - "PLACE_HOLDER": "Hi there!" + "LABEL": "Laipni lūdzam Virsraksts", + "PLACE_HOLDER": "Sveicināti!" }, "WELCOME_TAGLINE": { - "LABEL": "Welcome Tagline", - "PLACE_HOLDER": "We make it simple to connect with us. Ask us anything, or share your feedback." + "LABEL": "Laipni lūdzam Teksts", + "PLACE_HOLDER": "Sazināties ar mums ir vienkārši. Vaicājiet mums jebko, vai dalieties ar savām atsauksmēm." }, "REPLY_TIME": { - "LABEL": "Reply Time", - "IN_A_FEW_MINUTES": "In a few minutes", - "IN_A_FEW_HOURS": "In a few hours", - "IN_A_DAY": "In a day" + "LABEL": "Atbildes Laiks", + "IN_A_FEW_MINUTES": "Dažās minutēs", + "IN_A_FEW_HOURS": "Dažās stundās", + "IN_A_DAY": "Dienas laikā" }, - "WIDGET_COLOR_LABEL": "Widget Color", - "WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position", - "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type", + "WIDGET_COLOR_LABEL": "Logrīka Krāsa", + "WIDGET_BUBBLE_POSITION_LABEL": "Logrīka Burbuļa Pozīcija", + "WIDGET_BUBBLE_TYPE_LABEL": "Logrīka Burbuļa Tips", "WIDGET_BUBBLE_LAUNCHER_TITLE": { - "DEFAULT": "Chat with us", - "LABEL": "Widget Bubble Launcher Title", - "PLACE_HOLDER": "Chat with us" + "DEFAULT": "Tērzējiet ar mums", + "LABEL": "Logrīka Burbuļa Palaidēja Nosaukums", + "PLACE_HOLDER": "Tērzējiet ar mums" }, "UPDATE": { - "BUTTON_TEXT": "Update Widget Settings", + "BUTTON_TEXT": "Atjaunināt Logrīka Iestatījumus", "API": { - "SUCCESS_MESSAGE": "Widget settings updated successfully", - "ERROR_MESSAGE": "Unable to update widget settings" + "SUCCESS_MESSAGE": "Logrīka iestatījumi ir veiksmīgi atjaunināti", + "ERROR_MESSAGE": "Nevar atjaunināt logrīka iestatījumus" } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", - "SCRIPT": "Script" + "PREVIEW": "Priekšskatījums", + "SCRIPT": "Skripts" }, "WIDGET_BUBBLE_POSITION": { - "LEFT": "Left", - "RIGHT": "Right" + "LEFT": "Pa kreisi", + "RIGHT": "Pa labi" }, "WIDGET_BUBBLE_TYPE": { - "STANDARD": "Standard", - "EXPANDED_BUBBLE": "Expanded Bubble" + "STANDARD": "Standarta", + "EXPANDED_BUBBLE": "Izvērsts Burbulis" } }, "WIDGET_SCREEN": { - "DEFAULT": "Default", - "CHAT": "Chat" + "DEFAULT": "Noklusējums", + "CHAT": "Tērzēšana" }, "REPLY_TIME": { - "IN_A_FEW_MINUTES": "Typically replies in a few minutes", - "IN_A_FEW_HOURS": "Typically replies in a few hours", - "IN_A_DAY": "Typically replies in a day" + "IN_A_FEW_MINUTES": "Parasti atbild dažu minūšu laikā", + "IN_A_FEW_HOURS": "Parasti atbild dažu stundu laikā", + "IN_A_DAY": "Parasti atbild vienas dienas laikā" }, "FOOTER": { - "START_CONVERSATION_BUTTON_TEXT": "Start Conversation", - "CHAT_INPUT_PLACEHOLDER": "Type your message" + "START_CONVERSATION_BUTTON_TEXT": "Sākt Sarunu", + "CHAT_INPUT_PLACEHOLDER": "Rakstiet savu ziņojumu" }, "BODY": { "TEAM_AVAILABILITY": { - "ONLINE": "We are Online", - "OFFLINE": "We are away at the moment" + "ONLINE": "Mēs esam Tiešsaistē", + "OFFLINE": "Šobrīd neesam uz vietas" }, - "USER_MESSAGE": "Hi", - "AGENT_MESSAGE": "Hello" + "USER_MESSAGE": "Sveicināti", + "AGENT_MESSAGE": "Labdien" }, - "BRANDING_TEXT": "Powered by Chatwoot", - "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" + "BRANDING_TEXT": "Darbināts ar Chatwoot", + "SCRIPT_SETTINGS": "\nwindow.chatwootSettings = {options};" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/integrationApps.json b/app/javascript/dashboard/i18n/locale/lv/integrationApps.json index a80ecb837..d0f246695 100644 --- a/app/javascript/dashboard/i18n/locale/lv/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/lv/integrationApps.json @@ -1,62 +1,62 @@ { "INTEGRATION_APPS": { - "FETCHING": "Fetching Integrations", - "NO_HOOK_CONFIGURED": "There are no %{integrationId} integrations configured in this account.", - "HEADER": "Applications", + "FETCHING": "Notiek Integrāciju Iegūšana", + "NO_HOOK_CONFIGURED": "Šajā kontā nav nokonfigurēta neviena %{integrationId} integrācija.", + "HEADER": "Lietojumprogrammas", "STATUS": { - "ENABLED": "Enabled", - "DISABLED": "Disabled" + "ENABLED": "Iespējots", + "DISABLED": "Atspējots" }, - "CONFIGURE": "Configure", - "ADD_BUTTON": "Add a new hook", + "CONFIGURE": "Konfigurēt", + "ADD_BUTTON": "Pievienojiet jaunu hook", "DELETE": { "TITLE": { - "INBOX": "Confirm deletion", - "ACCOUNT": "Disconnect" + "INBOX": "Apstiprināt dzēšanu", + "ACCOUNT": "Atvienot" }, "MESSAGE": { - "INBOX": "Are you sure to delete?", - "ACCOUNT": "Are you sure to disconnect?" + "INBOX": "Vai tiešām vēlaties izdzēst?", + "ACCOUNT": "Vai tiešām vēlaties atvienot?" }, "CONFIRM_BUTTON_TEXT": { - "INBOX": "Yes, Delete", - "ACCOUNT": "Yes, Disconnect" + "INBOX": "Jā, Dzēst", + "ACCOUNT": "Jā, Atvienot" }, - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Atcelt", "API": { - "SUCCESS_MESSAGE": "Hook deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Hook ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "LIST": { - "FETCHING": "Fetching integration hooks", - "INBOX": "Inbox", + "FETCHING": "Notiek integrāciju hook iegūšana", + "INBOX": "Iesūtne", "DELETE": { - "BUTTON_TEXT": "Delete" + "BUTTON_TEXT": "Dzēst" } }, "ADD": { "FORM": { "INBOX": { - "LABEL": "Select Inbox", - "PLACEHOLDER": "Select Inbox" + "LABEL": "Izvēlieties Iesūtni", + "PLACEHOLDER": "Izvēlieties Iesūtni" }, - "SUBMIT": "Create", - "CANCEL": "Cancel" + "SUBMIT": "Izveidot", + "CANCEL": "Atcelt" }, "API": { - "SUCCESS_MESSAGE": "Integration hook added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Integrācijas hook ir veiksmīgi pievienots", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "CONNECT": { - "BUTTON_TEXT": "Connect" + "BUTTON_TEXT": "Savienoties" }, "DISCONNECT": { - "BUTTON_TEXT": "Disconnect" + "BUTTON_TEXT": "Atvienot" }, "SIDEBAR_DESCRIPTION": { - "DIALOGFLOW": "Dialogflow is a natural language understanding platform that makes it easy to design and integrate a conversational user interface into your mobile app, web application, device, bot, interactive voice response system, and so on.

Dialogflow integration with %{installationName} allows you to configure a Dialogflow bot with your inboxes which lets the bot handle the queries initially and hand them over to an agent when needed. Dialogflow can be used to qualifying the leads, reduce the workload of agents by providing frequently asked questions etc.

To add Dialogflow, you need to create a Service Account in your Google project console and share the credentials. Please refer to the Dialogflow docs for more information." + "DIALOGFLOW": "Dialogflow ir dabiskas valodas izpratnes platforma, kas ļauj viegli izveidot un integrēt sarunvalodas lietotāja interfeisu jūsu mobilajā lietotnē, tīmekļa lietojumprogrammā, ierīcē, robotprogrammā, interaktīvā balss atbildes sistēmā utt.

Dialogflow integrācija ar %{installationName} ļauj piesaistīt Dialogflow robotam Jūsu Iesūtnes, kas savukārt ļauj robotam sākotnēji apstrādāt vaicājumus un nepieciešamības gadījumā nodot tos aģentam. Dialogflow var izmantot lai kvalificētu izpildāmos darbus un tādā veidā samazinātu aģentu darba slodzi, sniedzot atbildes uz bieži uzdotajiem jautājumiem utt.

Lai pievienotu Dialogflow, Jums ir jāizveido servisa konts savā Google projekta konsolē un jākopīgo akreditācijas dati. Lai iegūtu papildu informāciju, lūdzu, skatiet Dialogflow dokumentāciju." } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/integrations.json b/app/javascript/dashboard/i18n/locale/lv/integrations.json index 6c6cecde9..372061132 100644 --- a/app/javascript/dashboard/i18n/locale/lv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lv/integrations.json @@ -1,134 +1,134 @@ { "INTEGRATION_SETTINGS": { - "HEADER": "Integrations", + "HEADER": "Integrācijas", "WEBHOOK": { - "SUBSCRIBED_EVENTS": "Subscribed Events", + "SUBSCRIBED_EVENTS": "Abonētie Notikumi", "FORM": { - "CANCEL": "Cancel", - "DESC": "Webhook events provide you the realtime information about what's happening in your Chatwoot account. Please enter a valid URL to configure a callback.", + "CANCEL": "Atcelt", + "DESC": "Webhook notikumi sniedz Jums reāllaika informāciju par to, kas notiek jūsu Chatwoot kontā. Lūdzu, ievadiet derīgu URL, lai nokonfigurētu atzvanīšanu.", "SUBSCRIPTIONS": { - "LABEL": "Events", + "LABEL": "Notikumi", "EVENTS": { - "CONVERSATION_CREATED": "Conversation Created", - "CONVERSATION_STATUS_CHANGED": "Conversation Status Changed", - "CONVERSATION_UPDATED": "Conversation Updated", - "MESSAGE_CREATED": "Message created", - "MESSAGE_UPDATED": "Message updated", - "WEBWIDGET_TRIGGERED": "Live chat widget opened by the user" + "CONVERSATION_CREATED": "Saruna izveidota", + "CONVERSATION_STATUS_CHANGED": "Sarunas Statuss Mainīts", + "CONVERSATION_UPDATED": "Saruna Atjaunināta", + "MESSAGE_CREATED": "Ziņojums izveidots", + "MESSAGE_UPDATED": "Ziņojums atjaunināts", + "WEBWIDGET_TRIGGERED": "Lietotājs atvēra tiešsaistes tērzēšanas logrīku" } }, "END_POINT": { "LABEL": "Webhook URL", - "PLACEHOLDER": "Example: https://example/api/webhook", - "ERROR": "Please enter a valid URL" + "PLACEHOLDER": "Piemēram: https://example/api/webhook", + "ERROR": "Lūdzu, ievadiet derīgu URL" }, - "EDIT_SUBMIT": "Update webhook", - "ADD_SUBMIT": "Create webhook" + "EDIT_SUBMIT": "Atjaunināt webhook", + "ADD_SUBMIT": "Izveidot webhook" }, "TITLE": "Webhook", - "CONFIGURE": "Configure", - "HEADER": "Webhook settings", - "HEADER_BTN_TXT": "Add new webhook", - "LOADING": "Fetching attached webhooks", - "SEARCH_404": "There are no items matching this query", - "SIDEBAR_TXT": "

Webhooks

Webhooks are HTTP callbacks which can be defined for every account. They are triggered by events like message creation in Chatwoot. You can create more than one webhook for this account.

For creating a webhook, click on the Add new webhook button. You can also remove any existing webhook by clicking on the Delete button.

", + "CONFIGURE": "Konfigurēt", + "HEADER": "Webhook iestatījumi", + "HEADER_BTN_TXT": "Pievienot jaunu webhook", + "LOADING": "Notiek pievienoto webhook iegūšana", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu", + "SIDEBAR_TXT": "

Webhook

Webhook ir HTTP atzvani, kurus var definēt katram kontam. Tos aktivizē tādi notikumi kā ziņojumu izveide pakalpojumā Chatwoot. Šim kontam varat izveidot vairāk nekā vienu webhook.

Lai izveidotu webhook, noklikšķiniet uz Pievienot jaunu webhook pogas. Jūs varat arī noņemt jebkuru esošo webhook, noklikšķinot uz pogas Dzēst.

", "LIST": { - "404": "There are no webhooks configured for this account.", - "TITLE": "Manage webhooks", + "404": "Šim kontam nav nokonfigurēts neviens webhook.", + "TITLE": "Pārvaldīt webhook", "TABLE_HEADER": [ - "Webhook endpoint", - "Actions" + "Webhook galapunkts", + "Darbības" ] }, "EDIT": { - "BUTTON_TEXT": "Edit", - "TITLE": "Edit webhook", + "BUTTON_TEXT": "Rediģēt", + "TITLE": "Rediģēt webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Webhook konfigurācija ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "ADD": { - "CANCEL": "Cancel", - "TITLE": "Add new webhook", + "CANCEL": "Atcelt", + "TITLE": "Pievienot jaunu webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Webhook konfigurācija ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Webhook deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Webhook ir veiksmīgi izdzēsts", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete the webhook? (%{webhookURL})", - "YES": "Yes, Delete ", - "NO": "No, Keep it" + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst webhook? (%{webhookURL})", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt" } } }, "SLACK": { "HELP_TEXT": { - "TITLE": "Using Slack Integration", - "BODY": "

Chatwoot will now sync all the incoming conversations into the customer-conversations channel inside your slack workplace.

Replying to a conversation thread in customer-conversations slack channel will create a response back to the customer through chatwoot.

Start the replies with note: to create private notes instead of replies.

If the replier on slack has an agent profile in chatwoot under the same email, the replies will be associated accordingly.

When the replier doesn't have an associated agent profile, the replies will be made from the bot profile.

" + "TITLE": "Izmantojot Slack Integrāciju", + "BODY": "

Chatwoot tagad sinhronizēs visas ienākošās customer-conversations kanāla sarunas, kas atrodas Jūsu slack workplace.

Atbildot uz sarunas vītni, customer-conversations slack kanālā tiks izveidota atbilde klientam, izmantojot chatwoot.

Sāciet atbildes ar note: lai izveidotu individuālas piezīmes, nevis atbildes.

Ja slack atbildētājam ir aģenta profils pakalpojumā chatwoot, ar tādu pašu e-pasta adresi, atbildes tiks attiecīgi sasaistītas.

Kad atbildētājam nebūs piesaistīts aģenta profils, atbildes tiks sniegtas no robotprogrammatūras profila.

" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Integration deleted successfully" + "SUCCESS_MESSAGE": "Integrācija ir veiksmīgi izdzēsta" } }, "CONNECT": { - "BUTTON_TEXT": "Connect" + "BUTTON_TEXT": "Savienot" }, "DASHBOARD_APPS": { - "TITLE": "Dashboard Apps", - "HEADER_BTN_TXT": "Add a new dashboard app", - "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", - "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "TITLE": "Informācijas paneļa lietotnes", + "HEADER_BTN_TXT": "Pievienot jaunu informācijas paneļa lietotni", + "SIDEBAR_TXT": "

Informācijas Paneļa Lietotnes

Informācijas paneļa lietotnes ļauj organizācijām iegult lietojumprogrammu Chatwoot informācijas panelī, lai nodrošinātu kontekstu klientu atbalsta aģentiem. Šī funkcija ļauj Jums izveidot lietojumprogrammu neatkarīgi un iegult to informācijas panelī, lai sniegtu informāciju par lietotāju, viņu pasūtījumiem vai viņu iepriekšējo maksājumu vēsturi.

Kad iegulsiet lietojumprogrammu, izmantojot Chatwoot informācijas paneli, Jūsu lietojumprogramma iegūs sarunas un kontaktpersonas kontekstu kā loga notikumu. Ieviesiet savā lapā ziņojuma notikuma uztvērēju, lai saņemtu kontekstu.

Lai pievienotu jaunu informācijas paneļa lietotni, noklikšķiniet uz pogas 'Pievienot jaunu informācijas paneļa lietotni'.

", + "DESCRIPTION": "Informācijas paneļa lietotnes ļauj organizācijām iegult lietojumprogrammu informācijas panelī, lai nodrošinātu kontekstu klientu atbalsta aģentiem. Šī funkcija ļauj Jums neatkarīgi izveidot lietojumprogrammu un iegult to, lai sniegtu informāciju par lietotāju, viņu pasūtījumiem vai iepriekšējo maksājumu vēsturi.", "LIST": { - "404": "There are no dashboard apps configured on this account yet", - "LOADING": "Fetching dashboard apps...", + "404": "Šajā kontā vēl nav nokonfigurēta neviena informācijas paneļa lietotne", + "LOADING": "Notiek informācijas paneļa lietotņu iegūšana...", "TABLE_HEADER": [ - "Name", + "Vārds", "Endpoint" ], - "EDIT_TOOLTIP": "Edit app", - "DELETE_TOOLTIP": "Delete app" + "EDIT_TOOLTIP": "Rediģēt lietotni", + "DELETE_TOOLTIP": "Dzēst lietotni" }, "FORM": { - "TITLE_LABEL": "Name", - "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", - "TITLE_ERROR": "A name for the dashboard app is required", + "TITLE_LABEL": "Vārds", + "TITLE_PLACEHOLDER": "Ievadiet informācijas paneļa lietotnes nosaukumu", + "TITLE_ERROR": "Informācijas paneļa lietotnei ir jānorāda nosaukums", "URL_LABEL": "Endpoint", - "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", - "URL_ERROR": "A valid URL is required" + "URL_PLACEHOLDER": "Ievadiet endpoint URL, kurā tiek mitināta jūsu lietotne", + "URL_ERROR": "Nepieciešams derīgs URL" }, "CREATE": { - "HEADER": "Add a new dashboard app", - "FORM_SUBMIT": "Submit", - "FORM_CANCEL": "Cancel", - "API_SUCCESS": "Dashboard app configured successfully", - "API_ERROR": "We couldn't create an app. Please try again later" + "HEADER": "Pievienot jaunu informācijas paneļa lietotni", + "FORM_SUBMIT": "Iesniegt", + "FORM_CANCEL": "Atcelt", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi nokonfigurēta", + "API_ERROR": "Mēs nevarējām izveidot lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "UPDATE": { - "HEADER": "Edit dashboard app", - "FORM_SUBMIT": "Update", - "FORM_CANCEL": "Cancel", - "API_SUCCESS": "Dashboard app updated successfully", - "API_ERROR": "We couldn't update the app. Please try again later" + "HEADER": "Rediģēt informācijas paneļa lietotni", + "FORM_SUBMIT": "Atjaunināt", + "FORM_CANCEL": "Atcelt", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi atjaunināta", + "API_ERROR": "Mēs nevarējām atjaunināt lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "DELETE": { - "CONFIRM_YES": "Yes, delete it", - "CONFIRM_NO": "No, keep it", - "TITLE": "Confirm deletion", - "MESSAGE": "Are you sure to delete the app - %{appName}?", - "API_SUCCESS": "Dashboard app deleted successfully", - "API_ERROR": "We couldn't delete the app. Please try again later" + "CONFIRM_YES": "Jā, dzēst", + "CONFIRM_NO": "Nē, paturēt", + "TITLE": "Apstipriniet dzēšanu", + "MESSAGE": "Vai tiešām vēlaties izdzēst lietotni - %{appName}?", + "API_SUCCESS": "Informācijas paneļa lietotne ir veiksmīgi izdzēsta", + "API_ERROR": "Mēs nevarējām izdzēst lietotni. Lūdzu, vēlāk pamēģiniet vēlreiz" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json index db12fa32a..81b975bbc 100644 --- a/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json @@ -1,69 +1,69 @@ { "LABEL_MGMT": { - "HEADER": "Labels", - "HEADER_BTN_TXT": "Add label", - "LOADING": "Fetching labels", - "SEARCH_404": "There are no items matching this query", - "SIDEBAR_TXT": "

Labels

Labels help you to categorize conversations and prioritize them. You can assign label to a conversation from the sidepanel.

Labels are tied to the account and can be used to create custom workflows in your organization. You can assign custom color to a label, it makes it easier to identify the label. You will be able to display the label on the sidebar to filter the conversations easily.

", + "HEADER": "Etiķetes", + "HEADER_BTN_TXT": "Pievienot etiķeti", + "LOADING": "Notiek etiķešu iegūšana", + "SEARCH_404": "Šim vaicājumam nav atbilstošu vienumu", + "SIDEBAR_TXT": "

Etiķetes

Etiķetes palīdz Jums klasificēt sarunas un noteikt tām prioritātes. Jūs varat piešķirt etiķeti sarunai izmantojot sānjoslu.

Etiķetes ir piesaistītas kontam, un tās var izmantot lai izveidotu pielāgotas darbplūsmas jūsu organizācijā. Jūs varat piešķirt pielāgotu krāsu etiķetei, lai etiķeti vieglāk varētu atpazīt. Jūs varēsiet attēlot etiķeti sānjoslā, lai viegli varētu filtrēt sarunas.

", "LIST": { - "404": "There are no labels available in this account.", - "TITLE": "Manage labels", - "DESC": "Labels let you group the conversations together.", + "404": "Šajā kontā nav izveidotas etiķetes.", + "TITLE": "Pārvaldīt Etiķetes", + "DESC": "Etiķetes ļauj grupēt sarunas kopā.", "TABLE_HEADER": [ - "Name", - "Description", - "Color" + "Vārds", + "Apraksts", + "Krāsa" ] }, "FORM": { "NAME": { - "LABEL": "Label Name", - "PLACEHOLDER": "Label name", - "REQUIRED_ERROR": "Label name is required", - "MINIMUM_LENGTH_ERROR": "Minimum length 2 is required", - "VALID_ERROR": "Only Alphabets, Numbers, Hyphen and Underscore are allowed" + "LABEL": "Etiķetes Nosaukums", + "PLACEHOLDER": "Etiķetes nosaukums", + "REQUIRED_ERROR": "Nepieciešams etiķetes nosaukums", + "MINIMUM_LENGTH_ERROR": "Nepieciešamais minimālais garums 2 simboli", + "VALID_ERROR": "Ir atļauti tikai Alfabēti burti, Cipari, Defise un Pasvītra" }, "DESCRIPTION": { - "LABEL": "Description", - "PLACEHOLDER": "Label Description" + "LABEL": "Apraksts", + "PLACEHOLDER": "Etiķetes Apraksts" }, "COLOR": { - "LABEL": "Color" + "LABEL": "Krāsa" }, "SHOW_ON_SIDEBAR": { - "LABEL": "Show label on sidebar" + "LABEL": "Rādīt etiķeti sānjoslā" }, - "EDIT": "Edit", - "CREATE": "Create", - "DELETE": "Delete", - "CANCEL": "Cancel" + "EDIT": "Rediģēt", + "CREATE": "Izveidot", + "DELETE": "Dzēst", + "CANCEL": "Atcelt" }, "ADD": { - "TITLE": "Add label", - "DESC": "Labels let you group the conversations together.", + "TITLE": "Pievienot etiķeti", + "DESC": "Etiķetes ļauj grupēt sarunas kopā.", "API": { - "SUCCESS_MESSAGE": "Label added successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi pievienota", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" } }, "EDIT": { - "TITLE": "Edit label", + "TITLE": "Rediģēt etiķeti", "API": { - "SUCCESS_MESSAGE": "Label updated successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Label deleted successfully", - "ERROR_MESSAGE": "There was an error, please try again" + "SUCCESS_MESSAGE": "Etiķete ir veiksmīgi izdzēsta", + "ERROR_MESSAGE": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Apstiprināt Dzēšanu", + "MESSAGE": "Vai vēlaties izdzēst ", + "YES": "Jā, Dzēst ", + "NO": "Nē, Paturēt " } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/login.json b/app/javascript/dashboard/i18n/locale/lv/login.json index 30f667052..d090bbdac 100644 --- a/app/javascript/dashboard/i18n/locale/lv/login.json +++ b/app/javascript/dashboard/i18n/locale/lv/login.json @@ -2,20 +2,20 @@ "LOGIN": { "TITLE": "Login to Chatwoot", "EMAIL": { - "LABEL": "Email", - "PLACEHOLDER": "Email eg: someone@example.com" + "LABEL": "E-pasts", + "PLACEHOLDER": "E-pasts, piemēram: kāds@piemērs.com" }, "PASSWORD": { - "LABEL": "Password", - "PLACEHOLDER": "Password" + "LABEL": "Parole", + "PLACEHOLDER": "Parole" }, "API": { - "SUCCESS_MESSAGE": "Login Successful", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", - "UNAUTH": "Username / Password Incorrect. Please try again" + "SUCCESS_MESSAGE": "Pierakstīšanās Veiksmīga", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz", + "UNAUTH": "Nepareizs lietotājvārds/parole. Lūdzu mēģiniet vēlreiz" }, - "FORGOT_PASSWORD": "Forgot your password?", - "CREATE_NEW_ACCOUNT": "Create new account", - "SUBMIT": "Login" + "FORGOT_PASSWORD": "Aizmirsāt savu paroli?", + "CREATE_NEW_ACCOUNT": "Izveidot jaunu kontu", + "SUBMIT": "Pierakstīties" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/report.json b/app/javascript/dashboard/i18n/locale/lv/report.json index 0bd9b544d..dbb103138 100644 --- a/app/javascript/dashboard/i18n/locale/lv/report.json +++ b/app/javascript/dashboard/i18n/locale/lv/report.json @@ -1,447 +1,447 @@ { "REPORT": { - "HEADER": "Conversations", - "LOADING_CHART": "Loading chart data...", - "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", - "DOWNLOAD_AGENT_REPORTS": "Download agent reports", + "HEADER": "Sarunas", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_AGENT_REPORTS": "Lejupielādēt aģentu pārskatus", "METRICS": { "CONVERSATIONS": { - "NAME": "Conversations", - "DESC": "( Total )" + "NAME": "Sarunas", + "DESC": "( Kopā )" }, "INCOMING_MESSAGES": { - "NAME": "Incoming Messages", - "DESC": "( Total )" + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" }, "OUTGOING_MESSAGES": { - "NAME": "Outgoing Messages", - "DESC": "( Total )" + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_TIME": { - "NAME": "Resolution Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_COUNT": { - "NAME": "Resolution Count", - "DESC": "( Total )" + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" } }, "DATE_RANGE": [ { "id": 0, - "name": "Last 7 days" + "name": "Pēdējās 7 dienas" }, { "id": 1, - "name": "Last 30 days" + "name": "Pēdējās 30 dienas" }, { "id": 2, - "name": "Last 3 months" + "name": "Pēdējie 3 mēneši" }, { "id": 3, - "name": "Last 6 months" + "name": "Pēdējie 6 mēneši" }, { "id": 4, - "name": "Last year" + "name": "Pagājušais gads" }, { "id": 5, - "name": "Custom date range" + "name": "Pielāgots datumu diapazons" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" }, - "GROUP_BY_FILTER_DROPDOWN_LABEL": "Group By", - "DURATION_FILTER_LABEL": "Duration", + "GROUP_BY_FILTER_DROPDOWN_LABEL": "Grupēt Pēc", + "DURATION_FILTER_LABEL": "Ilgums", "GROUP_BY_DAY_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Diena" } ], "GROUP_BY_WEEK_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Diena" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Nedēļa" } ], "GROUP_BY_MONTH_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Diena" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Nedēļa" }, { "id": 3, - "groupBy": "Month" + "groupBy": "Mēnesis" } ], "GROUP_BY_YEAR_OPTIONS": [ { "id": 1, - "groupBy": "Day" + "groupBy": "Diena" }, { "id": 2, - "groupBy": "Week" + "groupBy": "Nedēļa" }, { "id": 3, - "groupBy": "Month" + "groupBy": "Mēnesis" }, { "id": 4, - "groupBy": "Year" + "groupBy": "Gads" } ], - "BUSINESS_HOURS": "Business Hours" + "BUSINESS_HOURS": "Darba Laiks" }, "AGENT_REPORTS": { - "HEADER": "Agents Overview", - "LOADING_CHART": "Loading chart data...", - "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", - "DOWNLOAD_AGENT_REPORTS": "Download agent reports", - "FILTER_DROPDOWN_LABEL": "Select Agent", + "HEADER": "Aģentu Pārskats", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_AGENT_REPORTS": "Lejupielādēt aģentu pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Aģentu", "METRICS": { "CONVERSATIONS": { - "NAME": "Conversations", - "DESC": "( Total )" + "NAME": "Sarunas", + "DESC": "( Kopā )" }, "INCOMING_MESSAGES": { - "NAME": "Incoming Messages", - "DESC": "( Total )" + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" }, "OUTGOING_MESSAGES": { - "NAME": "Outgoing Messages", - "DESC": "( Total )" + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_TIME": { - "NAME": "Resolution Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_COUNT": { - "NAME": "Resolution Count", - "DESC": "( Total )" + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" } }, "DATE_RANGE": [ { "id": 0, - "name": "Last 7 days" + "name": "Pēdējās 7 dienas" }, { "id": 1, - "name": "Last 30 days" + "name": "Pēdējās 30 dienas" }, { "id": 2, - "name": "Last 3 months" + "name": "Pēdējie 3 mēneši" }, { "id": 3, - "name": "Last 6 months" + "name": "Pēdējie 6 mēneši" }, { "id": 4, - "name": "Last year" + "name": "Pagājušais gads" }, { "id": 5, - "name": "Custom date range" + "name": "Pielāgots datumu diapazons" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" } }, "LABEL_REPORTS": { - "HEADER": "Labels Overview", - "LOADING_CHART": "Loading chart data...", - "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", - "DOWNLOAD_LABEL_REPORTS": "Download label reports", - "FILTER_DROPDOWN_LABEL": "Select Label", + "HEADER": "Etiķešu Pārskats", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_LABEL_REPORTS": "Lejupielādēt etiķešu pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Etiķeti", "METRICS": { "CONVERSATIONS": { - "NAME": "Conversations", - "DESC": "( Total )" + "NAME": "Sarunas", + "DESC": "( Kopā )" }, "INCOMING_MESSAGES": { - "NAME": "Incoming Messages", - "DESC": "( Total )" + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" }, "OUTGOING_MESSAGES": { - "NAME": "Outgoing Messages", - "DESC": "( Total )" + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_TIME": { - "NAME": "Resolution Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_COUNT": { - "NAME": "Resolution Count", - "DESC": "( Total )" + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" } }, "DATE_RANGE": [ { "id": 0, - "name": "Last 7 days" + "name": "Pēdējās 7 dienas" }, { "id": 1, - "name": "Last 30 days" + "name": "Pēdējās 30 dienas" }, { "id": 2, - "name": "Last 3 months" + "name": "Pēdējie 3 mēneši" }, { "id": 3, - "name": "Last 6 months" + "name": "Pēdējie 6 mēneši" }, { "id": 4, - "name": "Last year" + "name": "Pagājušais gads" }, { "id": 5, - "name": "Custom date range" + "name": "Pielāgots datumu diapazons" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" } }, "INBOX_REPORTS": { - "HEADER": "Inbox Overview", - "LOADING_CHART": "Loading chart data...", - "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", - "DOWNLOAD_INBOX_REPORTS": "Download inbox reports", - "FILTER_DROPDOWN_LABEL": "Select Inbox", + "HEADER": "Iesūtnes Pārskats", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_INBOX_REPORTS": "Lejupielādēt iesūtnes pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Iesūtni", "METRICS": { "CONVERSATIONS": { - "NAME": "Conversations", - "DESC": "( Total )" + "NAME": "Sarunas", + "DESC": "( Kopā )" }, "INCOMING_MESSAGES": { - "NAME": "Incoming Messages", - "DESC": "( Total )" + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" }, "OUTGOING_MESSAGES": { - "NAME": "Outgoing Messages", - "DESC": "( Total )" + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_TIME": { - "NAME": "Resolution Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_COUNT": { - "NAME": "Resolution Count", - "DESC": "( Total )" + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" } }, "DATE_RANGE": [ { "id": 0, - "name": "Last 7 days" + "name": "Pēdējās 7 dienas" }, { "id": 1, - "name": "Last 30 days" + "name": "Pēdējās 30 dienas" }, { "id": 2, - "name": "Last 3 months" + "name": "Pēdējie 3 mēneši" }, { "id": 3, - "name": "Last 6 months" + "name": "Pēdējie 6 mēneši" }, { "id": 4, - "name": "Last year" + "name": "Pagājušais gads" }, { "id": 5, - "name": "Custom date range" + "name": "Pielāgots datumu diapazons" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" } }, "TEAM_REPORTS": { - "HEADER": "Team Overview", - "LOADING_CHART": "Loading chart data...", - "NO_ENOUGH_DATA": "We've not received enough data points to generate report, Please try again later.", - "DOWNLOAD_TEAM_REPORTS": "Download team reports", - "FILTER_DROPDOWN_LABEL": "Select Team", + "HEADER": "Komandas Pārskats", + "LOADING_CHART": "Notiek diagrammas datu ielāde...", + "NO_ENOUGH_DATA": "Mēs neesam saņēmuši pietiekami daudz datu punktu, lai izveidotu pārskatu. Lūdzu, vēlāk mēģiniet vēlreiz.", + "DOWNLOAD_TEAM_REPORTS": "Lejupielādēt komandas pārskatus", + "FILTER_DROPDOWN_LABEL": "Izvēlieties Komandu", "METRICS": { "CONVERSATIONS": { - "NAME": "Conversations", - "DESC": "( Total )" + "NAME": "Sarunas", + "DESC": "( Kopā )" }, "INCOMING_MESSAGES": { - "NAME": "Incoming Messages", - "DESC": "( Total )" + "NAME": "Ienākošie ziņojumi", + "DESC": "( Kopā )" }, "OUTGOING_MESSAGES": { - "NAME": "Outgoing Messages", - "DESC": "( Total )" + "NAME": "Izejošie ziņojumi", + "DESC": "( Kopā )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Pirmās Atbildes Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Pirmās Atbildes Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_TIME": { - "NAME": "Resolution Time", - "DESC": "( Avg )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "NAME": "Atrisināšanas Laiks", + "DESC": "( Vidēji )", + "INFO_TEXT": "Kopējais aprēķiniem izmantoto sarunu skaits:", + "TOOLTIP_TEXT": "Atrisināšanas Laiks ir %{metricValue} (based on %{conversationCount} conversations)" }, "RESOLUTION_COUNT": { - "NAME": "Resolution Count", - "DESC": "( Total )" + "NAME": "Atrisināšanas Skaits", + "DESC": "( Kopā )" } }, "DATE_RANGE": [ { "id": 0, - "name": "Last 7 days" + "name": "Pēdējās 7 dienas" }, { "id": 1, - "name": "Last 30 days" + "name": "Pēdējās 30 dienas" }, { "id": 2, - "name": "Last 3 months" + "name": "Pēdējie 3 mēneši" }, { "id": 3, - "name": "Last 6 months" + "name": "Pēdējie 6 mēneši" }, { "id": 4, - "name": "Last year" + "name": "Pagājušais gads" }, { "id": 5, - "name": "Custom date range" + "name": "Pielāgots datumu diapazons" } ], "CUSTOM_DATE_RANGE": { - "CONFIRM": "Apply", - "PLACEHOLDER": "Select date range" + "CONFIRM": "Pielietot", + "PLACEHOLDER": "Izvēlieties datumu diapazonu" } }, "CSAT_REPORTS": { - "HEADER": "CSAT Reports", - "NO_RECORDS": "There are no CSAT survey responses available.", - "DOWNLOAD": "Download CSAT Reports", + "HEADER": "CSAT Pārskati", + "NO_RECORDS": "CSAT aptaujas atbildes nav pieejamas.", + "DOWNLOAD": "Lejupielādēt CSAT Pārskatus", "FILTERS": { "AGENTS": { - "PLACEHOLDER": "Choose Agents" + "PLACEHOLDER": "Izvēlieties Aģentus" } }, "TABLE": { "HEADER": { - "CONTACT_NAME": "Contact", - "AGENT_NAME": "Assigned agent", - "RATING": "Rating", - "FEEDBACK_TEXT": "Feedback comment" + "CONTACT_NAME": "Kontaktpersona", + "AGENT_NAME": "Piešķirtais aģents", + "RATING": "Vērtējums", + "FEEDBACK_TEXT": "Atsauksmes komentārs" } }, "METRIC": { "TOTAL_RESPONSES": { - "LABEL": "Total responses", - "TOOLTIP": "Total number of responses collected" + "LABEL": "Kopējais atbilžu skaits", + "TOOLTIP": "Kopējais apkopoto atbilžu skaits" }, "SATISFACTION_SCORE": { - "LABEL": "Satisfaction score", - "TOOLTIP": "Total number of positive responses / Total number of responses * 100" + "LABEL": "Apmierinātības rādītājs", + "TOOLTIP": "Kopējais pozitīvo atbilžu skaits / Kopējais atbilžu skaits * 100" }, "RESPONSE_RATE": { - "LABEL": "Response rate", - "TOOLTIP": "Total number of responses / Total number of CSAT survey messages sent * 100" + "LABEL": "Atbildes ātrums", + "TOOLTIP": "Kopējais atbilžu skaits / Kopējais nosūtīto CSAT aptaujas ziņojumu skaits * 100" } } }, "OVERVIEW_REPORTS": { - "HEADER": "Overview", - "LIVE": "Live", + "HEADER": "Pārskats", + "LIVE": "Tiešraide", "ACCOUNT_CONVERSATIONS": { - "HEADER": "Open Conversations", - "LOADING_MESSAGE": "Loading conversation metrics...", - "OPEN": "Open", - "UNATTENDED": "Unattended", - "UNASSIGNED": "Unassigned" + "HEADER": "Atvērt Sarunas", + "LOADING_MESSAGE": "Notiek sarunu metrikas ielāde...", + "OPEN": "Atvērt", + "UNATTENDED": "Bez uzraudzības", + "UNASSIGNED": "Nav piešķirtas" }, "AGENT_CONVERSATIONS": { - "HEADER": "Conversations by agents", - "LOADING_MESSAGE": "Loading agent metrics...", - "NO_AGENTS": "There are no conversations by agents", + "HEADER": "Aģentu sarunas", + "LOADING_MESSAGE": "Notiek aģentu metrikas ielāde...", + "NO_AGENTS": "Aģentu sarunas nenotiek", "TABLE_HEADER": { - "AGENT": "Agent", - "OPEN": "OPEN", - "UNATTENDED": "Unattended", - "STATUS": "Status" + "AGENT": "Aģents", + "OPEN": "ATVĒRT", + "UNATTENDED": "Bez uzraudzības", + "STATUS": "Statuss" } }, "AGENT_STATUS": { - "HEADER": "Agent status", - "ONLINE": "Online", - "BUSY": "Busy", - "OFFLINE": "Offline" + "HEADER": "Aģenta statuss", + "ONLINE": "Tiešsaistē", + "BUSY": "Aizņemts", + "OFFLINE": "Bezsaistē" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/resetPassword.json b/app/javascript/dashboard/i18n/locale/lv/resetPassword.json index bb678e809..4cca9bc79 100644 --- a/app/javascript/dashboard/i18n/locale/lv/resetPassword.json +++ b/app/javascript/dashboard/i18n/locale/lv/resetPassword.json @@ -1,15 +1,15 @@ { "RESET_PASSWORD": { - "TITLE": "Reset Password", + "TITLE": "Atiestatīt Paroli", "EMAIL": { - "LABEL": "Email", - "PLACEHOLDER": "Please enter your email", - "ERROR": "Please enter a valid email" + "LABEL": "E-pasts", + "PLACEHOLDER": "Lūdzu, ievadiet savu e-pastu", + "ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi" }, "API": { - "SUCCESS_MESSAGE": "Password reset link has been sent to your email", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Paroles atiestatīšanas saite ir nosūtīta uz jūsu e-pastu", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json b/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json index ec2d94744..4da6b70c3 100644 --- a/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json +++ b/app/javascript/dashboard/i18n/locale/lv/setNewPassword.json @@ -1,23 +1,23 @@ { "SET_NEW_PASSWORD": { - "TITLE": "Set New Password", + "TITLE": "Iestatiet Jaunu Paroli", "PASSWORD": { - "LABEL": "Password", - "PLACEHOLDER": "Password", - "ERROR": "Password is too short" + "LABEL": "Parole", + "PLACEHOLDER": "Parole", + "ERROR": "Parole ir pārāk īsa" }, "CONFIRM_PASSWORD": { - "LABEL": "Confirm Password", - "PLACEHOLDER": "Confirm Password", - "ERROR": "Passwords do not match" + "LABEL": "Apstipriniet Paroli", + "PLACEHOLDER": "Apstipriniet Paroli", + "ERROR": "Paroles nesakrīt" }, "API": { - "SUCCESS_MESSAGE": "Successfully changed the password", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Parole ir veiksmīgi nomainīta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "CAPTCHA": { - "ERROR": "Verification expired. Please solve captcha again." + "ERROR": "Verifikācijas derīguma termiņš ir beidzies. Lūdzu, vēlreiz atrisiniet captcha." }, - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json index 7994321cc..9dd273978 100644 --- a/app/javascript/dashboard/i18n/locale/lv/settings.json +++ b/app/javascript/dashboard/i18n/locale/lv/settings.json @@ -1,264 +1,264 @@ { "PROFILE_SETTINGS": { - "LINK": "Profile Settings", - "TITLE": "Profile Settings", - "BTN_TEXT": "Update Profile", - "DELETE_AVATAR": "Delete Avatar", - "AVATAR_DELETE_SUCCESS": "Avatar has been deleted successfully", - "AVATAR_DELETE_FAILED": "There is an error while deleting avatar, please try again", - "UPDATE_SUCCESS": "Your profile has been updated successfully", - "PASSWORD_UPDATE_SUCCESS": "Your password has been changed successfully", - "AFTER_EMAIL_CHANGED": "Your profile has been updated successfully, please login again as your login credentials are changed", + "LINK": "Profila Iestatījumi", + "TITLE": "Profila Iestatījumi", + "BTN_TEXT": "Atjaunināt Profilu", + "DELETE_AVATAR": "Dzēst Avatāru", + "AVATAR_DELETE_SUCCESS": "Avatārs ir veiksmīgi izdzēsts", + "AVATAR_DELETE_FAILED": "Avatāra dzēšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz", + "UPDATE_SUCCESS": "Jūsu profils ir veiksmīgi atjaunināts", + "PASSWORD_UPDATE_SUCCESS": "Jūsu parole ir veiksmīgi nomainīta", + "AFTER_EMAIL_CHANGED": "Jūsu profils ir veiksmīgi atjaunināts. Lūdzu, atkārtoti pierakstieties, jo Jūsu akreditācijas dati ir mainīti", "FORM": { - "AVATAR": "Profile Image", - "ERROR": "Please fix form errors", - "REMOVE_IMAGE": "Remove", - "UPLOAD_IMAGE": "Upload image", - "UPDATE_IMAGE": "Update image", + "AVATAR": "Profila Attēls", + "ERROR": "Lūdzu, izlabojiet veidlapas kļūdas", + "REMOVE_IMAGE": "Noņemt", + "UPLOAD_IMAGE": "Augšupielādēt attēlu", + "UPDATE_IMAGE": "Atjaunināt attēlu", "PROFILE_SECTION": { - "TITLE": "Profile", - "NOTE": "Your email address is your identity and is used to log in." + "TITLE": "Profils", + "NOTE": "Jūsu e -pasta adrese ir jūsu identitāte, un to izmanto lai pierakstītos." }, "MESSAGE_SIGNATURE_SECTION": { - "TITLE": "Personal message signature", - "NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.", - "BTN_TEXT": "Save message signature", - "API_ERROR": "Couldn't save signature! Try again", - "API_SUCCESS": "Signature saved successfully" + "TITLE": "Personīgais ziņojuma paraksts", + "NOTE": "Izveidojiet personīgu ziņojumu parakstu, kas tiks pievienots visiem ziņojumiem, kurus nosūtat no jūsu e -pasta iesūtnes. Izmantojiet bagātīgā satura redaktoru, lai izveidotu īpaši personalizētu parakstu.", + "BTN_TEXT": "Saglabāt ziņojuma parakstu", + "API_ERROR": "Nevarēja saglabāt parakstu! Lūdzu, mēģiniet vēlreiz", + "API_SUCCESS": "Paraksts ir veiksmīgi saglabāts" }, "MESSAGE_SIGNATURE": { - "LABEL": "Message Signature", - "ERROR": "Message Signature cannot be empty", - "PLACEHOLDER": "Insert your personal message signature here." + "LABEL": "Ziņojuma Paraksts", + "ERROR": "Ziņojuma Paraksts nevar būt tukšs", + "PLACEHOLDER": "Ievietojiet savu personīgo ziņojumu parakstu šeit." }, "PASSWORD_SECTION": { - "TITLE": "Password", - "NOTE": "Updating your password would reset your logins in multiple devices.", - "BTN_TEXT": "Change password" + "TITLE": "Parole", + "NOTE": "Paroles atjaunināšana varētu atiestatīt jūsu pierakstīšanos vairākās ierīcēs.", + "BTN_TEXT": "Mainīt paroli" }, "ACCESS_TOKEN": { - "TITLE": "Access Token", - "NOTE": "This token can be used if you are building an API based integration" + "TITLE": "Piekļuves Token", + "NOTE": "Šo token var izmantot, ja veidojat uz API balstītu integrāciju" }, "AUDIO_NOTIFICATIONS_SECTION": { - "TITLE": "Audio Notifications", - "NOTE": "Enable audio notifications in dashboard for new messages and conversations.", - "NONE": "None", - "ASSIGNED": "Assigned Conversations", - "ALL_CONVERSATIONS": "All Conversations" + "TITLE": "Audio Paziņojumi", + "NOTE": "Iespējot audio paziņojumus informācijas panelī jauniem ziņojumiem un sarunām.", + "NONE": "Nav", + "ASSIGNED": "Piešķirtās Sarunas", + "ALL_CONVERSATIONS": "Visas Sarunas" }, "EMAIL_NOTIFICATIONS_SECTION": { - "TITLE": "Email Notifications", - "NOTE": "Update your email notification preferences here", - "CONVERSATION_ASSIGNMENT": "Send email notifications when a conversation is assigned to me", - "CONVERSATION_CREATION": "Send email notifications when a new conversation is created", - "CONVERSATION_MENTION": "Send email notifications when you are mentioned in a conversation", - "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send email notifications when a new message is created in an assigned conversation" + "TITLE": "E-pasta Ziņojumi", + "NOTE": "Atjauniniet savas e -pasta paziņojumu preferences šeit", + "CONVERSATION_ASSIGNMENT": "Nosūtīt e -pasta paziņojumus, kad man tiek piešķirta saruna", + "CONVERSATION_CREATION": "Nosūtīt e -pasta paziņojumus, kad tiek izveidota jauna saruna", + "CONVERSATION_MENTION": "Nosūtīt e -pasta paziņojumus, kad tiekat pieminēts sarunā", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nosūtīt e -pasta paziņojumus, kad piešķirtā sarunā tiek izveidots jauns ziņojums" }, "API": { - "UPDATE_SUCCESS": "Your notification preferences are updated successfully", - "UPDATE_ERROR": "There is an error while updating the preferences, please try again" + "UPDATE_SUCCESS": "Jūsu paziņojumu preferences ir veiksmīgi atjauninātas", + "UPDATE_ERROR": "Preferenču atjaunināšanas laikā radās kļūda. Lūdzu, mēģiniet vēlreiz" }, "PUSH_NOTIFICATIONS_SECTION": { - "TITLE": "Push Notifications", - "NOTE": "Update your push notification preferences here", - "CONVERSATION_ASSIGNMENT": "Send push notifications when a conversation is assigned to me", - "CONVERSATION_CREATION": "Send push notifications when a new conversation is created", - "CONVERSATION_MENTION": "Send push notifications when you are mentioned in a conversation", - "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Send push notifications when a new message is created in an assigned conversation", - "HAS_ENABLED_PUSH": "You have enabled push for this browser.", - "REQUEST_PUSH": "Enable push notifications" + "TITLE": "Push Paziņojumi", + "NOTE": "Atjauniniet savas Push paziņojumu preferences šeit", + "CONVERSATION_ASSIGNMENT": "Nosūtīt push paziņojumus, kad man tiek piešķirta saruna", + "CONVERSATION_CREATION": "Nosūtīt push paziņojumus, kad tiek izveidota jauna saruna", + "CONVERSATION_MENTION": "Nosūtīt push paziņojumus, kad tiekat pieminēts sarunā", + "ASSIGNED_CONVERSATION_NEW_MESSAGE": "Nosūtīt push paziņojumus, kad piešķirtā sarunā tiek izveidots jauns ziņojums", + "HAS_ENABLED_PUSH": "Jūs esat iespējojis push šajā pārlūkprogrammā.", + "REQUEST_PUSH": "Iespējot push paziņojumus" }, "PROFILE_IMAGE": { - "LABEL": "Profile Image" + "LABEL": "Profila Attēls" }, "NAME": { - "LABEL": "Your full name", - "ERROR": "Please enter a valid full name", - "PLACEHOLDER": "Please enter your full name" + "LABEL": "Jūsu pilnais vārds", + "ERROR": "Lūdzu, ievadiet derīgu pilnu vārdu", + "PLACEHOLDER": "Lūdzu, ievadiet savu pilno vārdu" }, "DISPLAY_NAME": { - "LABEL": "Display name", - "ERROR": "Please enter a valid display name", - "PLACEHOLDER": "Please enter a display name, this would be displayed in conversations" + "LABEL": "Parādāmais vārds", + "ERROR": "Lūdzu, ievadiet derīgu parādāmo vārdu", + "PLACEHOLDER": "Lūdzu, ievadiet parādāmo vārdu, tas tiks parādīts sarunās" }, "AVAILABILITY": { - "LABEL": "Availability", + "LABEL": "Pieejamība", "STATUSES_LIST": [ - "Online", - "Busy", - "Offline" + "Tiešsaistē", + "Aizņemts", + "Bezsaistē" ] }, "EMAIL": { - "LABEL": "Your email address", - "ERROR": "Please enter a valid email address", - "PLACEHOLDER": "Please enter your email address, this would be displayed in conversations" + "LABEL": "Jūsu e-pasta adrese", + "ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi", + "PLACEHOLDER": "Lūdzu, ievadiet savu e-pasta adresi, tā tiks parādīta sarunās" }, "CURRENT_PASSWORD": { - "LABEL": "Current password", - "ERROR": "Please enter the current password", - "PLACEHOLDER": "Please enter the current password" + "LABEL": "Pašreizējā parole", + "ERROR": "Lūdzu, ievadiet pašreizējo paroli", + "PLACEHOLDER": "Lūdzu, ievadiet pašreizējo paroli" }, "PASSWORD": { - "LABEL": "New password", - "ERROR": "Please enter a password of length 6 or more", - "PLACEHOLDER": "Please enter a new password" + "LABEL": "Jauna parole", + "ERROR": "Lūdzu, ievadiet paroli, kuras garums ir 6 vai vairāk simboli", + "PLACEHOLDER": "Lūdzu, ievadiet jauno paroli" }, "PASSWORD_CONFIRMATION": { - "LABEL": "Confirm new password", - "ERROR": "Confirm password should match the password", - "PLACEHOLDER": "Please re-enter your new password" + "LABEL": "Apstipriniet jauno paroli", + "ERROR": "Apstiprinājuma parolei ir jāsakrīt ar paroli", + "PLACEHOLDER": "Lūdzu, vēlreiz ievadiet savu jauno paroli" } } }, "SIDEBAR_ITEMS": { - "CHANGE_AVAILABILITY_STATUS": "Change", - "CHANGE_ACCOUNTS": "Switch Account", - "CONTACT_SUPPORT": "Contact Support", - "SELECTOR_SUBTITLE": "Select an account from the following list", - "PROFILE_SETTINGS": "Profile Settings", - "KEYBOARD_SHORTCUTS": "Keyboard Shortcuts", - "LOGOUT": "Logout" + "CHANGE_AVAILABILITY_STATUS": "Mainīt", + "CHANGE_ACCOUNTS": "Pārslēgt Kontu", + "CONTACT_SUPPORT": "Sazināties ar Atbalsta Dienestu", + "SELECTOR_SUBTITLE": "Izvēlieties kontu no šī saraksta", + "PROFILE_SETTINGS": "Profila Iestatījumi", + "KEYBOARD_SHORTCUTS": "Tastatūras Īsinājumtaustiņi", + "LOGOUT": "Izrakstīties" }, "APP_GLOBAL": { - "TRIAL_MESSAGE": "days trial remaining.", - "TRAIL_BUTTON": "Buy Now", - "DELETED_USER": "Deleted User", + "TRIAL_MESSAGE": "izmēģinājuma dienas atlikušas.", + "TRAIL_BUTTON": "Pirkt Tagad", + "DELETED_USER": "Dzēsts Lietotājs", "ACCOUNT_SUSPENDED": { - "TITLE": "Account Suspended", - "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + "TITLE": "Konts Iesaldēts", + "MESSAGE": "Jūsu konts ir iesaldēts. Lai iegūtu papildu informāciju, lūdzu, sazinieties ar atbalsta komandu." } }, "COMPONENTS": { "CODE": { - "BUTTON_TEXT": "Copy", - "COPY_SUCCESSFUL": "Code copied to clipboard successfully" + "BUTTON_TEXT": "Kopēt", + "COPY_SUCCESSFUL": "Kods ir veiksmīgi nokopēts uz clipboard" }, "SHOW_MORE_BLOCK": { - "SHOW_MORE": "Show More", - "SHOW_LESS": "Show Less" + "SHOW_MORE": "Parādīt Vairāk", + "SHOW_LESS": "Parādīt Mazāk" }, "FILE_BUBBLE": { - "DOWNLOAD": "Download", - "UPLOADING": "Uploading..." + "DOWNLOAD": "Lejupielādēt", + "UPLOADING": "Notiek augšupielāde..." }, "FORM_BUBBLE": { - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" } }, - "CONFIRM_EMAIL": "Verifying...", + "CONFIRM_EMAIL": "Notiek pārbaude...", "SETTINGS": { "INBOXES": { - "NEW_INBOX": "Add Inbox" + "NEW_INBOX": "Pievienot Iesūtni" } }, "SIDEBAR": { - "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", - "SWITCH": "Switch", - "CONVERSATIONS": "Conversations", - "ALL_CONVERSATIONS": "All Conversations", - "MENTIONED_CONVERSATIONS": "Mentions", - "REPORTS": "Reports", - "SETTINGS": "Settings", - "CONTACTS": "Contacts", - "HOME": "Home", - "AGENTS": "Agents", - "INBOXES": "Inboxes", - "NOTIFICATIONS": "Notifications", - "CANNED_RESPONSES": "Canned Responses", - "INTEGRATIONS": "Integrations", - "PROFILE_SETTINGS": "Profile Settings", - "ACCOUNT_SETTINGS": "Account Settings", - "APPLICATIONS": "Applications", - "LABELS": "Labels", - "CUSTOM_ATTRIBUTES": "Custom Attributes", - "AUTOMATION": "Automation", - "TEAMS": "Teams", - "BILLING": "Billing", - "CUSTOM_VIEWS_FOLDER": "Folders", - "CUSTOM_VIEWS_SEGMENTS": "Segments", - "ALL_CONTACTS": "All Contacts", - "TAGGED_WITH": "Tagged with", - "NEW_LABEL": "New label", - "NEW_TEAM": "New team", - "NEW_INBOX": "New inbox", - "REPORTS_CONVERSATION": "Conversations", + "CURRENTLY_VIEWING_ACCOUNT": "Pašlaik skatās:", + "SWITCH": "Pārslēgt", + "CONVERSATIONS": "Sarunas", + "ALL_CONVERSATIONS": "Visas Sarunas", + "MENTIONED_CONVERSATIONS": "Pieminēšanas", + "REPORTS": "Pārskati", + "SETTINGS": "Iestatījumi", + "CONTACTS": "Kontaktpersonas", + "HOME": "Sākums", + "AGENTS": "Aģenti", + "INBOXES": "Iesūtnes", + "NOTIFICATIONS": "Paziņojumi", + "CANNED_RESPONSES": "Sagatavotās Atbildes", + "INTEGRATIONS": "Integrācijas", + "PROFILE_SETTINGS": "Profila Iestatījumi", + "ACCOUNT_SETTINGS": "Konta Iestatījumi", + "APPLICATIONS": "Lietojumprogrammas", + "LABELS": "Etiķetes", + "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības", + "AUTOMATION": "Automatizācija", + "TEAMS": "Komandas", + "BILLING": "Norēķini", + "CUSTOM_VIEWS_FOLDER": "Mapes", + "CUSTOM_VIEWS_SEGMENTS": "Segmenti", + "ALL_CONTACTS": "Visi Kontakti", + "TAGGED_WITH": "Marķēts ar", + "NEW_LABEL": "Jauna etiķete", + "NEW_TEAM": "Jauna komanda", + "NEW_INBOX": "Jauna iesūtne", + "REPORTS_CONVERSATION": "Sarunas", "CSAT": "CSAT", - "CAMPAIGNS": "Campaigns", - "ONGOING": "Ongoing", - "ONE_OFF": "One off", - "REPORTS_AGENT": "Agents", - "REPORTS_LABEL": "Labels", - "REPORTS_INBOX": "Inbox", - "REPORTS_TEAM": "Team", - "SET_AVAILABILITY_TITLE": "Set yourself as", + "CAMPAIGNS": "Kampaņas", + "ONGOING": "Notiekošs", + "ONE_OFF": "Vienreizējs", + "REPORTS_AGENT": "Aģenti", + "REPORTS_LABEL": "Etiķetes", + "REPORTS_INBOX": "Iesūtne", + "REPORTS_TEAM": "Komanda", + "SET_AVAILABILITY_TITLE": "Iestatīt sevi kā", "BETA": "Beta", - "REPORTS_OVERVIEW": "Overview", - "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", + "REPORTS_OVERVIEW": "Pārskats", + "FACEBOOK_REAUTHORIZE": "Jūsu Facebook savienojuma derīguma termiņš ir beidzies. Lūdzu, atkārtoti pievienojiet savu Facebook lapu, lai turpinātu pakalpojumus", "HELP_CENTER": { - "ALL_ARTICLES": "All Articles", - "MY_ARTICLES": "My Articles", - "DRAFT": "Draft", - "ARCHIVED": "Archived", - "CATEGORY": "Category", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "TITLE": "Palīdzības Centrs (Beta)", + "ALL_ARTICLES": "Visi Raksti", + "MY_ARTICLES": "Mani Raksti", + "DRAFT": "Melnraksts", + "ARCHIVED": "Arhivēts", + "CATEGORY": "Kategorija", + "CATEGORY_EMPTY_MESSAGE": "Kategorijas nav atrastas" }, - "DOCS": "Read docs" + "DOCS": "Lasīt dokumentus" }, "BILLING_SETTINGS": { - "TITLE": "Billing", + "TITLE": "Norēķini", "CURRENT_PLAN": { - "TITLE": "Current Plan", - "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + "TITLE": "Pašreizējais Norēķinu Plāns", + "PLAN_NOTE": "Šobrīd Jūs abonējat **%{plan}** plānu ar **%{quantity}** licencēm" }, "MANAGE_SUBSCRIPTION": { - "TITLE": "Manage your subscription", - "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", - "BUTTON_TXT": "Go to the billing portal" + "TITLE": "Pārvaldīt savu abonementu", + "DESCRIPTION": "Apskatīt iepriekšējos rēķinus, rediģēt norēķinu informāciju vai atcelt abonementu.", + "BUTTON_TXT": "Doties uz norēķinu portālu" }, "CHAT_WITH_US": { - "TITLE": "Need help?", - "DESCRIPTION": "Do you face any issues in billing? We are here to help.", - "BUTTON_TXT": "Chat with us" + "TITLE": "Nepieciešama palīdzība?", + "DESCRIPTION": "Vai Jūs saskārāties ar kādām problēmām norēķinu laikā? Mēs esam šeit, lai palīdzētu.", + "BUTTON_TXT": "Tērzēt ar mums" }, - "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + "NO_BILLING_USER": "Jūsu norēķinu konts tiek konfigurēts. Lūdzu, atsvaidziniet lapu un mēģiniet vēlreiz." }, "CREATE_ACCOUNT": { - "NO_ACCOUNT_WARNING": "Uh oh! We could not find any Chatwoot accounts. Please create a new account to continue.", - "NEW_ACCOUNT": "New Account", - "SELECTOR_SUBTITLE": "Create a new account", + "NO_ACCOUNT_WARNING": "Ak, vai! Mēs nevarējām atrast nevienu chatwoot kontu. Lūdzu, izveidojiet jaunu kontu, lai turpinātu.", + "NEW_ACCOUNT": "Jauns Konts", + "SELECTOR_SUBTITLE": "Izveidot jaunu kontu", "API": { - "SUCCESS_MESSAGE": "Account created successfully", - "EXIST_MESSAGE": "Account already exists", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Konts ir veiksmīgi izveidots", + "EXIST_MESSAGE": "Konts jau pastāv", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, "FORM": { "NAME": { - "LABEL": "Account Name", + "LABEL": "Konta Nosaukums", "PLACEHOLDER": "Wayne Enterprises" }, - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" } }, "KEYBOARD_SHORTCUTS": { "TITLE": { - "OPEN_CONVERSATION": "Open conversation", - "RESOLVE_AND_NEXT": "Resolve and move to next", - "NAVIGATE_DROPDOWN": "Navigate dropdown items", - "RESOLVE_CONVERSATION": "Resolve Conversation", - "GO_TO_CONVERSATION_DASHBOARD": "Go to Conversation Dashboard", - "ADD_ATTACHMENT": "Add Attachment", - "GO_TO_CONTACTS_DASHBOARD": "Go to Contacts Dashboard", - "TOGGLE_SIDEBAR": "Toggle Sidebar", - "GO_TO_REPORTS_SIDEBAR": "Go to Reports sidebar", - "MOVE_TO_NEXT_TAB": "Move to next tab in conversation list", - "GO_TO_SETTINGS": "Go to Settings", - "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", - "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", - "SWITCH_TO_REPLY": "Switch to Reply", - "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" + "OPEN_CONVERSATION": "Atvērt sarunu", + "RESOLVE_AND_NEXT": "Atrisināt un pāriet uz nākamo", + "NAVIGATE_DROPDOWN": "Pārvietoties starp nolaižamā saraksta vienumiem", + "RESOLVE_CONVERSATION": "Atrisināt Sarunu", + "GO_TO_CONVERSATION_DASHBOARD": "Doties uz Sarunu Informācijas Paneli", + "ADD_ATTACHMENT": "Pievienot Pielikumu", + "GO_TO_CONTACTS_DASHBOARD": "Doties uz Kontaktu Informācijas Paneli", + "TOGGLE_SIDEBAR": "Pārslēgt Sānjoslu", + "GO_TO_REPORTS_SIDEBAR": "Doties uz Pārskatu sānjoslu", + "MOVE_TO_NEXT_TAB": "Pāriet uz sarunu saraksta nākamo cilni", + "GO_TO_SETTINGS": "Doties uz Iestatījumiem", + "SWITCH_CONVERSATION_STATUS": "Pārslēgties uz nākamās sarunas statusu", + "SWITCH_TO_PRIVATE_NOTE": "Pārslēgties uz Privāto Piezīmi", + "SWITCH_TO_REPLY": "Pārslēgties uz Atbildi", + "TOGGLE_SNOOZE_DROPDOWN": "Pārslēgt atlikšanas nolaižamo izvēlni" }, "KEYS": { "WINDOWS_KEY_AND_COMMAND_KEY": "Win / ⌘", diff --git a/app/javascript/dashboard/i18n/locale/lv/signup.json b/app/javascript/dashboard/i18n/locale/lv/signup.json index 8dd5c0d4e..f5363b63d 100644 --- a/app/javascript/dashboard/i18n/locale/lv/signup.json +++ b/app/javascript/dashboard/i18n/locale/lv/signup.json @@ -1,39 +1,39 @@ { "REGISTER": { - "TRY_WOOT": "Register an account", - "TITLE": "Register", - "TERMS_ACCEPT": "By signing up, you agree to our T & C and Privacy policy", + "TRY_WOOT": "Reģistrēt kontu", + "TITLE": "Reģistrēt", + "TERMS_ACCEPT": "Reģistrējoties Jūs piekrītat mūsu T & C un Konfidencialitātes Politikai", "ACCOUNT_NAME": { - "LABEL": "Account name", - "PLACEHOLDER": "Enter an account name. eg: Wayne Enterprises", - "ERROR": "Account name is too short" + "LABEL": "Konta nosaukums", + "PLACEHOLDER": "Ievadiet konta nosaukumu. Piemēram: Wayne Enterprises", + "ERROR": "Konta nosaukums ir pārāk īss" }, "FULL_NAME": { - "LABEL": "Full name", - "PLACEHOLDER": "Enter your full name. eg: Bruce Wayne", - "ERROR": "Full name is too short" + "LABEL": "Pilnais vārds", + "PLACEHOLDER": "Ievadiet savu pilno vārdu. Piemēram: Bruce Wayne", + "ERROR": "Pilnais vārds ir pārāk īss" }, "EMAIL": { - "LABEL": "Work email", - "PLACEHOLDER": "Enter your work email address. eg: bruce@wayne.enterprises", - "ERROR": "Email address is invalid" + "LABEL": "Darba e-pasts", + "PLACEHOLDER": "Ievadiet savu darba e-pasta adresi. Piemēram: bruce@wayne.enterprises", + "ERROR": "E-pasta adrese nav derīga" }, "PASSWORD": { - "LABEL": "Password", - "PLACEHOLDER": "Password", - "ERROR": "Password is too short", - "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character" + "LABEL": "Parole", + "PLACEHOLDER": "Parole", + "ERROR": "Parole ir pārāk īsa", + "IS_INVALID_PASSWORD": "Parolei ir jāsatur vismaz 1 lielais burts, 1 mazais burts, 1 cipars un 1 speciālā rakstzīme" }, "CONFIRM_PASSWORD": { - "LABEL": "Confirm Password", - "PLACEHOLDER": "Confirm Password", - "ERROR": "Password doesnot match" + "LABEL": "Apstipriniet Paroli", + "PLACEHOLDER": "Apstipriniet Paroli", + "ERROR": "Parole nesakrīt" }, "API": { - "SUCCESS_MESSAGE": "Registration Successfull", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Reģistrācija sekmīga", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" }, - "SUBMIT": "Submit", - "HAVE_AN_ACCOUNT": "Already have an account?" + "SUBMIT": "Iesniegt", + "HAVE_AN_ACCOUNT": "Jau ir konts?" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json index f9ecaaaae..960b5b26d 100644 --- a/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json +++ b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json @@ -1,125 +1,125 @@ { "TEAMS_SETTINGS": { - "NEW_TEAM": "Create new team", - "HEADER": "Teams", - "SIDEBAR_TXT": "

Teams

Teams let you organize your agents into groups based on their responsibilities.
An agent can be part of multiple teams. You can assign conversations to a team when you are working collaboratively.

", + "NEW_TEAM": "Izveidot jaunu komandu", + "HEADER": "Komandas", + "SIDEBAR_TXT": "

Komandas

Komandas ļauj kārtot aģentus grupās, pamatojoties uz viņu pienākumiem.
Aģents var atrasties vairākās komandās. Jūs varat piešķirt sarunas komandai, kad sadarbojaties.

", "LIST": { - "404": "There are no teams created on this account.", - "EDIT_TEAM": "Edit team" + "404": "Šajā kontā nav izveidota neviena komanda.", + "EDIT_TEAM": "Rediģēt komandu" }, "CREATE_FLOW": { "CREATE": { - "TITLE": "Create a new team", - "DESC": "Add a title and description to your new team." + "TITLE": "Izveidojiet jaunu komandu", + "DESC": "Pievienot savai jaunajai komandai nosaukumu un aprakstu." }, "AGENTS": { - "BUTTON_TEXT": "Add agents to team", - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation." + "BUTTON_TEXT": "Pievienot komandai aģentus", + "TITLE": "Pievienot aģentus komandai - %{teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Tas ļauj sarunās sadarboties kā komandai, kā arī saņemt paziņojumus par jauniem notikumiem tajā pašā sarunā." }, "WIZARD": [ { - "title": "Create", + "title": "Izveidot", "route": "settings_teams_new", - "body": "Create a new team of agents." + "body": "Izveidot jaunu aģentu komandu." }, { - "title": "Add Agents", + "title": "Pievienot Aģentus", "route": "settings_teams_add_agents", - "body": "Add agents to the team." + "body": "Pievienot komandai aģentus." }, { - "title": "Finish", + "title": "Pabeigt", "route": "settings_teams_finish", - "body": "You are all set to go!" + "body": "Jūs varat sākt darboties!" } ] }, "EDIT_FLOW": { "CREATE": { - "TITLE": "Edit your team details", - "DESC": "Edit title and description to your team.", - "BUTTON_TEXT": "Update team" + "TITLE": "Rediģēt savas komandas informāciju", + "DESC": "Rediģēt savas komandas nosaukumu un aprakstu.", + "BUTTON_TEXT": "Atjaunināt komandu" }, "AGENTS": { - "BUTTON_TEXT": "Update agents in team", - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. All the added agents will be notified when a conversation is assigned to this team." + "BUTTON_TEXT": "Atjaunināt aģentus komandā", + "TITLE": "Pievienot aģentus komandai - %{teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Visi pievienotie aģenti tiks informēti, kad saruna tiks piešķirta šai komandai." }, "WIZARD": [ { - "title": "Team details", + "title": "Komandas informācija", "route": "settings_teams_edit", - "body": "Change name, description and other details." + "body": "Mainīt nosaukumu, aprakstu un citu informāciju." }, { - "title": "Edit Agents", + "title": "Rediģēt Aģentus", "route": "settings_teams_edit_members", - "body": "Edit agents in your team." + "body": "Rediģēt savas komandas aģentus." }, { - "title": "Finish", + "title": "Pabeigt", "route": "settings_teams_edit_finish", - "body": "You are all set to go!" + "body": "Jūs varat sākt darboties!" } ] }, "TEAM_FORM": { - "ERROR_MESSAGE": "Couldn't save the team details. Try again." + "ERROR_MESSAGE": "Nevarēja saglabāt komandas informāciju. Lūdzu, mēģiniet vēlreiz." }, "AGENTS": { - "AGENT": "AGENT", - "EMAIL": "EMAIL", - "BUTTON_TEXT": "Add agents", - "ADD_AGENTS": "Adding Agents to your Team...", - "SELECT": "select", - "SELECT_ALL": "select all agents", - "SELECTED_COUNT": "%{selected} out of %{total} agents selected." + "AGENT": "AĢENTS", + "EMAIL": "e-pasts", + "BUTTON_TEXT": "Pievienot aģentus", + "ADD_AGENTS": "Notiek aģentu pievienošana Jūsu komandai...", + "SELECT": "izvēlēties", + "SELECT_ALL": "izvēlēties visus aģentus", + "SELECTED_COUNT": "%{selected} no %{total} aģentiem ir izvēlēti." }, "ADD": { - "TITLE": "Add agents to team - %{teamName}", - "DESC": "Add Agents to your newly created team. This lets you collaborate as a team on conversations, get notified on new events in the same conversation.", - "SELECT": "select", - "SELECT_ALL": "select all agents", - "SELECTED_COUNT": "%{selected} out of %{total} agents selected.", - "BUTTON_TEXT": "Add agents", - "AGENT_VALIDATION_ERROR": "Select at least one agent." + "TITLE": "Pievienot aģentus komandai - %{teamName}", + "DESC": "Pievienot aģentus savai jaunizveidotajai komandai. Tas ļauj sarunās sadarboties kā komandai, kā arī saņemt paziņojumus par jauniem notikumiem tajā pašā sarunā.", + "SELECT": "izvēlēties", + "SELECT_ALL": "izvēlēties visus aģentus", + "SELECTED_COUNT": "%{selected} no %{total} aģentiem ir atlasīti.", + "BUTTON_TEXT": "Pievienot aģentus", + "AGENT_VALIDATION_ERROR": "Izvēlieties vismaz vienu aģentu." }, "FINISH": { - "TITLE": "Your team is ready!", - "MESSAGE": "You can now collaborate as a team on conversations. Happy supporting ", - "BUTTON_TEXT": "Finish" + "TITLE": "Jūsu komanda ir gatava!", + "MESSAGE": "Tagad Jūs sarunās varat sadarboties kā komanda. Laimīgu atbalstu ", + "BUTTON_TEXT": "Pabeigt" }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Dzēst", "API": { - "SUCCESS_MESSAGE": "Team deleted successfully.", - "ERROR_MESSAGE": "Couldn't delete the team. Try again." + "SUCCESS_MESSAGE": "Komanda ir veiksmīgi izdzēsa.", + "ERROR_MESSAGE": "Nevarēja izdzēst komandu. Lūdzu, mēģiniet vēlreiz." }, "CONFIRM": { - "TITLE": "Are you sure want to delete - %{teamName}", - "PLACE_HOLDER": "Please type {teamName} to confirm", - "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", - "YES": "Delete ", - "NO": "Cancel" + "TITLE": "Vai esat pārliecināts, ka vēlaties izdzēst - %{teamName}", + "PLACE_HOLDER": "Lūdzu, uzrakstiet {teamName} lai apstiprinātu", + "MESSAGE": "Komandas dzēšana noņems komandas uzdevumu no sarunām, kas piešķirtas šai komandai.", + "YES": "Dzēst ", + "NO": "Atcelt" } }, - "SETTINGS": "Settings", + "SETTINGS": "Iestatījumi", "FORM": { - "UPDATE": "Update team", - "CREATE": "Create team", + "UPDATE": "Atjaunināt komandu", + "CREATE": "Izveidot komandu", "NAME": { - "LABEL": "Team name", - "PLACEHOLDER": "Example: Sales, Customer Support" + "LABEL": "Komandas nosaukums", + "PLACEHOLDER": "Piemēram: Pārdošana, Klientu Atbalsts" }, "DESCRIPTION": { - "LABEL": "Team Description", - "PLACEHOLDER": "Short description about this team." + "LABEL": "Komandas Apraksts", + "PLACEHOLDER": "Īss apraksts par šo komandu." }, "AUTO_ASSIGN": { - "LABEL": "Allow auto assign for this team." + "LABEL": "Atļaut automātiskai piešķirt šai komandai." }, - "SUBMIT_CREATE": "Create team" + "SUBMIT_CREATE": "Izveidot komandu" } } } diff --git a/app/javascript/dashboard/i18n/locale/lv/webhooks.json b/app/javascript/dashboard/i18n/locale/lv/webhooks.json index 347c96893..f42fe4031 100644 --- a/app/javascript/dashboard/i18n/locale/lv/webhooks.json +++ b/app/javascript/dashboard/i18n/locale/lv/webhooks.json @@ -1,5 +1,5 @@ { "WEBHOOKS_SETTINGS": { - "HEADER": "Webhook Settings" + "HEADER": "Webhook Iestatījumi" } } diff --git a/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json index bbcf28156..5efbf01eb 100644 --- a/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json +++ b/app/javascript/dashboard/i18n/locale/lv/whatsappTemplates.json @@ -1,25 +1,25 @@ { "WHATSAPP_TEMPLATES": { "MODAL": { - "TITLE": "Whatsapp Templates", - "SUBTITLE": "Select the whatsapp template you want to send", - "TEMPLATE_SELECTED_SUBTITLE": "Process %{templateName}" + "TITLE": "WhatsApp Veidnes", + "SUBTITLE": "Izvēlieties WhatsApp veidni, kuru vēlaties nosūtīt", + "TEMPLATE_SELECTED_SUBTITLE": "Apstrādāt %{templateName}" }, "PICKER": { - "SEARCH_PLACEHOLDER": "Search Templates", - "NO_TEMPLATES_FOUND": "No templates found for", + "SEARCH_PLACEHOLDER": "Meklēt Veidnes", + "NO_TEMPLATES_FOUND": "Veidnes nav atrastas", "LABELS": { - "LANGUAGE": "Language", - "TEMPLATE_BODY": "Template Body", - "CATEGORY": "Category" + "LANGUAGE": "Valoda", + "TEMPLATE_BODY": "Veidnes Pamatteksts", + "CATEGORY": "Kategorija" } }, "PARSER": { - "VARIABLES_LABEL": "Variables", - "VARIABLE_PLACEHOLDER": "Enter %{variable} value", - "GO_BACK_LABEL": "Go Back", - "SEND_MESSAGE_LABEL": "Send Message", - "FORM_ERROR_MESSAGE": "Please fill all variables before sending" + "VARIABLES_LABEL": "Mainīgie", + "VARIABLE_PLACEHOLDER": "Ievadiet %{variable} vērtību", + "GO_BACK_LABEL": "Atgriezties", + "SEND_MESSAGE_LABEL": "Sūtīt Ziņojumu", + "FORM_ERROR_MESSAGE": "Lūdzu, pirms nosūtīšanas aizpildiet visus mainīgos" } } } diff --git a/app/javascript/dashboard/i18n/locale/ml/contact.json b/app/javascript/dashboard/i18n/locale/ml/contact.json index 64cbfeb8f..28da9599f 100644 --- a/app/javascript/dashboard/i18n/locale/ml/contact.json +++ b/app/javascript/dashboard/i18n/locale/ml/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "ലഭ്യമല്ല", "EMAIL_ADDRESS": "ഇമെയിൽ വിലാസം", "PHONE_NUMBER": "ഫോൺ നമ്പർ", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "ക്ലിപ്പ്ബോർഡിലേക്ക് വിജയകരമായി പകർത്തി", "COMPANY": "കമ്പനി", "LOCATION": "സ്ഥാനം", diff --git a/app/javascript/dashboard/i18n/locale/ml/conversation.json b/app/javascript/dashboard/i18n/locale/ml/conversation.json index f6b76df89..f26377945 100644 --- a/app/javascript/dashboard/i18n/locale/ml/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ml/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "ഇടത് പാളിയിൽ നിന്ന് ഒരു സംഭാഷണം തിരഞ്ഞെടുക്കുക", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "അയച്ചത്:", "BOT": "ബോട്ട്", diff --git a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json index 855fe2157..3d7ad442e 100644 --- a/app/javascript/dashboard/i18n/locale/ml/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ml/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "സജീവമാണ്", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "ക്രമീകരണങ്ങൾ" + "SETTINGS": "ക്രമീകരണങ്ങൾ", + "DELETE": "ഇല്ലാതാക്കുക" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "പേര്", + "DESCRIPTION": "വിവരണം", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "ഇല്ലാതാക്കൽ സ്ഥിരീകരിക്കുക", + "MESSAGE": "Are you sure to delete the article?", + "YES": "അതെ, ഇല്ലാതാക്കുക", + "NO": "ഇല്ല, സൂക്ഷിക്കുക" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "പേര്", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "നാമം ആവശ്യമാണ്" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "വിവരണം", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "വിവരണം ആവശ്യമാണ്" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "റദ്ദാക്കുക" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ml/settings.json b/app/javascript/dashboard/i18n/locale/ml/settings.json index 3bdfd1e49..c73dd97f9 100644 --- a/app/javascript/dashboard/i18n/locale/ml/settings.json +++ b/app/javascript/dashboard/i18n/locale/ml/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "അവലോകനം", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json b/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json index 46a573c42..4a952f86f 100644 --- a/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/ms/advancedFilters.json @@ -1,91 +1,91 @@ { "FILTER": { - "TITLE": "Filter Conversations", - "SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.", - "ADD_NEW_FILTER": "Add Filter", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", - "SUBMIT_BUTTON_LABEL": "Apply filters", - "CANCEL_BUTTON_LABEL": "Cancel", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", - "TOOLTIP_LABEL": "Filter conversations", + "TITLE": "Tapisan Perbualan", + "SUBTITLE": "Tambahkan tapisan di bawah dan tekan \"Gunakan Tetapan\" untuk menapis perbualan.", + "ADD_NEW_FILTER": "Tambahan Tapisan", + "FILTER_DELETE_ERROR": "Kamu perlukan sekurang-kurangnya satu tapisan untuk simpan tetapan", + "SUBMIT_BUTTON_LABEL": "Tetapkan tapisan", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Kosongkan tapisan", + "EMPTY_VALUE_ERROR": "Nilai diperlukan", + "TOOLTIP_LABEL": "Tapiskan perbualan", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "DAN", + "OR": "ATAU" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", - "is_less_than": "Is lesser than", - "days_before": "Is x days before" + "equal_to": "Sama dengan", + "not_equal_to": "Tak sama dengan", + "contains": "Mengandungi", + "does_not_contain": "Tidak mengandungi", + "is_present": "Sedia ada", + "is_not_present": "Tidak sedia ada", + "is_greater_than": "Adalah lebih besar", + "is_less_than": "Adalah lebih kurang", + "days_before": "Adalah x hari sebelum" }, "ATTRIBUTE_LABELS": { - "TRUE": "True", - "FALSE": "False" + "TRUE": "Benar", + "FALSE": "Tidak benar" }, "ATTRIBUTES": { "STATUS": "Status", - "ASSIGNEE_NAME": "Assignee Name", - "INBOX_NAME": "Inbox Name", - "TEAM_NAME": "Team Name", - "CONVERSATION_IDENTIFIER": "Conversation Identifier", - "CAMPAIGN_NAME": "Campaign Name", - "LABELS": "Labels", - "BROWSER_LANGUAGE": "Browser Language", - "COUNTRY_NAME": "Country Name", - "REFERER_LINK": "Referer link", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", - "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", - "LAST_ACTIVITY": "Last Activity" + "ASSIGNEE_NAME": "Nama pernerima tugasas", + "INBOX_NAME": "Nama Peti Inbox", + "TEAM_NAME": "Nama pasukan", + "CONVERSATION_IDENTIFIER": "Pengecam Perbualan", + "CAMPAIGN_NAME": "Nama Kempen", + "LABELS": "Label", + "BROWSER_LANGUAGE": "Bahasa Pelayar", + "COUNTRY_NAME": "Nama Negara", + "REFERER_LINK": "Perujuk pautan", + "CUSTOM_ATTRIBUTE_LIST": "Senarai", + "CUSTOM_ATTRIBUTE_TEXT": "Teks", + "CUSTOM_ATTRIBUTE_NUMBER": "Nombor", + "CUSTOM_ATTRIBUTE_LINK": "Pautan", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak Semak", + "CREATED_AT": "Dicipta Pada", + "LAST_ACTIVITY": "Aktiviti Terakhir" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", - "CUSTOM_ATTRIBUTES": "Custom Attributes" + "STANDARD_FILTERS": "Penapis Standard", + "ADDITIONAL_FILTERS": "Penapis Tambahan", + "CUSTOM_ATTRIBUTES": "Atribut Tersuai" }, "CUSTOM_VIEWS": { "ADD": { - "TITLE": "Do you want to save this filter?", - "LABEL": "Name this filter", - "PLACEHOLDER": "Enter a name for this filter", - "ERROR_MESSAGE": "Name is required", - "SAVE_BUTTON": "Save filter", - "CANCEL_BUTTON": "Cancel", + "TITLE": "Adakah kamu ingin menetapkan penapis ini?", + "LABEL": "Namakan penapis ini", + "PLACEHOLDER": "Masukan nama untuk penapis ini", + "ERROR_MESSAGE": "Nama diperlukan", + "SAVE_BUTTON": "Tetapkan penapis", + "CANCEL_BUTTON": "Batal", "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder created successfully", - "ERROR_MESSAGE": "Error while creating folder" + "SUCCESS_MESSAGE": "Folder telah ditetapkan", + "ERROR_MESSAGE": "Ralat apabilia menetapkan folder ini" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment created successfully", - "ERROR_MESSAGE": "Error while creating segment" + "SUCCESS_MESSAGE": "Segmen telah berjaya ditetapkan", + "ERROR_MESSAGE": "Segmen tidak berjaya ditetapkan" } }, "DELETE": { - "DELETE_BUTTON": "Delete filter", + "DELETE_BUTTON": "Padam tapisan", "MODAL": { "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete the filter ", - "YES": "Yes, Delete", - "NO": "No, Keep it" + "TITLE": "Sahkan untuk dipadam", + "MESSAGE": "Adakah anda pasti hendak padamkan tapisan ini ", + "YES": "Baik, Padamkan", + "NO": "Tidak, simpankan" } }, "API_FOLDERS": { - "SUCCESS_MESSAGE": "Folder deleted successfully", - "ERROR_MESSAGE": "Error while deleting folder" + "SUCCESS_MESSAGE": "Folder ini sudah dipadamkan", + "ERROR_MESSAGE": "Ralat apabila padamkan folder ini" }, "API_SEGMENTS": { - "SUCCESS_MESSAGE": "Segment deleted successfully", - "ERROR_MESSAGE": "Error while deleting segment" + "SUCCESS_MESSAGE": "Segmen berjaya dipadam", + "ERROR_MESSAGE": "Ralat apabilia memadamkan segmen" } } } diff --git a/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json b/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json index 0f965c717..3321387f3 100644 --- a/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/agentMgmt.json @@ -1,111 +1,111 @@ { "AGENT_MGMT": { - "HEADER": "Agents", - "HEADER_BTN_TXT": "Add Agent", - "LOADING": "Fetching Agent List", - "SIDEBAR_TXT": "

Agents

An Agent is a member of your Customer Support team.

Agents will be able to view and reply to messages from your users. The list shows all agents currently in your account.

Click on Add Agent to add a new agent. Agent you add will receive an email with a confirmation link to activate their account, after which they can access Chatwoot and respond to messages.

Access to Chatwoot's features are based on following roles.

Agent - Agents with this role can only access inboxes, reports and conversations. They can assign conversations to other agents or themselves and resolve conversations.

Administrator - Administrator will have access to all Chatwoot features enabled for your account, including settings, along with all of a normal agents' privileges.

", + "HEADER": "Ejen", + "HEADER_BTN_TXT": "Tambahkan ejen", + "LOADING": "Mendapatkan senarai ejen", + "SIDEBAR_TXT": "

Ejen

Seorang Ejen adalah ahli sistem bantuan anda.

Ejen boleh membaca dan menjawab mesej dari pengguna pengguna anda

Klik di Tambah Ejen untuk menambah bilangan ejen. Ejen yang ditambah akan menerima emel dengan pengesahan untuk mengaktifkan akaun mereka, selepas itu, mereka boleh akses Chatwoot dan respon kepada mesej.

Akses ke ciri-ciri Chatwoot adalah berdasarkan kepada peranan peranan berikut.

Ejen - Ejen dengan peranan ini boleh akses inbox, repot dan perbualan. Mereka boleh tugaskan perbualan kepada ejen lain atau mereka sendiri dan boleh selesaikan sendiri.

Pentadbir - Pentadbir boleh akses semua ciri-ciri Chatwoot yang dibenarkan terhadap akaun anda termasuk, settings dan apa apa yang ejen biasa boleh lakukan.

", "AGENT_TYPES": { - "ADMINISTRATOR": "Administrator", - "AGENT": "Agent" + "ADMINISTRATOR": "Pentadbir", + "AGENT": "Ejen" }, "LIST": { - "404": "There are no agents associated to this account", - "TITLE": "Manage agents in your team", - "DESC": "You can add/remove agents to/in your team.", - "NAME": "Name", - "EMAIL": "EMAIL", + "404": "Tiada ejen yang dikaitkan ke akaun ini", + "TITLE": "Tadbir ejen dalam pasukan anda", + "DESC": "Kamu boleh tambahkan/padamkan ejen dalam pasukan anda.", + "NAME": "Nama", + "EMAIL": "Emel", "STATUS": "Status", - "ACTIONS": "Actions", - "VERIFIED": "Verified", - "VERIFICATION_PENDING": "Verification Pending" + "ACTIONS": "Tindakan-tindakan", + "VERIFIED": "Disahkan", + "VERIFICATION_PENDING": "Pengesahan belum lagi selesai" }, "ADD": { - "TITLE": "Add agent to your team", - "DESC": "You can add people who will be able to handle support for your inboxes.", - "CANCEL_BUTTON_TEXT": "Cancel", + "TITLE": "Tambahkan ejen ke pasukan anda", + "DESC": "Anda boleh tambahkan ejen yang akan mengendalikan perbualan untuk inbox anda.", + "CANCEL_BUTTON_TEXT": "Batal", "FORM": { "NAME": { - "LABEL": "Agent Name", - "PLACEHOLDER": "Please enter a name of the agent" + "LABEL": "Nama Ejen", + "PLACEHOLDER": "Sila masukkan nama ejen" }, "AGENT_TYPE": { - "LABEL": "Role", - "PLACEHOLDER": "Please select a role", - "ERROR": "Role is required" + "LABEL": "Peranan", + "PLACEHOLDER": "Sila pilih peranan", + "ERROR": "Peranan diperlukan" }, "EMAIL": { - "LABEL": "Email Address", - "PLACEHOLDER": "Please enter an email address of the agent" + "LABEL": "Emel", + "PLACEHOLDER": "Sila masukkan emel ejen anda" }, - "SUBMIT": "Add Agent" + "SUBMIT": "Tambahkan ejen" }, "API": { - "SUCCESS_MESSAGE": "Agent added successfully", - "EXIST_MESSAGE": "Agent email already in use, Please try another email address", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Ejen berjaya ditambahkan", + "EXIST_MESSAGE": "Emel ejen telah diguankkan, Tolong gunakkan emel yang lain", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { - "SUCCESS_MESSAGE": "Agent deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Ejen berjaya dipadam", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " } }, "EDIT": { - "TITLE": "Edit agent", + "TITLE": "Edit ejen", "FORM": { "NAME": { - "LABEL": "Agent Name", - "PLACEHOLDER": "Please enter a name of the agent" + "LABEL": "Nama Ejen", + "PLACEHOLDER": "Sila masukkan nama ejen" }, "AGENT_TYPE": { - "LABEL": "Role", - "PLACEHOLDER": "Please select a role", - "ERROR": "Role is required" + "LABEL": "Peranan", + "PLACEHOLDER": "Sila pilih peranan", + "ERROR": "Peranan diperlukan" }, "EMAIL": { - "LABEL": "Email Address", - "PLACEHOLDER": "Please enter an email address of the agent" + "LABEL": "Emel", + "PLACEHOLDER": "Sila masukkan emel ejen anda" }, - "SUBMIT": "Edit Agent" + "SUBMIT": "Edit ejen" }, "BUTTON_TEXT": "Edit", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "API": { - "SUCCESS_MESSAGE": "Agent updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Ejen berjaya dikemaskini", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "PASSWORD_RESET": { - "ADMIN_RESET_BUTTON": "Reset Password", - "ADMIN_SUCCESS_MESSAGE": "An email with reset password instructions has been sent to the agent", - "SUCCESS_MESSAGE": "Agent password reset successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ADMIN_RESET_BUTTON": "Reset kata laluan", + "ADMIN_SUCCESS_MESSAGE": "Email untuk reset kata laluan telah di hantar kepada ejen yang berkenaan", + "SUCCESS_MESSAGE": "Kata laluan ejen telah berjaya set semula", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "SEARCH": { - "NO_RESULTS": "No results found." + "NO_RESULTS": "Tiada dijumpa." }, "MULTI_SELECTOR": { - "PLACEHOLDER": "None", + "PLACEHOLDER": "Tiada", "TITLE": { - "AGENT": "Select agent", - "TEAM": "Select team" + "AGENT": "Pilih ejen", + "TEAM": "Pilih pasukan" }, "SEARCH": { "NO_RESULTS": { - "AGENT": "No agents found", - "TEAM": "No teams found" + "AGENT": "Tiada ejen dijumpa", + "TEAM": "Tiada pasukan dijumpa" }, "PLACEHOLDER": { - "AGENT": "Search agents", - "TEAM": "Search teams" + "AGENT": "Cari ejen", + "TEAM": "Cari pasukan" } } } diff --git a/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json index ff4904c34..5f743e38f 100644 --- a/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/attributesMgmt.json @@ -1,13 +1,13 @@ { "ATTRIBUTES_MGMT": { - "HEADER": "Custom Attributes", - "HEADER_BTN_TXT": "Add Custom Attribute", - "LOADING": "Fetching custom attributes", + "HEADER": "Penyesuian Atribut", + "HEADER_BTN_TXT": "Tambahkan Atribut Penyesuian", + "LOADING": "Mendapatkan atribut penyesuian", "SIDEBAR_TXT": "

Custom Attributes

A custom attribute tracks facts about your contacts/conversation — like the subscription plan, or when they ordered the first item etc.

For creating a Custom Attribute, just click on the Add Custom Attribute. You can also edit or delete an existing Custom Attribute by clicking on the Edit or Delete button.

", "ADD": { - "TITLE": "Add Custom Attribute", + "TITLE": "Tambahkan Atribut Penyesuian", "SUBMIT": "Create", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "FORM": { "NAME": { "LABEL": "Display Name", @@ -47,7 +47,7 @@ } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Custom Attribute deleted successfully.", "ERROR_MESSAGE": "Couldn't delete the custom attribute. Try again." @@ -57,7 +57,7 @@ "PLACE_HOLDER": "Please type {attributeName} to confirm", "MESSAGE": "Deleting will remove the custom attribute", "YES": "Delete ", - "NO": "Cancel" + "NO": "Batalkan" } }, "EDIT": { @@ -81,14 +81,14 @@ }, "LIST": { "TABLE_HEADER": [ - "Name", + "Nama", "Description", "Type", "Key" ], "BUTTONS": { "EDIT": "Edit", - "DELETE": "Delete" + "DELETE": "Padamkan" }, "EMPTY_RESULT": { "404": "There are no custom attributes created", diff --git a/app/javascript/dashboard/i18n/locale/ms/automation.json b/app/javascript/dashboard/i18n/locale/ms/automation.json index 5d291814e..90ca71731 100644 --- a/app/javascript/dashboard/i18n/locale/ms/automation.json +++ b/app/javascript/dashboard/i18n/locale/ms/automation.json @@ -7,7 +7,7 @@ "ADD": { "TITLE": "Add Automation Rule", "SUBMIT": "Create", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "FORM": { "NAME": { "LABEL": "Rule Name", @@ -28,7 +28,7 @@ "LABEL": "Conditions" }, "ACTIONS": { - "LABEL": "Actions" + "LABEL": "Tindakan-tindakan" } }, "CONDITION_BUTTON_LABEL": "Add Condition", @@ -40,7 +40,7 @@ }, "LIST": { "TABLE_HEADER": [ - "Name", + "Nama", "Description", "Active", "Created on" @@ -49,13 +49,13 @@ }, "DELETE": { "TITLE": "Delete Automation Rule", - "SUBMIT": "Delete", - "CANCEL_BUTTON_TEXT": "Cancel", + "SUBMIT": "Padamkan", + "CANCEL_BUTTON_TEXT": "Batalkan", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " }, "API": { "SUCCESS_MESSAGE": "Automation rule deleted successfully", @@ -65,7 +65,7 @@ "EDIT": { "TITLE": "Edit Automation Rule", "SUBMIT": "Update", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "API": { "SUCCESS_MESSAGE": "Automation rule updated successfully", "ERROR_MESSAGE": "Could not update automation rule, Please try again later" @@ -81,8 +81,8 @@ "FORM": { "EDIT": "Edit", "CREATE": "Create", - "DELETE": "Delete", - "CANCEL": "Cancel", + "DELETE": "Padamkan", + "CANCEL": "Batalkan", "RESET_MESSAGE": "Changing event type will reset the conditions and events you have added below" }, "CONDITION": { diff --git a/app/javascript/dashboard/i18n/locale/ms/campaign.json b/app/javascript/dashboard/i18n/locale/ms/campaign.json index bbcc463ee..777818c73 100644 --- a/app/javascript/dashboard/i18n/locale/ms/campaign.json +++ b/app/javascript/dashboard/i18n/locale/ms/campaign.json @@ -9,7 +9,7 @@ "ADD": { "TITLE": "Create a campaign", "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "CREATE_BUTTON_TEXT": "Create", "FORM": { "TITLE": { @@ -63,12 +63,12 @@ } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "CONFIRM": { - "TITLE": "Confirm Deletion", + "TITLE": "Pasti Padamkan", "MESSAGE": "Are you sure to delete?", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " }, "API": { "SUCCESS_MESSAGE": "Campaign deleted successfully", @@ -100,7 +100,7 @@ "BUTTONS": { "ADD": "Add", "EDIT": "Edit", - "DELETE": "Delete" + "DELETE": "Padamkan" }, "STATUS": { "ENABLED": "Enabled", diff --git a/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json b/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json index 9c14f5a52..c79f927d9 100644 --- a/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/cannedMgmt.json @@ -12,13 +12,13 @@ "TABLE_HEADER": [ "Short Code", "Content", - "Actions" + "Tindakan-tindakan" ] }, "ADD": { "TITLE": "Add Canned Response", "DESC": "Canned Responses are saved reply templates which can be used to quickly send out reply to conversation.", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "FORM": { "SHORT_CODE": { "LABEL": "Short Code", @@ -34,12 +34,12 @@ }, "API": { "SUCCESS_MESSAGE": "Canned Response added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "EDIT": { "TITLE": "Edit Canned Response", - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "FORM": { "SHORT_CODE": { "LABEL": "Short Code", @@ -56,20 +56,20 @@ "BUTTON_TEXT": "Edit", "API": { "SUCCESS_MESSAGE": "Canned Response updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Canned response deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " } } } diff --git a/app/javascript/dashboard/i18n/locale/ms/contact.json b/app/javascript/dashboard/i18n/locale/ms/contact.json index 0bc399ba1..56bbe0d71 100644 --- a/app/javascript/dashboard/i18n/locale/ms/contact.json +++ b/app/javascript/dashboard/i18n/locale/ms/contact.json @@ -1,12 +1,13 @@ { "CONTACT_PANEL": { "NOT_AVAILABLE": "Not Available", - "EMAIL_ADDRESS": "Email Address", + "EMAIL_ADDRESS": "Emel", "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "Location", - "BROWSER_LANGUAGE": "Browser Language", + "BROWSER_LANGUAGE": "Bahasa Pelayar", "CONVERSATION_TITLE": "Conversation Details", "VIEW_PROFILE": "View Profile", "BROWSER": "Browser", @@ -66,14 +67,14 @@ "FORM": { "LABEL": "CSV File", "SUBMIT": "Import", - "CANCEL": "Cancel" + "CANCEL": "Batalkan" }, "SUCCESS_MESSAGE": "Contacts saved successfully", "ERROR_MESSAGE": "There was an error, please try again" }, "DELETE_NOTE": { "CONFIRM": { - "TITLE": "Confirm Deletion", + "TITLE": "Pasti Padamkan", "MESSAGE": "Are you want sure to delete this note?", "YES": "Yes, Delete it", "NO": "No, Keep it" @@ -84,8 +85,8 @@ "TITLE": "Delete contact", "DESC": "Delete contact details", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", "YES": "Yes, Delete", "NO": "No, Keep" }, @@ -97,7 +98,7 @@ "CONTACT_FORM": { "FORM": { "SUBMIT": "Submit", - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "AVATAR": { "LABEL": "Contact Avatar" }, @@ -111,7 +112,7 @@ }, "EMAIL_ADDRESS": { "PLACEHOLDER": "Enter the email address of the contact", - "LABEL": "Email Address", + "LABEL": "Emel", "DUPLICATE": "This email address is in use for another contact.", "ERROR": "Please enter a valid email address." }, @@ -182,7 +183,7 @@ "ERROR": "Message can't be empty" }, "SUBMIT": "Send message", - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "SUCCESS_MESSAGE": "Message sent!", "GO_TO_CONVERSATION": "View", "ERROR_MESSAGE": "Couldn't send! try again" @@ -194,14 +195,14 @@ "SEARCH_BUTTON": "Search", "SEARCH_INPUT_PLACEHOLDER": "Search for contacts", "FILTER_CONTACTS": "Filter", - "FILTER_CONTACTS_SAVE": "Save filter", - "FILTER_CONTACTS_DELETE": "Delete filter", + "FILTER_CONTACTS_SAVE": "Tetapkan penapis", + "FILTER_CONTACTS_DELETE": "Padam tapisan", "LIST": { "LOADING_MESSAGE": "Loading contacts...", "404": "No contacts matches your search 🔍", "NO_CONTACTS": "There are no available contacts", "TABLE_HEADER": { - "NAME": "Name", + "NAME": "Nama", "PHONE_NUMBER": "Phone Number", "CONVERSATIONS": "Conversations", "LAST_ACTIVITY": "Last Activity", @@ -209,7 +210,7 @@ "CITY": "City", "SOCIAL_PROFILES": "Social Profiles", "COMPANY": "Company", - "EMAIL_ADDRESS": "Email Address" + "EMAIL_ADDRESS": "Emel" }, "VIEW_DETAILS": "View details" } @@ -272,7 +273,7 @@ }, "FORM": { "CREATE": "Add attribute", - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "NAME": { "LABEL": "Custom attribute name", "PLACEHOLDER": "Eg: shopify id", @@ -335,7 +336,7 @@ }, "FORM": { "SUBMIT": " Merge contacts", - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "CHILD_CONTACT": { "ERROR": "Select a child contact to merge" }, diff --git a/app/javascript/dashboard/i18n/locale/ms/contactFilters.json b/app/javascript/dashboard/i18n/locale/ms/contactFilters.json index 3f84a8476..984389e29 100644 --- a/app/javascript/dashboard/i18n/locale/ms/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/ms/contactFilters.json @@ -2,48 +2,48 @@ "CONTACTS_FILTER": { "TITLE": "Filter Contacts", "SUBTITLE": "Add filters below and hit 'Submit' to filter contacts.", - "ADD_NEW_FILTER": "Add Filter", + "ADD_NEW_FILTER": "Tambahan Tapisan", "CLEAR_ALL_FILTERS": "Clear All Filters", - "FILTER_DELETE_ERROR": "You should have atleast one filter to save", + "FILTER_DELETE_ERROR": "Kamu perlukan sekurang-kurangnya satu tapisan untuk simpan tetapan", "SUBMIT_BUTTON_LABEL": "Submit", - "CANCEL_BUTTON_LABEL": "Cancel", - "CLEAR_BUTTON_LABEL": "Clear Filters", - "EMPTY_VALUE_ERROR": "Value is required", + "CANCEL_BUTTON_LABEL": "Batalkan", + "CLEAR_BUTTON_LABEL": "Kosongkan tapisan", + "EMPTY_VALUE_ERROR": "Nilai diperlukan", "TOOLTIP_LABEL": "Filter contacts", "QUERY_DROPDOWN_LABELS": { - "AND": "AND", - "OR": "OR" + "AND": "DAN", + "OR": "ATAU" }, "OPERATOR_LABELS": { - "equal_to": "Equal to", - "not_equal_to": "Not equal to", - "contains": "Contains", - "does_not_contain": "Does not contain", - "is_present": "Is present", - "is_not_present": "Is not present", - "is_greater_than": "Is greater than", + "equal_to": "Sama dengan", + "not_equal_to": "Tak sama dengan", + "contains": "Mengandungi", + "does_not_contain": "Tidak mengandungi", + "is_present": "Sedia ada", + "is_not_present": "Tidak sedia ada", + "is_greater_than": "Adalah lebih besar", "is_lesser_than": "Is lesser than", - "days_before": "Is x days before" + "days_before": "Adalah x hari sebelum" }, "ATTRIBUTES": { - "NAME": "Name", + "NAME": "Nama", "EMAIL": "Email", "PHONE_NUMBER": "Phone number", "IDENTIFIER": "Identifier", "CITY": "City", "COUNTRY": "Country", - "CUSTOM_ATTRIBUTE_LIST": "List", - "CUSTOM_ATTRIBUTE_TEXT": "Text", - "CUSTOM_ATTRIBUTE_NUMBER": "Number", - "CUSTOM_ATTRIBUTE_LINK": "Link", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", - "CREATED_AT": "Created At", + "CUSTOM_ATTRIBUTE_LIST": "Senarai", + "CUSTOM_ATTRIBUTE_TEXT": "Teks", + "CUSTOM_ATTRIBUTE_NUMBER": "Nombor", + "CUSTOM_ATTRIBUTE_LINK": "Pautan", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Kotak Semak", + "CREATED_AT": "Dicipta Pada", "LAST_ACTIVITY": "Last Activity", "REFERER_LINK": "Referrer link" }, "GROUPS": { - "STANDARD_FILTERS": "Standard Filters", - "ADDITIONAL_FILTERS": "Additional Filters", + "STANDARD_FILTERS": "Penapis Standard", + "ADDITIONAL_FILTERS": "Penapis Tambahan", "CUSTOM_ATTRIBUTES": "Custom Attributes" } } diff --git a/app/javascript/dashboard/i18n/locale/ms/conversation.json b/app/javascript/dashboard/i18n/locale/ms/conversation.json index 7adac123f..461a1e313 100644 --- a/app/javascript/dashboard/i18n/locale/ms/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ms/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", @@ -150,14 +151,14 @@ }, "CONTEXT_MENU": { "COPY": "Copy", - "DELETE": "Delete" + "DELETE": "Padamkan" } }, "EMAIL_TRANSCRIPT": { "TITLE": "Send conversation transcript", "DESC": "Send a copy of the conversation transcript to the specified email address", "SUBMIT": "Submit", - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", "SEND_EMAIL_ERROR": "There was an error, please try again", "FORM": { diff --git a/app/javascript/dashboard/i18n/locale/ms/generalSettings.json b/app/javascript/dashboard/i18n/locale/ms/generalSettings.json index 5a0c4f7d7..be395096f 100644 --- a/app/javascript/dashboard/i18n/locale/ms/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/ms/generalSettings.json @@ -71,7 +71,7 @@ "LOADING_MESSAGE": "Loading notifications...", "404": "No Notifications", "TABLE_HEADER": [ - "Name", + "Nama", "Phone Number", "Conversations", "Last Contacted" diff --git a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json index d0c7b2411..b8facda9a 100644 --- a/app/javascript/dashboard/i18n/locale/ms/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ms/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -75,7 +77,7 @@ "TITLE": "Portals", "PORTAL_SETTINGS": "Portal settings", "SUBTITLE": "You have multiple portals and can have different locales for each portal.", - "CANCEL_BUTTON_LABEL": "Cancel", + "CANCEL_BUTTON_LABEL": "Batalkan", "CHOOSE_LOCALE_BUTTON": "Choose Locale" }, "PORTAL_SETTINGS": { @@ -84,12 +86,13 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Padamkan" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", "ITEMS": { - "NAME": "Name", + "NAME": "Nama", "DOMAIN": "Custom domain", "SLUG": "Slug", "TITLE": "Portal title", @@ -105,10 +108,55 @@ "ARTICLE_COUNT": "No. of articles", "CATEGORIES": "No. of categories", "SWAP": "Swap", - "DELETE": "Delete", + "DELETE": "Padamkan", "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nama", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -156,7 +204,7 @@ "HELP_TEXT": "This logo will be displayed on the portal header." }, "NAME": { - "LABEL": "Name", + "LABEL": "Nama", "PLACEHOLDER": "Portal name", "HELP_TEXT": "The name will be used in the public facing portal internally.", "ERROR": "Name is required" @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Pasti Padamkan", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -239,7 +344,7 @@ "PORTAL": "Portal", "LOCALE": "Locale", "NAME": { - "LABEL": "Name", + "LABEL": "Nama", "PLACEHOLDER": "Category name", "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", "ERROR": "Name is required" @@ -257,12 +362,49 @@ }, "BUTTONS": { "CREATE": "Create category", - "CANCEL": "Cancel" + "CANCEL": "Batalkan" }, "API": { "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nama", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Batalkan" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json index 09a6210da..ead2bce79 100644 --- a/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/inboxMgmt.json @@ -330,7 +330,7 @@ "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below." }, "AGENTS": { - "TITLE": "Agents", + "TITLE": "Ejen", "DESC": "Here you can add agents to manage your newly created inbox. Only these selected agents will have access to your inbox. Agents which are not part of this inbox will not be able to see or respond to messages in this inbox when they login.
PS: As an administrator, if you need access to all inboxes, you should add yourself as agent to all inboxes that you create.", "VALIDATION_ERROR": "Add atleast one agent to your new Inbox", "PICK_AGENTS": "Pick agents for the inbox" @@ -391,14 +391,14 @@ } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "AVATAR_DELETE_BUTTON_TEXT": "Delete Avatar", "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", "PLACE_HOLDER": "Please type {inboxName} to confirm", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " }, "API": { "SUCCESS_MESSAGE": "Inbox deleted successfully", @@ -426,7 +426,7 @@ "SETTINGS_POPUP": { "MESSENGER_HEADING": "Messenger Script", "MESSENGER_SUB_HEAD": "Place this button inside your body tag", - "INBOX_AGENTS": "Agents", + "INBOX_AGENTS": "Ejen", "INBOX_AGENTS_SUB_TEXT": "Add or remove agents from this inbox", "AGENT_ASSIGNMENT": "Conversation Assignment", "AGENT_ASSIGNMENT_SUB_TEXT": "Update conversation assignment settings", diff --git a/app/javascript/dashboard/i18n/locale/ms/integrationApps.json b/app/javascript/dashboard/i18n/locale/ms/integrationApps.json index a80ecb837..df25d3fca 100644 --- a/app/javascript/dashboard/i18n/locale/ms/integrationApps.json +++ b/app/javascript/dashboard/i18n/locale/ms/integrationApps.json @@ -22,17 +22,17 @@ "INBOX": "Yes, Delete", "ACCOUNT": "Yes, Disconnect" }, - "CANCEL_BUTTON_TEXT": "Cancel", + "CANCEL_BUTTON_TEXT": "Batalkan", "API": { "SUCCESS_MESSAGE": "Hook deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "LIST": { "FETCHING": "Fetching integration hooks", "INBOX": "Inbox", "DELETE": { - "BUTTON_TEXT": "Delete" + "BUTTON_TEXT": "Padamkan" } }, "ADD": { @@ -42,11 +42,11 @@ "PLACEHOLDER": "Select Inbox" }, "SUBMIT": "Create", - "CANCEL": "Cancel" + "CANCEL": "Batalkan" }, "API": { "SUCCESS_MESSAGE": "Integration hook added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "CONNECT": { diff --git a/app/javascript/dashboard/i18n/locale/ms/integrations.json b/app/javascript/dashboard/i18n/locale/ms/integrations.json index 6c6cecde9..1f47f5f51 100644 --- a/app/javascript/dashboard/i18n/locale/ms/integrations.json +++ b/app/javascript/dashboard/i18n/locale/ms/integrations.json @@ -4,7 +4,7 @@ "WEBHOOK": { "SUBSCRIBED_EVENTS": "Subscribed Events", "FORM": { - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "DESC": "Webhook events provide you the realtime information about what's happening in your Chatwoot account. Please enter a valid URL to configure a callback.", "SUBSCRIPTIONS": { "LABEL": "Events", @@ -37,7 +37,7 @@ "TITLE": "Manage webhooks", "TABLE_HEADER": [ "Webhook endpoint", - "Actions" + "Tindakan-tindakan" ] }, "EDIT": { @@ -45,27 +45,27 @@ "TITLE": "Edit webhook", "API": { "SUCCESS_MESSAGE": "Webhook configuration updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "ADD": { - "CANCEL": "Cancel", + "CANCEL": "Batalkan", "TITLE": "Add new webhook", "API": { "SUCCESS_MESSAGE": "Webhook configuration added successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Webhook deleted successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "CONFIRM": { - "TITLE": "Confirm Deletion", + "TITLE": "Pasti Padamkan", "MESSAGE": "Are you sure to delete the webhook? (%{webhookURL})", - "YES": "Yes, Delete ", + "YES": "Ya, Padamkan ", "NO": "No, Keep it" } } @@ -77,7 +77,7 @@ } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Integration deleted successfully" } @@ -94,14 +94,14 @@ "404": "There are no dashboard apps configured on this account yet", "LOADING": "Fetching dashboard apps...", "TABLE_HEADER": [ - "Name", + "Nama", "Endpoint" ], "EDIT_TOOLTIP": "Edit app", "DELETE_TOOLTIP": "Delete app" }, "FORM": { - "TITLE_LABEL": "Name", + "TITLE_LABEL": "Nama", "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", "TITLE_ERROR": "A name for the dashboard app is required", "URL_LABEL": "Endpoint", @@ -111,14 +111,14 @@ "CREATE": { "HEADER": "Add a new dashboard app", "FORM_SUBMIT": "Submit", - "FORM_CANCEL": "Cancel", + "FORM_CANCEL": "Batalkan", "API_SUCCESS": "Dashboard app configured successfully", "API_ERROR": "We couldn't create an app. Please try again later" }, "UPDATE": { "HEADER": "Edit dashboard app", "FORM_SUBMIT": "Update", - "FORM_CANCEL": "Cancel", + "FORM_CANCEL": "Batalkan", "API_SUCCESS": "Dashboard app updated successfully", "API_ERROR": "We couldn't update the app. Please try again later" }, diff --git a/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json index db12fa32a..805d33a5a 100644 --- a/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/ms/labelsMgmt.json @@ -10,7 +10,7 @@ "TITLE": "Manage labels", "DESC": "Labels let you group the conversations together.", "TABLE_HEADER": [ - "Name", + "Nama", "Description", "Color" ] @@ -35,8 +35,8 @@ }, "EDIT": "Edit", "CREATE": "Create", - "DELETE": "Delete", - "CANCEL": "Cancel" + "DELETE": "Padamkan", + "CANCEL": "Batalkan" }, "ADD": { "TITLE": "Add label", @@ -54,16 +54,16 @@ } }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Label deleted successfully", "ERROR_MESSAGE": "There was an error, please try again" }, "CONFIRM": { - "TITLE": "Confirm Deletion", - "MESSAGE": "Are you sure to delete ", - "YES": "Yes, Delete ", - "NO": "No, Keep " + "TITLE": "Pasti Padamkan", + "MESSAGE": "Adakan anda pasti untuk padamkan ", + "YES": "Ya, Padamkan ", + "NO": "Tidak, simpankan " } } } diff --git a/app/javascript/dashboard/i18n/locale/ms/login.json b/app/javascript/dashboard/i18n/locale/ms/login.json index 30f667052..df1394a73 100644 --- a/app/javascript/dashboard/i18n/locale/ms/login.json +++ b/app/javascript/dashboard/i18n/locale/ms/login.json @@ -11,7 +11,7 @@ }, "API": { "SUCCESS_MESSAGE": "Login Successful", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later", + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi", "UNAUTH": "Username / Password Incorrect. Please try again" }, "FORGOT_PASSWORD": "Forgot your password?", diff --git a/app/javascript/dashboard/i18n/locale/ms/report.json b/app/javascript/dashboard/i18n/locale/ms/report.json index 0bd9b544d..37c8fed2c 100644 --- a/app/javascript/dashboard/i18n/locale/ms/report.json +++ b/app/javascript/dashboard/i18n/locale/ms/report.json @@ -431,7 +431,7 @@ "LOADING_MESSAGE": "Loading agent metrics...", "NO_AGENTS": "There are no conversations by agents", "TABLE_HEADER": { - "AGENT": "Agent", + "AGENT": "Ejen", "OPEN": "OPEN", "UNATTENDED": "Unattended", "STATUS": "Status" diff --git a/app/javascript/dashboard/i18n/locale/ms/resetPassword.json b/app/javascript/dashboard/i18n/locale/ms/resetPassword.json index bb678e809..b930d6e33 100644 --- a/app/javascript/dashboard/i18n/locale/ms/resetPassword.json +++ b/app/javascript/dashboard/i18n/locale/ms/resetPassword.json @@ -1,6 +1,6 @@ { "RESET_PASSWORD": { - "TITLE": "Reset Password", + "TITLE": "Reset kata laluan", "EMAIL": { "LABEL": "Email", "PLACEHOLDER": "Please enter your email", @@ -8,7 +8,7 @@ }, "API": { "SUCCESS_MESSAGE": "Password reset link has been sent to your email", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "SUBMIT": "Submit" } diff --git a/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json b/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json index ec2d94744..9781b25c0 100644 --- a/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json +++ b/app/javascript/dashboard/i18n/locale/ms/setNewPassword.json @@ -13,7 +13,7 @@ }, "API": { "SUCCESS_MESSAGE": "Successfully changed the password", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "CAPTCHA": { "ERROR": "Verification expired. Please solve captcha again." diff --git a/app/javascript/dashboard/i18n/locale/ms/settings.json b/app/javascript/dashboard/i18n/locale/ms/settings.json index 7994321cc..94d420515 100644 --- a/app/javascript/dashboard/i18n/locale/ms/settings.json +++ b/app/javascript/dashboard/i18n/locale/ms/settings.json @@ -163,7 +163,7 @@ "SETTINGS": "Settings", "CONTACTS": "Contacts", "HOME": "Home", - "AGENTS": "Agents", + "AGENTS": "Ejen", "INBOXES": "Inboxes", "NOTIFICATIONS": "Notifications", "CANNED_RESPONSES": "Canned Responses", @@ -188,7 +188,7 @@ "CAMPAIGNS": "Campaigns", "ONGOING": "Ongoing", "ONE_OFF": "One off", - "REPORTS_AGENT": "Agents", + "REPORTS_AGENT": "Ejen", "REPORTS_LABEL": "Labels", "REPORTS_INBOX": "Inbox", "REPORTS_TEAM": "Team", @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -231,7 +232,7 @@ "API": { "SUCCESS_MESSAGE": "Account created successfully", "EXIST_MESSAGE": "Account already exists", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "FORM": { "NAME": { @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ms/signup.json b/app/javascript/dashboard/i18n/locale/ms/signup.json index 8dd5c0d4e..602b377f3 100644 --- a/app/javascript/dashboard/i18n/locale/ms/signup.json +++ b/app/javascript/dashboard/i18n/locale/ms/signup.json @@ -31,7 +31,7 @@ }, "API": { "SUCCESS_MESSAGE": "Registration Successfull", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" }, "SUBMIT": "Submit", "HAVE_AN_ACCOUNT": "Already have an account?" diff --git a/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json b/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json index f9ecaaaae..7f46b151d 100644 --- a/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json +++ b/app/javascript/dashboard/i18n/locale/ms/teamsSettings.json @@ -69,7 +69,7 @@ }, "AGENTS": { "AGENT": "AGENT", - "EMAIL": "EMAIL", + "EMAIL": "Emel", "BUTTON_TEXT": "Add agents", "ADD_AGENTS": "Adding Agents to your Team...", "SELECT": "select", @@ -91,7 +91,7 @@ "BUTTON_TEXT": "Finish" }, "DELETE": { - "BUTTON_TEXT": "Delete", + "BUTTON_TEXT": "Padamkan", "API": { "SUCCESS_MESSAGE": "Team deleted successfully.", "ERROR_MESSAGE": "Couldn't delete the team. Try again." @@ -101,7 +101,7 @@ "PLACE_HOLDER": "Please type {teamName} to confirm", "MESSAGE": "Deleting the team will remove the team assignment from the conversations assigned to this team.", "YES": "Delete ", - "NO": "Cancel" + "NO": "Batalkan" } }, "SETTINGS": "Settings", diff --git a/app/javascript/dashboard/i18n/locale/ne/contact.json b/app/javascript/dashboard/i18n/locale/ne/contact.json index 02e7d2b29..b61852d58 100644 --- a/app/javascript/dashboard/i18n/locale/ne/contact.json +++ b/app/javascript/dashboard/i18n/locale/ne/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Not Available", "EMAIL_ADDRESS": "Email Address", "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "Location", diff --git a/app/javascript/dashboard/i18n/locale/ne/conversation.json b/app/javascript/dashboard/i18n/locale/ne/conversation.json index e07cd3150..517fca80e 100644 --- a/app/javascript/dashboard/i18n/locale/ne/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ne/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json index d0c7b2411..9c18b4c7f 100644 --- a/app/javascript/dashboard/i18n/locale/ne/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ne/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Delete" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ne/settings.json b/app/javascript/dashboard/i18n/locale/ne/settings.json index 991466d0e..65fe496f1 100644 --- a/app/javascript/dashboard/i18n/locale/ne/settings.json +++ b/app/javascript/dashboard/i18n/locale/ne/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/nl/contact.json b/app/javascript/dashboard/i18n/locale/nl/contact.json index 3a5ebf083..4a1a46471 100644 --- a/app/javascript/dashboard/i18n/locale/nl/contact.json +++ b/app/javascript/dashboard/i18n/locale/nl/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Niet beschikbaar", "EMAIL_ADDRESS": "Uw e-mailadres", "PHONE_NUMBER": "Telefoon nummer", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Succesvol gekopieerd naar klembord", "COMPANY": "Bedrijfsnaam", "LOCATION": "Locatie", diff --git a/app/javascript/dashboard/i18n/locale/nl/conversation.json b/app/javascript/dashboard/i18n/locale/nl/conversation.json index 04a979538..e2e8d9ec2 100644 --- a/app/javascript/dashboard/i18n/locale/nl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/nl/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Selecteer een gesprek in het linker paneel", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json index 3ee1b7a68..99d969485 100644 --- a/app/javascript/dashboard/i18n/locale/nl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/nl/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Instellingen" + "SETTINGS": "Instellingen", + "DELETE": "Verwijderen" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Naam", + "DESCRIPTION": "Beschrijving", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Verwijderen bevestigen", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ja, verwijderen", + "NO": "Nee, Bewaar het" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Naam", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beschrijving", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Annuleren" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/nl/settings.json b/app/javascript/dashboard/i18n/locale/nl/settings.json index 8e4e881ba..d3fa0cdc4 100644 --- a/app/javascript/dashboard/i18n/locale/nl/settings.json +++ b/app/javascript/dashboard/i18n/locale/nl/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/no/contact.json b/app/javascript/dashboard/i18n/locale/no/contact.json index 31754ebc8..eab6fb32c 100644 --- a/app/javascript/dashboard/i18n/locale/no/contact.json +++ b/app/javascript/dashboard/i18n/locale/no/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Ikke tilgjengelig", "EMAIL_ADDRESS": "E-postadresse", "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Kopiert til utklippstavle", "COMPANY": "Firma", "LOCATION": "Plassering", diff --git a/app/javascript/dashboard/i18n/locale/no/conversation.json b/app/javascript/dashboard/i18n/locale/no/conversation.json index d875f98f4..62198d4bf 100644 --- a/app/javascript/dashboard/i18n/locale/no/conversation.json +++ b/app/javascript/dashboard/i18n/locale/no/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Velg en samtale fra venstre panel", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sendt av:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/no/helpCenter.json b/app/javascript/dashboard/i18n/locale/no/helpCenter.json index 853d77da9..3f86a2673 100644 --- a/app/javascript/dashboard/i18n/locale/no/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/no/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Innstillinger" + "SETTINGS": "Innstillinger", + "DELETE": "Slett" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Navn", + "DESCRIPTION": "Beskrivelse", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Bekreft sletting", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ja, slett", + "NO": "Nei, behold den" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Navn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivelse", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/no/settings.json b/app/javascript/dashboard/i18n/locale/no/settings.json index 342296c45..97e72ee11 100644 --- a/app/javascript/dashboard/i18n/locale/no/settings.json +++ b/app/javascript/dashboard/i18n/locale/no/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Facebook-tilkoblingen din er utløpt, koble til Facebook-siden din for å fortsette tjenester", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/pl/contact.json b/app/javascript/dashboard/i18n/locale/pl/contact.json index ee909d0a8..50487a366 100644 --- a/app/javascript/dashboard/i18n/locale/pl/contact.json +++ b/app/javascript/dashboard/i18n/locale/pl/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Niedostępne", "EMAIL_ADDRESS": "Adres e-mail", "PHONE_NUMBER": "Numer telefonu", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Pomyślnie skopiowano do schowka", "COMPANY": "Firma", "LOCATION": "Lokalizacja", diff --git a/app/javascript/dashboard/i18n/locale/pl/conversation.json b/app/javascript/dashboard/i18n/locale/pl/conversation.json index cdab7ccb8..ad0d4e806 100644 --- a/app/javascript/dashboard/i18n/locale/pl/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pl/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Oceń rozmowę", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Zespół konwersacji został zmieniony", - "FILE_SIZE_LIMIT": "Plik przekracza limit {MAXIMUM_FILE_UPLOAD_SIZE} dla załącznika", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Wysłane przez:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json index fcc79f650..fc748b800 100644 --- a/app/javascript/dashboard/i18n/locale/pl/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pl/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "aktywna", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Ustawienia" + "SETTINGS": "Ustawienia", + "DELETE": "Usuń" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nazwa", + "DESCRIPTION": "Opis", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potwierdź usunięcie", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Tak, usuń", + "NO": "Nie, zachowaj" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nazwa", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Nazwa jest wymagana" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Opis jest wymagany" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Anuluj" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/pl/settings.json b/app/javascript/dashboard/i18n/locale/pl/settings.json index 3c048ac85..445a2fee8 100644 --- a/app/javascript/dashboard/i18n/locale/pl/settings.json +++ b/app/javascript/dashboard/i18n/locale/pl/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/pt/contact.json b/app/javascript/dashboard/i18n/locale/pt/contact.json index 6c53e4882..d2f7b57dd 100644 --- a/app/javascript/dashboard/i18n/locale/pt/contact.json +++ b/app/javascript/dashboard/i18n/locale/pt/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Não Disponível", "EMAIL_ADDRESS": "Endereço de email", "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", "COMPANY": "Empresa", "LOCATION": "Localização", diff --git a/app/javascript/dashboard/i18n/locale/pt/conversation.json b/app/javascript/dashboard/i18n/locale/pt/conversation.json index 9a0a3abce..bc2f133d4 100644 --- a/app/javascript/dashboard/i18n/locale/pt/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Por favor, selecione uma conversa no painel da esquerda", + "CSAT_REPLY_MESSAGE": "Por favor, avalie a conversa", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Equipa de conversação alterada", - "FILE_SIZE_LIMIT": "O ficheiro ultrapassa o tamanho limite {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Não foi possível enviar esta mensagem, por favor, tente novamente mais tarde", "SENT_BY": "Enviado por:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json index 21be07908..1778d9213 100644 --- a/app/javascript/dashboard/i18n/locale/pt/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pt/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "ativa", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Confirgurações" + "SETTINGS": "Confirgurações", + "DELETE": "excluir" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nome:", + "DESCRIPTION": "Descrição", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar Exclusão", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Sim, excluir", + "NO": "Não, mantenha isso" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nome:", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Descrição é obrigatória" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/pt/settings.json b/app/javascript/dashboard/i18n/locale/pt/settings.json index a8fa35de3..ecc361da9 100644 --- a/app/javascript/dashboard/i18n/locale/pt/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Visão geral", "FACEBOOK_REAUTHORIZE": "A sua ligação ao Facebook caducou, volte a ligar a página para poder continuar a utilizar os serviços", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Ir para as configurações", "SWITCH_CONVERSATION_STATUS": "Mudar para o próximo estado de conversa", "SWITCH_TO_PRIVATE_NOTE": "Alterar para nota privada", - "TOGGLE_RICH_CONTENT_EDITOR": "Ativar/desativar editor de conteúdo", "SWITCH_TO_REPLY": "Mudar para resposta", "TOGGLE_SNOOZE_DROPDOWN": "Ativar/desativar suspensos" }, diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json index 7672a7e06..705d59a5a 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/contact.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Indisponível", "EMAIL_ADDRESS": "Endereço de e-mail", "PHONE_NUMBER": "Número de telefone", + "IDENTIFIER": "Identificador", "COPY_SUCCESSFUL": "Copiado para área de transferência com sucesso", "COMPANY": "Empresa", "LOCATION": "Localização", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json index 88f6bb83e..347a712e6 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Por favor, selecione uma conversa no painel da esquerda", + "CSAT_REPLY_MESSAGE": "Por favor, classifique a conversa", "404": "Desculpe, não conseguimos encontrar a conversa. Por favor, tente novamente", "SWITCH_VIEW_LAYOUT": "Alternar o layout", "DASHBOARD_APP_TAB_MESSAGES": "Mensagens", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Etiqueta atribuída com sucesso", "ASSIGN_LABEL_FAILED": "Falha ao atribuir etiqueta", "CHANGE_TEAM": "Estado da conversa mudou", - "FILE_SIZE_LIMIT": "O arquivo excede o limite de anexos {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "O arquivo excede os {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB do limite para anexos", "MESSAGE_ERROR": "Não foi possível enviar esta mensagem, por favor, tente novamente mais tarde", "SENT_BY": "Enviado por:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json index efd019bea..31b676baa 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Todos os artigos", "PUBLISH_BUTTON": "Publicar", + "MOVE_TO_ARCHIVE_BUTTON": "Mover para arquivado", "PREVIEW": "Pré-visualizar", "ADD_TRANSLATION": "Adicionar tradução", "OPEN_SIDEBAR": "Abrir barra lateral", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portais", + "DEFAULT": "Padrão", "NEW_BUTTON": "Novo portal", "ACTIVE_BADGE": "ativo", "CHOOSE_LOCALE_LABEL": "Escolha uma localidade", @@ -84,7 +86,8 @@ "COUNT_LABEL": "artigos", "ADD": "Adicionar localidade", "VISIT": "Visitar site", - "SETTINGS": "Confirgurações" + "SETTINGS": "Confirgurações", + "DELETE": "Excluir" }, "PORTAL_CONFIG": { "TITLE": "Configurações do Portal", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Padrão" } } + }, + "DELETE_PORTAL": { + "TITLE": "Excluir portal", + "MESSAGE": "Tem certeza de que deseja excluir este portal?", + "YES": "Sim, excluir portal", + "NO": "Não, mantenha o portal", + "API": { + "DELETE_SUCCESS": "Portal excluído com sucesso", + "DELETE_ERROR": "Erro enquanto excluía o portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Editar portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Informação Básica" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Personalização do Portal" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categorias" + }, + "LOCALE_SETTINGS": { + "TITLE": "Localidades" + } + }, + "CATEGORIES": { + "TITLE": "Categorias em", + "NEW_CATEGORY": "Nova categoria", + "TABLE": { + "NAME": "Nome", + "DESCRIPTION": "Descrição", + "LOCALE": "Localidade", + "ARTICLE_COUNT": "No. de artigos", + "ACTION_BUTTON": { + "EDIT": "Editar categoria", + "DELETE": "Excluir categoria" + }, + "EMPTY_TEXT": "Nenhuma categoria encontrada" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Atualizar configurações básicas" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Slug do Portal para URLs", - "HELP_TEXT": "app.chatwoot.com/hc/meu-portal", "ERROR": "Slug é obrigatório" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "O texto do cabeçalho do Portal é obrigatório" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal criado com sucesso.", "ERROR_MESSAGE_FOR_BASIC": "Não foi possível criar o portal. Tente novamente.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal atualizado com sucesso.", "ERROR_MESSAGE_FOR_UPDATE": "Não foi possível atualizar o portal. Tente novamente." } + }, + "ADD_LOCALE": { + "TITLE": "Adicionar uma nova localidade", + "SUB_TITLE": "Isso adiciona uma nova localidade à sua lista de tradução disponível.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Localidade", + "PLACEHOLDER": "Escolha uma localidade", + "ERROR": "Localidade é necessária" + }, + "BUTTONS": { + "CREATE": "Criar localidade", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Localidade adicionada com sucesso", + "ERROR_MESSAGE": "Não foi possível adicionar a localidade. Tente novamente." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Localização padrão atualizada com sucesso", + "ERROR_MESSAGE": "Não é possível atualizar a localidade padrão. Tente novamente." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Localização removida do portal com sucesso", + "ERROR_MESSAGE": "Não é possível remover a localidade do portal. Tente novamente." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Erro ao salvar artigo" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Erro ao publicar o artigo", + "SUCCESS": "Artigo publicado com sucesso" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Erro durante o arquivamento do artigo", + "SUCCESS": "Artigo arquivado com sucesso" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmar exclusão", + "MESSAGE": "Tem certeza que deseja excluir o artigo?", + "YES": "Sim, excluir", + "NO": "Não, mantenha" + } + }, + "API": { + "SUCCESS_MESSAGE": "Artigo excluído com sucesso", + "ERROR_MESSAGE": "Erro enquanto excluía o artigo" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Por favor, adicione o cabeçalho e o conteúdo do artigo, só então você pode atualizar as configurações" }, "SIDEBAR": { "SEARCH": { @@ -247,7 +352,7 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Categoria de slug para URLs", - "HELP_TEXT": "app.chatwoot.com/hc/meu-portal/en-US/categories/meu-slug", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", "ERROR": "Slug é obrigatório" }, "DESCRIPTION": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Categoria criada com sucesso", "ERROR_MESSAGE": "Não é possível criar categoria" } + }, + "EDIT": { + "TITLE": "Editar uma categoria", + "SUB_TITLE": "Editar uma categoria atualizará a categoria no portal voltado ao público.", + "PORTAL": "Portal", + "LOCALE": "Localidade", + "NAME": { + "LABEL": "Nome", + "PLACEHOLDER": "Nome da categoria", + "HELP_TEXT": "O nome da categoria será utilizada no portal voltado ao público para categorizar artigos.", + "ERROR": "O nome é obrigatório" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Categoria de slug para URLs", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug é obrigatório" + }, + "DESCRIPTION": { + "LABEL": "Descrição", + "PLACEHOLDER": "Forneça uma breve descrição sobre a categoria.", + "ERROR": "Descrição obrigatória" + }, + "BUTTONS": { + "CREATE": "Atualizar categoria", + "CANCEL": "Cancelar" + }, + "API": { + "SUCCESS_MESSAGE": "Categoria atualizada com sucesso", + "ERROR_MESSAGE": "Não é possível atualizar categoria" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Categoria excluída com sucesso", + "ERROR_MESSAGE": "Não é possível excluir a categoria" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json index a5142033b..a94a9e6cc 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/settings.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Visão geral", "FACEBOOK_REAUTHORIZE": "Sua conexão com o Facebook expirou! Por favor, reconecte sua página do Facebook para continuar os serviços", "HELP_CENTER": { + "TITLE": "Centro de ajuda", "ALL_ARTICLES": "Todos os artigos", "MY_ARTICLES": "Meus Artigos", "DRAFT": "Rascunho", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Ir para Configurações", "SWITCH_CONVERSATION_STATUS": "Mudar para o próximo status da conversa", "SWITCH_TO_PRIVATE_NOTE": "Mudar para Nota Privada", - "TOGGLE_RICH_CONTENT_EDITOR": "Ativar/desativar editor de conteúdo rico", "SWITCH_TO_REPLY": "Mudar para resposta", "TOGGLE_SNOOZE_DROPDOWN": "Ativar/desativar soneca" }, diff --git a/app/javascript/dashboard/i18n/locale/ro/contact.json b/app/javascript/dashboard/i18n/locale/ro/contact.json index 2511c9cba..e4f7bbd68 100644 --- a/app/javascript/dashboard/i18n/locale/ro/contact.json +++ b/app/javascript/dashboard/i18n/locale/ro/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Nu este disponibil", "EMAIL_ADDRESS": "Adresa Email", "PHONE_NUMBER": "Număr de telefon", + "IDENTIFIER": "Identificator", "COPY_SUCCESSFUL": "Cod copiat în clipboard cu succes", "COMPANY": "Companie", "LOCATION": "Locaţie", diff --git a/app/javascript/dashboard/i18n/locale/ro/conversation.json b/app/javascript/dashboard/i18n/locale/ro/conversation.json index 63017f9aa..490839fe7 100644 --- a/app/javascript/dashboard/i18n/locale/ro/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ro/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Vă rugăm să selectați o conversație din panoul din stânga", + "CSAT_REPLY_MESSAGE": "Vă rugăm să evaluați conversația", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Echipa de conversație schimbată", - "FILE_SIZE_LIMIT": "Fisierul depaseste limita de {MAXIMUM_FILE_UPLOAD_SIZE} atasamente", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Mesajul nu poate fi trimis, te rugăm să încerci din nou mai târziu", "SENT_BY": "Trimis de:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json index f9bee9262..0372d4f90 100644 --- a/app/javascript/dashboard/i18n/locale/ro/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ro/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "activ", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Setări" + "SETTINGS": "Setări", + "DELETE": "Şterge" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Nume", + "DESCRIPTION": "Descriere", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Renunță" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirmă ștergerea", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Da, șterge", + "NO": "Nu, păstreaza" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Nume", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Numele este obligatoriu" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Descriere", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Descrierea este obligatorie" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Renunță" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ro/settings.json b/app/javascript/dashboard/i18n/locale/ro/settings.json index e19a39546..2f60211ec 100644 --- a/app/javascript/dashboard/i18n/locale/ro/settings.json +++ b/app/javascript/dashboard/i18n/locale/ro/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Prezentare generală", "FACEBOOK_REAUTHORIZE": "Conexiunea ta de Facebook a expirat, te rugăm să-ți reconectezi pagina de Facebook pentru a continua serviciile", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Accesați Pagina Setări", "SWITCH_CONVERSATION_STATUS": "Comutarea la următoarea stare a conversației", "SWITCH_TO_PRIVATE_NOTE": "Comutarea la Notă privată", - "TOGGLE_RICH_CONTENT_EDITOR": "Comutarea editorului de conținut îmbogățit", "SWITCH_TO_REPLY": "Comutarea la Răspuns", "TOGGLE_SNOOZE_DROPDOWN": "Comutați snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ru/contact.json b/app/javascript/dashboard/i18n/locale/ru/contact.json index 20c8b4e2d..267323dab 100644 --- a/app/javascript/dashboard/i18n/locale/ru/contact.json +++ b/app/javascript/dashboard/i18n/locale/ru/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Недоступен", "EMAIL_ADDRESS": "Email", "PHONE_NUMBER": "Номер телефона", + "IDENTIFIER": "Идентификатор", "COPY_SUCCESSFUL": "Скопировано в буфер обмена", "COMPANY": "Компания", "LOCATION": "Местоположение", diff --git a/app/javascript/dashboard/i18n/locale/ru/conversation.json b/app/javascript/dashboard/i18n/locale/ru/conversation.json index 182d6a64d..51cffb7a6 100644 --- a/app/javascript/dashboard/i18n/locale/ru/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ru/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Пожалуйста, выберите диалог из левой панели", + "CSAT_REPLY_MESSAGE": "Пожалуйста, оцените разговор", "404": "Мы не можем найти разговор. Пожалуйста, попробуйте еще раз", "SWITCH_VIEW_LAYOUT": "Изменить раскладку", "DASHBOARD_APP_TAB_MESSAGES": "Сообщения", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Метка успешно назначена", "ASSIGN_LABEL_FAILED": "Назначение метки не удалось", "CHANGE_TEAM": "Команда назначенная в беседу изменена", - "FILE_SIZE_LIMIT": "Превышен размер загружаемого файла - {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "Превышен лимит вложений в {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB", "MESSAGE_ERROR": "Не удается отправить это сообщение, повторите попытку позже", "SENT_BY": "Отправитель:", "BOT": "Бот", diff --git a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json index a9d5b43ed..2cd1f6675 100644 --- a/app/javascript/dashboard/i18n/locale/ru/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ru/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Все статьи", "PUBLISH_BUTTON": "Опубликовано", + "MOVE_TO_ARCHIVE_BUTTON": "Переместить в архив", "PREVIEW": "Предпросмотр", "ADD_TRANSLATION": "Добавить перевод", "OPEN_SIDEBAR": "Открыть боковую панель", @@ -28,42 +29,43 @@ "SAVED": "Сохранено" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Настройки статей", "FORM": { "CATEGORY": { "LABEL": "Категория", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "TITLE": "Выберите категорию", + "PLACEHOLDER": "Выберите категорию", + "NO_RESULT": "Не найдено категорий", + "SEARCH_PLACEHOLDER": "Поиск категории" }, "AUTHOR": { "LABEL": "Автор", "TITLE": "Выбрать автора", "PLACEHOLDER": "Выбрать автора", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "NO_RESULT": "Авторов не найдено", + "SEARCH_PLACEHOLDER": "Поиск автора" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Мета-заголовок", + "PLACEHOLDER": "Добавит мета заголовок" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Мета описание", + "PLACEHOLDER": "Добавьте мета-описание для лучших SEO результатов..." }, "META_TAGS": { - "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "LABEL": "Мета теги", + "PLACEHOLDER": "Добавить мета-теги, разделенные запятыми..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Архивы статей", + "DELETE": "Удалить статью" } }, "PORTAL": { "HEADER": "Портал", + "DEFAULT": "По умолчанию", "NEW_BUTTON": "Новый портал", "ACTIVE_BADGE": "активно", "CHOOSE_LOCALE_LABEL": "Выберите локаль", @@ -84,7 +86,8 @@ "COUNT_LABEL": "статьи", "ADD": "Добавить локали", "VISIT": "Посетить сайт", - "SETTINGS": "Настройки" + "SETTINGS": "Настройки", + "DELETE": "Удалить" }, "PORTAL_CONFIG": { "TITLE": "Конфигурации портала", @@ -109,51 +112,96 @@ "DEFAULT_LOCALE": "По умолчанию" } } + }, + "DELETE_PORTAL": { + "TITLE": "Удалить портал", + "MESSAGE": "Вы уверены, что хотите удалить этот портал", + "YES": "Да, удалить портал", + "NO": "Нет, сохранить портал", + "API": { + "DELETE_SUCCESS": "Портал успешно удален", + "DELETE_ERROR": "Ошибка при удалении портала" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Редактировать портал", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Основная информация" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Настройка портала" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Категории" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Категории в", + "NEW_CATEGORY": "Новая категория", + "TABLE": { + "NAME": "Имя", + "DESCRIPTION": "Описание", + "LOCALE": "Local", + "ARTICLE_COUNT": "№ статей", + "ACTION_BUTTON": { + "EDIT": "Редактировать категорию", + "DELETE": "Удалить категорию" + }, + "EMPTY_TEXT": "Категорий не найдено" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Обновить основные настройки" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Информация справочного центра", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Основная информация о портале", + "CREATE_BASIC_SETTING_BUTTON": "Создать базовые настройки портала" }, { - "title": "Help center customization", + "title": "Информация справочного центра", "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "body": "Настройка портала", + "UPDATE_PORTAL_BUTTON": "Обновить настройки портала" }, { - "title": "Voila! 🎉", + "title": "Ура! 🎉", "route": "portal_finish", - "body": "You're all set!", + "body": "Всё готово!", "FINISH": "Завершить" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Назад", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Создать портал", + "TITLE": "Информация справочного центра", + "CREATE_BASIC_SETTING_BUTTON": "Создать базовые настройки портала" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Настройки портала", + "TITLE": "Информация справочного центра", + "UPDATE_PORTAL_BUTTON": "Обновить настройки портала" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Ура!🎉 Все готово!", + "MESSAGE": "Теперь вы можете видеть этот созданный портал на вашей странице порталов.", + "FINISH": "Перейти на страницу всех порталов" } }, "LOGO": { - "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "LABEL": "Логотип", + "UPLOAD_BUTTON": "Загрузить логотип", + "HELP_TEXT": "Этот логотип будет показан в заголовке портала." }, "NAME": { "LABEL": "Имя", @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Метка", "PLACEHOLDER": "Слаг портала для url", - "ERROR": "Необходимо указать метку" }, "DOMAIN": { @@ -180,24 +227,56 @@ "ERROR": "Счалка главной страницы обязательна" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Цвет темы портала", + "HELP_TEXT": "Этот цвет будет отображаться в качестве цвета темы портала." }, "PAGE_TITLE": { "LABEL": "Название страницы", "PLACEHOLDER": "Заголовок страницы портала", - "HELP_TEXT": "The page title will be used in the public facing portal.", + "HELP_TEXT": "Название будет использоваться на публичном портале.", "ERROR": "Необходимо указать название" }, "HEADER_TEXT": { - "LABEL": "Header Text", - "PLACEHOLDER": "Portal header text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", - "ERROR": "Portal header text is required" + "LABEL": "Header текст", + "PLACEHOLDER": "Текст заголовка портала", + "HELP_TEXT": "Название будет использоваться на публичном портале.", + "ERROR": "Необходимо ввести текст заголовка портала" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Портал создан успешно.", "ERROR_MESSAGE_FOR_BASIC": "Не удалось создать портал. Попробуйте еще раз.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_UPDATE": "Портал успешно обновлен.", + "ERROR_MESSAGE_FOR_UPDATE": "Не удалось создать портал. Попробуйте еще раз." + } + }, + "ADD_LOCALE": { + "TITLE": "Добавить новую локаль", + "SUB_TITLE": "Это добавляет новую локализацию в ваш список доступных переводов.", + "PORTAL": "Портал", + "LOCALE": { + "LABEL": "Local", + "PLACEHOLDER": "Выберите локаль", + "ERROR": "Требуется локаль" + }, + "BUTTONS": { + "CREATE": "Создать локаль", + "CANCEL": "Отменить" + }, + "API": { + "SUCCESS_MESSAGE": "Локаль успешно добавлен", + "ERROR_MESSAGE": "Не удалось добавить локаль. Попробуйте еще раз." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Локаль по умолчанию успешно обновлена", + "ERROR_MESSAGE": "Не удалось обновить локаль по умолчанию. Повторите попытку." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Локаль успешно удалена из портала", + "ERROR_MESSAGE": "Невозможно удалить локаль из портала. Повторите попытку." } } }, @@ -224,8 +303,34 @@ "ERROR": "Ошибка при сохранении статьи" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Ошибка при публикации статьи", + "SUCCESS": "Статья успешно опубликована" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Ошибка при сохранении статьи", + "SUCCESS": "Статья успешно архивирована" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Подтвердите удаление", + "MESSAGE": "Вы уверены, что хотите удалить статью?", + "YES": "Да, удалить", + "NO": "Нет, не удалять" + } + }, + "API": { + "SUCCESS_MESSAGE": "Статья успешно удалена", + "ERROR_MESSAGE": "Ошибка при удалении статьи" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Пожалуйста, добавьте заголовок статьи и контент, а затем только вы можете обновить настройки" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Категория успешно создана", "ERROR_MESSAGE": "Не удалось создать категорию" } + }, + "EDIT": { + "TITLE": "Редактировать категорию", + "SUB_TITLE": "Изменение категории обновит категорию на портале.", + "PORTAL": "Портал", + "LOCALE": "Local", + "NAME": { + "LABEL": "Имя", + "PLACEHOLDER": "Имя категории", + "HELP_TEXT": "Название категории будет использоваться на портале общего доступа для классификации статей.", + "ERROR": "Необходимо указать имя" + }, + "SLUG": { + "LABEL": "Метка", + "PLACEHOLDER": "Метка категории для url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Необходимо указать метку" + }, + "DESCRIPTION": { + "LABEL": "Описание", + "PLACEHOLDER": "Укажите краткое описание категории.", + "ERROR": "Необходимо описание" + }, + "BUTTONS": { + "CREATE": "Обновить категорию", + "CANCEL": "Отменить" + }, + "API": { + "SUCCESS_MESSAGE": "Категория успешно обновлена", + "ERROR_MESSAGE": "Не удается обновить категорию" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Категория успешно удалена", + "ERROR_MESSAGE": "Не удается удалить категорию" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ru/settings.json b/app/javascript/dashboard/i18n/locale/ru/settings.json index d4239c0d0..dce0bef0e 100644 --- a/app/javascript/dashboard/i18n/locale/ru/settings.json +++ b/app/javascript/dashboard/i18n/locale/ru/settings.json @@ -197,12 +197,13 @@ "REPORTS_OVERVIEW": "Обзор", "FACEBOOK_REAUTHORIZE": "Ваше подключение к Facebook истекло. Пожалуйста, переподключитесь к Facebook для продолжения работы", "HELP_CENTER": { + "TITLE": "Центр Справки (Бета)", "ALL_ARTICLES": "Все статьи", "MY_ARTICLES": "Мои статьи", "DRAFT": "Черновик", "ARCHIVED": "Архив", "CATEGORY": "Категория", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "CATEGORY_EMPTY_MESSAGE": "Категорий не найдено" }, "DOCS": "Чтение документов" }, @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Перейти к настройкам", "SWITCH_CONVERSATION_STATUS": "Переключиться на статус следующего диалога", "SWITCH_TO_PRIVATE_NOTE": "Переключиться на заметку", - "TOGGLE_RICH_CONTENT_EDITOR": "Переключить редактор содержимого", "SWITCH_TO_REPLY": "Переключиться на ответ", "TOGGLE_SNOOZE_DROPDOWN": "Вкл/выкл повтор" }, diff --git a/app/javascript/dashboard/i18n/locale/sk/contact.json b/app/javascript/dashboard/i18n/locale/sk/contact.json index a622799c0..cfa58aef2 100644 --- a/app/javascript/dashboard/i18n/locale/sk/contact.json +++ b/app/javascript/dashboard/i18n/locale/sk/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "NIe je k dispozícii", "EMAIL_ADDRESS": "E-mailová adresa", "PHONE_NUMBER": "Telefónne číslo", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Úspešne nakopírované", "COMPANY": "Spoločnosť", "LOCATION": "Lokácia", diff --git a/app/javascript/dashboard/i18n/locale/sk/conversation.json b/app/javascript/dashboard/i18n/locale/sk/conversation.json index 4518a0e9e..480bda3d1 100644 --- a/app/javascript/dashboard/i18n/locale/sk/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sk/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Vyberte si konverzáciu z ľavého panela", + "CSAT_REPLY_MESSAGE": "Prosím, ohodnoťte konverzáciu", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json index 5a9eb8608..fa40d12dd 100644 --- a/app/javascript/dashboard/i18n/locale/sk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sk/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Nastavenia" + "SETTINGS": "Nastavenia", + "DELETE": "Vymazať" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Meno", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Zrušiť" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potvrdiť vymazanie", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Áno, vymazať", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Meno", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Zrušiť" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/sk/settings.json b/app/javascript/dashboard/i18n/locale/sk/settings.json index 18b93f1c0..b5b8f7075 100644 --- a/app/javascript/dashboard/i18n/locale/sk/settings.json +++ b/app/javascript/dashboard/i18n/locale/sk/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Prehľad", "FACEBOOK_REAUTHORIZE": "Vaše pripojenie k Facebooku vypršalo, pre pokračovanie v službách prosím znovu pripojte svoju stránku na Facebooku", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Prejsť na nastavenia", "SWITCH_CONVERSATION_STATUS": "Prepnúť na ďalší stav konverzácie", "SWITCH_TO_PRIVATE_NOTE": "Prepnúť na súkromnú poznámku", - "TOGGLE_RICH_CONTENT_EDITOR": "Prepnúť na rozšírený editor", "SWITCH_TO_REPLY": "Prepnúť na odpoveď", "TOGGLE_SNOOZE_DROPDOWN": "Prepínanie módu \"snooze\"" }, diff --git a/app/javascript/dashboard/i18n/locale/sr/contact.json b/app/javascript/dashboard/i18n/locale/sr/contact.json index fb86fa0ad..9d3281f6d 100644 --- a/app/javascript/dashboard/i18n/locale/sr/contact.json +++ b/app/javascript/dashboard/i18n/locale/sr/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Nije dostupno", "EMAIL_ADDRESS": "E-mail adresa", "PHONE_NUMBER": "Broj telefona", + "IDENTIFIER": "Identifikator", "COPY_SUCCESSFUL": "Uspešno kopirano na beležnicu", "COMPANY": "Firma", "LOCATION": "Lokacija", diff --git a/app/javascript/dashboard/i18n/locale/sr/conversation.json b/app/javascript/dashboard/i18n/locale/sr/conversation.json index 6dd4c2125..f2bc8f462 100644 --- a/app/javascript/dashboard/i18n/locale/sr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sr/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Izaberite razgovor sa leve strane", + "CSAT_REPLY_MESSAGE": "Molim vas ocenite ovaj razgovor", "404": "Izvinite, ne možemo da pronađemo razgovor. Molim vas pokušajte ponovo", "SWITCH_VIEW_LAYOUT": "Promeni raspored", "DASHBOARD_APP_TAB_MESSAGES": "Poruke", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Oznaka je uspešno dodeljena", "ASSIGN_LABEL_FAILED": "Nije uspela dodela oznake", "CHANGE_TEAM": "Tim razgovora je promenjen", - "FILE_SIZE_LIMIT": "Datoteka premašuje ograničenje priloga od {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Nije moguće slanje poruke, molim vas pokušajte ponovo", "SENT_BY": "Poslao:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json index a3cb74a95..a7b22f600 100644 --- a/app/javascript/dashboard/i18n/locale/sr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sr/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Svi članci", "PUBLISH_BUTTON": "Objavite", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Pregledajte", "ADD_TRANSLATION": "Dodajte prevod", "OPEN_SIDEBAR": "Otvorite bočnu traku", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portali", + "DEFAULT": "Predefinisano", "NEW_BUTTON": "Novi portal", "ACTIVE_BADGE": "aktivan", "CHOOSE_LOCALE_LABEL": "Izaberi lokal", @@ -84,7 +86,8 @@ "COUNT_LABEL": "članci", "ADD": "Dodaj lokal", "VISIT": "Poseti sajt", - "SETTINGS": "Podešavanja" + "SETTINGS": "Podešavanja", + "DELETE": "Izbriši" }, "PORTAL_CONFIG": { "TITLE": "Podešavanja portala", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Predefinisano" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Ime", + "DESCRIPTION": "Opis", + "LOCALE": "Lokal", + "ARTICLE_COUNT": "Broj članaka", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "Nije pronađena nijedna kategorija" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Slug portala za adrese", - "ERROR": "Slug je obavezan" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Tekst zaglavlja portala je obavezan" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal je uspešno napravljen.", "ERROR_MESSAGE_FOR_BASIC": "Nije bilo moguće napraviti portal. Pokušajte ponovo.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Dodaj novi lokal", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Lokal", + "PLACEHOLDER": "Izaberi lokal", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Otkaži" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Potvrdite brisanje", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Da, obriši", + "NO": "Ne, zadrži je" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Kategorija je uspešno napravljena", "ERROR_MESSAGE": "Nije bilo moguće napraviti kategoriju" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Lokal", + "NAME": { + "LABEL": "Ime", + "PLACEHOLDER": "Naziv kategorije", + "HELP_TEXT": "Naziv kategorije će se koristiti u javno dostupnim portalima da bi se članci kategorizovali.", + "ERROR": "Ime je neophodno" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Slug kategorije za adrese", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug je obavezan" + }, + "DESCRIPTION": { + "LABEL": "Opis", + "PLACEHOLDER": "Dostavite kratak opis kategorije.", + "ERROR": "Opis je neophodan" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Otkaži" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/sr/settings.json b/app/javascript/dashboard/i18n/locale/sr/settings.json index 1efc6c08d..537de8e61 100644 --- a/app/javascript/dashboard/i18n/locale/sr/settings.json +++ b/app/javascript/dashboard/i18n/locale/sr/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Pregled", "FACEBOOK_REAUTHORIZE": "Vaša veza sa Fejsbukom je istekla, molim vas povežite ponovo vašu Fejsbuk stranicu za nastavak servisa", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "Svi članci", "MY_ARTICLES": "Moji članci", "DRAFT": "Nacrt", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Idi na podešavanja", "SWITCH_CONVERSATION_STATUS": "Prebaci se na sledeći status razgovora", "SWITCH_TO_PRIVATE_NOTE": "Prebaci se na privatnu belešku", - "TOGGLE_RICH_CONTENT_EDITOR": "Uključi uređivač bogatog sadržaja", "SWITCH_TO_REPLY": "Prebaci se na odgovor", "TOGGLE_SNOOZE_DROPDOWN": "Uključite padajućim menijom odlaganja" }, diff --git a/app/javascript/dashboard/i18n/locale/sv/contact.json b/app/javascript/dashboard/i18n/locale/sv/contact.json index efa50ee5a..ddaebfc56 100644 --- a/app/javascript/dashboard/i18n/locale/sv/contact.json +++ b/app/javascript/dashboard/i18n/locale/sv/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Ej tillgänglig", "EMAIL_ADDRESS": "E-postadress", "PHONE_NUMBER": "Telefonnummer", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Kopierat till urklipp", "COMPANY": "Företag", "LOCATION": "Plats", diff --git a/app/javascript/dashboard/i18n/locale/sv/conversation.json b/app/javascript/dashboard/i18n/locale/sv/conversation.json index 941b7356b..d8bb99be8 100644 --- a/app/javascript/dashboard/i18n/locale/sv/conversation.json +++ b/app/javascript/dashboard/i18n/locale/sv/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Konversationsteamet har ändrats", - "FILE_SIZE_LIMIT": "Filen överskrider gränsen för {MAXIMUM_FILE_UPLOAD_SIZE} bifogade filer", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Det gick inte att skicka detta meddelande, försök igen senare", "SENT_BY": "Skickat av:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json index 76d61f514..521add151 100644 --- a/app/javascript/dashboard/i18n/locale/sv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/sv/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Inställningar" + "SETTINGS": "Inställningar", + "DELETE": "Radera" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Namn", + "DESCRIPTION": "Beskrivning", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Bekräfta borttagning", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Ja, ta bort", + "NO": "Nej, behåll" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Namn", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Beskrivning", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Avbryt" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/sv/settings.json b/app/javascript/dashboard/i18n/locale/sv/settings.json index a2bc0b758..b0851c4e9 100644 --- a/app/javascript/dashboard/i18n/locale/sv/settings.json +++ b/app/javascript/dashboard/i18n/locale/sv/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Din Facebook-anslutning har löpt ut, vänligen återanslut din Facebook-sida för att fortsätta med tjänsterna", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ta/contact.json b/app/javascript/dashboard/i18n/locale/ta/contact.json index 6ddc65fdf..edbe03cf6 100644 --- a/app/javascript/dashboard/i18n/locale/ta/contact.json +++ b/app/javascript/dashboard/i18n/locale/ta/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Not Available", "EMAIL_ADDRESS": "ஈ-மெயில் முகவரி", "PHONE_NUMBER": "தொலைபேசி எண்", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "இருப்பிடம்", diff --git a/app/javascript/dashboard/i18n/locale/ta/conversation.json b/app/javascript/dashboard/i18n/locale/ta/conversation.json index d8c01a0ae..b9fa65932 100644 --- a/app/javascript/dashboard/i18n/locale/ta/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ta/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json index e9de2350c..c3aa27ec6 100644 --- a/app/javascript/dashboard/i18n/locale/ta/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ta/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "அமைப்புகள்" + "SETTINGS": "அமைப்புகள்", + "DELETE": "Delete" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "பெயர்", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "ரத்துசெய்" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "நீக்குதலை உறுதிப்படுத்தவும்", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "இல்லை, அதை வைத்திரு" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "பெயர்", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "ரத்துசெய்" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ta/settings.json b/app/javascript/dashboard/i18n/locale/ta/settings.json index 9e7ca8180..a9ffe34d5 100644 --- a/app/javascript/dashboard/i18n/locale/ta/settings.json +++ b/app/javascript/dashboard/i18n/locale/ta/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/th/contact.json b/app/javascript/dashboard/i18n/locale/th/contact.json index f71d87614..fa22b3b1d 100644 --- a/app/javascript/dashboard/i18n/locale/th/contact.json +++ b/app/javascript/dashboard/i18n/locale/th/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "ไม่พร้อมใช้งาน", "EMAIL_ADDRESS": "ที่อยู่อีเมล์", "PHONE_NUMBER": "หมายเลขโทรศัพท์", + "IDENTIFIER": "ตัวระบุ", "COPY_SUCCESSFUL": "คัดลอกไปยังคริปบอร์ดเเล้ว", "COMPANY": "บริษัท", "LOCATION": "สถานที่", diff --git a/app/javascript/dashboard/i18n/locale/th/conversation.json b/app/javascript/dashboard/i18n/locale/th/conversation.json index 35405ba33..a03d30429 100644 --- a/app/javascript/dashboard/i18n/locale/th/conversation.json +++ b/app/javascript/dashboard/i18n/locale/th/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "กรุณาเลือกการสนทนาจากด้านซ้าย", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "เปลี่ยนทีมการสนทนาเเล้ว", - "FILE_SIZE_LIMIT": "ไม่สามารถแนบไฟล์ขนาดใหญ่เกิน {MAXIMUM_FILE_UPLOAD_SIZE} ได้", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "ไม่สามารถส่งข้อความนี้ได้ โปรดลองใหม่อีกครั้ง", "SENT_BY": "ส่งโดย:", "BOT": "บอท", diff --git a/app/javascript/dashboard/i18n/locale/th/helpCenter.json b/app/javascript/dashboard/i18n/locale/th/helpCenter.json index 2a0bb1ac5..766998582 100644 --- a/app/javascript/dashboard/i18n/locale/th/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/th/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "ใช้งานอยู่", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "ตั้งค่า" + "SETTINGS": "ตั้งค่า", + "DELETE": "ลบ" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "ชื่อ", + "DESCRIPTION": "คำอธิบาย", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "ยกเลิก" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "ยืนยันการลบ", + "MESSAGE": "Are you sure to delete the article?", + "YES": "เอาเลย", + "NO": "ไม่" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "ชื่อ", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "โปรดระบุชื่อ" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "คำอธิบาย", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "โปรดระบุคำอธิบาย" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "ยกเลิก" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/th/settings.json b/app/javascript/dashboard/i18n/locale/th/settings.json index 965422215..7041d27de 100644 --- a/app/javascript/dashboard/i18n/locale/th/settings.json +++ b/app/javascript/dashboard/i18n/locale/th/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "ภาพรวม", "FACEBOOK_REAUTHORIZE": "การเชื่อมต่อกับ Facebook หมดอายุแล้ว โปรดเชื่อมต่อใหม่อีกครั้ง", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "ไปที่ตั้งค่า", "SWITCH_CONVERSATION_STATUS": "ไปยังสถานะการสนทนาถัดไป", "SWITCH_TO_PRIVATE_NOTE": "สลับเป็นโน้ตส่วนตัว", - "TOGGLE_RICH_CONTENT_EDITOR": "เปิดหรือปิดเครื่องมือแก้ไขริชคอนเทนท์", "SWITCH_TO_REPLY": "สลับเป็นการตอบกลับ", "TOGGLE_SNOOZE_DROPDOWN": "เปิดหรือปิดเมนูพักการสนทนา" }, diff --git a/app/javascript/dashboard/i18n/locale/tr/contact.json b/app/javascript/dashboard/i18n/locale/tr/contact.json index 0addb2398..decd1ec4f 100644 --- a/app/javascript/dashboard/i18n/locale/tr/contact.json +++ b/app/javascript/dashboard/i18n/locale/tr/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Müsait değil", "EMAIL_ADDRESS": "E-posta adresi", "PHONE_NUMBER": "Telefon numarası", + "IDENTIFIER": "Doğrulayıcı", "COPY_SUCCESSFUL": "Panoya başarıyla kopyalandı", "COMPANY": "Şirket", "LOCATION": "Yer", @@ -159,7 +160,7 @@ "ERROR_MESSAGE": "Bir hata oluştu, lütfen tekrar deneyin" }, "NEW_CONVERSATION": { - "BUTTON_LABEL": "Görüşmeyi Başlatın", + "BUTTON_LABEL": "Çatı başla", "TITLE": "Yeni görüşme", "DESC": "Mesaj göndererek yeni bir görüşme başlatın.", "NO_INBOX": "Bu kişiyle yeni bir görüşme başlatılamadı.", diff --git a/app/javascript/dashboard/i18n/locale/tr/conversation.json b/app/javascript/dashboard/i18n/locale/tr/conversation.json index 1afaf307e..da31b9446 100644 --- a/app/javascript/dashboard/i18n/locale/tr/conversation.json +++ b/app/javascript/dashboard/i18n/locale/tr/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Lütfen sol bölmeden bir konuşma seçin", + "CSAT_REPLY_MESSAGE": "Lütfen görüşmeyi değerlendirin", "404": "Maalesef konuşmayı bulamıyoruz. Lütfen tekrar deneyin", "SWITCH_VIEW_LAYOUT": "Düzeni değiştir", "DASHBOARD_APP_TAB_MESSAGES": "Mesajlar", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Görüşme takımı değişti", - "FILE_SIZE_LIMIT": "Dosya {MAXIMUM_FILE_UPLOAD_SIZE} sınırını aşıyor", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Tarafından gönderildi:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json index fb308fbc1..649398f0e 100644 --- a/app/javascript/dashboard/i18n/locale/tr/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/tr/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "aktif", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Ayarlar" + "SETTINGS": "Ayarlar", + "DELETE": "Sil" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "İsim", + "DESCRIPTION": "Açıklama", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "İptal Et" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Silmeyi onayla", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Evet, Sil", + "NO": "Hayır, kalsın" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "İsim", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "İsim gereklidir" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Açıklama", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Açıklama zorunludur" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "İptal Et" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json index d84a7f3f3..28fbc6a71 100644 --- a/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/tr/inboxMgmt.json @@ -644,7 +644,7 @@ "IN_A_DAY": "Genellikle bir gün içinde yanıtlar" }, "FOOTER": { - "START_CONVERSATION_BUTTON_TEXT": "Görüşmeyi Başlatın", + "START_CONVERSATION_BUTTON_TEXT": "Çatı başla", "CHAT_INPUT_PLACEHOLDER": "Mesajınız" }, "BODY": { diff --git a/app/javascript/dashboard/i18n/locale/tr/settings.json b/app/javascript/dashboard/i18n/locale/tr/settings.json index b98319a68..d227616cc 100644 --- a/app/javascript/dashboard/i18n/locale/tr/settings.json +++ b/app/javascript/dashboard/i18n/locale/tr/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Önizleme", "FACEBOOK_REAUTHORIZE": "Facebook bağlantınızın süresi doldu, hizmetlere devam etmek için lütfen Facebook sayfanızı yeniden bağlayın", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/uk/contact.json b/app/javascript/dashboard/i18n/locale/uk/contact.json index bd3ee6166..93df961ee 100644 --- a/app/javascript/dashboard/i18n/locale/uk/contact.json +++ b/app/javascript/dashboard/i18n/locale/uk/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Не доступно", "EMAIL_ADDRESS": "Адреса електронної пошти", "PHONE_NUMBER": "Номер телефону", + "IDENTIFIER": "Ідентифікатор", "COPY_SUCCESSFUL": "Скопійовано до буферу обміну", "COMPANY": "Організація", "LOCATION": "Місцезнаходження", diff --git a/app/javascript/dashboard/i18n/locale/uk/conversation.json b/app/javascript/dashboard/i18n/locale/uk/conversation.json index e79fc69fa..0fc6b2f6a 100644 --- a/app/javascript/dashboard/i18n/locale/uk/conversation.json +++ b/app/javascript/dashboard/i18n/locale/uk/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Будь ласка, виберіть бесіду з лівої панелі", + "CSAT_REPLY_MESSAGE": "Будь ласка, оцініть розмову", "404": "На жаль, не вдалося знайти розмову. Будь ласка, спробуйте ще раз", "SWITCH_VIEW_LAYOUT": "Змінити розкладку", "DASHBOARD_APP_TAB_MESSAGES": "Текст повідомлень", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Мітка успішно призначена", "ASSIGN_LABEL_FAILED": "Призначення мітки не вдалося", "CHANGE_TEAM": "Команда змінена", - "FILE_SIZE_LIMIT": "Файл перевищує ліміт вкладення {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "Файл перевищує максимальний розмір вкладень {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} МБ", "MESSAGE_ERROR": "Не вдалося надіслати повідомлення, будь ласка, повторіть спробу пізніше", "SENT_BY": "Надіслав:", "BOT": "Бот", diff --git a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json index 814a7137e..e3f595752 100644 --- a/app/javascript/dashboard/i18n/locale/uk/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/uk/helpCenter.json @@ -20,12 +20,13 @@ "EDIT_HEADER": { "ALL_ARTICLES": "Всі статті", "PUBLISH_BUTTON": "Опублікувати", + "MOVE_TO_ARCHIVE_BUTTON": "Перемістити в архів", "PREVIEW": "Попередній перегляд", "ADD_TRANSLATION": "Додати переклад", "OPEN_SIDEBAR": "Відкрити бічну панель", "CLOSE_SIDEBAR": "Закрити бічну панель", - "SAVING": "Saving...", - "SAVED": "Saved" + "SAVING": "Збереження...", + "SAVED": "Збережено" }, "ARTICLE_SETTINGS": { "TITLE": "Налаштування статей", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Портали", + "DEFAULT": "За замовчуванням", "NEW_BUTTON": "Новий портал", "ACTIVE_BADGE": "активний", "CHOOSE_LOCALE_LABEL": "Виберіть мову", @@ -84,7 +86,8 @@ "COUNT_LABEL": "статті", "ADD": "Додати локаль", "VISIT": "Відвідати сайт", - "SETTINGS": "Налаштування" + "SETTINGS": "Налаштування", + "DELETE": "Видалити" }, "PORTAL_CONFIG": { "TITLE": "Конфігурації порталу", @@ -109,51 +112,96 @@ "DEFAULT_LOCALE": "За замовчуванням" } } + }, + "DELETE_PORTAL": { + "TITLE": "Видалити портал", + "MESSAGE": "Ви дійсно бажаєте видалити цей портал", + "YES": "Так, видалити", + "NO": "Ні, зберегти портал", + "API": { + "DELETE_SUCCESS": "Портал успішно видалено", + "DELETE_ERROR": "Помилка під час видалення" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Редагувати портал", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Основна інформація" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Керування порталом" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Категорії" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Категорії в", + "NEW_CATEGORY": "Нова категорія", + "TABLE": { + "NAME": "Ім'я", + "DESCRIPTION": "Опис", + "LOCALE": "Локаль", + "ARTICLE_COUNT": "Кількість статей", + "ACTION_BUTTON": { + "EDIT": "Редагувати категорію", + "DELETE": "Видалити категорію" + }, + "EMPTY_TEXT": "Категорій не знайдено" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Оновити основні налаштування" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Інформація по центру допомоги", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Основна інформація про портал", + "CREATE_BASIC_SETTING_BUTTON": "Створити базові налаштування порталу" }, { - "title": "Help center customization", + "title": "Інформація по центру допомоги", "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "body": "Настройка порталу", + "UPDATE_PORTAL_BUTTON": "Оновити налаштування порталу" }, { - "title": "Voila! 🎉", + "title": "Ура! 🎉", "route": "portal_finish", - "body": "You're all set!", + "body": "Все готово!", "FINISH": "Закінчити" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Назад", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Створити портал", + "TITLE": "Інформація по центру допомоги", + "CREATE_BASIC_SETTING_BUTTON": "Створити базові налаштування порталу" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Налаштування порталу", + "TITLE": "Інформація по центру допомоги", + "UPDATE_PORTAL_BUTTON": "Оновити налаштування порталу" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Ура!🎉 Все готово!", + "MESSAGE": "Тепер ви можете побачити цей портал на вашій сторінці порталів.", + "FINISH": "Перейти на сторінку всіх порталів" } }, "LOGO": { - "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "LABEL": "Логотип", + "UPLOAD_BUTTON": "Завантажити логотип", + "HELP_TEXT": "Цей логотип буде показано у заголовку порталу." }, "NAME": { "LABEL": "Ім'я", @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Мітка", "PLACEHOLDER": "Портал slug для URL-адрес", - "ERROR": "Необхідно вказати мітку" }, "DOMAIN": { @@ -180,24 +227,56 @@ "ERROR": "Потрібне посилання на головну сторінку" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Колір теми порталу", + "HELP_TEXT": "Цей колір буде показуватися як колір теми для порталу." }, "PAGE_TITLE": { "LABEL": "Заголовок сторінки", "PLACEHOLDER": "Заголовок сторінки порталу", - "HELP_TEXT": "The page title will be used in the public facing portal.", + "HELP_TEXT": "Ім'я буде використане в публічному порталу.", "ERROR": "Необхідно вказати заголовок сторінки" }, "HEADER_TEXT": { "LABEL": "Текст заголовку", "PLACEHOLDER": "Текст заголовку порталу", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", + "HELP_TEXT": "Ім'я буде використане в публічному порталу.", "ERROR": "Потрібен текст заголовка портала" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Портал успішно створено.", "ERROR_MESSAGE_FOR_BASIC": "Не вдалося створити портал. Повторіть спробу.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_UPDATE": "Портал успішно оновлено.", + "ERROR_MESSAGE_FOR_UPDATE": "Не вдалося оновити портал. Спробуйте ще раз." + } + }, + "ADD_LOCALE": { + "TITLE": "Додати нову локаль", + "SUB_TITLE": "Це додасть нову локалізацію до вашого списку перекладів.", + "PORTAL": "Портал", + "LOCALE": { + "LABEL": "Локаль", + "PLACEHOLDER": "Виберіть мову", + "ERROR": "Потрібна локаль" + }, + "BUTTONS": { + "CREATE": "Створити локаль", + "CANCEL": "Скасувати" + }, + "API": { + "SUCCESS_MESSAGE": "Локаль успішно додано", + "ERROR_MESSAGE": "Не вдалося додати локаль. Спробуйте ще раз." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Локаль за замовчуванням успішно оновлено", + "ERROR_MESSAGE": "Не вдалося локаль за замовчуванням. Спробуйте ще раз." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Локаль видалена з порталу", + "ERROR_MESSAGE": "Не вдалося видалити локаль з порталу. Спробуйте ще раз." } } }, @@ -217,15 +296,41 @@ } }, "EDIT_ARTICLE": { - "LOADING": "Loading article...", + "LOADING": "Завантаження статей...", "TITLE_PLACEHOLDER": "Заголовок статті іде тут", "CONTENT_PLACEHOLDER": "Напишіть свою статтю тут", "API": { - "ERROR": "Error while saving article" + "ERROR": "Помилка при збереженні статті" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Помилка під час публікації статті", + "SUCCESS": "Стаття успішно опублікована" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Помилка при збереженні статті", + "SUCCESS": "Статтю успішно архівовано" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Підтвердження видалення", + "MESSAGE": "Ви дійсно бажаєте видалити статтю?", + "YES": "Так, видалити", + "NO": "Ні, залиште" + } + }, + "API": { + "SUCCESS_MESSAGE": "Стаття успішно видалена", + "ERROR_MESSAGE": "Помилка при видаленні статті" } }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Будь ласка, додайте заголовок і вміст статті. Лише потім можна оновити налаштування" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Категорію успішно створено", "ERROR_MESSAGE": "Не вдалося створити категорію" } + }, + "EDIT": { + "TITLE": "Редагувати категорію", + "SUB_TITLE": "Редагування категорії оновить категорію в порталі.", + "PORTAL": "Портал", + "LOCALE": "Локаль", + "NAME": { + "LABEL": "Ім'я", + "PLACEHOLDER": "Назва категорії", + "HELP_TEXT": "Назва категорії буде використовуватися в публічному інтерфейсі порталу для категоризації статей.", + "ERROR": "Назва обов'язкова" + }, + "SLUG": { + "LABEL": "Мітка", + "PLACEHOLDER": "Мітка категорії для URL-адрес", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Необхідно вказати мітку" + }, + "DESCRIPTION": { + "LABEL": "Опис", + "PLACEHOLDER": "Залиште короткий опис категорії.", + "ERROR": "Необхідний опис" + }, + "BUTTONS": { + "CREATE": "Оновити категорію", + "CANCEL": "Скасувати" + }, + "API": { + "SUCCESS_MESSAGE": "Категорію успішно оновлено", + "ERROR_MESSAGE": "Не вдалося оновити категорію" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Категорію успішно видалено", + "ERROR_MESSAGE": "Не вдалося видалити категорію" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json index 069873fb0..728b80b2c 100644 --- a/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/uk/inboxMgmt.json @@ -639,9 +639,9 @@ "CHAT": "Чат" }, "REPLY_TIME": { - "IN_A_FEW_MINUTES": "Зазвичай, відповідаємо за декілька хвилин", - "IN_A_FEW_HOURS": "Зазвичай, відповідаємо за декілька годин", - "IN_A_DAY": "Зазвичай, відповідаємо протягом доби" + "IN_A_FEW_MINUTES": "Зазвичай відповідаємо за декілька хвилин", + "IN_A_FEW_HOURS": "Зазвичай відповідаємо за декілька годин", + "IN_A_DAY": "Зазвичай відповідаємо протягом доби" }, "FOOTER": { "START_CONVERSATION_BUTTON_TEXT": "Розпочати розмову", diff --git a/app/javascript/dashboard/i18n/locale/uk/settings.json b/app/javascript/dashboard/i18n/locale/uk/settings.json index 2d3c043d9..2396faea4 100644 --- a/app/javascript/dashboard/i18n/locale/uk/settings.json +++ b/app/javascript/dashboard/i18n/locale/uk/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Огляд", "FACEBOOK_REAUTHORIZE": "Підключення до Facebook закінчилося, будь ласка, поновіть сторінку Facebook, щоб продовжити роботу служб", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "Всі статті", "MY_ARTICLES": "Мої статті", "DRAFT": "Чернетка", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Перейти до налаштувань", "SWITCH_CONVERSATION_STATUS": "Перейти до статусу наступної розмови", "SWITCH_TO_PRIVATE_NOTE": "Перейти до приватних заміток", - "TOGGLE_RICH_CONTENT_EDITOR": "Перемкнути редагування Rich Content", "SWITCH_TO_REPLY": "Перейти до відповіді", "TOGGLE_SNOOZE_DROPDOWN": "Перемкнути випадаючий список відкладення" }, diff --git a/app/javascript/dashboard/i18n/locale/ur/contact.json b/app/javascript/dashboard/i18n/locale/ur/contact.json index e7ce17764..24962c8f5 100644 --- a/app/javascript/dashboard/i18n/locale/ur/contact.json +++ b/app/javascript/dashboard/i18n/locale/ur/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "دستیاب نہیں ہے", "EMAIL_ADDRESS": "ای میل اڈریس", "PHONE_NUMBER": "فون نمبر", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "کامیابی کے ساتھ کلپ بورڈ پر کاپی ہو گیا۔", "COMPANY": "کمپنی", "LOCATION": "مقام", diff --git a/app/javascript/dashboard/i18n/locale/ur/conversation.json b/app/javascript/dashboard/i18n/locale/ur/conversation.json index 1171316cb..46fd07ccf 100644 --- a/app/javascript/dashboard/i18n/locale/ur/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ur/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "براہ کرم بائیں پین سے گفتگو کا انتخاب کریں۔", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json index 4de5e604e..a67d82407 100644 --- a/app/javascript/dashboard/i18n/locale/ur/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "حذف کریں۔" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "نام", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "منسوخ کریں۔" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "حذف کرنے کی تصدیق کریں۔", + "MESSAGE": "Are you sure to delete the article?", + "YES": "ہاں، حذف کریں۔ ", + "NO": "نہیں ، رہنے دیں" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "نام", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "منسوخ کریں۔" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ur/settings.json b/app/javascript/dashboard/i18n/locale/ur/settings.json index 236623fd3..055ffbef5 100644 --- a/app/javascript/dashboard/i18n/locale/ur/settings.json +++ b/app/javascript/dashboard/i18n/locale/ur/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json index 0bc399ba1..0a7f4092a 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/contact.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Not Available", "EMAIL_ADDRESS": "Email Address", "PHONE_NUMBER": "Phone number", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "Copied to clipboard successfully", "COMPANY": "Company", "LOCATION": "Location", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json index 7adac123f..047e5c351 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Please select a conversation from left pane", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "Messages", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "Sent by:", "BOT": "Bot", diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json index d0c7b2411..9c18b4c7f 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "Settings" + "SETTINGS": "Settings", + "DELETE": "Delete" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Name", + "DESCRIPTION": "Description", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Confirm Deletion", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Yes, Delete", + "NO": "No, Keep it" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "Name", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "Name is required" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "Description", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "Description is required" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Cancel" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json index 7994321cc..93ebbbc9a 100644 --- a/app/javascript/dashboard/i18n/locale/ur_IN/settings.json +++ b/app/javascript/dashboard/i18n/locale/ur_IN/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/vi/advancedFilters.json b/app/javascript/dashboard/i18n/locale/vi/advancedFilters.json index 4d1fa6407..8e16e0052 100644 --- a/app/javascript/dashboard/i18n/locale/vi/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/vi/advancedFilters.json @@ -1,14 +1,14 @@ { "FILTER": { - "TITLE": "Lọc cuộc trò chuyện", - "SUBTITLE": "Thêm bộ lọc bên dưới và ấn 'áp dụng bộ lọc' để lọc cuộc trò chuyện.", + "TITLE": "Lọc hội thoại", + "SUBTITLE": "Thêm bộ lọc bên dưới và ấn 'áp dụng bộ lọc' để lọc hội thoại.", "ADD_NEW_FILTER": "Thêm Bộ lọc", "FILTER_DELETE_ERROR": "Bạn nên có ít nhất 1 bộ lọc để lưu", "SUBMIT_BUTTON_LABEL": "Áp dụng bộ lọc", "CANCEL_BUTTON_LABEL": "Huỷ", "CLEAR_BUTTON_LABEL": "Xoá bộ lọc", "EMPTY_VALUE_ERROR": "Giá trị bắt buộc có", - "TOOLTIP_LABEL": "Lọc cuộc trò chuyện", + "TOOLTIP_LABEL": "Lọc cuộc hội thoại", "QUERY_DROPDOWN_LABELS": { "AND": "VÀ", "OR": "HOẶC" @@ -16,7 +16,7 @@ "OPERATOR_LABELS": { "equal_to": "Bằng", "not_equal_to": "Không bằng", - "contains": "Bao gồm", + "contains": "Chứa", "does_not_contain": "Không bao gồm", "is_present": "Có", "is_not_present": "Không có", @@ -30,10 +30,10 @@ }, "ATTRIBUTES": { "STATUS": "Trạng thái", - "ASSIGNEE_NAME": "Tên Người được phân công", + "ASSIGNEE_NAME": "Tên người được phân công", "INBOX_NAME": "Tên hộp thư đến", "TEAM_NAME": "Tên Nhóm", - "CONVERSATION_IDENTIFIER": "Định danh cuộc trò chuyện", + "CONVERSATION_IDENTIFIER": "Định danh cuộc hội thoại", "CAMPAIGN_NAME": "Tên Chiến dịch", "LABELS": "Nhãn", "BROWSER_LANGUAGE": "Ngôn ngữ của Trình duyệt", @@ -43,7 +43,7 @@ "CUSTOM_ATTRIBUTE_TEXT": "Văn bản", "CUSTOM_ATTRIBUTE_NUMBER": "Số", "CUSTOM_ATTRIBUTE_LINK": "Liên kết", - "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", + "CUSTOM_ATTRIBUTE_CHECKBOX": "Hộp kiểm", "CREATED_AT": "Tạo vào lúc", "LAST_ACTIVITY": "Hành động cuối cùng" }, @@ -56,8 +56,8 @@ "ADD": { "TITLE": "Bạn có muốn lưu bộ lọc này không?", "LABEL": "Đặt tên bộ lọc này", - "PLACEHOLDER": "Điền tên cho bộ lọc này", - "ERROR_MESSAGE": "Tên bắt buộc có", + "PLACEHOLDER": "Nhập tên cho bộ lọc này", + "ERROR_MESSAGE": "Cần phải có Tên", "SAVE_BUTTON": "Lưu bộ lọc", "CANCEL_BUTTON": "Huỷ", "API_FOLDERS": { diff --git a/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json b/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json index 5b6380ab0..589c1063b 100644 --- a/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/agentMgmt.json @@ -95,7 +95,7 @@ "MULTI_SELECTOR": { "PLACEHOLDER": "Không có", "TITLE": { - "AGENT": "Chọn thành viên", + "AGENT": "Chọn t\bổng đài viên", "TEAM": "Chọn nhóm" }, "SEARCH": { @@ -104,7 +104,7 @@ "TEAM": "Không tìm thấy nhóm nào" }, "PLACEHOLDER": { - "AGENT": "Tìm kiếm thành viên", + "AGENT": "Tìm kiếm tổng đài viên", "TEAM": "Tìm kiếm nhóm" } } diff --git a/app/javascript/dashboard/i18n/locale/vi/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/vi/attributesMgmt.json index 4b7de84c4..40e68c319 100644 --- a/app/javascript/dashboard/i18n/locale/vi/attributesMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/attributesMgmt.json @@ -3,7 +3,7 @@ "HEADER": "Thuộc tính tùy chỉnh", "HEADER_BTN_TXT": "Thêm thuộc tính Tùy chỉnh", "LOADING": "Đang lấy thuộc tính tuỳ chỉnh", - "SIDEBAR_TXT": "

Thuộc tính tùy chỉnh

Thuộc tính tùy chỉnh theo dõi thông tin thực tế về các địa chỉ liên hệ/cuộc trò chuyện của bạn - như gói đăng ký hoặc khi họ đặt hàng mặt hàng đầu tiên, v. v.

Để tạo một Thuộc tính Tùy chỉnh, chỉ cần nhấp vào Thêm Thuộc tính Tùy chỉnh. Bạn cũng có thể chỉnh sửa hoặc xóa Thuộc tính Tùy chỉnh hiện có bằng cách nhấp vào nút Chỉnh sửa hoặc Xóa.

", + "SIDEBAR_TXT": "

Thuộc tính tùy chỉnh

Thuộc tính tùy chỉnh theo dõi thông tin thực tế về các địa chỉ liên hệ/cuộc hội thoại của bạn - như gói \bthuê bao hoặc khi họ đặt hàng mặt hàng đầu tiên, v. v.

Để tạo một Thuộc tính Tùy chỉnh, chỉ cần nhấp vào Thêm Thuộc tính Tùy chỉnh. Bạn cũng có thể chỉnh sửa hoặc xóa Thuộc tính Tùy chỉnh hiện có bằng cách nhấp vào nút Chỉnh sửa hoặc Xóa.

", "ADD": { "TITLE": "Thêm thuộc tính Tùy chỉnh", "SUBMIT": "Tạo", @@ -11,7 +11,7 @@ "FORM": { "NAME": { "LABEL": "Tên hiển thị", - "PLACEHOLDER": "Điền tên hiển thị của thuộc tính tuỳ chỉnh", + "PLACEHOLDER": "Nhập tên hiển thị của thuộc tính tuỳ chỉnh", "ERROR": "Tên bắt buộc có" }, "DESC": { @@ -25,37 +25,37 @@ "ERROR": "Mô hình bắt buộc có" }, "TYPE": { - "LABEL": "Loại", - "PLACEHOLDER": "Vui lòng chọn một loại", - "ERROR": "Loại bắt buộc có", + "LABEL": "Kiểu", + "PLACEHOLDER": "Vui lòng chọn một kiểu", + "ERROR": "Kiểu bắt buộc có", "LIST": { "LABEL": "Giá trị của danh sách", - "PLACEHOLDER": "Vui lòng điền giá trị và ấn phím enter", + "PLACEHOLDER": "Vui lòng nhập giá trị và ấn phím enter", "ERROR": "Phải có ít nhất 1 giá trị" } }, "KEY": { "LABEL": "Khoá", - "PLACEHOLDER": "Điền khoá của thuộc tính tuỳ chỉnh", - "ERROR": "Khoá cần có", + "PLACEHOLDER": "Nhập khoá của thuộc tính tuỳ chỉnh", + "ERROR": "C\u001dần có khoá", "IN_VALID": "Khoá không hợp lệ" } }, "API": { - "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh thêm thành công", + "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh được thêm thành công", "ERROR_MESSAGE": "Không thể tạo thuộc tính tuỳ chỉnh, Vui lòng thử lại sau" } }, "DELETE": { "BUTTON_TEXT": "Xoá", "API": { - "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh xoá thành công.", + "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh bị xoá thành công.", "ERROR_MESSAGE": "Không thể xoá thuộc tính tuỳ chỉnh. Thử lại." }, "CONFIRM": { "TITLE": "Bạn có chắc muốn xoá - %{attributeName}", "PLACE_HOLDER": "Vui lòng điền {attributeName} để xác nhận", - "MESSAGE": "Xoá sẽ xoá thuộc tính tuỳ chỉnh", + "MESSAGE": "Xoá sẽ loại bỏ thuộc tính tuỳ chỉnh", "YES": "Xoá ", "NO": "Huỷ" } @@ -66,24 +66,24 @@ "TYPE": { "LIST": { "LABEL": "Giá trị của danh sách", - "PLACEHOLDER": "Vui lòng điền giá trị và ấn phím enter" + "PLACEHOLDER": "Vui lòng nhập giá trị và ấn phím enter" } }, "API": { - "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh sửa thành công", + "SUCCESS_MESSAGE": "Thuộc tính tuỳ chỉnh được sửa thành công", "ERROR_MESSAGE": "Đã xảy ra lỗi khi cập nhật \bthuộc tính tuỳ chỉnh, vui lòng thử lại" } }, "TABS": { "HEADER": "Thuộc tính tùy chỉnh", - "CONVERSATION": "Cuộc trò chuyện", - "CONTACT": "Danh bạ" + "CONVERSATION": "Cuộc hội thoại", + "CONTACT": "Liên lạc" }, "LIST": { "TABLE_HEADER": [ "Tên", "Mô tả", - "Loại", + "Kiểu", "Khoá" ], "BUTTONS": { diff --git a/app/javascript/dashboard/i18n/locale/vi/automation.json b/app/javascript/dashboard/i18n/locale/vi/automation.json index fddc23837..78f83a713 100644 --- a/app/javascript/dashboard/i18n/locale/vi/automation.json +++ b/app/javascript/dashboard/i18n/locale/vi/automation.json @@ -1,28 +1,28 @@ { "AUTOMATION": { "HEADER": "Tự động hoá", - "HEADER_BTN_TXT": "Thêm Quy tắc Tự động hoá", - "LOADING": "Đang lấy quy tắc tự động hoá", - "SIDEBAR_TXT": "

Quy tắc tự động hóa

Tự động hóa có thể thay thế và tự động hóa các quy trình hiện có mà cần thao tác thủ công. Bạn có thể làm nhiều việc với tự động hóa, bao gồm thêm nhãn và gán cuộc trò chuyện cho người đại diện tốt nhất. Vì vậy, nhóm tập trung vào những gì họ làm tốt nhất và dành ít thời gian hơn cho các công việc thủ công.

", + "HEADER_BTN_TXT": "Thêm luật Tự động hoá", + "LOADING": "Đang lấy luật tự động hoá", + "SIDEBAR_TXT": "

Luật tự động hóa

Tự động hóa có thể thay thế và tự động hóa các quy trình hiện có mà cần thao tác thủ công. Bạn có thể làm nhiều việc với tự động hóa, bao gồm thêm nhãn và gán cuộc trò chuyện cho người đại diện tốt nhất. Vì vậy, nhóm tập trung vào những gì họ làm tốt nhất và dành ít thời gian hơn cho các công việc thủ công.

", "ADD": { "TITLE": "Thêm Quy tắc Tự động hoá", "SUBMIT": "Tạo", "CANCEL_BUTTON_TEXT": "Huỷ", "FORM": { "NAME": { - "LABEL": "Tên Quy tắc", - "PLACEHOLDER": "Điền tên quy tắc", - "ERROR": "Tên bắt buộc có" + "LABEL": "Tên luật", + "PLACEHOLDER": "Nhập tên luật", + "ERROR": "Cần phải có tên" }, "DESC": { "LABEL": "Mô tả", - "PLACEHOLDER": "Điền mô tả quy tắc", - "ERROR": "Mô tả bắt buộc có" + "PLACEHOLDER": "Nhập mô tả luật", + "ERROR": "Cần phải có \u001dmô tả" }, "EVENT": { "LABEL": "Sự kiện", "PLACEHOLDER": "Vui lòng chọn một", - "ERROR": "Sự kiện bắt buộc có" + "ERROR": "Cần phải có \u001dsự kiện" }, "CONDITIONS": { "LABEL": "Điều kiện" @@ -34,8 +34,8 @@ "CONDITION_BUTTON_LABEL": "Thêm Điều kiện", "ACTION_BUTTON_LABEL": "Thêm Hành động", "API": { - "SUCCESS_MESSAGE": "Quy tắc tự động hoá thêm thành công", - "ERROR_MESSAGE": "Không thể tạo quy tắc tự động hoá, Vui lòng thử lại sau" + "SUCCESS_MESSAGE": "Luật tự động hoá thêm thành công", + "ERROR_MESSAGE": "Không thể tạo luật tự động hoá, Vui lòng thử lại sau" } }, "LIST": { @@ -45,10 +45,10 @@ "Có hiệu lực", "Được tạo trên" ], - "404": "Không tìm thấy quy tắc tự động hoá" + "404": "Không tìm thấy luật tự động hoá" }, "DELETE": { - "TITLE": "Xoá Quy tắc Tự động hoá", + "TITLE": "Xoá luật Tự động hoá", "SUBMIT": "Xoá", "CANCEL_BUTTON_TEXT": "Huỷ", "CONFIRM": { @@ -58,24 +58,24 @@ "NO": "Không, giữ " }, "API": { - "SUCCESS_MESSAGE": "Quy tắc tự động hoá xoá thành công", - "ERROR_MESSAGE": "Không thể xoá quy tắc tự động hoá, Vui lòng thử lại sau" + "SUCCESS_MESSAGE": "Luật\u001d tự động hoá được xoá thành công", + "ERROR_MESSAGE": "Không thể xoá luật tự động hoá, Vui lòng thử lại sau" } }, "EDIT": { - "TITLE": "Sửa Quy tắc Tự động hoá", + "TITLE": "Sửa Luật Tự động hoá", "SUBMIT": "Cập nhật", "CANCEL_BUTTON_TEXT": "Huỷ", "API": { - "SUCCESS_MESSAGE": "Quy tắc tự động hoá thêm thành công", - "ERROR_MESSAGE": "Không thể cập nhật quy tắc tự động hoá, Vui lòng thử lại sau" + "SUCCESS_MESSAGE": "Luật\u001d tự động hoá được thêm thành công", + "ERROR_MESSAGE": "Không thể cập nhật \bluật tự động hoá, Vui lòng thử lại sau" } }, "CLONE": { - "TOOLTIP": "Mô phỏng", + "TOOLTIP": "Nhân bản", "API": { - "SUCCESS_MESSAGE": "Quy tắc tự động hoá mô phỏng thành công", - "ERROR_MESSAGE": "Không thể mô phỏng quy tắc tự động hoá, Vui lòng thử lại sau" + "SUCCESS_MESSAGE": "Luật tự động hoá mô phỏng thành công", + "ERROR_MESSAGE": "Không thể mô phỏng luật tự động hoá, Vui lòng thử lại sau" } }, "FORM": { @@ -94,14 +94,14 @@ "TEAM_DROPDOWN_PLACEHOLDER": "Chọn nhóm" }, "TOGGLE": { - "ACTIVATION_TITLE": "Kích hoạt Quy tắc Tự động hoá", - "DEACTIVATION_TITLE": "Vô hiệu hoá Quy tắc Tự động hoá", - "ACTIVATION_DESCRIPTION": "Thao tác này sẽ kích hoạt quy tắc tự động hoá tên '{automationName}'. Bạn có chắc là muốn tiếp tục?", - "DEACTIVATION_DESCRIPTION": "Thao tác này sẽ vô hiệu hoá quy tắc tự động hoá tên '{automationName}'. Bạn có chắc là muốn tiếp tục?", - "ACTIVATION_SUCCESFUL": "Quy tắc tự động hoá đã được kích hoạt thành công", - "DEACTIVATION_SUCCESFUL": "Quy tắc tự động hoá đã vô hiệu hoá thành công", - "ACTIVATION_ERROR": "Không thể kích hoạt quy tắc tự động hoá, Vui lòng thử lại sau", - "DEACTIVATION_ERROR": "Không thể vô hiệu hoá quy tắc tự động hoá, Vui lòng thử lại sau", + "ACTIVATION_TITLE": "Kích hoạt Luật Tự động hoá", + "DEACTIVATION_TITLE": "Vô hiệu hoá \bLuật Tự động hoá", + "ACTIVATION_DESCRIPTION": "Thao tác này sẽ kích hoạt luật tự động hoá tên '{automationName}'. Bạn có chắc là muốn tiếp tục?", + "DEACTIVATION_DESCRIPTION": "Thao tác này sẽ vô hiệu hoá luật tự động hoá tên '{automationName}'. Bạn có chắc là muốn tiếp tục?", + "ACTIVATION_SUCCESFUL": "Luật tự động hoá đã được kích hoạt thành công", + "DEACTIVATION_SUCCESFUL": "Luật tự động hoá đã vô hiệu hoá thành công", + "ACTIVATION_ERROR": "Không thể kích hoạt luật tự động hoá, Vui lòng thử lại sau", + "DEACTIVATION_ERROR": "Không thể vô hiệu hoá luật tự động hoá, Vui lòng thử lại sau", "CONFIRMATION_LABEL": "Có", "CANCEL_LABEL": "Không" }, diff --git a/app/javascript/dashboard/i18n/locale/vi/bulkActions.json b/app/javascript/dashboard/i18n/locale/vi/bulkActions.json index d80114873..39268cdd2 100644 --- a/app/javascript/dashboard/i18n/locale/vi/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/vi/bulkActions.json @@ -1,29 +1,29 @@ { "BULK_ACTION": { "CONVERSATIONS_SELECTED": "%{conversationCount} cuộc hội thoại đã được chọn", - "AGENT_SELECT_LABEL": "Chọn đại lý", + "AGENT_SELECT_LABEL": "Chọn tổng đài viên", "ASSIGN_CONFIRMATION_LABEL": "Bạn có chắc là muốn giao %{conversationCount} %{conversationLabel} cho", "GO_BACK_LABEL": "Trở về", - "ASSIGN_LABEL": "Phân công", - "ASSIGN_AGENT_TOOLTIP": "Giao cho hỗ trợ viên", + "ASSIGN_LABEL": "Gán", + "ASSIGN_AGENT_TOOLTIP": "Giao cho tổng đài viên", "ASSIGN_SUCCESFUL": "Cuộc hội thoại đã được phân công thành công", "ASSIGN_FAILED": "Không thể phân công các cuộc hội thoại, xin vui lòng thử lại", "RESOLVE_SUCCESFUL": "Cuộc hội thoại đã được giải quyết thành công", "RESOLVE_FAILED": "Không thể giải quyết các cuộc hội thoại, xin vui lòng thử lại", "ALL_CONVERSATIONS_SELECTED_ALERT": "Chỉ những cuộc hội thoại hiển thị trên trang này mới có thể được chọn.", - "AGENT_LIST_LOADING": "Đang tải hỗ trợ viên", + "AGENT_LIST_LOADING": "Đang tải tổng đài viên", "UPDATE": { - "CHANGE_STATUS": "Change status", - "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", - "UPDATE_SUCCESFUL": "Conversation status updated successfully.", - "UPDATE_FAILED": "Failed to update conversations, please try again" + "CHANGE_STATUS": "Thay đổi trạng thái", + "SNOOZE_UNTIL_NEXT_REPLY": "Báo lại cho đến khi có câu trả lời tiếp theo", + "UPDATE_SUCCESFUL": "Đã cập nhật trạng thái cuộc hội thoại thành công.", + "UPDATE_FAILED": "Không cập nhật được cuộc hội thoại, vui lòng thử lại" }, "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_LABELS": "Gán nhãn", + "NO_LABELS_FOUND": "Không tìm thấy nhãn nào cho", + "ASSIGN_SELECTED_LABELS": "Gán các nhãn đã chọn", + "ASSIGN_SUCCESFUL": "Các nhãn được gán thành công", + "ASSIGN_FAILED": "Không gán được nhãn, vui lòng thử lại" } } } diff --git a/app/javascript/dashboard/i18n/locale/vi/campaign.json b/app/javascript/dashboard/i18n/locale/vi/campaign.json index cc64682c0..d6ccb21d1 100644 --- a/app/javascript/dashboard/i18n/locale/vi/campaign.json +++ b/app/javascript/dashboard/i18n/locale/vi/campaign.json @@ -29,9 +29,9 @@ "ERROR": "Khán giả bắt buộc có" }, "INBOX": { - "LABEL": "Chọn Hộp thư đến", - "PLACEHOLDER": "Chọn Hộp thư đến", - "ERROR": "Hộp thư đến bắt buộc có" + "LABEL": "Chọn kênh", + "PLACEHOLDER": "Chọn kênh", + "ERROR": "Cần phải có kênh" }, "MESSAGE": { "LABEL": "Tin nhắn", @@ -89,7 +89,7 @@ "TABLE_HEADER": { "TITLE": "Tiêu đề", "MESSAGE": "Tin nhắn", - "INBOX": "Hộp thư đến", + "INBOX": "Kênh", "STATUS": "Trạng thái", "SENDER": "Người gửi", "URL": "URL", diff --git a/app/javascript/dashboard/i18n/locale/vi/chatlist.json b/app/javascript/dashboard/i18n/locale/vi/chatlist.json index fc9571fde..8de60a971 100644 --- a/app/javascript/dashboard/i18n/locale/vi/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/vi/chatlist.json @@ -54,12 +54,12 @@ "RECEIVED_VIA_EMAIL": "Nhận được từ email", "VIEW_TWEET_IN_TWITTER": "Xem tweet trên Twitter", "REPLY_TO_TWEET": "Trả lời cho tweet này", - "LINK_TO_STORY": "Đến xem câu chuyên insta", + "LINK_TO_STORY": "Đến xem lịch sử instagram", "SENT": "Gửi thành công", "NO_MESSAGES": "Không có tin nhắn", "NO_CONTENT": "Không có nội dung", "HIDE_QUOTED_TEXT": "Ẩn văn bản được trích dẫn", "SHOW_QUOTED_TEXT": "Hiện Văn bản được trích dẫn", - "MESSAGE_READ": "Đã xem" + "MESSAGE_READ": "\bĐọc" } } diff --git a/app/javascript/dashboard/i18n/locale/vi/contact.json b/app/javascript/dashboard/i18n/locale/vi/contact.json index 1bb98a535..fca7cb9a9 100644 --- a/app/javascript/dashboard/i18n/locale/vi/contact.json +++ b/app/javascript/dashboard/i18n/locale/vi/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "Không có sẵn", "EMAIL_ADDRESS": "Địa chỉ email", "PHONE_NUMBER": "Số điện thoại", + "IDENTIFIER": "Định danh", "COPY_SUCCESSFUL": "Đã sao chép mã thành công", "COMPANY": "Công ty", "LOCATION": "Vị trí", @@ -34,8 +35,8 @@ "NO_RESULT": "Không tìm thấy nhãn" } }, - "MERGE_CONTACT": "Gộp liên lạc", - "CONTACT_ACTIONS": "Hành động của người liên hệ", + "MERGE_CONTACT": "Hợp nhất liên hệ", + "CONTACT_ACTIONS": "Hành động với liên hệ", "MUTE_CONTACT": "Tắt tiếng cuộc trò chuyện", "UNMUTE_CONTACT": "Bật tiếng cuộc trò chuyện", "MUTED_SUCCESS": "Cuộc trò chuyện này bị tắt tiếng trong 6 giờ", @@ -54,17 +55,17 @@ "DESC": "Chỉnh sửa liên hệ chi tiết" }, "CREATE_CONTACT": { - "BUTTON_LABEL": "Liên lạc mới", - "TITLE": "Tạo liên lạc mới", - "DESC": "Thêm thông tin cơ bản về liên lạc." + "BUTTON_LABEL": "Liên hệ mới", + "TITLE": "Tạo liên hệ mới", + "DESC": "Thêm thông tin cơ bản về liên hệ." }, "IMPORT_CONTACTS": { "BUTTON_LABEL": "Nhập", - "TITLE": "Nhập liên lạc", - "DESC": "Nhập liên lạc bằng một file CSV.", - "DOWNLOAD_LABEL": "Tải xuống file CSV mẫu.", + "TITLE": "Nhập liên hệ", + "DESC": "Nhập liên hệ bằng một file CSV.", + "DOWNLOAD_LABEL": "Tải xuống tệp CSV mẫu.", "FORM": { - "LABEL": "CSV File", + "LABEL": "Tệp CSV", "SUBMIT": "Nhập", "CANCEL": "Huỷ" }, @@ -81,7 +82,7 @@ }, "DELETE_CONTACT": { "BUTTON_LABEL": "Xoá liên lạc", - "TITLE": "Xoá liên lạc", + "TITLE": "Xoá liên hệ", "DESC": "Xoá chi tiết liên hệ", "CONFIRM": { "TITLE": "Xác nhận xoá", @@ -151,25 +152,25 @@ }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", - "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + "SUCCESS_MESSAGE": "Hình đại diện liên hệ đã được xóa thành công", + "ERROR_MESSAGE": "Không thể xóa hình đại diện liên hệ. Vui lòng thử lại sau." } }, "SUCCESS_MESSAGE": "Liên hệ được lưu thành công", "ERROR_MESSAGE": "Đã có lỗi, vui lòng thử lại" }, "NEW_CONVERSATION": { - "BUTTON_LABEL": "Bắt đầu cuộc trò chuyện", + "BUTTON_LABEL": "Bắt đầu cuộc hội thoại", "TITLE": "Tạo mới cuộc trò chuyện", - "DESC": "Bắt đầu một cuộc trò chuyện mới bằng cách thêm tin nhắn.", - "NO_INBOX": "Không tìm thấy hộp thư đến để bắt đầu cuộc trò chuyện với liên hệ này.", + "DESC": "Bắt đầu một cuộc hội thoại mới bằng cách thêm tin nhắn.", + "NO_INBOX": "Không tìm thấy kênh để bắt đầu cuộc trò chuyện với liên hệ này.", "FORM": { "TO": { "LABEL": "Đến" }, "INBOX": { - "LABEL": "Hộp thư đến", - "ERROR": "Chọn Hộp thư đến" + "LABEL": "Kênh", + "ERROR": "Chọn kênh" }, "SUBJECT": { "LABEL": "Chủ đề", @@ -189,7 +190,7 @@ } }, "CONTACTS_PAGE": { - "HEADER": "Liên hệ", + "HEADER": "Danh bạ", "FIELDS": "Trường của liên hệ", "SEARCH_BUTTON": "Tìm kiếm", "SEARCH_INPUT_PLACEHOLDER": "Tìm kiếm liên hệ", @@ -211,11 +212,11 @@ "COMPANY": "Công ty", "EMAIL_ADDRESS": "Email" }, - "VIEW_DETAILS": "Xem thông tin chi tiết" + "VIEW_DETAILS": "Xem chi tiết" } }, "CONTACT_PROFILE": { - "BACK_BUTTON": "Liên hệ", + "BACK_BUTTON": "Danh bạ", "LOADING": "Đang tải hồ sơ liên hệ..." }, "REMINDER": { @@ -314,14 +315,14 @@ } }, "MERGE_CONTACTS": { - "TITLE": "Gộp các liên hệ", - "DESCRIPTION": "Gộp các liên hệ để kết hợp hai hồ sơ thành một, bao gồm tất cả các thuộc tính và cuộc hội thoại. Trong trường hợp xung đột, các thuộc tính của liên hệ Chính sẽ được ưu tiên.", + "TITLE": "Hợp nhất các liên hệ", + "DESCRIPTION": "Hợp nhất các liên hệ để kết hợp hai hồ sơ thành một, bao gồm tất cả các thuộc tính và hội thoại. Trong trường hợp xung đột, các thuộc tính của liên hệ Chính sẽ được ưu tiên.", "PRIMARY": { - "TITLE": "Liên lạc chính", + "TITLE": "Liên hệ chính", "HELP_LABEL": "Được giữ" }, "CHILD": { - "TITLE": "Liên lạc cần gộp", + "TITLE": "Liên hệ cần gộp", "PLACEHOLDER": "Tìm kiếm liên hệ", "HELP_LABEL": "Sẽ được xoá" }, @@ -334,13 +335,13 @@ "ERROR": "ERROR_MESSAGE" }, "FORM": { - "SUBMIT": " Gộp các liên hệ", + "SUBMIT": " Hợp nhất các liên hệ", "CANCEL": "Huỷ", "CHILD_CONTACT": { - "ERROR": "Chọn một liên lạc con để gộp" + "ERROR": "Chọn một liên hệ con để gộp" }, - "SUCCESS_MESSAGE": "Liên lạc được gộp thành công", - "ERROR_MESSAGE": "Không thể gộp liên lạc, thử lại!" + "SUCCESS_MESSAGE": "Liên hệ được gộp thành công", + "ERROR_MESSAGE": "Không thể hợp nhất liên lạc, thử lại!" } } } diff --git a/app/javascript/dashboard/i18n/locale/vi/contactFilters.json b/app/javascript/dashboard/i18n/locale/vi/contactFilters.json index e28551bb5..b3f18b483 100644 --- a/app/javascript/dashboard/i18n/locale/vi/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/vi/contactFilters.json @@ -39,7 +39,7 @@ "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", "CREATED_AT": "Tạo vào lúc", "LAST_ACTIVITY": "Hành động cuối cùng", - "REFERER_LINK": "Referrer link" + "REFERER_LINK": "Liên kết người gới thiệu" }, "GROUPS": { "STANDARD_FILTERS": "Bộ lọc tiêu chuẩn", diff --git a/app/javascript/dashboard/i18n/locale/vi/conversation.json b/app/javascript/dashboard/i18n/locale/vi/conversation.json index 77a5fb032..3fb50f0ba 100644 --- a/app/javascript/dashboard/i18n/locale/vi/conversation.json +++ b/app/javascript/dashboard/i18n/locale/vi/conversation.json @@ -1,8 +1,9 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "Vui lòng chọn một cuộc trò chuyện từ ngăn bên trái", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", + "CSAT_REPLY_MESSAGE": "Bạn hãy vui lòng đánh giá hội thoại", + "404": "Xin lỗi, chúng tôi không thể tìm thấy hội thoại. Vui lòng thử lại", + "SWITCH_VIEW_LAYOUT": "Chuyển đổi bố cục", "DASHBOARD_APP_TAB_MESSAGES": "Tin nhắn", "UNVERIFIED_SESSION": "Danh tính của người dùng này không được xác thực", "NO_MESSAGE_1": "Uh oh! Có vẻ như không có tin nhắn nào từ khách hàng trong hộp thư đến của bạn.", @@ -10,7 +11,7 @@ "NO_INBOX_1": "Hola! Có vẻ như bạn chưa thêm bất kỳ hộp thư đến nào.", "NO_INBOX_2": " để bắt đầu", "NO_INBOX_AGENT": "Uh Oh! Có vẻ như bạn không thuộc bất kỳ hộp thư đến nào. Vui lòng liên hệ với quản trị viên của bạn", - "SEARCH_MESSAGES": "Tìm kiếm tin nhắn trong các cuộc trò chuyện", + "SEARCH_MESSAGES": "Tìm kiếm tin nhắn trong các hội thoại", "SEARCH": { "TITLE": "Tìm kiếm tin nhắn", "RESULT_TITLE": "Các kết quả tìm kiếm", @@ -25,9 +26,9 @@ "LOADING_CONVERSATIONS": "Đang tải cuộc trò chuyện", "CANNOT_REPLY": "Bạn không thể trả lời do", "24_HOURS_WINDOW": "Giới hạn thời lượng tin nhắn 24 giờ", - "NOT_ASSIGNED_TO_YOU": "Cuộc trò chuyện này không được phân công cho bạn. Bạn có muốn phân công cuộc trò chuyện này cho chính mình?", + "NOT_ASSIGNED_TO_YOU": "Hội thoại này không được phân công cho bạn. Bạn có muốn phân công hội thoại này cho chính mình?", "ASSIGN_TO_ME": "Phân công cho tôi", - "TWILIO_WHATSAPP_CAN_REPLY": "Bạn chỉ có thể phản hồi cuộc trò chuyện này dùng tin nhắn mẫu vì", + "TWILIO_WHATSAPP_CAN_REPLY": "Bạn chỉ có thể phản hồi hội thoại này bằng tin nhắn mẫu vì", "TWILIO_WHATSAPP_24_HOURS_WINDOW": "Giới hạn thời lượng tin nhắn 24 giờ", "SELECT_A_TWEET_TO_REPLY": "Xin chọn một tweet để trả lời.", "REPLYING_TO": "Bạn đang trả lời:", @@ -62,30 +63,30 @@ }, "CARD_CONTEXT_MENU": { "PENDING": "Đánh dấu chưa giải quyết", - "RESOLVED": "Mark as resolved", - "REOPEN": "Mở lại cuộc trò chuyện", + "RESOLVED": "Đánh dấu là đã giải quyết", + "REOPEN": "Mở lại hội thoại", "SNOOZE": { - "TITLE": "Snooze", + "TITLE": "Báo lại", "NEXT_REPLY": "Cho đến phản hồi kế tiếp", "TOMORROW": "Cho đến ngày mai", "NEXT_WEEK": "Cho đến tuần sau" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Gán tổng đài viên", + "ASSIGN_LABEL": "Gán nhãn", + "AGENTS_LOADING": "Đang tải điện thoại viên...", + "ASSIGN_TEAM": "Gán nhóm", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "Id hội thoại %{conversationId} được gán cho \"%{agentName}\"", + "FAILED": "Không thể gán điện thoại viên. Vui lòng thử lại." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Đã gán nhãn #%{labelName} cho id hội thoại %{conversationId}", + "FAILED": "Không thể gán nhãn. Vui lòng thử lại." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Đã gán nhóm \"%{team}\" cho hội thoại id %{conversationId}", + "FAILED": "Không thể gán nhóm. Vui lòng thử lại." } } }, @@ -106,8 +107,8 @@ "TWEET": "Tweet", "TIP_FORMAT_ICON": "Hiển thị trình soạn thảo văn bản đa dạng thức", "TIP_EMOJI_ICON": "Hiển thị chọn emoji", - "TIP_ATTACH_ICON": "Đính kèm files", - "TIP_AUDIORECORDER_ICON": "Ghi âm", + "TIP_ATTACH_ICON": "Đính kèm tệp", + "TIP_AUDIORECORDER_ICON": "Ghi âm thanh", "TIP_AUDIORECORDER_PERMISSION": "Cho phép truy cập ghi âm", "TIP_AUDIORECORDER_ERROR": "Không thể mở bản ghi âm", "ENTER_TO_SEND": "Nhấn Enter để gửi", @@ -119,34 +120,34 @@ "ADD_BCC": "Thêm bcc", "CC": { "LABEL": "CC", - "PLACEHOLDER": "Email tách ra bởi dấu phẩy", + "PLACEHOLDER": "Các e\u001dmail phân biệt bởi dấu phẩy", "ERROR": "Vui lòng điền địa chỉ email hợp lệ" }, "BCC": { "LABEL": "BCC", - "PLACEHOLDER": "Email tách ra bởi dấu phẩy", + "PLACEHOLDER": "Các e\u001dmail phân biệt bởi dấu phẩy", "ERROR": "Vui lòng điền địa chỉ email hợp lệ" } } }, "VISIBLE_TO_AGENTS": "Lưu ý riêng: Chỉ hiển thị với bạn và nhóm của bạn", "CHANGE_STATUS": "Trạng thái cuộc trò chuyện đã thay đổi", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "Thay đổi trạng thái hội thoại không thành công", "CHANGE_AGENT": "Người Được Chỉ Định Cuộc Hội Thoại đã thay đổi", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", - "CHANGE_TEAM": "Nhóm của cuộc trò chuyện đã được thay đổi", - "FILE_SIZE_LIMIT": "File vượt quá kích thước giới hạn {MAXIMUM_FILE_UPLOAD_SIZE}", + "CHANGE_AGENT_FAILED": "Thay đổi người được gán không thành công", + "ASSIGN_LABEL_SUCCESFUL": "Đã gán nhãn thành công", + "ASSIGN_LABEL_FAILED": "Gán nhãn không thành công", + "CHANGE_TEAM": "Nhóm hội thoại đã được thay đổi", + "FILE_SIZE_LIMIT": "Tệp vượt quá {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB mức hạn chế", "MESSAGE_ERROR": "Không thể gửi tin nhắn này, vui lòng thử lại sau", "SENT_BY": "Gửi bởi:", "BOT": "Bot", "SEND_FAILED": "Không thể gửi tin nhắn! Thử lại", "TRY_AGAIN": "thử lại", "ASSIGNMENT": { - "SELECT_AGENT": "Chọn đại lý", + "SELECT_AGENT": "Chọn tổng đài viên", "REMOVE": "Xoá", - "ASSIGN": "Phân công" + "ASSIGN": "Gán" }, "CONTEXT_MENU": { "COPY": "Sao Chép", @@ -162,7 +163,7 @@ "SEND_EMAIL_ERROR": "Có lỗi, xin vui lòng thử lại", "FORM": { "SEND_TO_CONTACT": "Gửi bảng điểm cho khách hàng", - "SEND_TO_AGENT": "Gửi bản ghi cho người đại lý được phân công", + "SEND_TO_AGENT": "Gửi bản ghi cho tổng đài viên được phân công", "SEND_TO_OTHER_EMAIL_ADDRESS": "Gửi bản ghi tới một địa chỉ email khác", "EMAIL": { "PLACEHOLDER": "Nhập địa chỉ emai", @@ -175,27 +176,27 @@ "DESCRIPTION": "Cảm ơn bạn đã đăng ký. Chúng tôi muốn bạn khai thác tối đa %{installationName}. Dưới đây là một số điều bạn có thể làm trong %{installationName} để mang lại trải nghiệm thú vị.", "READ_LATEST_UPDATES": "Đọc cập nhật mới nhất của chúng tôi", "ALL_CONVERSATION": { - "TITLE": "Tất cả cuộc trò chuyện của bạn ở một nơi", - "DESCRIPTION": "Xem tất cả các cuộc trò chuyện từ khách hàng của bạn trong một trang tổng quan duy nhất. Bạn có thể lọc các cuộc trò chuyện theo kênh đến, nhãn và trạng thái." + "TITLE": "Tất cả hội thoại của bạn ở cùng một chỗ", + "DESCRIPTION": "Xem tất cả hội thoại từ khách hàng của bạn trong cùng một trang. Bạn có thể lọc các hội thoại theo kênh, nhãn và trạng thái." }, "TEAM_MEMBERS": { "TITLE": "Mời các thành viên trong nhóm của bạn", - "DESCRIPTION": "Vì bạn đã sẵn sàng để nói chuyện với khách hàng của mình, hãy mang theo đồng đội để hỗ trợ bạn. Bạn có thể mời đồng đội của mình bằng cách thêm địa chỉ email của họ vào danh sách đại lý.", + "DESCRIPTION": "Vì bạn đã sẵn sàng để chào và đón tiếp khách hàng của mình, hãy lôi kéo đồng đội để hỗ trợ bạn. Bạn có thể mời đồng đội của mình bằng cách thêm địa chỉ email của họ vào danh sách tổng đài viên.", "NEW_LINK": "Bấm vào đây để mời đồng đội" }, "INBOXES": { - "TITLE": "Kết nối hộp thư đến", - "DESCRIPTION": "Kết nối các kênh khác nhau mà qua đó khách hàng sẽ nói chuyện với bạn. Nó có thể là một trang web trò chuyện trực tiếp, trang Facebook hoặc Twitter của bạn hoặc thậm chí là số WhatsApp của bạn.", - "NEW_LINK": "Bấm vào đây để tạo hộp thư đến" + "TITLE": "Kết nối kênh", + "DESCRIPTION": "Kết nối các kênh khác nhau mà qua đó khách hàng sẽ hội thoại với bạn. Nó có thể là một trang web trực tiếp, trang Facebook, Twitter hoặc thậm chí là số WhatsApp, Zalo của bạn.", + "NEW_LINK": "Bấm vào đây để tạo mới một kênh" }, "LABELS": { - "TITLE": "Tổ chức cuộc trò chuyện với nhãn", - "DESCRIPTION": "Nhãn cung cấp một cách dễ dàng hơn để phân loại cuộc trò chuyện của bạn. Tạo một số nhãn như #support-inquiry, #billing-question, v. v. để bạn có thể sử dụng chúng trong cuộc trò chuyện sau này.", + "TITLE": "Tổ chức hội thoại theo nhãn", + "DESCRIPTION": "Nhãn cung cấp một cách để phân loại các hội thoại của bạn dễ dàng hơn. Tạo một số nhãn như #ho-tro, #\byeu-cau-bao-gia, v. v. để bạn có thể sử dụng chúng trong hội thoại sau này.", "NEW_LINK": "Bấm vào đây để tạo nhãn" } }, "CONVERSATION_SIDEBAR": { - "ASSIGNEE_LABEL": "Đại lý được phân công", + "ASSIGNEE_LABEL": "Tổng đài viên được phân công", "SELF_ASSIGN": "Phân công cho tôi", "TEAM_LABEL": "Nhóm được phân công", "SELECT": { @@ -203,9 +204,9 @@ }, "ACCORDION": { "CONTACT_DETAILS": "Chi tiết liên hệ", - "CONVERSATION_ACTIONS": "Hành động của cuộc trò chuyện", + "CONVERSATION_ACTIONS": "Hành động của \bhội thoại", "CONVERSATION_LABELS": "Nhãn hội thoại", - "CONVERSATION_INFO": "Thông tin cuộc trò chuyện", + "CONVERSATION_INFO": "Thông tin hội thoại", "CONTACT_ATTRIBUTES": "Thuộc tính của liên hệ", "PREVIOUS_CONVERSATION": "Cuộc trò chuyện trước đó" } diff --git a/app/javascript/dashboard/i18n/locale/vi/csatMgmt.json b/app/javascript/dashboard/i18n/locale/vi/csatMgmt.json index 1f2baa7dd..9de92a6ce 100644 --- a/app/javascript/dashboard/i18n/locale/vi/csatMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/csatMgmt.json @@ -1,6 +1,6 @@ { "CSAT": { - "TITLE": "Đánh giá cuộc trò chuyện", + "TITLE": "Đánh giá cuộc hội thoại", "PLACEHOLDER": "Cho chúng tôi biết thêm..." } } diff --git a/app/javascript/dashboard/i18n/locale/vi/generalSettings.json b/app/javascript/dashboard/i18n/locale/vi/generalSettings.json index 5e019bf91..a5e8d4598 100644 --- a/app/javascript/dashboard/i18n/locale/vi/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/vi/generalSettings.json @@ -78,15 +78,15 @@ ] }, "TYPE_LABEL": { - "conversation_creation": "Tạo mới cuộc trò chuyện", - "conversation_assignment": "Cuộc trò chuyện được phân công", + "conversation_creation": "Hội thoại mới mới", + "conversation_assignment": "Hội thoại đã được phân công", "assigned_conversation_new_message": "Tin nhắn mới", - "conversation_mention": "Nhắn đến" + "conversation_mention": "Nhắc đến" } }, "NETWORK": { "NOTIFICATION": { - "TEXT": "Đã ngắt kết nối khỏi Chatwoot" + "TEXT": "Đã ngắt kết nối khỏi máy chủ" }, "BUTTON": { "REFRESH": "Làm mới" @@ -97,41 +97,41 @@ "SECTIONS": { "GENERAL": "Chung", "REPORTS": "Báo cáo", - "CONVERSATION": "Cuộc trò chuyện", + "CONVERSATION": "Hội thoại", "CHANGE_ASSIGNEE": "Thay đổi người được phân công", "CHANGE_TEAM": "Thay đổi nhóm", - "ADD_LABEL": "Thêm nhãn vào cuộc trò chuyện", - "REMOVE_LABEL": "Xoá nhãn khỏi cuộc trò chuyện", + "ADD_LABEL": "Thêm nhãn vào hội thoại", + "REMOVE_LABEL": "Xoá nhãn khỏi hội thoại", "SETTINGS": "Cài đặt" }, "COMMANDS": { - "GO_TO_CONVERSATION_DASHBOARD": "Đi tới Trang tổng quan cuộc trò chuyện", + "GO_TO_CONVERSATION_DASHBOARD": "Đi tới Trang tổng quan hội thoại", "GO_TO_CONTACTS_DASHBOARD": "Đi tới Trang tổng quan liên hệ", "GO_TO_REPORTS_OVERVIEW": "Đi đến Tổng quan Báo cáo", - "GO_TO_CONVERSATION_REPORTS": "Đi tới Trang Báo cáo cuộc trò chuyện", - "GO_TO_AGENT_REPORTS": "Đi đến Báo cáo Đại lý", + "GO_TO_CONVERSATION_REPORTS": "Đi tới Trang Báo cáo hội thoại", + "GO_TO_AGENT_REPORTS": "Đi đến Báo cáo Tổng đài viên", "GO_TO_LABEL_REPORTS": "Đi đến Báo cáo Nhãn", - "GO_TO_INBOX_REPORTS": "Đi đến Báo cáo Hộp thư đến", + "GO_TO_INBOX_REPORTS": "Đi đến Báo cáo Kênh", "GO_TO_TEAM_REPORTS": "Đi đến Báo cáo Nhóm", - "GO_TO_SETTINGS_AGENTS": "Đi đến Cài đặt Đại lý", + "GO_TO_SETTINGS_AGENTS": "Đi đến Cài đặt Tổng đài viên", "GO_TO_SETTINGS_TEAMS": "Đi đến Cài đặt Nhóm", - "GO_TO_SETTINGS_INBOXES": "Đi đến Cài đặt Hộp thư đến", + "GO_TO_SETTINGS_INBOXES": "Đi đến Cài đặt Kênh", "GO_TO_SETTINGS_LABELS": "Đi đến Cài đặt Nhãn", - "GO_TO_SETTINGS_CANNED_RESPONSES": "Đi đến Cài đặt Tin trả lời lưu sẵn", + "GO_TO_SETTINGS_CANNED_RESPONSES": "Đi đến Cài đặt Tin trả lời mẫu", "GO_TO_SETTINGS_APPLICATIONS": "Đi đến Cài đặt Ứng dụng", "GO_TO_SETTINGS_ACCOUNT": "Đi đến Cài đặt Tài khoản", "GO_TO_SETTINGS_PROFILE": "Đi đến Cài đặt Hồ sơ", "GO_TO_NOTIFICATIONS": "Đi đến Thông báo", - "ADD_LABELS_TO_CONVERSATION": "Thêm nhãn vào cuộc trò chuyện", - "ASSIGN_AN_AGENT": "Phân công một đại lý", + "ADD_LABELS_TO_CONVERSATION": "Thêm nhãn vào hội thoại", + "ASSIGN_AN_AGENT": "Gán cho tổng đài viên", "ASSIGN_A_TEAM": "Phân công một nhóm", - "MUTE_CONVERSATION": "Tắt tiếng", - "UNMUTE_CONVERSATION": "Bật tiếng cuộc trò chuyện", - "REMOVE_LABEL_FROM_CONVERSATION": "Xoá nhãn khỏi cuộc trò chuyện", - "REOPEN_CONVERSATION": "Mở lại cuộc trò chuyện", - "RESOLVE_CONVERSATION": "Giải quyết cuộc trò chuyện", - "SEND_TRANSCRIPT": "Gửi bản ghi email", - "SNOOZE_CONVERSATION": "Tạm dừng Cuộc trò chuyện", + "MUTE_CONVERSATION": "Tắt tiếng hội thoại", + "UNMUTE_CONVERSATION": "Bật tiếng hội thoại", + "REMOVE_LABEL_FROM_CONVERSATION": "Xoá nhãn khỏi hội thoại", + "REOPEN_CONVERSATION": "Mở lại hội thoại", + "RESOLVE_CONVERSATION": "Giải quyết hội thoại", + "SEND_TRANSCRIPT": "Gửi bản ghi qua email", + "SNOOZE_CONVERSATION": "Tạm dừng \bhội thoại", "UNTIL_NEXT_REPLY": "Cho đến phản hồi kế tiếp", "UNTIL_NEXT_WEEK": "Cho đến tuần sau", "UNTIL_TOMORROW": "Cho đến ngày mai" diff --git a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json index ff7eab774..48f431b08 100644 --- a/app/javascript/dashboard/i18n/locale/vi/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/vi/helpCenter.json @@ -1,267 +1,409 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "Lọc bởi", + "SORT": "Sắp bởi", "SETTINGS_BUTTON": "Cài đặt", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "Bài mới", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Đã phát hành", + "DRAFT": "Nháp", + "ARCHIVED": "Đã lưu trữ" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Tất cả các bài", + "MINE": "Các bài của tôi", + "DRAFT": "Các bài nháp", + "ARCHIVED": "Các bài lưu" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Tất cả các bài", + "PUBLISH_BUTTON": "Phát hành", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", + "PREVIEW": "Xem trước", + "ADD_TRANSLATION": "Thêm bản dịch", + "OPEN_SIDEBAR": "Mở thanh bên", + "CLOSE_SIDEBAR": "Đóng thanh bên", + "SAVING": "Đang lưu...", + "SAVED": "Đã lưu" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Cài đặt bài viết", "FORM": { "CATEGORY": { - "LABEL": "Category", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "LABEL": "Loại", + "TITLE": "Chọn loại", + "PLACEHOLDER": "Chọn loại", + "NO_RESULT": "Không tìm thấy loại", + "SEARCH_PLACEHOLDER": "Tìm loại" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Tác giả", + "TITLE": "Chọn tác giả", + "PLACEHOLDER": "Chọn tác giả", + "NO_RESULT": "Không tìm thấy tác giả", + "SEARCH_PLACEHOLDER": "Tìm tác giả" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Tiêu đề meta", + "PLACEHOLDER": "Thêm Tiêu đề meta" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Mô tả meta", + "PLACEHOLDER": "Thêm mô tả meta của bạn để có kết quả SEO tốt hơn..." }, "META_TAGS": { - "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "LABEL": "Các thẻ meta", + "PLACEHOLDER": "Thêm các thẻ meta bằng dấu phẩy..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Bài lưu trữ", + "DELETE": "Xoá bài" } }, "PORTAL": { - "HEADER": "Portals", - "NEW_BUTTON": "New Portal", + "HEADER": "Cổng", + "DEFAULT": "Mặc định", + "NEW_BUTTON": "Cổng mới", "ACTIVE_BADGE": "có hiệu lực", - "CHOOSE_LOCALE_LABEL": "Choose a locale", - "LOADING_MESSAGE": "Loading portals...", - "ARTICLES_LABEL": "articles", - "NO_PORTALS_MESSAGE": "There are no available portals", - "ADD_NEW_LOCALE": "Add a new locale", + "CHOOSE_LOCALE_LABEL": "Chọn một ngôn ngữ", + "LOADING_MESSAGE": "Đang tải cổng...", + "ARTICLES_LABEL": "các bài", + "NO_PORTALS_MESSAGE": "Không có cổng nào", + "ADD_NEW_LOCALE": "Thêm ngôn ngữ", "POPOVER": { - "TITLE": "Portals", - "PORTAL_SETTINGS": "Portal settings", - "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "TITLE": "Cổng", + "PORTAL_SETTINGS": "Cài đặt cổng", + "SUBTITLE": "Bạn có nhiều cổng và có thể có các ngôn ngữ khác nhau cho mỗi cổng.", "CANCEL_BUTTON_LABEL": "Huỷ", - "CHOOSE_LOCALE_BUTTON": "Choose Locale" + "CHOOSE_LOCALE_BUTTON": "Chọn ngôn ngữ" }, "PORTAL_SETTINGS": { "LIST_ITEM": { "HEADER": { - "COUNT_LABEL": "articles", - "ADD": "Add locale", - "VISIT": "Visit site", - "SETTINGS": "Cài đặt" + "COUNT_LABEL": "các bài", + "ADD": "Thêm ngôn ngữ", + "VISIT": "Thăm trang", + "SETTINGS": "Cài đặt", + "DELETE": "Xoá" }, "PORTAL_CONFIG": { - "TITLE": "Portal Configurations", + "TITLE": "Cấu hình Cổng thông tin", "ITEMS": { "NAME": "Tên", - "DOMAIN": "Custom domain", + "DOMAIN": "Tên miền tuỳ chỉnh", "SLUG": "Slug", - "TITLE": "Portal title", - "THEME": "Theme color", - "SUB_TEXT": "Portal sub text" + "TITLE": "Tiêu đề cổng", + "THEME": "Màu chủ đề", + "SUB_TEXT": "Tiêu đề phụ của cổng thông tin" } }, "AVAILABLE_LOCALES": { - "TITLE": "Available locales", + "TITLE": "Các ngôn ngữ sẵn có", "TABLE": { - "NAME": "Locale name", - "CODE": "Locale code", - "ARTICLE_COUNT": "No. of articles", - "CATEGORIES": "No. of categories", - "SWAP": "Swap", + "NAME": "Tên ngôn ngữ", + "CODE": "Mã ngôn ngữ", + "ARTICLE_COUNT": "Số lượng bài", + "CATEGORIES": "Số danh mục", + "SWAP": "Chuyển", "DELETE": "Xoá", - "DEFAULT_LOCALE": "Default" + "DEFAULT_LOCALE": "Mặc định" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "Tên", + "DESCRIPTION": "Mô tả", + "LOCALE": "Ngôn ngữ", + "ARTICLE_COUNT": "Số lượng bài", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "Không tìm thấy danh mục nào" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", - "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "title": "Thông tin trung tâm trợ giúp", + "route": "Thông tin cổng mới", + "body": "Thông tin cơ bản về cổng", + "CREATE_BASIC_SETTING_BUTTON": "Tạo cài đặt cơ bản cho cổng thông tin" }, { - "title": "Help center customization", - "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "title": "Tùy chỉnh trung tâm trợ giúp", + "route": "Tuỳ chỉnh cổng", + "body": "Tuỳ chỉnh cổng", + "UPDATE_PORTAL_BUTTON": "Cập nhật thông tin cấu hình cổng" }, { - "title": "Voila! 🎉", - "route": "portal_finish", - "body": "You're all set!", + "title": "Tới rồi! 🎉", + "route": "kết_thúc_cổng", + "body": "Bạn đã sẵn sàng!", "FINISH": "Hoàn tất" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Trờ về", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Tạo cổng", + "TITLE": "Thông tin trung tâm trợ giúp", + "CREATE_BASIC_SETTING_BUTTON": "Tạo cài đặt cơ bản cho cổng thông tin" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Tuỳ biến cổng", + "TITLE": "Tùy chỉnh trung tâm trợ giúp", + "UPDATE_PORTAL_BUTTON": "Cập nhật thông tin cấu hình cổng" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Tới rồi!🎉 Bạn đã sẵn sàng!", + "MESSAGE": "Bây giờ bạn có thể thấy cổng được tạo này trên trang tất cả các cổng của bạn.", + "FINISH": "Đi đến tất cả các trang cổng thông tin" } }, "LOGO": { "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "UPLOAD_BUTTON": "Tải lên logo", + "HELP_TEXT": "Logo này sẽ được hiển thị trên tiêu đề cổng thông tin." }, "NAME": { "LABEL": "Tên", - "PLACEHOLDER": "Portal name", - "HELP_TEXT": "The name will be used in the public facing portal internally.", + "PLACEHOLDER": "Tên cổng", + "HELP_TEXT": "Tên sẽ được sử dụng trong nội bộ cổng thông tin công khai.", "ERROR": "Tên bắt buộc có" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Portal slug for urls", - - "ERROR": "Slug is required" + "PLACEHOLDER": "Slug cổng cho các url", + "ERROR": "Phải có Slug" }, "DOMAIN": { - "LABEL": "Custom Domain", - "PLACEHOLDER": "Portal custom domain", - "HELP_TEXT": "Add only If you want to use a custom domain for your portals.", - "ERROR": "Custom Domain is required" + "LABEL": "Tên miền tuỳ biến", + "PLACEHOLDER": "Tên miền tuỳ biến cổng", + "HELP_TEXT": "Chỉ thêm nếu bạn muốn sử dụng miền tùy chỉnh cho cổng thông tin của mình.", + "ERROR": "Cần có tên miền tuỳ chỉnh" }, "HOME_PAGE_LINK": { - "LABEL": "Home Page Link", - "PLACEHOLDER": "Portal home page link", - "HELP_TEXT": "The link used to return from the portal to the home page.", - "ERROR": "Home Page Link is required" + "LABEL": "Liên kết trang chủ", + "PLACEHOLDER": "Liên kế trang chủ cổng thông tin", + "HELP_TEXT": "Liên kết được sử dụng để quay lại từ cổng thông tin đến trang chủ.", + "ERROR": "Phải có liên kết trang chủ" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Màu chủ đề cổng thông tin", + "HELP_TEXT": "Màu này sẽ hiển thị dưới dạng màu chủ đề cho cổng thông tin." }, "PAGE_TITLE": { - "LABEL": "Page Title", - "PLACEHOLDER": "Portal page title", - "HELP_TEXT": "The page title will be used in the public facing portal.", - "ERROR": "Page title is required" + "LABEL": "Tiêu đề trang", + "PLACEHOLDER": "Tiêu đề trang cổng thông tin", + "HELP_TEXT": "Tiêu đề trang sẽ được sử dụng trong cổng công khai.", + "ERROR": "Phải có Tiêu đề trang" }, "HEADER_TEXT": { - "LABEL": "Header Text", - "PLACEHOLDER": "Portal header text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", - "ERROR": "Portal header text is required" + "LABEL": "Văn bản tiêu đề", + "PLACEHOLDER": "Văn bản tiêu đề cổng thông tin", + "HELP_TEXT": "Văn bản tiêu đề Cổng thông tin sẽ được sử dụng trong cổng thông tin công khai.", + "ERROR": "Phải có Văn bản tiêu đề cổng" }, "API": { - "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", + "ERROR_MESSAGE_FOR_BASIC": "Không thể tạo cổng. Thử lại.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", + "ERROR_MESSAGE_FOR_UPDATE": "Không thể cập nhật cổng. Thử lại." + } + }, + "ADD_LOCALE": { + "TITLE": "Thêm ngôn ngữ", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Cổng", + "LOCALE": { + "LABEL": "Ngôn ngữ", + "PLACEHOLDER": "Chọn một ngôn ngữ", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "Huỷ" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." } } }, "TABLE": { - "LOADING_MESSAGE": "Loading articles...", - "404": "No articles matches your search 🔍", - "NO_ARTICLES": "There are no available articles", + "LOADING_MESSAGE": "Đang tải bài...", + "404": "Không có bài viết nào phù hợp với tìm kiếm của bạn 🔍", + "NO_ARTICLES": "Không có bài viết nào có sẵn", "HEADERS": { "TITLE": "Tiêu đề", - "CATEGORY": "Category", - "READ_COUNT": "Read count", + "CATEGORY": "Loại", + "READ_COUNT": "Số lượt đọc", "STATUS": "Trạng thái", - "LAST_EDITED": "Last edited" + "LAST_EDITED": "Sửa lần cuối" }, "COLUMNS": { - "BY": "by" + "BY": "bởi" } }, "EDIT_ARTICLE": { - "LOADING": "Loading article...", - "TITLE_PLACEHOLDER": "Article title goes here", - "CONTENT_PLACEHOLDER": "Write your article here", + "LOADING": "Đang tải bài...", + "TITLE_PLACEHOLDER": "Tiêu đề bài viết ở đây", + "CONTENT_PLACEHOLDER": "Viết bài của bạn ở đây", "API": { - "ERROR": "Error while saving article" + "ERROR": "Lỗi khi lưu bài viết" + } + }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "Xác nhận xoá", + "MESSAGE": "Are you sure to delete the article?", + "YES": "Có, Xoá", + "NO": "Không, Giữ" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" } }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { - "PLACEHOLDER": "Search for articles" + "PLACEHOLDER": "Tìm kiếm các bài" } }, "CATEGORY": { "ADD": { - "TITLE": "Create a category", - "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", - "PORTAL": "Portal", - "LOCALE": "Locale", + "TITLE": "Tạo một danh mục", + "SUB_TITLE": "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.", + "PORTAL": "Cổng", + "LOCALE": "Ngôn ngữ", "NAME": { "LABEL": "Tên", - "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "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.", "ERROR": "Tên bắt buộc có" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Category slug for urls", + "PLACEHOLDER": "Danh mục slug cho url", "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", - "ERROR": "Slug is required" + "ERROR": "Phải có Slug" }, "DESCRIPTION": { "LABEL": "Mô tả", - "PLACEHOLDER": "Give a short description about the category.", + "PLACEHOLDER": "Đưa ra một mô tả ngắn về danh mục.", "ERROR": "Mô tả bắt buộc có" }, "BUTTONS": { - "CREATE": "Create category", + "CREATE": "Tạo danh mục", "CANCEL": "Huỷ" }, "API": { - "SUCCESS_MESSAGE": "Category created successfully", - "ERROR_MESSAGE": "Unable to create category" + "SUCCESS_MESSAGE": "Danh mục đã được tạo thành công", + "ERROR_MESSAGE": "Không thể tạo danh mục" + } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Cổng", + "LOCALE": "Ngôn ngữ", + "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.", + "ERROR": "Tên bắt buộc có" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Danh mục slug cho url", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Phải có Slug" + }, + "DESCRIPTION": { + "LABEL": "Mô tả", + "PLACEHOLDER": "Đưa ra một mô tả ngắn về danh mục.", + "ERROR": "Mô tả bắt buộc có" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "Huỷ" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" } } } diff --git a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json index 63c1cf0f4..de61e2811 100644 --- a/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/vi/inboxMgmt.json @@ -22,7 +22,7 @@ "body": "Thêm đại lý vào hộp thư đến đã tạo." }, { - "title": "Voila!", + "title": "Tới rồi!", "route": "settings_inbox_finish", "body": "Bạn đã sẵn sàng để đi!" } @@ -30,8 +30,8 @@ "ADD": { "CHANNEL_NAME": { "LABEL": "Tên hộp thư đến", - "PLACEHOLDER": "Nhập tên hộp thư đến của bạn (ví dụ: Acme Inc)", - "ERROR": "Please enter a valid inbox name" + "PLACEHOLDER": "Nhập tên kênh của bạn (ví dụ: WebA)", + "ERROR": "Vui lòng nhập tên kênh hợp lệ" }, "WEBSITE_NAME": { "LABEL": "Tên trang web", @@ -83,7 +83,7 @@ }, "CHANNEL_GREETING_TOGGLE": { "LABEL": "Bật lời chào kênh", - "HELP_TEXT": "Automatically send a greeting message when a new conversation is created.", + "HELP_TEXT": "Tự động gửi tin nhắn chào mừng khi có hội thoại mới.", "ENABLED": "Bật", "DISABLED": "Không bật" }, @@ -100,7 +100,7 @@ }, "SUBMIT_BUTTON": "Tạo hộp thư đến", "API": { - "ERROR_MESSAGE": "We were not able to create a website channel, please try again" + "ERROR_MESSAGE": "Chúng tôi không thể tạo kênh trang web, vui lòng thử lại" } }, "TWILIO": { @@ -112,10 +112,10 @@ "ERROR": "Trường này là bắt buộc" }, "MESSAGING_SERVICE_SID": { - "LABEL": "Messaging Service SID", - "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "LABEL": "Dịch vụ nhắn tin SID", + "PLACEHOLDER": "Vui lòng nhập SID của dịch vụ nhắn tin Twilio của bạn", "ERROR": "Trường này là bắt buộc", - "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + "USE_MESSAGING_SERVICE": "Sử dụng dịch vụ nhắn tin Twilio" }, "CHANNEL_TYPE": { "LABEL": "Loại kênh", @@ -169,7 +169,7 @@ }, "API_SECRET": { "LABEL": "Bí mật API", - "PLACEHOLDER": "Vui lòng nhập \bBí mật API Bandwidth", + "PLACEHOLDER": "Vui lòng nhập mật khẩu API Bandwidth", "ERROR": "Trường này là bắt buộc" }, "APPLICATION_ID": { @@ -179,7 +179,7 @@ }, "INBOX_NAME": { "LABEL": "Tên hộp thư đến", - "PLACEHOLDER": "Vui lòng điền tên hộp thư đến", + "PLACEHOLDER": "Vui lòng điền tên kênh", "ERROR": "Trường này là bắt buộc" }, "PHONE_NUMBER": { @@ -203,12 +203,12 @@ "PROVIDERS": { "LABEL": "Nhà cung cấp API", "TWILIO": "Twilio", - "WHATSAPP_CLOUD": "WhatsApp Cloud", + "WHATSAPP_CLOUD": "Đám mây WhatsApp", "360_DIALOG": "360Dialog" }, "INBOX_NAME": { "LABEL": "Tên hộp thư đến", - "PLACEHOLDER": "Vui lòng điền tên hộp thư đến", + "PLACEHOLDER": "Vui lòng điền tên kênh", "ERROR": "Trường này là bắt buộc" }, "PHONE_NUMBER": { @@ -217,18 +217,18 @@ "ERROR": "Vui lòng nhập một giá trị hợp lệ. Số điện thoại phải bắt đầu bằng `+`." }, "PHONE_NUMBER_ID": { - "LABEL": "Phone number ID", - "PLACEHOLDER": "Please enter the Phone number ID obtained from Facebook developer dashboard.", + "LABEL": "ID số điện thoại", + "PLACEHOLDER": "Vui lòng nhập ID số điện thoại lấy được từ trang tổng quan nhà phát triển Facebook.", "ERROR": "Vui lòng điền giá trị hợp lệ." }, "BUSINESS_ACCOUNT_ID": { - "LABEL": "Business Account ID", - "PLACEHOLDER": "Please enter the Business Account ID obtained from Facebook developer dashboard.", + "LABEL": "ID tài khoản doanh nghiệp", + "PLACEHOLDER": "Vui lòng nhập ID tài khoản doanh nghiệp có được từ trang tổng quan dành cho nhà phát triển Facebook.", "ERROR": "Vui lòng điền giá trị hợp lệ." }, "WEBHOOK_VERIFY_TOKEN": { - "LABEL": "Webhook Verify Token", - "PLACEHOLDER": "Enter a verify token which you want to configure for facebook webhooks.", + "LABEL": "Token xác thực Webhook", + "PLACEHOLDER": "Nhập mã xác thực mà bạn muốn định cấu hình cho webhook facebook.", "ERROR": "Vui lòng điền giá trị hợp lệ." }, "API_KEY": { @@ -239,7 +239,7 @@ }, "API_CALLBACK": { "TITLE": "URL gọi lại", - "SUBTITLE": "You have to configure the webhook URL in facebook developer portal with the URL mentioned here." + "SUBTITLE": "Bạn phải định cấu hình URL webhook trong cổng nhà phát triển facebook với URL được đề cập ở đây." }, "SUBMIT_BUTTON": "Tạo kênh WhatsApp", "API": { @@ -327,7 +327,7 @@ }, "AUTH": { "TITLE": "Chọn kênh", - "DESC": "Chatwoot supports live-chat widgets, Facebook Messenger, Twitter profiles, WhatsApp, Emails, etc., as channels. If you want to build a custom channel, you can create it using the API channel. To get started, choose one of the channels below." + "DESC": "Chatwoot hỗ trợ các tiện ích trò chuyện trực tiếp, Facebook Messenger, hồ sơ Twitter, WhatsApp, Email, v. v., dưới dạng các kênh. Nếu bạn muốn xây dựng một kênh tùy chỉnh, bạn có thể tạo kênh này bằng cách sử dụng kênh API. Để bắt đầu, hãy chọn một trong các kênh bên dưới." }, "AGENTS": { "TITLE": "Nhà Cung Cấp", @@ -368,7 +368,7 @@ "API": { "SUCCESS_MESSAGE": "Đã cập nhật cài đặt hộp thư đến thành công", "AUTO_ASSIGNMENT_SUCCESS_MESSAGE": "Đã cập nhật thành công bài tập tự động", - "ERROR_MESSAGE": "We couldn't update inbox settings. Please try again later." + "ERROR_MESSAGE": "Chúng tôi không thể cập nhật cài đặt hộp thư. Vui lòng thử lại sau." }, "EMAIL_COLLECT_BOX": { "ENABLED": "Bật", @@ -414,7 +414,7 @@ "CAMPAIGN": "Chiến dịch", "PRE_CHAT_FORM": "Biểu mẫu trước khi trò chuyện", "BUSINESS_HOURS": "Giờ làm việc", - "WIDGET_BUILDER": "Widget Builder" + "WIDGET_BUILDER": "Trình tạo widget" }, "SETTINGS": "Cài đặt", "FEATURES": { @@ -442,16 +442,16 @@ "INBOX_UPDATE_SUB_TEXT": "Cập nhật cài đặt hộp thư đến của bạn", "AUTO_ASSIGNMENT_SUB_TEXT": "Bật hoặc tắt tính năng tự động gán các cuộc hội thoại mới cho các tác nhân được thêm vào hộp thư đến này.", "HMAC_VERIFICATION": "Xác thực danh tính người dùng", - "HMAC_DESCRIPTION": "In order to validate the user's identity, you can pass an `identifier_hash` for each user. You can generate a HMAC sha256 hash using the `identifier` with the key shown here.", + "HMAC_DESCRIPTION": "Để xác thực danh tính của người dùng, bạn có thể chuyển một `mã định danh_hash` cho mỗi người dùng. Bạn có thể tạo mã băm HMAC sha256 bằng cách sử dụng `mã định danh' với khóa được hiển thị ở đây.", "HMAC_MANDATORY_VERIFICATION": "Bắt buộc Xác thực danh tính người dùng", - "HMAC_MANDATORY_DESCRIPTION": "If enabled, requests missing the `identifier_hash` will be rejected.", + "HMAC_MANDATORY_DESCRIPTION": "Nếu được bật, các yêu cầu thiếu `ID_hash` sẽ bị từ chối.", "INBOX_IDENTIFIER": "Định danh hộp thư đến", "INBOX_IDENTIFIER_SUB_TEXT": "Dùng token định danh hộp thư đến hiện ở đây để xác thực các ứng dụng khách API của bạn.", "FORWARD_EMAIL_TITLE": "Chuyển tiếp đến Email", "FORWARD_EMAIL_SUB_TEXT": "Bắt đầu chuyển tiếp email của bạn tới địa chỉ email sau.", "ALLOW_MESSAGES_AFTER_RESOLVED": "Cho phép nhắn tin sau khi cuộc trò chuyện được giải quyết", "ALLOW_MESSAGES_AFTER_RESOLVED_SUB_TEXT": "Cho phép người dùng cuối nhắn tin sau khi cuộc trò chuyện được giải quyết.", - "WHATSAPP_SECTION_SUBHEADER": "This API Key is used for the integration with the WhatsApp APIs.", + "WHATSAPP_SECTION_SUBHEADER": "Khóa API này được sử dụng để tích hợp với các API WhatsApp.", "WHATSAPP_SECTION_TITLE": "Khoá API" }, "AUTO_ASSIGNMENT": { @@ -473,7 +473,7 @@ "LABEL": "Nhãn", "PLACE_HOLDER": "Cụm từ hiện nền trong ô", "KEY": "Khoá", - "TYPE": "Loại", + "TYPE": "Kiểu", "REQUIRED": "Bắt buộc" }, "ENABLE": { @@ -579,10 +579,10 @@ "WIDGET_BUILDER": { "WIDGET_OPTIONS": { "AVATAR": { - "LABEL": "Website Avatar", + "LABEL": "Hình đại diện trang web", "DELETE": { "API": { - "SUCCESS_MESSAGE": "Avatar deleted successfully", + "SUCCESS_MESSAGE": "Hình đại diện đã được xóa thành công", "ERROR_MESSAGE": "Đã có lỗi, vui lòng thử lại" } } @@ -590,7 +590,7 @@ "WEBSITE_NAME": { "LABEL": "Tên trang web", "PLACE_HOLDER": "Nhập tên trang web của bạn (ví dụ: Acme Inc)", - "ERROR": "Please enter a valid website name" + "ERROR": "Vui lòng nhập tên trang web hợp lệ" }, "WELCOME_HEADING": { "LABEL": "Tiêu đề chào mừng", @@ -601,41 +601,41 @@ "PLACE_HOLDER": "Chúng tôi làm cho việc kết nối với chúng tôi trở nên đơn giản. Hỏi chúng tôi bất cứ điều gì hoặc chia sẻ phản hồi của bạn." }, "REPLY_TIME": { - "LABEL": "Reply Time", + "LABEL": "Thời gian trả lời", "IN_A_FEW_MINUTES": "Trong một vài phút", "IN_A_FEW_HOURS": "Trong một vài giờ", "IN_A_DAY": "Trong một ngày" }, "WIDGET_COLOR_LABEL": "Màu tiện ích", - "WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position", - "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type", + "WIDGET_BUBBLE_POSITION_LABEL": "Vị trí bong bóng widget", + "WIDGET_BUBBLE_TYPE_LABEL": "Kiểu bong bóng widget", "WIDGET_BUBBLE_LAUNCHER_TITLE": { "DEFAULT": "Trò chuyện với chúng tôi", - "LABEL": "Widget Bubble Launcher Title", + "LABEL": "Tiêu đề trình khởi chạy bong bóng widget", "PLACE_HOLDER": "Trò chuyện với chúng tôi" }, "UPDATE": { - "BUTTON_TEXT": "Update Widget Settings", + "BUTTON_TEXT": "Cập nhật cài đặt widget", "API": { - "SUCCESS_MESSAGE": "Widget settings updated successfully", - "ERROR_MESSAGE": "Unable to update widget settings" + "SUCCESS_MESSAGE": "Đã cập nhật cài đặt widget thành công", + "ERROR_MESSAGE": "Không thể cập nhật cài đặt widget" } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", - "SCRIPT": "Script" + "PREVIEW": "Xem trước", + "SCRIPT": "Kịch bản" }, "WIDGET_BUBBLE_POSITION": { - "LEFT": "Left", - "RIGHT": "Right" + "LEFT": "Trái", + "RIGHT": "Phải" }, "WIDGET_BUBBLE_TYPE": { - "STANDARD": "Standard", - "EXPANDED_BUBBLE": "Expanded Bubble" + "STANDARD": "Chuẩn", + "EXPANDED_BUBBLE": "Mở rộng bong bóng" } }, "WIDGET_SCREEN": { - "DEFAULT": "Default", + "DEFAULT": "Mặc định", "CHAT": "Chat" }, "REPLY_TIME": { @@ -649,14 +649,14 @@ }, "BODY": { "TEAM_AVAILABILITY": { - "ONLINE": "We are Online", - "OFFLINE": "Hiện tại chúng tôi đang ngoại tuyến" + "ONLINE": "Chúng tôi đang trực tuyến", + "OFFLINE": "Hiện tại chúng tôi đang bận chút" }, - "USER_MESSAGE": "Hi", - "AGENT_MESSAGE": "Hello" + "USER_MESSAGE": "Xin chào", + "AGENT_MESSAGE": "Xin chào" }, - "BRANDING_TEXT": "Cung cấp bởi Chatwoot", - "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" + "BRANDING_TEXT": "CC bởi Chatwoot", + "SCRIPT_SETTINGS": "\nwindow.chatwootSettings = {options};" } } } diff --git a/app/javascript/dashboard/i18n/locale/vi/integrations.json b/app/javascript/dashboard/i18n/locale/vi/integrations.json index 858c6ed41..903694425 100644 --- a/app/javascript/dashboard/i18n/locale/vi/integrations.json +++ b/app/javascript/dashboard/i18n/locale/vi/integrations.json @@ -14,7 +14,7 @@ "CONVERSATION_UPDATED": "Cuộc trò chuyện đã được cập nhật", "MESSAGE_CREATED": "Tin nhắn đã được tạo", "MESSAGE_UPDATED": "Tin nhắn đã được cập nhật", - "WEBWIDGET_TRIGGERED": "Live chat widget opened by the user" + "WEBWIDGET_TRIGGERED": "Tiện ích trò chuyện trực tuyến do người dùng mở" } }, "END_POINT": { @@ -22,7 +22,7 @@ "PLACEHOLDER": "Ví dụ: https://example/api/webhook", "ERROR": "Vui lòng nhập một URL hợp lệ" }, - "EDIT_SUBMIT": "Update webhook", + "EDIT_SUBMIT": "Cập nhật webhook", "ADD_SUBMIT": "Tạo webhook" }, "TITLE": "Webhook", @@ -44,7 +44,7 @@ "BUTTON_TEXT": "Chỉnh sửa", "TITLE": "Sửa webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration updated successfully", + "SUCCESS_MESSAGE": "Đã cập nhật cấu hình Webhook thành công", "ERROR_MESSAGE": "Không thể kết nối với Máy chủ Woot, Vui lòng thử lại sau" } }, @@ -52,7 +52,7 @@ "CANCEL": "Xoá", "TITLE": "Thêm mới webhook", "API": { - "SUCCESS_MESSAGE": "Webhook configuration added successfully", + "SUCCESS_MESSAGE": "Đã thêm Webhook thành công", "ERROR_MESSAGE": "Không thể kết nối với Máy chủ Woot, Vui lòng thử lại sau" } }, @@ -64,7 +64,7 @@ }, "CONFIRM": { "TITLE": "Xác Nhận Xoá", - "MESSAGE": "Are you sure to delete the webhook? (%{webhookURL})", + "MESSAGE": "Bạn có chắc chắn muốn xóa webhook không? (%{webhookURL})", "YES": "Có, Xoá ", "NO": "Không, Giữ" } @@ -86,49 +86,49 @@ "BUTTON_TEXT": "Kết nối" }, "DASHBOARD_APPS": { - "TITLE": "Dashboard Apps", - "HEADER_BTN_TXT": "Add a new dashboard app", - "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", - "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "TITLE": "Ứng dụng bảng điều khiển", + "HEADER_BTN_TXT": "Thêm mới một Ứng dụng bảng điều khiển", + "SIDEBAR_TXT": "

Ứng dụng trên bảng điều khiển

Ứng dụng bảng điều khiển cho phép nhúng ứng dụng vào trang bảng điều khiển để cung cấp ngữ cảnh cho các tổng đài viên hỗ trợ khách hàng. Tính năng này cho phép bạn tạo ứng dụng một cách độc lập và nhúng ứng dụng đó vào bên trong trang điều khiển để cung cấp thông tin người dùng, đơn đặt hàng hoặc lịch sử thanh toán trước đó của họ.

Khi bạn nhúng ứng dụng của mình bằng điều khiển, ứng dụng của bạn sẽ lấy bối cảnh của cuộc trò chuyện và liên hệ dưới dạng sự kiện cửa sổ. Triển khai trình nghe cho sự kiện thông báo trên trang của bạn để nhận ngữ cảnh.

Để thêm ứng dụng trang điều khiển mới, hãy nhấp vào nút 'Thêm ứng dụng bảng điều khiển mới'.

", + "DESCRIPTION": "Ứng dụng bảng điều khiển cho phép các tổ chức nhúng một ứng dụng bên trong trang điều khiển để cung cấp ngữ cảnh cho các tổng đài viên hỗ trợ khách hàng. Tính năng này cho phép bạn tạo ứng dụng một cách độc lập và nhúng ứng dụng đó để cung cấp thông tin người dùng, đơn đặt hàng hoặc lịch sử thanh toán trước đó của họ.", "LIST": { - "404": "There are no dashboard apps configured on this account yet", - "LOADING": "Fetching dashboard apps...", + "404": "Chưa có ứng dụng trang \u001dđiều khiển nào được định cấu hình trên tài khoản này", + "LOADING": "Đang tìm nạp ứng dụng bảng điều khiển...", "TABLE_HEADER": [ "Tên", "Endpoint" ], - "EDIT_TOOLTIP": "Edit app", - "DELETE_TOOLTIP": "Delete app" + "EDIT_TOOLTIP": "Sửa app", + "DELETE_TOOLTIP": "Xoá app" }, "FORM": { "TITLE_LABEL": "Tên", - "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", - "TITLE_ERROR": "A name for the dashboard app is required", + "TITLE_PLACEHOLDER": "Nhập tên cho ứng dụng bảng điều khiển", + "TITLE_ERROR": "Cần có tên cho ứng dụng bảng điều khiển", "URL_LABEL": "Endpoint", - "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", - "URL_ERROR": "A valid URL is required" + "URL_PLACEHOLDER": "Nhập URL endpoint nơi ứng dụng của bạn được lưu trữ", + "URL_ERROR": "Cần một URL hợp lệ" }, "CREATE": { - "HEADER": "Add a new dashboard app", + "HEADER": "Thêm mới một Ứng dụng bảng điều khiển", "FORM_SUBMIT": "Gửi", "FORM_CANCEL": "Huỷ", - "API_SUCCESS": "Dashboard app configured successfully", - "API_ERROR": "We couldn't create an app. Please try again later" + "API_SUCCESS": "Ứng dụng trang điều khiển được định cấu hình thành công", + "API_ERROR": "Chúng tôi không thể tạo ứng dụng. Vui lòng thử lại sau" }, "UPDATE": { - "HEADER": "Edit dashboard app", + "HEADER": "Sửa app bảng điều khiển", "FORM_SUBMIT": "Cập nhật", "FORM_CANCEL": "Huỷ", - "API_SUCCESS": "Dashboard app updated successfully", - "API_ERROR": "We couldn't update the app. Please try again later" + "API_SUCCESS": "Đã cập nhật ứng dụng trang điều khiển thành công", + "API_ERROR": "Chúng tôi không thể cập nhật ứng dụng. Vui lòng thử lại sau" }, "DELETE": { - "CONFIRM_YES": "Yes, delete it", - "CONFIRM_NO": "No, keep it", + "CONFIRM_YES": "Có, xóa nó", + "CONFIRM_NO": "Không, giữ nó", "TITLE": "Xác nhận xoá", - "MESSAGE": "Are you sure to delete the app - %{appName}?", - "API_SUCCESS": "Dashboard app deleted successfully", - "API_ERROR": "We couldn't delete the app. Please try again later" + "MESSAGE": "Bạn có chắc chắn xóa ứng dụng - %{appName}?", + "API_SUCCESS": "Đã xóa ứng dụng trang điều khiển thành công", + "API_ERROR": "Chúng tôi không thể xóa ứng dụng. Vui lòng thử lại sau" } } } diff --git a/app/javascript/dashboard/i18n/locale/vi/login.json b/app/javascript/dashboard/i18n/locale/vi/login.json index 6be717a3c..d1d05dc31 100644 --- a/app/javascript/dashboard/i18n/locale/vi/login.json +++ b/app/javascript/dashboard/i18n/locale/vi/login.json @@ -2,7 +2,7 @@ "LOGIN": { "TITLE": "Đăng nhập Chatwoot", "EMAIL": { - "LABEL": "Thư điện tử", + "LABEL": "Email", "PLACEHOLDER": "Email : someone@example.com" }, "PASSWORD": { diff --git a/app/javascript/dashboard/i18n/locale/vi/report.json b/app/javascript/dashboard/i18n/locale/vi/report.json index c5abfa5bc..13351e95d 100644 --- a/app/javascript/dashboard/i18n/locale/vi/report.json +++ b/app/javascript/dashboard/i18n/locale/vi/report.json @@ -3,7 +3,7 @@ "HEADER": "Các cuộc hội thoại", "LOADING_CHART": "Đang tải các biểu đồ dữ liệu...", "NO_ENOUGH_DATA": "Chúng tôi không nhận được đủ điểm dữ liệu để tạo báo cáo, Vui lòng thử lại sau.", - "DOWNLOAD_AGENT_REPORTS": "Tải xuống báo cáo đại lý", + "DOWNLOAD_AGENT_REPORTS": "Tải xuống báo cáo tổng đài viên", "METRICS": { "CONVERSATIONS": { "NAME": "Các cuộc trò chuyện", @@ -18,16 +18,16 @@ "DESC": "( Tổng cộng )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Thời gian phản hồi đầu tiên", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian phản hồi đầu tiên là %{metricValue} (dựa trên %{conversationCount} cuộc hội thoại)" }, "RESOLUTION_TIME": { "NAME": "Thời gian giải quyết", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian giải quyết là %{metricValue} (dựa trên %{conversationCount} hội thoại)" }, "RESOLUTION_COUNT": { "NAME": "Số lượng giải quyết", @@ -65,7 +65,7 @@ "PLACEHOLDER": "Chọn phạm vi ngày" }, "GROUP_BY_FILTER_DROPDOWN_LABEL": "Nhóm theo", - "DURATION_FILTER_LABEL": "Duration", + "DURATION_FILTER_LABEL": "Thời lượng", "GROUP_BY_DAY_OPTIONS": [ { "id": 1, @@ -136,16 +136,16 @@ "DESC": "( Tổng cộng )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Thời gian phản hồi đầu tiên", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian phản hồi đầu tiên là %{metricValue} (dựa trên %{conversationCount} cuộc hội thoại)" }, "RESOLUTION_TIME": { "NAME": "Thời gian giải quyết", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian giải quyết là %{metricValue} (dựa trên %{conversationCount} hội thoại)" }, "RESOLUTION_COUNT": { "NAME": "Số lượng giải quyết", @@ -203,16 +203,16 @@ "DESC": "( Tổng cộng )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Thời gian phản hồi đầu tiên", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian phản hồi đầu tiên là %{metricValue} (dựa trên %{conversationCount} cuộc hội thoại)" }, "RESOLUTION_TIME": { "NAME": "Thời gian giải quyết", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian giải quyết là %{metricValue} (dựa trên %{conversationCount} hội thoại)" }, "RESOLUTION_COUNT": { "NAME": "Số lượng giải quyết", @@ -270,16 +270,16 @@ "DESC": "( Tổng cộng )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Thời gian phản hồi đầu tiên", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian phản hồi đầu tiên là %{metricValue} (dựa trên %{conversationCount} cuộc hội thoại)" }, "RESOLUTION_TIME": { "NAME": "Thời gian giải quyết", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian giải quyết là %{metricValue} (dựa trên %{conversationCount} hội thoại)" }, "RESOLUTION_COUNT": { "NAME": "Số lượng giải quyết", @@ -337,16 +337,16 @@ "DESC": "( Tổng cộng )" }, "FIRST_RESPONSE_TIME": { - "NAME": "First Response Time", + "NAME": "Thời gian phản hồi đầu tiên", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "First Response Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian phản hồi đầu tiên là %{metricValue} (dựa trên %{conversationCount} cuộc hội thoại)" }, "RESOLUTION_TIME": { "NAME": "Thời gian giải quyết", "DESC": "( Trung bình )", - "INFO_TEXT": "Total number of conversations used for computation:", - "TOOLTIP_TEXT": "Resolution Time is %{metricValue} (based on %{conversationCount} conversations)" + "INFO_TEXT": "Tổng số cuộc hội thoại được sử dụng để tính toán:", + "TOOLTIP_TEXT": "Thời gian giải quyết là %{metricValue} (dựa trên %{conversationCount} hội thoại)" }, "RESOLUTION_COUNT": { "NAME": "Số lượng giải quyết", @@ -387,10 +387,10 @@ "CSAT_REPORTS": { "HEADER": "Báo cáo CSAT", "NO_RECORDS": "Không có phản hồi báo cáo CSAT có sẵn.", - "DOWNLOAD": "Download CSAT Reports", + "DOWNLOAD": "Tải về các báo cáo CSAT", "FILTERS": { "AGENTS": { - "PLACEHOLDER": "Choose Agents" + "PLACEHOLDER": "Chọn tổng đài viên" } }, "TABLE": { @@ -418,27 +418,27 @@ }, "OVERVIEW_REPORTS": { "HEADER": "Tổng quan", - "LIVE": "Live", + "LIVE": "Trực tuyến", "ACCOUNT_CONVERSATIONS": { - "HEADER": "Open Conversations", - "LOADING_MESSAGE": "Loading conversation metrics...", + "HEADER": "Mở cuộc hội thoại", + "LOADING_MESSAGE": "Đang tải số liệu cuộc hội thoại...", "OPEN": "Mở", - "UNATTENDED": "Unattended", + "UNATTENDED": "Không giám sát", "UNASSIGNED": "Chưa được phân công" }, "AGENT_CONVERSATIONS": { - "HEADER": "Conversations by agents", - "LOADING_MESSAGE": "Loading agent metrics...", - "NO_AGENTS": "There are no conversations by agents", + "HEADER": "Cuộc hội thoại của các tổng đài viên", + "LOADING_MESSAGE": "Đang tải chỉ số tổng đài viên...", + "NO_AGENTS": "Không có cuộc hội thoại nào của các tổng đài viên", "TABLE_HEADER": { "AGENT": "Nhà cung cấp", - "OPEN": "OPEN", - "UNATTENDED": "Unattended", + "OPEN": "MỞ", + "UNATTENDED": "Không giám sát", "STATUS": "Trạng thái" } }, "AGENT_STATUS": { - "HEADER": "Agent status", + "HEADER": "Trạng thái tổng đài viên", "ONLINE": "Trực Tuyến", "BUSY": "Bận", "OFFLINE": "Không Trực Tuyến" diff --git a/app/javascript/dashboard/i18n/locale/vi/setNewPassword.json b/app/javascript/dashboard/i18n/locale/vi/setNewPassword.json index 6f697ac07..47db18733 100644 --- a/app/javascript/dashboard/i18n/locale/vi/setNewPassword.json +++ b/app/javascript/dashboard/i18n/locale/vi/setNewPassword.json @@ -16,7 +16,7 @@ "ERROR_MESSAGE": "Không thể kết nối với Máy chủ Woot, Vui lòng thử lại sau" }, "CAPTCHA": { - "ERROR": "Verification expired. Please solve captcha again." + "ERROR": "Đã hết hạn xác minh. Vui lòng giải mã captcha một lần nữa." }, "SUBMIT": "Gửi" } diff --git a/app/javascript/dashboard/i18n/locale/vi/settings.json b/app/javascript/dashboard/i18n/locale/vi/settings.json index 2f52308aa..2947dc37d 100644 --- a/app/javascript/dashboard/i18n/locale/vi/settings.json +++ b/app/javascript/dashboard/i18n/locale/vi/settings.json @@ -21,7 +21,7 @@ }, "MESSAGE_SIGNATURE_SECTION": { "TITLE": "Chữ ký tin nhắn cá nhân", - "NOTE": "Create a personal message signature that would be added to all the messages you send from your email inbox. Use the rich content editor to create a highly personalised signature.", + "NOTE": "Tạo chữ ký thư cá nhân sẽ được thêm vào tất cả các thư bạn gửi từ hộp thư email của mình. Sử dụng trình chỉnh sửa nội dung phong phú để tạo chữ ký được cá nhân hóa cao.", "BTN_TEXT": "Lưu chữ ký tin nhắn", "API_ERROR": "Không thể lưu chữ ký! Thử lại", "API_SUCCESS": "Chữ ký được lưu thành công" @@ -126,8 +126,8 @@ "TRAIL_BUTTON": "Mua Ngay", "DELETED_USER": "Người dùng bị xoá", "ACCOUNT_SUSPENDED": { - "TITLE": "Account Suspended", - "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + "TITLE": "Tài khoản bị ngưng", + "MESSAGE": "Tài khoản của bạn bị tạm ngưng. Vui lòng liên hệ với nhóm hỗ trợ để biết thêm thông tin." } }, "COMPONENTS": { @@ -136,8 +136,8 @@ "COPY_SUCCESSFUL": "Đã sao chép mã thành công" }, "SHOW_MORE_BLOCK": { - "SHOW_MORE": "Show More", - "SHOW_LESS": "Show Less" + "SHOW_MORE": "Xem thêm", + "SHOW_LESS": "Xem ít" }, "FILE_BUBBLE": { "DOWNLOAD": "Tải xuống", @@ -154,8 +154,8 @@ } }, "SIDEBAR": { - "CURRENTLY_VIEWING_ACCOUNT": "Currently viewing:", - "SWITCH": "Switch", + "CURRENTLY_VIEWING_ACCOUNT": "Hiện đang xem:", + "SWITCH": "Chuyển", "CONVERSATIONS": "Cuộc trò chuyện", "ALL_CONVERSATIONS": "Tất cả cuộc trò chuyện", "MENTIONED_CONVERSATIONS": "Nhắn đến", @@ -175,14 +175,14 @@ "CUSTOM_ATTRIBUTES": "Thuộc tính tùy chỉnh", "AUTOMATION": "Tự động hoá", "TEAMS": "Nhóm", - "BILLING": "Billing", + "BILLING": "Phí", "CUSTOM_VIEWS_FOLDER": "Thư mục", "CUSTOM_VIEWS_SEGMENTS": "Phân khúc", "ALL_CONTACTS": "Tất cả liên lạc", "TAGGED_WITH": "Được gắn thẻ với", "NEW_LABEL": "Nhãn mới", "NEW_TEAM": "Nhóm mới", - "NEW_INBOX": "Hộp thư đến mới", + "NEW_INBOX": "Kênh mới", "REPORTS_CONVERSATION": "Các cuộc hội thoại", "CSAT": "CSAT", "CAMPAIGNS": "Chiến dịch", @@ -190,39 +190,40 @@ "ONE_OFF": "Một lần", "REPORTS_AGENT": "Nhà cung cấp", "REPORTS_LABEL": "Nhãn", - "REPORTS_INBOX": "Hộp thư đến", + "REPORTS_INBOX": "Kênh", "REPORTS_TEAM": "Nhóm", "SET_AVAILABILITY_TITLE": "Đặt chính mình như", "BETA": "Beta", "REPORTS_OVERVIEW": "Tổng quan", "FACEBOOK_REAUTHORIZE": "Kết nối Facebook của bạn đã hết hạn, vui lòng kết nối lại trang Facebook của bạn để tiếp tục dịch vụ", "HELP_CENTER": { - "ALL_ARTICLES": "All Articles", - "MY_ARTICLES": "My Articles", - "DRAFT": "Draft", - "ARCHIVED": "Archived", - "CATEGORY": "Category", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "TITLE": "Help Center (Beta)", + "ALL_ARTICLES": "Tất cả các bài", + "MY_ARTICLES": "Các bài của tôi", + "DRAFT": "Nháp", + "ARCHIVED": "Lưu trữ", + "CATEGORY": "Loại", + "CATEGORY_EMPTY_MESSAGE": "Không tìm thấy danh mục nào" }, - "DOCS": "Read docs" + "DOCS": "Đọc tài liệu" }, "BILLING_SETTINGS": { - "TITLE": "Billing", + "TITLE": "Phí", "CURRENT_PLAN": { - "TITLE": "Current Plan", - "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + "TITLE": "Gói hiện tại", + "PLAN_NOTE": "Bạn hiện đã đăng ký gói **%{plan}** với **%{quantity}** giấy phép" }, "MANAGE_SUBSCRIPTION": { - "TITLE": "Manage your subscription", - "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", - "BUTTON_TXT": "Go to the billing portal" + "TITLE": "Quản lý thuê bao của bạn", + "DESCRIPTION": "Xem các hóa đơn trước đây của bạn, chỉnh sửa chi tiết thanh toán hoặc hủy thuê bao của bạn.", + "BUTTON_TXT": "Đi tới cổng thanh toán" }, "CHAT_WITH_US": { - "TITLE": "Need help?", - "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "TITLE": "Cần hỗ trợ?", + "DESCRIPTION": "Bạn có gặp phải bất kỳ vấn đề nào trong thanh toán không? Hãy cho chúng tôi biết.", "BUTTON_TXT": "Trò chuyện với chúng tôi" }, - "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + "NO_BILLING_USER": "Tài khoản thanh toán của bạn đang được định cấu hình. Hãy làm mới trang và thử lại." }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "Ồ ồ! Chúng tôi không thể tìm thấy bất kỳ tài khoản Chatwoot nào. Vui lòng tạo một tài khoản mới để tiếp tục.", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Đi đến Cài đặt", "SWITCH_CONVERSATION_STATUS": "Chuyển sang trạng thái cuộc trò chuyện tiếp theo", "SWITCH_TO_PRIVATE_NOTE": "Chuyển sang Ghi chú Riêng tư", - "TOGGLE_RICH_CONTENT_EDITOR": "Chuyển đổi trình chỉnh sửa Nội dung đa dạng thức", "SWITCH_TO_REPLY": "Chuyển sang phản hồi", "TOGGLE_SNOOZE_DROPDOWN": "Chuyển đổi thả xuống tạm dừng" }, diff --git a/app/javascript/dashboard/i18n/locale/vi/signup.json b/app/javascript/dashboard/i18n/locale/vi/signup.json index fcb43d716..b473ca41e 100644 --- a/app/javascript/dashboard/i18n/locale/vi/signup.json +++ b/app/javascript/dashboard/i18n/locale/vi/signup.json @@ -22,7 +22,7 @@ "LABEL": "Mật khẩu", "PLACEHOLDER": "Mật khẩu", "ERROR": "Mật khẩu quá ngắn", - "IS_INVALID_PASSWORD": "Password should contain atleast 1 uppercase letter, 1 lowercase letter, 1 number and 1 special character" + "IS_INVALID_PASSWORD": "Mật khẩu phải chứa ít nhất 1 chữ hoa, 1 chữ thường, 1 số và 1 ký tự đặc biệt" }, "CONFIRM_PASSWORD": { "LABEL": "Xác nhận mật khẩu", diff --git a/app/javascript/dashboard/i18n/locale/vi/teamsSettings.json b/app/javascript/dashboard/i18n/locale/vi/teamsSettings.json index 1914823fb..c5d2df289 100644 --- a/app/javascript/dashboard/i18n/locale/vi/teamsSettings.json +++ b/app/javascript/dashboard/i18n/locale/vi/teamsSettings.json @@ -2,7 +2,7 @@ "TEAMS_SETTINGS": { "NEW_TEAM": "Tạo nhóm mới", "HEADER": "Nhóm", - "SIDEBAR_TXT": "

Nhóm

Nhóm cho phép bạn tổ chức các đại lý của mình thành các nhóm dựa trên trách nhiệm của họ.
Một đại lý có thể là một phần của nhiều nhóm. Bạn có thể chỉ định các cuộc trò chuyện cho một nhóm khi bạn đang làm việc cộng tác.

", + "SIDEBAR_TXT": "

Nhóm

Nhóm cho phép bạn tổ chức các tổng đài viên của mình thành các nhóm dựa trên trách nhiệm của họ.
Một tổng đài viên có thể là một phần của nhiều nhóm. Bạn có thể gán các cuộc trò chuyện cho một nhóm khi bạn đang cộng tác.

", "LIST": { "404": "Không có nhóm nào được tạo đối với tài khoản này.", "EDIT_TEAM": "Sửa nhóm" @@ -83,7 +83,7 @@ "SELECT_ALL": "chọn tất cả đại lý", "SELECTED_COUNT": "%{selected} trên %{total} đại lý được chọn.", "BUTTON_TEXT": "Thêm các nhà cung cấp", - "AGENT_VALIDATION_ERROR": "Select at least one agent." + "AGENT_VALIDATION_ERROR": "Chọn ít nhật một tổng đài viên." }, "FINISH": { "TITLE": "Nhóm của bạn đã sẵn sàng!", diff --git a/app/javascript/dashboard/i18n/locale/vi/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/vi/whatsappTemplates.json index bbcf28156..610008b6f 100644 --- a/app/javascript/dashboard/i18n/locale/vi/whatsappTemplates.json +++ b/app/javascript/dashboard/i18n/locale/vi/whatsappTemplates.json @@ -1,25 +1,25 @@ { "WHATSAPP_TEMPLATES": { "MODAL": { - "TITLE": "Whatsapp Templates", - "SUBTITLE": "Select the whatsapp template you want to send", - "TEMPLATE_SELECTED_SUBTITLE": "Process %{templateName}" + "TITLE": "Mẫu Whatsapp", + "SUBTITLE": "Chọn mẫu whatsapp bạn muốn gửi", + "TEMPLATE_SELECTED_SUBTITLE": "Xử lý %{templateName}" }, "PICKER": { - "SEARCH_PLACEHOLDER": "Search Templates", - "NO_TEMPLATES_FOUND": "No templates found for", + "SEARCH_PLACEHOLDER": "Tìm kiếm Mẫu", + "NO_TEMPLATES_FOUND": "Không tìm thấy mẫu nào cho", "LABELS": { - "LANGUAGE": "Language", - "TEMPLATE_BODY": "Template Body", - "CATEGORY": "Category" + "LANGUAGE": "Ngôn ngữ", + "TEMPLATE_BODY": "Nội dung của Mẫu", + "CATEGORY": "Loại" } }, "PARSER": { - "VARIABLES_LABEL": "Variables", - "VARIABLE_PLACEHOLDER": "Enter %{variable} value", - "GO_BACK_LABEL": "Go Back", - "SEND_MESSAGE_LABEL": "Send Message", - "FORM_ERROR_MESSAGE": "Please fill all variables before sending" + "VARIABLES_LABEL": "Biến", + "VARIABLE_PLACEHOLDER": "Nhập giá trị %{variable}", + "GO_BACK_LABEL": "Quay lại", + "SEND_MESSAGE_LABEL": "Gửi tin nhắn", + "FORM_ERROR_MESSAGE": "Vui lòng điền vào tất cả các biến trước khi gửi" } } } diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json b/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json index 4e4bb49b0..b0a12f0a9 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/bulkActions.json @@ -3,27 +3,27 @@ "CONVERSATIONS_SELECTED": "%{conversationCount} conversations selected", "AGENT_SELECT_LABEL": "选择代理", "ASSIGN_CONFIRMATION_LABEL": "Are you sure you want to assign %{conversationCount} %{conversationLabel} to", - "GO_BACK_LABEL": "Go back", + "GO_BACK_LABEL": "返回", "ASSIGN_LABEL": "分配", - "ASSIGN_AGENT_TOOLTIP": "Assign Agent", - "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_AGENT_TOOLTIP": "分配客服代表", + "ASSIGN_SUCCESFUL": "对话分配成功", + "ASSIGN_FAILED": "无法分配对话,请重新尝试", + "RESOLVE_SUCCESFUL": "成功将对话标记为已解决", + "RESOLVE_FAILED": "解决对话失败,请重新尝试", "ALL_CONVERSATIONS_SELECTED_ALERT": "Conversations visible on this page are only selected.", "AGENT_LIST_LOADING": "Loading Agents", "UPDATE": { - "CHANGE_STATUS": "Change status", - "SNOOZE_UNTIL_NEXT_REPLY": "Snooze until next reply", - "UPDATE_SUCCESFUL": "Conversation status updated successfully.", + "CHANGE_STATUS": "改变状态", + "SNOOZE_UNTIL_NEXT_REPLY": "推迟至下一个回复", + "UPDATE_SUCCESFUL": "对话状态更新成功。", "UPDATE_FAILED": "Failed to update conversations, please try again" }, "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_LABELS": "分配标签", + "NO_LABELS_FOUND": "未找到标签", + "ASSIGN_SELECTED_LABELS": "分配指定的标签", + "ASSIGN_SUCCESFUL": "已成功分配标签", + "ASSIGN_FAILED": "无法分配标签,请重新尝试。" } } } diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json index ab5ba8bb3..8f1fd59d0 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/campaign.json @@ -3,11 +3,11 @@ "HEADER": "Campaigns", "SIDEBAR_TXT": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations. Click on Add Campaign to create a new campaign. You can also edit or delete an existing campaign by clicking on the Edit or Delete button.", "HEADER_BTN_TXT": { - "ONE_OFF": "Create a one off campaign", - "ONGOING": "Create a ongoing campaign" + "ONE_OFF": "创建一个一次性营销活动", + "ONGOING": "正在进行的营销活动" }, "ADD": { - "TITLE": "Create a campaign", + "TITLE": "创建一个营销活动", "DESC": "Proactive messages allow the customer to send outbound messages to their contacts which would trigger more conversations.", "CANCEL_BUTTON_TEXT": "取消", "CREATE_BUTTON_TEXT": "创建", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json index e8a7fc24b..32954b13d 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/contact.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "不可用", "EMAIL_ADDRESS": "电子邮件地址", "PHONE_NUMBER": "电话号码", + "IDENTIFIER": "标识符", "COPY_SUCCESSFUL": "已成功复制到剪贴板", "COMPANY": "公司", "LOCATION": "位置", @@ -106,8 +107,8 @@ "LABEL": "名字" }, "BIO": { - "PLACEHOLDER": "Enter the bio of the contact", - "LABEL": "Bio" + "PLACEHOLDER": "输入联系人的简历", + "LABEL": "简历" }, "EMAIL_ADDRESS": { "PLACEHOLDER": "输入联系人的电子邮件地址", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json index ad6d6caef..d0109926f 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "请从左侧窗格选择一个对话", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "消息", @@ -14,7 +15,7 @@ "SEARCH": { "TITLE": "搜索消息", "RESULT_TITLE": "搜索结果", - "LOADING_MESSAGE": "Crunching data...", + "LOADING_MESSAGE": "正在处理数据", "PLACEHOLDER": "输入任何文本来搜索消息", "NO_MATCHING_RESULTS": "未找到结果。" }, @@ -47,14 +48,14 @@ "OPEN": "详细信息", "CLOSE": "关闭", "DETAILS": "详情", - "SNOOZED_UNTIL_TOMORROW": "Snoozed until tomorrow", - "SNOOZED_UNTIL_NEXT_WEEK": "Snoozed until next week", + "SNOOZED_UNTIL_TOMORROW": "推迟到明天", + "SNOOZED_UNTIL_NEXT_WEEK": "推迟到下周", "SNOOZED_UNTIL_NEXT_REPLY": "Snoozed until next reply" }, "RESOLVE_DROPDOWN": { "MARK_PENDING": "标记为待处理", "SNOOZE": { - "TITLE": "Snooze until", + "TITLE": "推迟到", "NEXT_REPLY": "下一个回复", "TOMORROW": "明天", "NEXT_WEEK": "下周" @@ -65,7 +66,7 @@ "RESOLVED": "标记为已解决", "REOPEN": "重新打开会话", "SNOOZE": { - "TITLE": "Snooze", + "TITLE": "推迟", "NEXT_REPLY": "Until next reply", "TOMORROW": "Until tomorrow", "NEXT_WEEK": "Until next week" @@ -77,11 +78,11 @@ "API": { "AGENT_ASSIGNMENT": { "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "FAILED": "无法分配客服,请再试。" }, "LABEL_ASSIGNMENT": { "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "FAILED": "无法分配标签。请再试。" }, "TEAM_ASSIGNMENT": { "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "已成功分配标签", "ASSIGN_LABEL_FAILED": "分配标签失败", "CHANGE_TEAM": "对话团队已更改", - "FILE_SIZE_LIMIT": "文件超过大小 {MAXIMUM_FILE_UPLOAD_SIZE} 附件限制", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "无法发送此消息,请稍后再试", "SENT_BY": "发送人:", "BOT": "机器人", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json b/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json index b9140cde7..3059dec73 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/generalSettings.json @@ -62,10 +62,10 @@ "MARK_ALL_DONE": "标记全部完成", "DELETE_TITLE": "已删除", "UNREAD_NOTIFICATION": { - "TITLE": "Unread Notifications", + "TITLE": "未读通知", "ALL_NOTIFICATIONS": "查看所有通知", - "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", - "EMPTY_MESSAGE": "You have no unread notifications" + "LOADING_UNREAD_MESSAGE": "正在加载未读通知...", + "EMPTY_MESSAGE": "您没有未读通知" }, "LIST": { "LOADING_MESSAGE": "正在加载通知...", @@ -79,8 +79,8 @@ }, "TYPE_LABEL": { "conversation_creation": "新建对话", - "conversation_assignment": "Conversation Assigned", - "assigned_conversation_new_message": "New Message", + "conversation_assignment": "对话已分配", + "assigned_conversation_new_message": "新消息", "conversation_mention": "提及" } }, @@ -95,7 +95,7 @@ "COMMAND_BAR": { "SEARCH_PLACEHOLDER": "搜索或跳转到", "SECTIONS": { - "GENERAL": "General", + "GENERAL": "一般", "REPORTS": "报告", "CONVERSATION": "会话", "CHANGE_ASSIGNEE": "更改分配", @@ -107,16 +107,16 @@ "COMMANDS": { "GO_TO_CONVERSATION_DASHBOARD": "转到对话面板", "GO_TO_CONTACTS_DASHBOARD": "转到联系人面板", - "GO_TO_REPORTS_OVERVIEW": "Go to Reports Overview", - "GO_TO_CONVERSATION_REPORTS": "Go to Conversation Reports", - "GO_TO_AGENT_REPORTS": "Go to Agent Reports", - "GO_TO_LABEL_REPORTS": "Go to Label Reports", - "GO_TO_INBOX_REPORTS": "Go to Inbox Reports", - "GO_TO_TEAM_REPORTS": "Go to Team Reports", - "GO_TO_SETTINGS_AGENTS": "Go to Agent Settings", - "GO_TO_SETTINGS_TEAMS": "Go to Team Settings", - "GO_TO_SETTINGS_INBOXES": "Go to Inbox Settings", - "GO_TO_SETTINGS_LABELS": "Go to Label Settings", + "GO_TO_REPORTS_OVERVIEW": "前往报告概览", + "GO_TO_CONVERSATION_REPORTS": "前往对话报告", + "GO_TO_AGENT_REPORTS": "前往客服代理报告", + "GO_TO_LABEL_REPORTS": "前往标签报告", + "GO_TO_INBOX_REPORTS": "前往收件箱报告", + "GO_TO_TEAM_REPORTS": "前往团队报告", + "GO_TO_SETTINGS_AGENTS": "前往客服代理设置", + "GO_TO_SETTINGS_TEAMS": "前往团队设置", + "GO_TO_SETTINGS_INBOXES": "前往收件箱设置", + "GO_TO_SETTINGS_LABELS": "前往标签设置", "GO_TO_SETTINGS_CANNED_RESPONSES": "Go to Canned Response Settings", "GO_TO_SETTINGS_APPLICATIONS": "Go to Application Settings", "GO_TO_SETTINGS_ACCOUNT": "Go to Account Settings", diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json index a756f9c23..30cb60410 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/helpCenter.json @@ -1,10 +1,10 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "过滤条件", + "SORT": "排序方式", "SETTINGS_BUTTON": "设置", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "新建文章", "DROPDOWN_OPTIONS": { "PUBLISHED": "已发布", "DRAFT": "草稿", @@ -13,67 +13,69 @@ "TITLES": { "ALL_ARTICLES": "所有文章", "MINE": "我的文章", - "DRAFT": "Draft Articles", + "DRAFT": "文章草稿", "ARCHIVED": "已存档的文章" } }, "EDIT_HEADER": { "ALL_ARTICLES": "所有文章", - "PUBLISH_BUTTON": "Publish", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "PUBLISH_BUTTON": "发布", + "MOVE_TO_ARCHIVE_BUTTON": "移至已存档", + "PREVIEW": "预览", + "ADD_TRANSLATION": "添加翻译", + "OPEN_SIDEBAR": "打开侧边栏", + "CLOSE_SIDEBAR": "关闭侧边栏", + "SAVING": "保存中...", + "SAVED": "保存成功" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "文章设置", "FORM": { "CATEGORY": { "LABEL": "类别", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "TITLE": "选择类别", + "PLACEHOLDER": "选择类别", + "NO_RESULT": "未找到类别", + "SEARCH_PLACEHOLDER": "搜索类别" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "作者", + "TITLE": "选择作者", + "PLACEHOLDER": "选择作者", + "NO_RESULT": "未找到作者", + "SEARCH_PLACEHOLDER": "搜索作者" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Meta 标题", + "PLACEHOLDER": "增加一个Meta标题" }, "META_DESCRIPTION": { - "LABEL": "Meta description", + "LABEL": "Meta描述", "PLACEHOLDER": "Add your meta description for better SEO results..." }, "META_TAGS": { - "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "LABEL": "Meta标签", + "PLACEHOLDER": "增加Meta标签,以逗号分隔" } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "归档文章", + "DELETE": "删除文章" } }, "PORTAL": { "HEADER": "门户网站", + "DEFAULT": "默认", "NEW_BUTTON": "新门户网站", "ACTIVE_BADGE": "活跃", "CHOOSE_LOCALE_LABEL": "选择一个语言环境", - "LOADING_MESSAGE": "Loading portals...", + "LOADING_MESSAGE": "正在加载门户...", "ARTICLES_LABEL": "文章", "NO_PORTALS_MESSAGE": "There are no available portals", "ADD_NEW_LOCALE": "添加一个新的语言环境", "POPOVER": { "TITLE": "门户网站", - "PORTAL_SETTINGS": "Portal settings", + "PORTAL_SETTINGS": "门户设置", "SUBTITLE": "您有多个门户网站,每个门户网站可以有不同的语言环境。", "CANCEL_BUTTON_LABEL": "取消", "CHOOSE_LOCALE_BUTTON": "选择语言" @@ -84,7 +86,8 @@ "COUNT_LABEL": "文章", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "设置" + "SETTINGS": "设置", + "DELETE": "删除" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "姓名:", + "DESCRIPTION": "描述信息", + "LOCALE": "语言环境", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "添加一个新的语言环境", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "门户网站", + "LOCALE": { + "LABEL": "语言环境", + "PLACEHOLDER": "选择一个语言环境", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "取消" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "确认删除", + "MESSAGE": "Are you sure to delete the article?", + "YES": "是,删除", + "NO": "否,保留它" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -247,7 +352,7 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Category slug for urls", - "HELP_TEXT": "app.chatwoot.com/hc/my-portal/zh-CN/categories/my-slug", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", "ERROR": "Slug is required" }, "DESCRIPTION": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "门户网站", + "LOCALE": "语言环境", + "NAME": { + "LABEL": "姓名:", + "PLACEHOLDER": "类别名称", + "HELP_TEXT": "类别名称将用于公共门户来对文章进行归类。", + "ERROR": "名字必填" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "描述信息", + "PLACEHOLDER": "给出有关该类别的简短描述。", + "ERROR": "描述是必需的" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "取消" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json index b699160a8..ba663bba7 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/inboxMgmt.json @@ -187,18 +187,18 @@ "PLACEHOLDER": "请输入发送消息的电话号码。", "ERROR": "请输入一个有效的值。电话号码应该以`+`开始。" }, - "SUBMIT_BUTTON": "Create Bandwidth Channel", + "SUBMIT_BUTTON": "创建Bandwidth渠道", "API": { - "ERROR_MESSAGE": "We were not able to authenticate Bandwidth credentials, please try again" + "ERROR_MESSAGE": "我们无法身份验证Bandwidth凭据,请重试" }, "API_CALLBACK": { "TITLE": "回调地址", - "SUBTITLE": "You have to configure the message callback URL in Bandwidth with the URL mentioned here." + "SUBTITLE": "您必须使用这里提到的URL来配置Bandwidth的消息回调URL。" } } }, "WHATSAPP": { - "TITLE": "WhatsApp Channel", + "TITLE": "WhatsApp 渠道", "DESC": "Start supporting your customers via WhatsApp.", "PROVIDERS": { "LABEL": "API Provider", @@ -622,7 +622,7 @@ } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", + "PREVIEW": "预览", "SCRIPT": "Script" }, "WIDGET_BUBBLE_POSITION": { diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json index 8f60babe7..60ffae59b 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/settings.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/settings.json @@ -197,11 +197,12 @@ "REPORTS_OVERVIEW": "Overview", "FACEBOOK_REAUTHORIZE": "您的 Facebook 连接已过期,请重新连接您的 Facebook 页面以继续服务", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", "ARCHIVED": "Archived", - "CATEGORY": "Category", + "CATEGORY": "类别", "CATEGORY_EMPTY_MESSAGE": "No categories found" }, "DOCS": "Read docs" @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "Go to Settings", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/dashboard/i18n/locale/zh_CN/whatsappTemplates.json b/app/javascript/dashboard/i18n/locale/zh_CN/whatsappTemplates.json index bbcf28156..c9f53dfee 100644 --- a/app/javascript/dashboard/i18n/locale/zh_CN/whatsappTemplates.json +++ b/app/javascript/dashboard/i18n/locale/zh_CN/whatsappTemplates.json @@ -11,14 +11,14 @@ "LABELS": { "LANGUAGE": "Language", "TEMPLATE_BODY": "Template Body", - "CATEGORY": "Category" + "CATEGORY": "类别" } }, "PARSER": { - "VARIABLES_LABEL": "Variables", + "VARIABLES_LABEL": "参数", "VARIABLE_PLACEHOLDER": "Enter %{variable} value", - "GO_BACK_LABEL": "Go Back", - "SEND_MESSAGE_LABEL": "Send Message", + "GO_BACK_LABEL": "返回", + "SEND_MESSAGE_LABEL": "发送消息", "FORM_ERROR_MESSAGE": "Please fill all variables before sending" } } diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/advancedFilters.json b/app/javascript/dashboard/i18n/locale/zh_TW/advancedFilters.json index 29c4b4c7c..10e4ee44a 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/advancedFilters.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/advancedFilters.json @@ -1,6 +1,6 @@ { "FILTER": { - "TITLE": "Filter Conversations", + "TITLE": "篩選對話", "SUBTITLE": "Add filters below and hit 'Apply filters' to filter conversations.", "ADD_NEW_FILTER": "Add Filter", "FILTER_DELETE_ERROR": "You should have atleast one filter to save", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json index 77fde0391..a8da4bd62 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/contact.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/contact.json @@ -3,6 +3,7 @@ "NOT_AVAILABLE": "無法使用", "EMAIL_ADDRESS": "電子信箱地址", "PHONE_NUMBER": "電話號碼", + "IDENTIFIER": "Identifier", "COPY_SUCCESSFUL": "成功複製到剪貼簿", "COMPANY": "公司", "LOCATION": "位置", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json index 6bd1a6de1..bda304989 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/conversation.json @@ -1,6 +1,7 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "請從左側窗格選擇一個對話", + "CSAT_REPLY_MESSAGE": "Please rate the conversation", "404": "Sorry, we cannot find the conversation. Please try again", "SWITCH_VIEW_LAYOUT": "Switch the layout", "DASHBOARD_APP_TAB_MESSAGES": "訊息", @@ -137,7 +138,7 @@ "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", "ASSIGN_LABEL_FAILED": "Label assignment failed", "CHANGE_TEAM": "Conversation team changed", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "Unable to send this message, please try again later", "SENT_BY": "寄送者:", "BOT": "機器人", diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json index 183a710c5..6655bccd8 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/helpCenter.json @@ -20,6 +20,7 @@ "EDIT_HEADER": { "ALL_ARTICLES": "All Articles", "PUBLISH_BUTTON": "Publish", + "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", "PREVIEW": "Preview", "ADD_TRANSLATION": "Add translation", "OPEN_SIDEBAR": "Open sidebar", @@ -64,6 +65,7 @@ }, "PORTAL": { "HEADER": "Portals", + "DEFAULT": "Default", "NEW_BUTTON": "New Portal", "ACTIVE_BADGE": "active", "CHOOSE_LOCALE_LABEL": "Choose a locale", @@ -84,7 +86,8 @@ "COUNT_LABEL": "articles", "ADD": "Add locale", "VISIT": "Visit site", - "SETTINGS": "設定" + "SETTINGS": "設定", + "DELETE": "刪除" }, "PORTAL_CONFIG": { "TITLE": "Portal Configurations", @@ -109,6 +112,51 @@ "DEFAULT_LOCALE": "Default" } } + }, + "DELETE_PORTAL": { + "TITLE": "Delete portal", + "MESSAGE": "Are you sure you want to delete this portal", + "YES": "Yes, delete portal", + "NO": "No, keep portal", + "API": { + "DELETE_SUCCESS": "Portal deleted successfully", + "DELETE_ERROR": "Error while deleting portal" + } + } + }, + "EDIT": { + "HEADER_TEXT": "Edit portal", + "TABS": { + "BASIC_SETTINGS": { + "TITLE": "Basic information" + }, + "CUSTOMIZATION_SETTINGS": { + "TITLE": "Portal customization" + }, + "CATEGORY_SETTINGS": { + "TITLE": "Categories" + }, + "LOCALE_SETTINGS": { + "TITLE": "Locales" + } + }, + "CATEGORIES": { + "TITLE": "Categories in", + "NEW_CATEGORY": "New category", + "TABLE": { + "NAME": "姓名", + "DESCRIPTION": "描述資訊", + "LOCALE": "Locale", + "ARTICLE_COUNT": "No. of articles", + "ACTION_BUTTON": { + "EDIT": "Edit category", + "DELETE": "Delete category" + }, + "EMPTY_TEXT": "No categories found" + } + }, + "EDIT_BASIC_INFO": { + "BUTTON_TEXT": "Update basic settings" } }, "ADD": { @@ -164,7 +212,6 @@ "SLUG": { "LABEL": "Slug", "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" }, "DOMAIN": { @@ -196,9 +243,41 @@ "ERROR": "Portal header text is required" }, "API": { + "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." } + }, + "ADD_LOCALE": { + "TITLE": "Add a new locale", + "SUB_TITLE": "This adds a new locale to your available translation list.", + "PORTAL": "Portal", + "LOCALE": { + "LABEL": "Locale", + "PLACEHOLDER": "Choose a locale", + "ERROR": "Locale is required" + }, + "BUTTONS": { + "CREATE": "Create locale", + "CANCEL": "取消" + }, + "API": { + "SUCCESS_MESSAGE": "Locale added successfully", + "ERROR_MESSAGE": "Unable to add locale. Try again." + } + }, + "CHANGE_DEFAULT_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Default locale updated successfully", + "ERROR_MESSAGE": "Unable to update default locale. Try again." + } + }, + "DELETE_LOCALE": { + "API": { + "SUCCESS_MESSAGE": "Locale removed from portal successfully", + "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + } } }, "TABLE": { @@ -224,8 +303,34 @@ "ERROR": "Error while saving article" } }, + "PUBLISH_ARTICLE": { + "API": { + "ERROR": "Error while publishing article", + "SUCCESS": "Article publishied successfully" + } + }, + "ARCHIVE_ARTICLE": { + "API": { + "ERROR": "Error while archiving article", + "SUCCESS": "Article archived successfully" + } + }, + "DELETE_ARTICLE": { + "MODAL": { + "CONFIRM": { + "TITLE": "確認刪除", + "MESSAGE": "Are you sure to delete the article?", + "YES": "是,刪除", + "NO": "否,保留它" + } + }, + "API": { + "SUCCESS_MESSAGE": "Article deleted successfully", + "ERROR_MESSAGE": "Error while deleting article" + } + }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Something went wrong. Please try again." + "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" }, "SIDEBAR": { "SEARCH": { @@ -263,6 +368,43 @@ "SUCCESS_MESSAGE": "Category created successfully", "ERROR_MESSAGE": "Unable to create category" } + }, + "EDIT": { + "TITLE": "Edit a category", + "SUB_TITLE": "Editing a category will update the category in the public facing portal.", + "PORTAL": "Portal", + "LOCALE": "Locale", + "NAME": { + "LABEL": "姓名", + "PLACEHOLDER": "Category name", + "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "ERROR": "名稱為必填" + }, + "SLUG": { + "LABEL": "Slug", + "PLACEHOLDER": "Category slug for urls", + "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", + "ERROR": "Slug is required" + }, + "DESCRIPTION": { + "LABEL": "描述資訊", + "PLACEHOLDER": "Give a short description about the category.", + "ERROR": "描述為必填" + }, + "BUTTONS": { + "CREATE": "Update category", + "CANCEL": "取消" + }, + "API": { + "SUCCESS_MESSAGE": "Category updated successfully", + "ERROR_MESSAGE": "Unable to update category" + } + }, + "DELETE": { + "API": { + "SUCCESS_MESSAGE": "Category deleted successfully", + "ERROR_MESSAGE": "Unable to delete category" + } } } } diff --git a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json index c2ed00a30..c1949fc64 100644 --- a/app/javascript/dashboard/i18n/locale/zh_TW/settings.json +++ b/app/javascript/dashboard/i18n/locale/zh_TW/settings.json @@ -197,6 +197,7 @@ "REPORTS_OVERVIEW": "總覽", "FACEBOOK_REAUTHORIZE": "Your Facebook connection has expired, please reconnect your Facebook page to continue services", "HELP_CENTER": { + "TITLE": "Help Center (Beta)", "ALL_ARTICLES": "All Articles", "MY_ARTICLES": "My Articles", "DRAFT": "Draft", @@ -256,7 +257,6 @@ "GO_TO_SETTINGS": "前往設定", "SWITCH_CONVERSATION_STATUS": "Switch to the next conversation status", "SWITCH_TO_PRIVATE_NOTE": "Switch to Private Note", - "TOGGLE_RICH_CONTENT_EDITOR": "Toggle Rich Content editor", "SWITCH_TO_REPLY": "Switch to Reply", "TOGGLE_SNOOZE_DROPDOWN": "Toggle snooze dropdown" }, diff --git a/app/javascript/survey/i18n/locale/da.json b/app/javascript/survey/i18n/locale/da.json index 2f58c5523..46893ad45 100644 --- a/app/javascript/survey/i18n/locale/da.json +++ b/app/javascript/survey/i18n/locale/da.json @@ -1,17 +1,17 @@ { "SURVEY": { - "DESCRIPTION": "Dear customer 👋, please take a few moments to share feedback about the conversation you had with %{inboxName}.", + "DESCRIPTION": "Kære kunde 👋, tag et øjeblik på at dele feedback om den samtale, du havde med %{inboxName}.", "RATING": { "LABEL": "Bedøm din samtale", "SUCCESS_MESSAGE": "Tak for din bedømmelse" }, "FEEDBACK": { - "LABEL": "Do you have any thoughts you'd like to share?", - "PLACEHOLDER": "Your feedback (optional)", - "BUTTON_TEXT": "Submit feedback" + "LABEL": "Har du nogen tanker, du gerne vil dele?", + "PLACEHOLDER": "Din feedback (valgfri)", + "BUTTON_TEXT": "Indsend feedback" }, "API": { - "SUCCESS_MESSAGE": "Survey updated successfully", + "SUCCESS_MESSAGE": "Undersøgelse opdateret", "ERROR_MESSAGE": "Kunne ikke oprette forbindelse til Woot Server, Prøv igen senere" } }, diff --git a/app/javascript/survey/i18n/locale/lt.json b/app/javascript/survey/i18n/locale/lt.json new file mode 100644 index 000000000..2473f114e --- /dev/null +++ b/app/javascript/survey/i18n/locale/lt.json @@ -0,0 +1,19 @@ +{ + "SURVEY": { + "DESCRIPTION": "Dear customer 👋, please take a few moments to share feedback about the conversation you had with %{inboxName}.", + "RATING": { + "LABEL": "Rate your conversation", + "SUCCESS_MESSAGE": "Thank you for submitting the rating" + }, + "FEEDBACK": { + "LABEL": "Do you have any thoughts you'd like to share?", + "PLACEHOLDER": "Your feedback (optional)", + "BUTTON_TEXT": "Submit feedback" + }, + "API": { + "SUCCESS_MESSAGE": "Survey updated successfully", + "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + } + }, + "POWERED_BY": "Powered by Chatwoot" +} diff --git a/app/javascript/survey/i18n/locale/lv.json b/app/javascript/survey/i18n/locale/lv.json index 2473f114e..4902a3d33 100644 --- a/app/javascript/survey/i18n/locale/lv.json +++ b/app/javascript/survey/i18n/locale/lv.json @@ -1,19 +1,19 @@ { "SURVEY": { - "DESCRIPTION": "Dear customer 👋, please take a few moments to share feedback about the conversation you had with %{inboxName}.", + "DESCRIPTION": "Cienījamais klient 👋, lūdzu, veltiet savu laiku, lai sniegtu atsauksmes par sarunu, kas Jums bija ar %{inboxName}.", "RATING": { - "LABEL": "Rate your conversation", - "SUCCESS_MESSAGE": "Thank you for submitting the rating" + "LABEL": "Novērtējiet savu sarunu", + "SUCCESS_MESSAGE": "Paldies, ka iesniedzāt vērtējumu" }, "FEEDBACK": { - "LABEL": "Do you have any thoughts you'd like to share?", - "PLACEHOLDER": "Your feedback (optional)", - "BUTTON_TEXT": "Submit feedback" + "LABEL": "Vai jums ir kādas domas, ar kurām vēlaties dalīties?", + "PLACEHOLDER": "Jūsu atsauksmes (izvēles kārtībā)", + "BUTTON_TEXT": "Iesniedziet atsauksmes" }, "API": { - "SUCCESS_MESSAGE": "Survey updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "SUCCESS_MESSAGE": "Aptauja ir veiksmīgi atjaunināta", + "ERROR_MESSAGE": "Nevar izveidot savienojumu ar Woot serveri. Lūdzu, vēlāk pamēģiniet vēlreiz" } }, - "POWERED_BY": "Powered by Chatwoot" + "POWERED_BY": "Darbināts ar Chatwoot" } diff --git a/app/javascript/survey/i18n/locale/ms.json b/app/javascript/survey/i18n/locale/ms.json index 2473f114e..31be29315 100644 --- a/app/javascript/survey/i18n/locale/ms.json +++ b/app/javascript/survey/i18n/locale/ms.json @@ -12,7 +12,7 @@ }, "API": { "SUCCESS_MESSAGE": "Survey updated successfully", - "ERROR_MESSAGE": "Could not connect to Woot Server, Please try again later" + "ERROR_MESSAGE": "Masalah untuk hubungi Woot Server, Sila cuba sebentar lagi" } }, "POWERED_BY": "Powered by Chatwoot" diff --git a/app/javascript/survey/i18n/locale/vi.json b/app/javascript/survey/i18n/locale/vi.json index e9bb9def9..7c5be268c 100644 --- a/app/javascript/survey/i18n/locale/vi.json +++ b/app/javascript/survey/i18n/locale/vi.json @@ -1,17 +1,17 @@ { "SURVEY": { - "DESCRIPTION": "Dear customer 👋, please take a few moments to share feedback about the conversation you had with %{inboxName}.", + "DESCRIPTION": "Quý khách \u001dk\u001dính \u001dmếm 👋, vui lòng dành một chút thời gian để chia sẻ phản hồi về hội thoại mà bạn đã có với %{inboxName}.", "RATING": { "LABEL": "Đánh giá cuộc trò chuyện", "SUCCESS_MESSAGE": "Cảm ơn vì đã đánh giá" }, "FEEDBACK": { - "LABEL": "Do you have any thoughts you'd like to share?", - "PLACEHOLDER": "Your feedback (optional)", - "BUTTON_TEXT": "Submit feedback" + "LABEL": "Bạn có bất kỳ cảm nhận nào muốn chia sẻ không?", + "PLACEHOLDER": "Phản hồi của bạn (tuỳ ý)", + "BUTTON_TEXT": "Gửi phản hồi" }, "API": { - "SUCCESS_MESSAGE": "Survey updated successfully", + "SUCCESS_MESSAGE": "Đã cập nhật khảo sát thành công", "ERROR_MESSAGE": "Không thể kết nối với Máy chủ Woot, Vui lòng thử lại sau" } }, diff --git a/app/javascript/widget/i18n/locale/da.json b/app/javascript/widget/i18n/locale/da.json index 03e6c1cb3..0fe256800 100644 --- a/app/javascript/widget/i18n/locale/da.json +++ b/app/javascript/widget/i18n/locale/da.json @@ -8,8 +8,8 @@ "SUBMIT": "Send" }, "MESSAGE_BUBBLE": { - "RETRY": "Send message again", - "ERROR_MESSAGE": "Couldn't send, try again" + "RETRY": "Send besked igen", + "ERROR_MESSAGE": "Kunne ikke sende, prøv igen" } }, "TEAM_AVAILABILITY": { @@ -22,8 +22,8 @@ "IN_A_DAY": "Svarer typisk på en dag" }, "START_CONVERSATION": "Start Samtale", - "END_CONVERSATION": "End Conversation", - "CONTINUE_CONVERSATION": "Continue conversation", + "END_CONVERSATION": "Afslut Samtale", + "CONTINUE_CONVERSATION": "Fortsæt samtale", "START_NEW_CONVERSATION": "Start en ny samtale", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Se nye beskeder", @@ -49,14 +49,14 @@ "EMAIL_ADDRESS": { "LABEL": "E-Mail Adresse", "PLACEHOLDER": "Indtast venligst din e-mail adresse", - "REQUIRED_ERROR": "Email Address is required", + "REQUIRED_ERROR": "E-mail adresse er påkrævet", "VALID_ERROR": "Indtast venligst en gyldig e-mailadresse" }, "PHONE_NUMBER": { "LABEL": "Telefonnummer", - "PLACEHOLDER": "Please enter your phone number", - "REQUIRED_ERROR": "Phone Number is required", - "VALID_ERROR": "Phone number should be of E.164 format eg: +1415555555" + "PLACEHOLDER": "Indtast venligst dit telefonnummer", + "REQUIRED_ERROR": "Telefonnummer er påkrævet", + "VALID_ERROR": "Telefonnummer skal være i E.164 format fx: +1415555555" }, "MESSAGE": { "LABEL": "Besked", @@ -64,8 +64,8 @@ "ERROR": "Beskeden er for kort" } }, - "CAMPAIGN_HEADER": "Please provide your name and email before starting the conversation", - "IS_REQUIRED": "is required" + "CAMPAIGN_HEADER": "Angiv venligst dit navn og e-mail, før du starter samtalen", + "IS_REQUIRED": "er påkrævet" }, "FILE_SIZE_LIMIT": "Filen overskrider grænsen på {MAXIMUM_FILE_UPLOAD_SIZE} for vedhæftede filer", "CHAT_FORM": { diff --git a/app/javascript/widget/i18n/locale/fi.json b/app/javascript/widget/i18n/locale/fi.json index 75b325881..54363198e 100644 --- a/app/javascript/widget/i18n/locale/fi.json +++ b/app/javascript/widget/i18n/locale/fi.json @@ -14,7 +14,7 @@ }, "TEAM_AVAILABILITY": { "ONLINE": "Olemme online-tilassa", - "OFFLINE": "We are away at the moment" + "OFFLINE": "Olemme tällä hetkellä poissa" }, "REPLY_TIME": { "IN_A_FEW_MINUTES": "Vastaa tyypillisesti muutamassa minuutissa", diff --git a/app/javascript/widget/i18n/locale/lt.json b/app/javascript/widget/i18n/locale/lt.json new file mode 100644 index 000000000..ef4149191 --- /dev/null +++ b/app/javascript/widget/i18n/locale/lt.json @@ -0,0 +1,86 @@ +{ + "COMPONENTS": { + "FILE_BUBBLE": { + "DOWNLOAD": "Download", + "UPLOADING": "Uploading..." + }, + "FORM_BUBBLE": { + "SUBMIT": "Submit" + }, + "MESSAGE_BUBBLE": { + "RETRY": "Send message again", + "ERROR_MESSAGE": "Couldn't send, try again" + } + }, + "TEAM_AVAILABILITY": { + "ONLINE": "We are online", + "OFFLINE": "We are away at the moment" + }, + "REPLY_TIME": { + "IN_A_FEW_MINUTES": "Typically replies in a few minutes", + "IN_A_FEW_HOURS": "Typically replies in a few hours", + "IN_A_DAY": "Typically replies in a day" + }, + "START_CONVERSATION": "Start Conversation", + "END_CONVERSATION": "End Conversation", + "CONTINUE_CONVERSATION": "Continue conversation", + "START_NEW_CONVERSATION": "Start a new conversation", + "UNREAD_VIEW": { + "VIEW_MESSAGES_BUTTON": "See new messages", + "CLOSE_MESSAGES_BUTTON": "Close", + "COMPANY_FROM": "from", + "BOT": "Bot" + }, + "BUBBLE": { + "LABEL": "Chat with us" + }, + "POWERED_BY": "Powered by Chatwoot", + "EMAIL_PLACEHOLDER": "Please enter your email", + "CHAT_PLACEHOLDER": "Type your message", + "TODAY": "Today", + "YESTERDAY": "Yesterday", + "PRE_CHAT_FORM": { + "FIELDS": { + "FULL_NAME": { + "LABEL": "Full Name", + "PLACEHOLDER": "Please enter your full name", + "REQUIRED_ERROR": "Full Name is required" + }, + "EMAIL_ADDRESS": { + "LABEL": "Email Address", + "PLACEHOLDER": "Please enter your email address", + "REQUIRED_ERROR": "Email Address is required", + "VALID_ERROR": "Please enter a valid email address" + }, + "PHONE_NUMBER": { + "LABEL": "Phone Number", + "PLACEHOLDER": "Please enter your phone number", + "REQUIRED_ERROR": "Phone Number is required", + "VALID_ERROR": "Phone number should be of E.164 format eg: +1415555555" + }, + "MESSAGE": { + "LABEL": "Message", + "PLACEHOLDER": "Please enter your message", + "ERROR": "Message too short" + } + }, + "CAMPAIGN_HEADER": "Please provide your name and email before starting the conversation", + "IS_REQUIRED": "is required" + }, + "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "CHAT_FORM": { + "INVALID": { + "FIELD": "Invalid field" + } + }, + "CSAT": { + "TITLE": "Rate your conversation", + "SUBMITTED_TITLE": "Thank you for submitting the rating", + "PLACEHOLDER": "Tell us more..." + }, + "EMAIL_TRANSCRIPT": { + "BUTTON_TEXT": "Request a conversation transcript", + "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", + "SEND_EMAIL_ERROR": "There was an error, please try again" + } +} diff --git a/app/javascript/widget/i18n/locale/lv.json b/app/javascript/widget/i18n/locale/lv.json index ef4149191..42ad3db8e 100644 --- a/app/javascript/widget/i18n/locale/lv.json +++ b/app/javascript/widget/i18n/locale/lv.json @@ -1,86 +1,86 @@ { "COMPONENTS": { "FILE_BUBBLE": { - "DOWNLOAD": "Download", - "UPLOADING": "Uploading..." + "DOWNLOAD": "Lejupielādēt", + "UPLOADING": "Notiek Augšupielāde..." }, "FORM_BUBBLE": { - "SUBMIT": "Submit" + "SUBMIT": "Iesniegt" }, "MESSAGE_BUBBLE": { - "RETRY": "Send message again", - "ERROR_MESSAGE": "Couldn't send, try again" + "RETRY": "Sūtīt ziņojumu vēlreiz", + "ERROR_MESSAGE": "Nevarēja nosūtīt. Lūdzu, mēģiniet vēlreiz" } }, "TEAM_AVAILABILITY": { - "ONLINE": "We are online", - "OFFLINE": "We are away at the moment" + "ONLINE": "Mēs esam tiešsaistē", + "OFFLINE": "Šobrīd mēs neesam uz vietas" }, "REPLY_TIME": { - "IN_A_FEW_MINUTES": "Typically replies in a few minutes", - "IN_A_FEW_HOURS": "Typically replies in a few hours", - "IN_A_DAY": "Typically replies in a day" + "IN_A_FEW_MINUTES": "Parasti atbild pēc dažām minūtēm", + "IN_A_FEW_HOURS": "Parasti atbild pēc dažām stundām", + "IN_A_DAY": "Parasti atbild vienas dienas laikā" }, - "START_CONVERSATION": "Start Conversation", - "END_CONVERSATION": "End Conversation", - "CONTINUE_CONVERSATION": "Continue conversation", - "START_NEW_CONVERSATION": "Start a new conversation", + "START_CONVERSATION": "Sākt Sarunu", + "END_CONVERSATION": "Beigt Sarunu", + "CONTINUE_CONVERSATION": "Turpināt Sarunu", + "START_NEW_CONVERSATION": "Sākt jaunu sarunu", "UNREAD_VIEW": { - "VIEW_MESSAGES_BUTTON": "See new messages", - "CLOSE_MESSAGES_BUTTON": "Close", - "COMPANY_FROM": "from", + "VIEW_MESSAGES_BUTTON": "Skatīt jaunus ziņojumus", + "CLOSE_MESSAGES_BUTTON": "Aizvērt", + "COMPANY_FROM": "no", "BOT": "Bot" }, "BUBBLE": { - "LABEL": "Chat with us" + "LABEL": "Tērzēt ar mums" }, - "POWERED_BY": "Powered by Chatwoot", - "EMAIL_PLACEHOLDER": "Please enter your email", - "CHAT_PLACEHOLDER": "Type your message", - "TODAY": "Today", - "YESTERDAY": "Yesterday", + "POWERED_BY": "Darbināts ar Chatwoot", + "EMAIL_PLACEHOLDER": "Lūdzu, ievadiet savu e-pastu", + "CHAT_PLACEHOLDER": "Rakstiet savu ziņojumu", + "TODAY": "Šodien", + "YESTERDAY": "Vakar", "PRE_CHAT_FORM": { "FIELDS": { "FULL_NAME": { - "LABEL": "Full Name", - "PLACEHOLDER": "Please enter your full name", - "REQUIRED_ERROR": "Full Name is required" + "LABEL": "Pilns Vārds", + "PLACEHOLDER": "Lūdzu, ievadiet savu pilno vārdu", + "REQUIRED_ERROR": "Nepieciešams pilns vārds" }, "EMAIL_ADDRESS": { - "LABEL": "Email Address", - "PLACEHOLDER": "Please enter your email address", - "REQUIRED_ERROR": "Email Address is required", - "VALID_ERROR": "Please enter a valid email address" + "LABEL": "e-pasta Adrese", + "PLACEHOLDER": "Lūdzu ievadiet savu e-pasta adresi", + "REQUIRED_ERROR": "Nepieciešama e -pasta adrese", + "VALID_ERROR": "Lūdzu, ievadiet derīgu e-pasta adresi" }, "PHONE_NUMBER": { - "LABEL": "Phone Number", - "PLACEHOLDER": "Please enter your phone number", - "REQUIRED_ERROR": "Phone Number is required", - "VALID_ERROR": "Phone number should be of E.164 format eg: +1415555555" + "LABEL": "Telefona numurs", + "PLACEHOLDER": "Lūdzu, ievadiet savu tālruņa numuru", + "REQUIRED_ERROR": "Nepieciešams tālruņa numurs", + "VALID_ERROR": "Tālruņa numuram ir jābūt E.164 formātā, piemēram: +37155555555" }, "MESSAGE": { - "LABEL": "Message", - "PLACEHOLDER": "Please enter your message", - "ERROR": "Message too short" + "LABEL": "Ziņojums", + "PLACEHOLDER": "Lūdzu, ievadiet savu ziņojumu", + "ERROR": "Ziņojums ir pārāk īss" } }, - "CAMPAIGN_HEADER": "Please provide your name and email before starting the conversation", - "IS_REQUIRED": "is required" + "CAMPAIGN_HEADER": "Lūdzu, pirms sarunas sākšanas, norādiet savu vārdu un e -pastu", + "IS_REQUIRED": "ir nepieciešams" }, - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_FILE_UPLOAD_SIZE} attachment limit", + "FILE_SIZE_LIMIT": "Fails pārsniedz {MAXIMUM_FILE_UPLOAD_SIZE} pielikuma lieluma ierobežojumu", "CHAT_FORM": { "INVALID": { - "FIELD": "Invalid field" + "FIELD": "Nederīgs lauks" } }, "CSAT": { - "TITLE": "Rate your conversation", - "SUBMITTED_TITLE": "Thank you for submitting the rating", - "PLACEHOLDER": "Tell us more..." + "TITLE": "Novērtējiet Jūsu sarunu", + "SUBMITTED_TITLE": "Paldies, ka iesniedzāt novērtējumu", + "PLACEHOLDER": "Pastāsti mums vairāk..." }, "EMAIL_TRANSCRIPT": { - "BUTTON_TEXT": "Request a conversation transcript", - "SEND_EMAIL_SUCCESS": "The chat transcript was sent successfully", - "SEND_EMAIL_ERROR": "There was an error, please try again" + "BUTTON_TEXT": "Pieprasīt sarunas transkriptu", + "SEND_EMAIL_SUCCESS": "Sarunas transkripts tika veiksmīgi nosūtīts", + "SEND_EMAIL_ERROR": "Radās kļūda. Lūdzu, mēģiniet vēlreiz" } } diff --git a/app/javascript/widget/i18n/locale/ms.json b/app/javascript/widget/i18n/locale/ms.json index ef4149191..ba64b34e4 100644 --- a/app/javascript/widget/i18n/locale/ms.json +++ b/app/javascript/widget/i18n/locale/ms.json @@ -47,7 +47,7 @@ "REQUIRED_ERROR": "Full Name is required" }, "EMAIL_ADDRESS": { - "LABEL": "Email Address", + "LABEL": "Emel", "PLACEHOLDER": "Please enter your email address", "REQUIRED_ERROR": "Email Address is required", "VALID_ERROR": "Please enter a valid email address" diff --git a/app/javascript/widget/i18n/locale/pt_BR.json b/app/javascript/widget/i18n/locale/pt_BR.json index 6e9318fd2..055ee191d 100644 --- a/app/javascript/widget/i18n/locale/pt_BR.json +++ b/app/javascript/widget/i18n/locale/pt_BR.json @@ -22,7 +22,7 @@ "IN_A_DAY": "Responde normalmente em um dia" }, "START_CONVERSATION": "Iniciar Conversa", - "END_CONVERSATION": "Fim da Conversa", + "END_CONVERSATION": "Finalizar Conversa", "CONTINUE_CONVERSATION": "Continuar conversa", "START_NEW_CONVERSATION": "Iniciar uma nova conversa", "UNREAD_VIEW": { diff --git a/app/javascript/widget/i18n/locale/tr.json b/app/javascript/widget/i18n/locale/tr.json index f1b737504..64dc3ee12 100644 --- a/app/javascript/widget/i18n/locale/tr.json +++ b/app/javascript/widget/i18n/locale/tr.json @@ -24,7 +24,7 @@ "START_CONVERSATION": "Görüşmeyi Başlatın", "END_CONVERSATION": "Görüşmeyi Sonlandır", "CONTINUE_CONVERSATION": "Görüşmeye devam et", - "START_NEW_CONVERSATION": "Yeni Görüşme Başlatın", + "START_NEW_CONVERSATION": "Yeni çatı başla", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Yeni mesajları gör", "CLOSE_MESSAGES_BUTTON": "Kapat", diff --git a/app/javascript/widget/i18n/locale/vi.json b/app/javascript/widget/i18n/locale/vi.json index d2bfbd319..818702ab9 100644 --- a/app/javascript/widget/i18n/locale/vi.json +++ b/app/javascript/widget/i18n/locale/vi.json @@ -14,7 +14,7 @@ }, "TEAM_AVAILABILITY": { "ONLINE": "Chúng tôi đang trực tuyến", - "OFFLINE": "Hiện tại chúng tôi đang ngoại tuyến" + "OFFLINE": "Hiện tại chúng tôi đang bận chút" }, "REPLY_TIME": { "IN_A_FEW_MINUTES": "Thường trả lời sau vài phút", @@ -22,9 +22,9 @@ "IN_A_DAY": "Thường trả lời trong một ngày" }, "START_CONVERSATION": "Bắt đầu một cuộc trò chuyện", - "END_CONVERSATION": "End Conversation", - "CONTINUE_CONVERSATION": "Tiếp tục cuộc trò chuyện", - "START_NEW_CONVERSATION": "Bắt đầu cuộc trò chuyện mới", + "END_CONVERSATION": "Kết thúc hội thoại", + "CONTINUE_CONVERSATION": "Tiếp tục hội thoại", + "START_NEW_CONVERSATION": "Bắt đầu hội thoại mới", "UNREAD_VIEW": { "VIEW_MESSAGES_BUTTON": "Xem tin nhắn mới", "CLOSE_MESSAGES_BUTTON": "Đóng", @@ -34,7 +34,7 @@ "BUBBLE": { "LABEL": "Trò chuyện với chúng tôi" }, - "POWERED_BY": "Cung cấp bởi Chatwoot", + "POWERED_BY": "CC bởi Chatwoot", "EMAIL_PLACEHOLDER": "Vui lòng nhập email", "CHAT_PLACEHOLDER": "Gõ tin nhắn của bạn", "TODAY": "Hôm nay", @@ -49,37 +49,37 @@ "EMAIL_ADDRESS": { "LABEL": "Email", "PLACEHOLDER": "Vui lòng nhập email", - "REQUIRED_ERROR": "Email Address is required", + "REQUIRED_ERROR": "Phải có \u001dđịa chỉ email", "VALID_ERROR": "Vui lòng nhập một địa chỉ email hợp lệ" }, "PHONE_NUMBER": { "LABEL": "Số điện thoại", - "PLACEHOLDER": "Please enter your phone number", - "REQUIRED_ERROR": "Phone Number is required", - "VALID_ERROR": "Phone number should be of E.164 format eg: +1415555555" + "PLACEHOLDER": "\u001dVui lòng nhập số điện thoại của bạn", + "REQUIRED_ERROR": "Cần phải nhập số điện thoại", + "VALID_ERROR": "Số điện thoại nên theo định dạng E.164, ví dụ: +1415555555" }, "MESSAGE": { "LABEL": "Tin nhắn", "PLACEHOLDER": "Vui lòng nhập tin nhắn", - "ERROR": "Tin nhắnn quá ngắn" + "ERROR": "Tin nhắn quá ngắn" } }, - "CAMPAIGN_HEADER": "Vui lòng cung cấp tên và địa chỉ email của bạn trước khi bắt đầu cuộc trò chuyện", - "IS_REQUIRED": "is required" + "CAMPAIGN_HEADER": "Vui lòng cung cấp tên và địa chỉ email của bạn trước khi bắt đầu hội thoại", + "IS_REQUIRED": "được yêu cầu" }, - "FILE_SIZE_LIMIT": "File vượt quá kích thước giới hạn {MAXIMUM_FILE_UPLOAD_SIZE}", + "FILE_SIZE_LIMIT": "Tệp vượt quá kích thước giới hạn {MAXIMUM_FILE_UPLOAD_SIZE}", "CHAT_FORM": { "INVALID": { "FIELD": "Trường không hợp lệ" } }, "CSAT": { - "TITLE": "Đánh giá cuộc trò chuyện", + "TITLE": "Đánh giá hội thoại", "SUBMITTED_TITLE": "Cảm ơn vì đã đánh giá", "PLACEHOLDER": "Cho chúng tôi biết thêm..." }, "EMAIL_TRANSCRIPT": { - "BUTTON_TEXT": "Yêu cầu bản ghi cuộc trò chuyện", + "BUTTON_TEXT": "Yêu cầu bản ghi hội thoại", "SEND_EMAIL_SUCCESS": "Bản ghi cuộc trò chuyện đã được gửi thành công", "SEND_EMAIL_ERROR": "Đã có lỗi, vui lòng thử lại" } diff --git a/config/locales/cs.yml b/config/locales/cs.yml index c4d7c54ec..58c3b772e 100644 --- a/config/locales/cs.yml +++ b/config/locales/cs.yml @@ -115,9 +115,9 @@ cs: assigned_with_assignee: "Assigned to %{assignee_name} via %{team_name} by %{user_name}" removed: "Unassigned from %{team_name} by %{user_name}" labels: - added: "%{user_name} added %{labels}" - removed: "%{user_name} removed %{labels}" - muted: "%{user_name} has muted the conversation" + added: "%{user_name} odstranil/a %{labels}" + removed: "%{user_name} odebral/a %{labels}" + muted: "%{user_name} ztlumil/a konverzaci" unmuted: "%{user_name} has unmuted the conversation" templates: greeting_message_body: "%{account_name} typically replies in a few hours." @@ -129,7 +129,7 @@ cs: header: from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>' reply_with_name: '%{assignee_name} from %{inbox_name} ' - email_subject: "New messages on this conversation" + email_subject: "Nové zprávy v této konverzaci" transcript_subject: "Přepis konverzace" survey: response: "Please rate this conversation, %{link}" diff --git a/config/locales/da.yml b/config/locales/da.yml index 3e52f7aa1..885bdc6b6 100644 --- a/config/locales/da.yml +++ b/config/locales/da.yml @@ -23,9 +23,9 @@ da: reset_password_failure: Åh nej! Vi kunne ikke finde nogen bruger med den angivne e-mail. errors: validations: - presence: must not be blank + presence: må ikke være tomt webhook: - invalid: Invalid events + invalid: Ugyldige begivenheder signup: disposable_email: Vi tillader ikke engangs e-mails invalid_email: Du har indtastet en ugyldig e-mail @@ -33,78 +33,78 @@ da: failed: Tilmelding mislykkedes data_import: data_type: - invalid: Invalid data type + invalid: Ugyldig datatype contacts: import: - failed: File is blank + failed: Filen er tom email: invalid: Invalid email phone_number: - invalid: should be in e164 format + invalid: skal være i e164 format categories: locale: - unique: should be unique in the category and portal + unique: bør være unik i kategorien og portalen inboxes: imap: - socket_error: Please check the network connection, IMAP address and try again. - no_response_error: Please check the IMAP credentials and try again. - host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. - connection_timed_out_error: Connection timed out for %{address}:%{port} - connection_closed_error: Connection closed. + socket_error: Tjek venligst netværksforbindelsen, IMAP-adressen og prøv igen. + no_response_error: Tjek venligst IMAP-legitimationsoplysningerne og prøv igen. + host_unreachable_error: Vært utilgængeligt, tjek venligst IMAP-adressen, IMAP-porten og prøv igen. + connection_timed_out_error: Forbindelsen fik timeout for %{address}:%{port} + connection_closed_error: Forbindelsen er lukket. validations: - name: should not start or end with symbols, and it should not have < > / \ @ characters. + name: bør ikke starte eller slutte med symboler, og det skal ikke have < > / \ @ tegn. reports: - period: Reporting period %{since} to %{until} + period: Rapporteringsperiode %{since} til %{until} agent_csv: - agent_name: Agent name - conversations_count: Conversations count - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + agent_name: Agentens navn + conversations_count: Samtaler tæller + avg_first_response_time: Gns første svartid (minutter) + avg_resolution_time: Gennemsnitlig afviklingstid (protokol) inbox_csv: - inbox_name: Inbox name - inbox_type: Inbox type - conversations_count: No. of conversations - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + inbox_name: Indbakkens navn + inbox_type: Indbakke type + conversations_count: Antal samtaler + avg_first_response_time: Gns første svartid (minutter) + avg_resolution_time: Gennemsnitlig afviklingstid (protokol) label_csv: - label_title: Label - conversations_count: No. of conversations - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + label_title: Etiketter + conversations_count: Antal samtaler + avg_first_response_time: Gns første svartid (minutter) + avg_resolution_time: Gennemsnitlig afviklingstid (protokol) team_csv: - team_name: Team name - conversations_count: Conversations count - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) - default_group_by: day + team_name: Team navn + conversations_count: Samtaler tæller + avg_first_response_time: Gns første svartid (minutter) + avg_resolution_time: Gennemsnitlig afviklingstid (protokol) + default_group_by: dag csat: headers: - contact_name: Contact Name - contact_email_address: Contact Email Address - contact_phone_number: Contact Phone Number - link_to_the_conversation: Link to the conversation + contact_name: Kontakt Navn + contact_email_address: Kontakt E-Mail Adresse + contact_phone_number: Kontakt Telefonnummer + link_to_the_conversation: Link til samtalen agent_name: Agentens Navn - rating: Rating - feedback: Feedback Comment - recorded_at: Recorded date + rating: Bedømmelse + feedback: Feedback Kommentar + recorded_at: Optaget dato notifications: notification_title: - conversation_creation: "[New conversation] - #%{display_id} has been created in %{inbox_name}" - conversation_assignment: "[Assigned to you] - #%{display_id} has been assigned to you" - assigned_conversation_new_message: "[New message] - #%{display_id} %{content}" - conversation_mention: "You have been mentioned in conversation [ID - %{display_id}] by %{name}" + conversation_creation: "[Ny samtale] - #%{display_id} er blevet oprettet i %{inbox_name}" + conversation_assignment: "[Tildelt dig] - #%{display_id} er blevet tildelt dig" + assigned_conversation_new_message: "[Ny besked] - #%{display_id} %{content}" + conversation_mention: "Du er blevet nævnt i samtalen [ID - %{display_id}] af %{name}" conversations: messages: - instagram_story_content: "%{story_sender} mentioned you in the story: " - instagram_deleted_story_content: This story is no longer available. - deleted: This message was deleted + instagram_story_content: "%{story_sender} nævnte dig i historien: " + instagram_deleted_story_content: Denne historie er ikke længere tilgængelig. + deleted: Denne besked blev slettet activity: status: resolved: "Samtalen blev markeret som løst af %{user_name}" - contact_resolved: "Conversation was resolved by %{contact_name}" + contact_resolved: "Samtalen blev løst af %{contact_name}" open: "Samtalen blev genåbnet af %{user_name}" - pending: "Conversation was marked as pending by %{user_name}" - snoozed: "Conversation was snoozed by %{user_name}" + pending: "Samtalen blev markeret som afventende af %{user_name}" + snoozed: "Samtalen blev udskudt af %{user_name}" auto_resolved: "Samtalen blev markeret som løst af systemet på grund af %{duration} dages inaktivitet" assignee: self_assigned: "%{user_name} selv-tildelte denne samtale" @@ -112,8 +112,8 @@ da: removed: "Samtale fjernet tildeling af %{user_name}" team: assigned: "Tildelt %{team_name} af %{user_name}" - assigned_with_assignee: "Assigned to %{assignee_name} via %{team_name} by %{user_name}" - removed: "Unassigned from %{team_name} by %{user_name}" + assigned_with_assignee: "Tildelt %{assignee_name} via %{team_name} af %{user_name}" + removed: "Ikke tildelt fra %{team_name} af %{user_name}" labels: added: "%{user_name} tilføjede %{labels}" removed: "%{user_name} fjernede %{labels}" @@ -123,29 +123,29 @@ da: greeting_message_body: "%{account_name} svarer typisk på et par timer." ways_to_reach_you_message_body: "Giv teamet en måde at kontakte dig på." email_input_box_message_body: "Få besked via e-mail" - csat_input_message_body: "Please rate the conversation" + csat_input_message_body: "Bedøm venligst samtalen" reply: email: header: - from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>' - reply_with_name: '%{assignee_name} from %{inbox_name} ' + from_with_name: '%{assignee_name} fra %{inbox_name} <%{from_email}>' + reply_with_name: '%{assignee_name} fra %{inbox_name} ' email_subject: "Nye beskeder i denne samtale" transcript_subject: "Samtaleudskrift" survey: - response: "Please rate this conversation, %{link}" + response: "Bedøm denne samtale, %{link}" contacts: online: - delete: "%{contact_name} is Online, please try again later" + delete: "%{contact_name} er online, prøv igen senere" integration_apps: slack: name: "Slack" - description: "Slack is a chat tool that brings all your communication together in one place. By integrating Slack, you can get notified of all the new conversations in your account right inside your Slack." + description: "Slack er et chatværktøj, der bringer al din kommunikation sammen på ét sted. Ved at integrere Slack, kan du få besked om alle de nye samtaler på din konto lige inde i din Slack." webhooks: name: "Webhooks" - description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks." + description: "Webhook begivenheder giver dig realtime oplysninger om, hvad der sker på din konto. Du kan gøre brug af webhooks til at kommunikere begivenhederne til dine foretrukne apps som Slack eller Github. Klik på Konfigurer for at opsætte dine webhooks." dialogflow: name: "Dialogflow" - description: "Build chatbots using Dialogflow and connect them to your inbox quickly. Let the bots handle the queries before handing them off to a customer service agent." + description: "Byg chatbots ved hjælp af Dialogflow og tilslut dem hurtigt til din indbakke. Lad robotterne håndtere forespørgslerne, før de afleverer dem til en kundeservice agent." fullcontact: - name: "Fullcontact" - description: "FullContact integration helps to enrich visitor profiles. Identify the users as soon as they share their email address and offer them tailored customer service. Connect your FullContact to your account by sharing the FullContact API Key." + name: "Fuldkontakt" + description: "FullContact integration hjælper med at berige besøgende profiler. Identificere brugerne, så snart de deler deres e-mail-adresse og tilbyde dem skræddersyet kundeservice. Tilslut din FullContact til din konto ved at dele FullContact API-nøglen." diff --git a/config/locales/devise.lt.yml b/config/locales/devise.lt.yml new file mode 100644 index 000000000..15c8151fc --- /dev/null +++ b/config/locales/devise.lt.yml @@ -0,0 +1,63 @@ +#Additional translations at https://github.com/plataformatec/devise/wiki/I18n +lt: + devise: + confirmations: + confirmed: "Your email address has been successfully confirmed." + send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + failure: + already_authenticated: "You are already signed in." + inactive: "Your account is not activated yet." + invalid: "Invalid %{authentication_keys}/password or account is not verified yet." + locked: "Your account is locked." + last_attempt: "You have one more attempt before your account is locked." + not_found_in_database: "Invalid %{authentication_keys} or password." + timeout: "Your session expired. Please sign in again to continue." + unauthenticated: "You need to sign in or sign up before continuing." + unconfirmed: "You have to confirm your email address before continuing." + mailer: + confirmation_instructions: + subject: "Confirmation Instructions" + reset_password_instructions: + subject: "Reset password instructions" + unlock_instructions: + subject: "Unlock instructions" + password_change: + subject: "Password Changed" + omniauth_callbacks: + failure: "Could not authenticate you from %{kind} because \"%{reason}\"." + success: "Successfully authenticated from %{kind} account." + passwords: + no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." + send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." + send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." + updated: "Your password has been changed successfully. You are now signed in." + updated_not_active: "Your password has been changed successfully." + registrations: + destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." + signed_up: "Welcome! You have signed up successfully." + signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." + signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." + signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." + update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." + updated: "Your account has been updated successfully." + sessions: + signed_in: "Signed in successfully." + signed_out: "Signed out successfully." + already_signed_out: "Signed out successfully." + unlocks: + send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." + send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." + unlocked: "Your account has been unlocked successfully. Please sign in to continue." + errors: + messages: + already_confirmed: "was already confirmed, please try signing in" + confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" + expired: "has expired, please request a new one" + not_found: "not found" + not_locked: "was not locked" + not_saved: + one: "1 error prohibited this %{resource} from being saved:" + few: "%{count} errors prohibited this %{resource} from being saved:" + many: "%{count} errors prohibited this %{resource} from being saved:" + other: "%{count} errors prohibited this %{resource} from being saved:" diff --git a/config/locales/devise.lv.yml b/config/locales/devise.lv.yml index dc234073b..c336f798f 100644 --- a/config/locales/devise.lv.yml +++ b/config/locales/devise.lv.yml @@ -2,61 +2,61 @@ lv: devise: confirmations: - confirmed: "Your email address has been successfully confirmed." - send_instructions: "You will receive an email with instructions for how to confirm your email address in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive an email with instructions for how to confirm your email address in a few minutes." + confirmed: "Jūsu e-pasta adrese ir veiksmīgi apstiprināta." + send_instructions: "Dažu minūšu laikā jūs saņemsit e-pasta ziņojumu ar norādījumiem, kā apstiprināt savu e-pasta adresi." + send_paranoid_instructions: "Ja jūsu e-pasta adrese pastāv mūsu datubāzē, dažu minūšu laikā jūs saņemsit e-pasta ziņojumu ar norādījumiem, kā apstiprināt savu e-pasta adresi." failure: - already_authenticated: "You are already signed in." - inactive: "Your account is not activated yet." - invalid: "Invalid %{authentication_keys}/password or account is not verified yet." - locked: "Your account is locked." - last_attempt: "You have one more attempt before your account is locked." - not_found_in_database: "Invalid %{authentication_keys} or password." - timeout: "Your session expired. Please sign in again to continue." - unauthenticated: "You need to sign in or sign up before continuing." - unconfirmed: "You have to confirm your email address before continuing." + already_authenticated: "Jūs jau esat pierakstījies." + inactive: "Jūsu konts vēl nav aktivizēts." + invalid: "Nederīga %{authentication_keys}/parole, vai konts vēl nav verificēts." + locked: "Jūsu konts ir bloķēts." + last_attempt: "Jums ir vēl viens mēģinājums, pirms jūsu konts tiek bloķēts." + not_found_in_database: "Nederīga %{authentication_keys} vai parole." + timeout: "Jūsu sesijai beidzās derīguma termiņš. Lūdzu, pierakstieties vēlreiz, lai turpinātu." + unauthenticated: "Pirms turpināt, jums ir jāpierakstās vai jāreģistrējas." + unconfirmed: "Pirms turpināt, jums ir jāapstiprina sava e-pasta adrese." mailer: confirmation_instructions: - subject: "Confirmation Instructions" + subject: "Apstiprināšanas Instrukcijas" reset_password_instructions: - subject: "Reset password instructions" + subject: "Paroles atiestatīšanas instrukcijas" unlock_instructions: - subject: "Unlock instructions" + subject: "Atbloķēšanas instrukcijas" password_change: - subject: "Password Changed" + subject: "Parole nomainīta" omniauth_callbacks: - failure: "Could not authenticate you from %{kind} because \"%{reason}\"." - success: "Successfully authenticated from %{kind} account." + failure: "Nevarēja jūs autentificēt no %{kind} jo \"%{reason}\"." + success: "Veiksmīgi autentificēts no %{kind} konta." passwords: - no_token: "You can't access this page without coming from a password reset email. If you do come from a password reset email, please make sure you used the full URL provided." - send_instructions: "You will receive an email with instructions on how to reset your password in a few minutes." - send_paranoid_instructions: "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes." - updated: "Your password has been changed successfully. You are now signed in." - updated_not_active: "Your password has been changed successfully." + no_token: "Šai lapai nevar piekļūt, ja neesat saņēmis paroles atiestatīšanas e-pasta ziņojumu. Ja esat saņēmis paroles atiestatīšanas e-pasta ziņojumu, lūdzu, pārliecinieties, vai esat izmantojis pilnu norādīto URL." + send_instructions: "Dažu minūšu laikā jūs saņemsit e-pasta ziņojumu ar norādījumiem, kā atiestatīt paroli." + send_paranoid_instructions: "Ja jūsu e-pasta adrese pastāv mūsu datubāzē, pēc dažām minūtēm uz jūsu e-pasta adresi saņemsit paroles atgūšanas saiti." + updated: "Jūsu parole ir veiksmīgi nomainīta. Tagad Jūs esat pierakstījies." + updated_not_active: "Jūsu parole ir veiksmīgi nomainīta." registrations: - destroyed: "Bye! Your account has been successfully cancelled. We hope to see you again soon." - signed_up: "Welcome! You have signed up successfully." - signed_up_but_inactive: "You have signed up successfully. However, we could not sign you in because your account is not yet activated." - signed_up_but_locked: "You have signed up successfully. However, we could not sign you in because your account is locked." - signed_up_but_unconfirmed: "A message with a confirmation link has been sent to your email address. Please follow the link to activate your account." - update_needs_confirmation: "You updated your account successfully, but we need to verify your new email address. Please check your email and follow the confirm link to confirm your new email address." - updated: "Your account has been updated successfully." + destroyed: "Uz redzēšanos! Jūsu konts ir veiksmīgi atcelts. Mēs ceram, ka drīz Jūs atkal redzēsim." + signed_up: "Laipni lūdzam! Jūs esat veiksmīgi piereģistrējies." + signed_up_but_inactive: "Jūs esat veiksmīgi piereģistrējies. Tomēr, mēs nevarējām Jūs pierakstīt, jo Jūsu konts vēl nav aktivizēts." + signed_up_but_locked: "Jūs esat veiksmīgi piereģistrējies. Tomēr, mēs nevarējām Jūs pierakstīt, jo Jūsu konts ir bloķēts." + signed_up_but_unconfirmed: "Uz jūsu e -pasta adresi ir nosūtīts ziņojums ar apstiprinājuma saiti. Lūdzu, atveriet saiti, lai aktivizētu savu kontu." + update_needs_confirmation: "Jūs veiksmīgi atjauninājāt savu kontu un mums ir jāpārbauda Jūsu jaunā e -pasta adrese. Lūdzu, pārbaudiet savu e -pastu un atveriet apstiprināšanas saiti, lai apstiprinātu jauno e-pasta adresi." + updated: "Jūsu konts ir veiksmīgi atjaunināts." sessions: - signed_in: "Signed in successfully." - signed_out: "Signed out successfully." - already_signed_out: "Signed out successfully." + signed_in: "Pierakstīšanās veiksmīga." + signed_out: "Izrakstīšanās veiksmīga." + already_signed_out: "Izrakstīšanās veiksmīga." unlocks: - send_instructions: "You will receive an email with instructions for how to unlock your account in a few minutes." - send_paranoid_instructions: "If your account exists, you will receive an email with instructions for how to unlock it in a few minutes." - unlocked: "Your account has been unlocked successfully. Please sign in to continue." + send_instructions: "Dažu minūšu laikā Jūs saņemsit e-pastu ar norādījumiem kā atbloķēt kontu." + send_paranoid_instructions: "Ja konts pastāv, Jūs dažu minūšu laikā saņemsit e-pastu ar norādījumiem kā to atbloķēt." + unlocked: "Jūsu konts ir veiksmīgi atbloķēts. Lūdzu, pierakstieties, lai turpinātu." errors: messages: - already_confirmed: "was already confirmed, please try signing in" - confirmation_period_expired: "needs to be confirmed within %{period}, please request a new one" - expired: "has expired, please request a new one" - not_found: "not found" - not_locked: "was not locked" + already_confirmed: "jau bija apstiprināts. Lūdzu, mēģiniet pierakstīties" + confirmation_period_expired: "ir jāapstiprina %{period} laikā. Lūdzu pieprasiet jaunu" + expired: "ir beidzies derīguma termiņš. Lūdzu, pieprasiet jaunu" + not_found: "nav atrasts" + not_locked: "nebija bloķēts" not_saved: - zero: "%{count} errors prohibited this %{resource} from being saved:" - one: "1 error prohibited this %{resource} from being saved:" - other: "%{count} errors prohibited this %{resource} from being saved:" + zero: "%{count} kļūdas neļāva saglabāt šo %{resource}:" + one: "1 kļūda neļāva saglabāt šo %{resource}:" + other: "%{count} kļūdas neļāva saglabāt šo %{resource}:" diff --git a/config/locales/es.yml b/config/locales/es.yml index 557b15e1f..8ab172407 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -23,7 +23,7 @@ es: reset_password_failure: '¡Uh ho! No hemos podido encontrar ningún usuario con el correo electrónico especificado.' errors: validations: - presence: must not be blank + presence: no debe estar en blanco webhook: invalid: Eventos inválidos signup: @@ -33,17 +33,17 @@ es: failed: Registro fallido data_import: data_type: - invalid: Invalid data type + invalid: Tipo de datos no válido contacts: import: failed: Archivo está en blanco email: - invalid: Invalid email + invalid: Email inválido phone_number: - invalid: should be in e164 format + invalid: debe estar en formato e164 categories: locale: - unique: should be unique in the category and portal + unique: debe ser único en la categoría y el portal inboxes: imap: socket_error: Verifique la conexión de red, la dirección IMAP y vuelva a intentarlo. @@ -52,7 +52,7 @@ es: connection_timed_out_error: Se agotó el tiempo de conexión para %{address}:%{port} connection_closed_error: Conexión cerrada. validations: - name: should not start or end with symbols, and it should not have < > / \ @ characters. + name: no debe comenzar ni terminar con símbolos, y no debe tener caracteres < > / \ @. reports: period: Reportando el periodo desde %{since} hasta %{until} agent_csv: @@ -96,7 +96,7 @@ es: conversations: messages: instagram_story_content: "%{story_sender} te mencionó en la historia: " - instagram_deleted_story_content: This story is no longer available. + instagram_deleted_story_content: Esta historia ya no está disponible. deleted: Este mensaje se ha eliminado activity: status: diff --git a/config/locales/fr.yml b/config/locales/fr.yml index 125460a76..0187c3ed6 100644 --- a/config/locales/fr.yml +++ b/config/locales/fr.yml @@ -23,9 +23,9 @@ fr: reset_password_failure: Oh oh ! Nous n'avons trouvé aucun utilisateur avec le courriel spécifié. errors: validations: - presence: must not be blank + presence: Ne peut être vide webhook: - invalid: Invalid events + invalid: Événements non valides signup: disposable_email: Nous n'autorisons pas les courriels jetables invalid_email: Vous avez entré un courriel non valide @@ -33,21 +33,21 @@ fr: failed: L'inscription a échoué data_import: data_type: - invalid: Invalid data type + invalid: Type de données incorrect contacts: import: failed: Le fichier est vide email: - invalid: Invalid email + invalid: Email non valide phone_number: - invalid: should be in e164 format + invalid: Doit être au format e164 categories: locale: - unique: should be unique in the category and portal + unique: Doit être unique dans la catégorie et le portail inboxes: imap: - socket_error: Please check the network connection, IMAP address and try again. - no_response_error: Please check the IMAP credentials and try again. + socket_error: Veuillez vérifier la connexion, l'adresse IMAP et réessayez. + no_response_error: Veuillez vérifier les identifiants IMAP et réessayez. host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. connection_timed_out_error: Connection timed out for %{address}:%{port} connection_closed_error: Connection closed. diff --git a/config/locales/lt.yml b/config/locales/lt.yml new file mode 100644 index 000000000..525f40f92 --- /dev/null +++ b/config/locales/lt.yml @@ -0,0 +1,151 @@ +#Files in the config/locales directory are used for internationalization +#and are automatically loaded by Rails. If you want to use locales other +#than English, add the necessary files in this directory. +#To use the locales, use `I18n.t`: +#I18n.t 'hello' +#In views, this is aliased to just `t`: +#<%= t('hello') %> +#To use a different locale, set it with `I18n.locale`: +#I18n.locale = :es +#This would use the information in config/locales/es.yml. +#The following keys must be escaped otherwise they will not be retrieved by +#the default I18n backend: +#true, false, on, off, yes, no +#Instead, surround them with single quotes. +#en: +#'true': 'foo' +#To learn more, please read the Rails Internationalization guide +#available at https://guides.rubyonrails.org/i18n.html. +lt: + hello: "Hello world" + messages: + reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions. + reset_password_failure: Uh ho! We could not find any user with the specified email. + errors: + validations: + presence: must not be blank + webhook: + invalid: Invalid events + signup: + disposable_email: We do not allow disposable emails + invalid_email: You have entered an invalid email + email_already_exists: "You have already signed up for an account with %{email}" + failed: Signup failed + data_import: + data_type: + invalid: Invalid data type + contacts: + import: + failed: File is blank + email: + invalid: Invalid email + phone_number: + invalid: should be in e164 format + categories: + locale: + unique: should be unique in the category and portal + inboxes: + imap: + socket_error: Please check the network connection, IMAP address and try again. + no_response_error: Please check the IMAP credentials and try again. + host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. + connection_timed_out_error: Connection timed out for %{address}:%{port} + connection_closed_error: Connection closed. + validations: + name: should not start or end with symbols, and it should not have < > / \ @ characters. + reports: + period: Reporting period %{since} to %{until} + agent_csv: + agent_name: Agent name + conversations_count: Conversations count + avg_first_response_time: Avg first response time (Minutes) + avg_resolution_time: Avg resolution time (Minutes) + inbox_csv: + inbox_name: Inbox name + inbox_type: Inbox type + conversations_count: No. of conversations + avg_first_response_time: Avg first response time (Minutes) + avg_resolution_time: Avg resolution time (Minutes) + label_csv: + label_title: Label + conversations_count: No. of conversations + avg_first_response_time: Avg first response time (Minutes) + avg_resolution_time: Avg resolution time (Minutes) + team_csv: + team_name: Team name + conversations_count: Conversations count + avg_first_response_time: Avg first response time (Minutes) + avg_resolution_time: Avg resolution time (Minutes) + default_group_by: day + csat: + headers: + contact_name: Contact Name + contact_email_address: Contact Email Address + contact_phone_number: Contact Phone Number + link_to_the_conversation: Link to the conversation + agent_name: Agent Name + rating: Rating + feedback: Feedback Comment + recorded_at: Recorded date + notifications: + notification_title: + conversation_creation: "[New conversation] - #%{display_id} has been created in %{inbox_name}" + conversation_assignment: "[Assigned to you] - #%{display_id} has been assigned to you" + assigned_conversation_new_message: "[New message] - #%{display_id} %{content}" + conversation_mention: "You have been mentioned in conversation [ID - %{display_id}] by %{name}" + conversations: + messages: + instagram_story_content: "%{story_sender} mentioned you in the story: " + instagram_deleted_story_content: This story is no longer available. + deleted: This message was deleted + activity: + status: + resolved: "Conversation was marked resolved by %{user_name}" + contact_resolved: "Conversation was resolved by %{contact_name}" + open: "Conversation was reopened by %{user_name}" + pending: "Conversation was marked as pending by %{user_name}" + snoozed: "Conversation was snoozed by %{user_name}" + auto_resolved: "Conversation was marked resolved by system due to %{duration} days of inactivity" + assignee: + self_assigned: "%{user_name} self-assigned this conversation" + assigned: "Assigned to %{assignee_name} by %{user_name}" + removed: "Conversation unassigned by %{user_name}" + team: + assigned: "Assigned to %{team_name} by %{user_name}" + assigned_with_assignee: "Assigned to %{assignee_name} via %{team_name} by %{user_name}" + removed: "Unassigned from %{team_name} by %{user_name}" + labels: + added: "%{user_name} added %{labels}" + removed: "%{user_name} removed %{labels}" + muted: "%{user_name} has muted the conversation" + unmuted: "%{user_name} has unmuted the conversation" + templates: + greeting_message_body: "%{account_name} typically replies in a few hours." + ways_to_reach_you_message_body: "Give the team a way to reach you." + email_input_box_message_body: "Get notified by email" + csat_input_message_body: "Please rate the conversation" + reply: + email: + header: + from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>' + reply_with_name: '%{assignee_name} from %{inbox_name} ' + email_subject: "New messages on this conversation" + transcript_subject: "Conversation Transcript" + survey: + response: "Please rate this conversation, %{link}" + contacts: + online: + delete: "%{contact_name} is Online, please try again later" + integration_apps: + slack: + name: "Slack" + description: "Slack is a chat tool that brings all your communication together in one place. By integrating Slack, you can get notified of all the new conversations in your account right inside your Slack." + webhooks: + name: "Webhooks" + description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks." + dialogflow: + name: "Dialogflow" + description: "Build chatbots using Dialogflow and connect them to your inbox quickly. Let the bots handle the queries before handing them off to a customer service agent." + fullcontact: + name: "Fullcontact" + description: "FullContact integration helps to enrich visitor profiles. Identify the users as soon as they share their email address and offer them tailored customer service. Connect your FullContact to your account by sharing the FullContact API Key." diff --git a/config/locales/lv.yml b/config/locales/lv.yml index afaf15682..41a792dc3 100644 --- a/config/locales/lv.yml +++ b/config/locales/lv.yml @@ -17,135 +17,135 @@ #To learn more, please read the Rails Internationalization guide #available at https://guides.rubyonrails.org/i18n.html. lv: - hello: "Hello world" + hello: "Sveika pasaule" messages: - reset_password_success: Woot! Request for password reset is successful. Check your mail for instructions. - reset_password_failure: Uh ho! We could not find any user with the specified email. + reset_password_success: Urā! Paroles atiestatīšanas pieprasījums ir veiksmīgs. Pārbaudiet savu e-pastu, lai iegūtu norādījumus. + reset_password_failure: Ak, vai! Mēs nevarējām atrast nevienu lietotāju ar norādīto e -pastu. errors: validations: - presence: must not be blank + presence: nedrīkst būt tukšs webhook: - invalid: Invalid events + invalid: Nederīgi notikumi signup: - disposable_email: We do not allow disposable emails - invalid_email: You have entered an invalid email - email_already_exists: "You have already signed up for an account with %{email}" - failed: Signup failed + disposable_email: Mēs nepieļaujam vienreizējās lietošanas e-pasta adreses + invalid_email: Jūs esat ievadījis nederīgu e-pasta adresi + email_already_exists: "Jūs jau esat reģistrējis kontu ar %{email}" + failed: Reģistrēšanās neizdevās data_import: data_type: - invalid: Invalid data type + invalid: Nederīgs datu tips contacts: import: - failed: File is blank + failed: Fails ir tukšs email: - invalid: Invalid email + invalid: Nederīga e-pasta adrese phone_number: - invalid: should be in e164 format + invalid: vajadzētu būt E.164 formātā categories: locale: - unique: should be unique in the category and portal + unique: vajadzētu būt unikālai, kategorijā un portālā inboxes: imap: - socket_error: Please check the network connection, IMAP address and try again. - no_response_error: Please check the IMAP credentials and try again. - host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. - connection_timed_out_error: Connection timed out for %{address}:%{port} - connection_closed_error: Connection closed. + socket_error: Lūdzu, pārbaudiet tīkla savienojumu, IMAP adresi un mēģiniet vēlreiz. + no_response_error: Lūdzu, pārbaudiet IMAP akreditācijas datus un mēģiniet vēlreiz. + host_unreachable_error: Resursdators nav pieejams. Lūdzu, pārbaudiet IMAP adresi, IMAP portu un mēģiniet vēlreiz. + connection_timed_out_error: Savienojumam %{address}:%{port} iestājās taimauts + connection_closed_error: Savienojums slēgts. validations: - name: should not start or end with symbols, and it should not have < > / \ @ characters. + name: nevajadzētu sākties vai beigties ar simboliem, un nevajadzētu saturēt <> / \ @ rakstzīmes. reports: - period: Reporting period %{since} to %{until} + period: Ziņošanas periods %{since} līdz %{until} agent_csv: - agent_name: Agent name - conversations_count: Conversations count - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + agent_name: Aģenta vārds + conversations_count: Sarunu skaits + avg_first_response_time: Vidējais pirmās reakcijas laiks (Minūtes) + avg_resolution_time: Vidējais atrisināšanas laiks (Minūtes) inbox_csv: - inbox_name: Inbox name - inbox_type: Inbox type - conversations_count: No. of conversations - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + inbox_name: Iesūtnes nosaukums + inbox_type: Iesūtnes tips + conversations_count: Sarunu skaits + avg_first_response_time: Vidējais pirmās reakcijas laiks (Minūtes) + avg_resolution_time: Vidējais atrisināšanas laiks (Minūtes) label_csv: - label_title: Label - conversations_count: No. of conversations - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) + label_title: Etiķete + conversations_count: Sarunu skaits + avg_first_response_time: Vidējais pirmās atbildes laiks (Minūtes) + avg_resolution_time: Vidējais atrisināšanas laiks (minūtes) team_csv: - team_name: Team name - conversations_count: Conversations count - avg_first_response_time: Avg first response time (Minutes) - avg_resolution_time: Avg resolution time (Minutes) - default_group_by: day + team_name: Komandas nosaukums + conversations_count: Sarunu skaits + avg_first_response_time: Vidējais pirmās atbildes laiks (Minūtes) + avg_resolution_time: Vidējais atrisinājuma laiks (Minūtes) + default_group_by: diena csat: headers: - contact_name: Contact Name - contact_email_address: Contact Email Address - contact_phone_number: Contact Phone Number - link_to_the_conversation: Link to the conversation - agent_name: Agent Name - rating: Rating - feedback: Feedback Comment - recorded_at: Recorded date + contact_name: Kontaktpersonas Vārds + contact_email_address: Kontaktpersonas E-pasta Adrese + contact_phone_number: Kontaktpersonas Tālruņa Numurs + link_to_the_conversation: Saite uz sarunu + agent_name: Aģenta Vārds + rating: Vērtējums + feedback: Atsauksmes Komentārs + recorded_at: Reģistrētais datums notifications: notification_title: - conversation_creation: "[New conversation] - #%{display_id} has been created in %{inbox_name}" - conversation_assignment: "[Assigned to you] - #%{display_id} has been assigned to you" - assigned_conversation_new_message: "[New message] - #%{display_id} %{content}" - conversation_mention: "You have been mentioned in conversation [ID - %{display_id}] by %{name}" + conversation_creation: "[Jauna saruna] - #%{display_id} ir izveidota iesūtnē %{inbox_name}" + conversation_assignment: "[Piešķirts Jums] - Jums ir piešķirts #%{display_id}" + assigned_conversation_new_message: "[Jauns ziņojums] - #%{display_id} %{content}" + conversation_mention: "Jūs pieminēja sarunā [ID - %{display_id}] kā %{name}" conversations: messages: - instagram_story_content: "%{story_sender} mentioned you in the story: " - instagram_deleted_story_content: This story is no longer available. - deleted: This message was deleted + instagram_story_content: "%{story_sender} pieminēja jūs stāstā: " + instagram_deleted_story_content: Šis stāsts vairs nav pieejams. + deleted: Šis ziņojums ir izdzēsts activity: status: - resolved: "Conversation was marked resolved by %{user_name}" - contact_resolved: "Conversation was resolved by %{contact_name}" - open: "Conversation was reopened by %{user_name}" - pending: "Conversation was marked as pending by %{user_name}" - snoozed: "Conversation was snoozed by %{user_name}" - auto_resolved: "Conversation was marked resolved by system due to %{duration} days of inactivity" + resolved: "%{user_name} sarunu atzīmēja kā atrisinātu" + contact_resolved: "%{contact_name} atrisināja sarunu" + open: "%{user_name} atkārtoti atvēra sarunu" + pending: "%{user_name} sarunu atzīmēja kā neapstiprinātu" + snoozed: "%{user_name} atlika sarunu" + auto_resolved: "Sistēma sarunu atzīmēja kā atrisinātu %{duration} dienu neaktivitātes dēļ" assignee: - self_assigned: "%{user_name} self-assigned this conversation" - assigned: "Assigned to %{assignee_name} by %{user_name}" - removed: "Conversation unassigned by %{user_name}" + self_assigned: "%{user_name} sev piešķīra šo sarunu" + assigned: "%{user_name} piešķīra sarunu %{assignee_name}" + removed: "%{user_name} noņēma piešķiršanu" team: - assigned: "Assigned to %{team_name} by %{user_name}" - assigned_with_assignee: "Assigned to %{assignee_name} via %{team_name} by %{user_name}" - removed: "Unassigned from %{team_name} by %{user_name}" + assigned: "%{user_name} piešķīra sarunu %{team_name}" + assigned_with_assignee: "%{user_name} caur %{team_name} piešķīra sarunu %{assignee_name}" + removed: "%{user_name} noņēma piešķiršanu %{team_name}" labels: - added: "%{user_name} added %{labels}" - removed: "%{user_name} removed %{labels}" - muted: "%{user_name} has muted the conversation" - unmuted: "%{user_name} has unmuted the conversation" + added: "%{user_name} pievienoja %{labels}" + removed: "%{user_name} noņēma %{labels}" + muted: "%{user_name} izslēdza sarunu" + unmuted: "%{user_name} ieslēdza sarunu" templates: - greeting_message_body: "%{account_name} typically replies in a few hours." - ways_to_reach_you_message_body: "Give the team a way to reach you." - email_input_box_message_body: "Get notified by email" - csat_input_message_body: "Please rate the conversation" + greeting_message_body: "%{account_name} parasti atbild dažu stundu laikā." + ways_to_reach_you_message_body: "Dodiet komandai iespēju ar jums sazināties." + email_input_box_message_body: "Saņemiet paziņojumus pa e-pastu" + csat_input_message_body: "Lūdzu, novērtējiet sarunu" reply: email: header: - from_with_name: '%{assignee_name} from %{inbox_name} <%{from_email}>' - reply_with_name: '%{assignee_name} from %{inbox_name} ' - email_subject: "New messages on this conversation" - transcript_subject: "Conversation Transcript" + from_with_name: '%{assignee_name} no %{inbox_name} <%{from_email}>' + reply_with_name: '%{assignee_name} no %{inbox_name} ' + email_subject: "Jauni ziņojumi šajā sarunā" + transcript_subject: "Sarunas Transkripts" survey: - response: "Please rate this conversation, %{link}" + response: "Lūdzu, novērtējiet šo sarunu, %{link}" contacts: online: - delete: "%{contact_name} is Online, please try again later" + delete: "%{contact_name} ir Tiešsaistē, lūdzu, vēlāk mēģiniet vēlreiz" integration_apps: slack: name: "Slack" - description: "Slack is a chat tool that brings all your communication together in one place. By integrating Slack, you can get notified of all the new conversations in your account right inside your Slack." + description: "Slack ir tērzēšanas rīks, kas apvieno visu Jūsu saziņu vienuviet. Integrējot Slack, Jūs varat saņemt paziņojumus par visām jaunajām sarunām savā kontā tieši savā Slack." webhooks: name: "Webhooks" - description: "Webhook events provide you the realtime information about what's happening in your account. You can make use of the webhooks to communicate the events to your favourite apps like Slack or Github. Click on Configure to set up your webhooks." + description: "WebHook notikumi sniedz Jums reāllaika informāciju par to, kas notiek Jūsu kontā. Jūs varat izmantot webhook, lai paziņotu notikumus savām iecienītākajām lietotnēm, piemēram, Slack vai Github. Noklikšķiniet uz Konfigurēt, lai iestatītu savus webhook." dialogflow: name: "Dialogflow" - description: "Build chatbots using Dialogflow and connect them to your inbox quickly. Let the bots handle the queries before handing them off to a customer service agent." + description: "Veidojiet tērzēšanas robotus, izmantojot Dialogflow, un ātri savienojiet tos ar iesūtni. Ļaujiet botiem apstrādāt vaicājumus, pirms tos nododat klientu apkalpošanas aģentam." fullcontact: name: "Fullcontact" - description: "FullContact integration helps to enrich visitor profiles. Identify the users as soon as they share their email address and offer them tailored customer service. Connect your FullContact to your account by sharing the FullContact API Key." + description: "FullContact integrācija palīdz bagātināt apmeklētāju profilus. Identificējiet lietotājus, tiklīdz viņi kopīgo savu e-pasta adresi, un piedāvājiet viņiem pielāgotu klientu apkalpošanu. Savienojiet FullContact ar savu kontu, kopīgojot FullContact API atslēgu." diff --git a/config/locales/ms.yml b/config/locales/ms.yml index 21c581bab..7a67f2197 100644 --- a/config/locales/ms.yml +++ b/config/locales/ms.yml @@ -83,7 +83,7 @@ ms: contact_email_address: Contact Email Address contact_phone_number: Contact Phone Number link_to_the_conversation: Link to the conversation - agent_name: Agent Name + agent_name: Nama Ejen rating: Rating feedback: Feedback Comment recorded_at: Recorded date diff --git a/config/locales/tr.yml b/config/locales/tr.yml index 52d06a722..dd7d368cf 100644 --- a/config/locales/tr.yml +++ b/config/locales/tr.yml @@ -23,9 +23,9 @@ tr: reset_password_failure: Belirtilen e-postaya sahip herhangi bir kullanıcı bulamadık. errors: validations: - presence: must not be blank + presence: boş bırakılmamalı webhook: - invalid: Invalid events + invalid: Hatalı işlem signup: disposable_email: Tek kullanımlık e-postalara izin vermiyoruz invalid_email: Geçersiz bir e-posta girdiniz @@ -33,21 +33,21 @@ tr: failed: Kayıt başarısız oldu data_import: data_type: - invalid: Invalid data type + invalid: Hatalı veri türü contacts: import: failed: Dosya boş email: - invalid: Invalid email + invalid: Hatalı e-posta phone_number: - invalid: should be in e164 format + invalid: e164 formatında olmalı categories: locale: - unique: should be unique in the category and portal + unique: kategori ve portalde tekil olmalı inboxes: imap: - socket_error: Please check the network connection, IMAP address and try again. - no_response_error: Please check the IMAP credentials and try again. + socket_error: Lütfen ağ bağlantınızı, IMAP adresini kontrol edin ve tekrar deneyin. + no_response_error: Lütfen IMAP erişim bilgilerinizi kontrol edip tekrar deneyin. host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. connection_timed_out_error: Connection timed out for %{address}:%{port} connection_closed_error: Connection closed. diff --git a/config/locales/vi.yml b/config/locales/vi.yml index 387de7dd2..55dee46ce 100644 --- a/config/locales/vi.yml +++ b/config/locales/vi.yml @@ -17,15 +17,15 @@ #To learn more, please read the Rails Internationalization guide #available at https://guides.rubyonrails.org/i18n.html. vi: - hello: "Xin chào bạn" + hello: "Chào thế giới" messages: reset_password_success: Chà! Yêu cầu đặt lại mật khẩu thành công. Kiểm tra thư của bạn để biết hướng dẫn. reset_password_failure: Uh ho! Chúng tôi không thể tìm thấy bất kỳ người dùng nào có email được chỉ định. errors: validations: - presence: must not be blank + presence: không được để trống webhook: - invalid: Invalid events + invalid: Sự kiện không hợp lệ signup: disposable_email: Chúng tôi không cho phép các email dùng một lần invalid_email: Bạn đã nhập một email không hợp lệ @@ -33,81 +33,81 @@ vi: failed: Đăng ký thât bại data_import: data_type: - invalid: Invalid data type + invalid: Kiểu dữ liệu không hợp lệ contacts: import: - failed: Chưa chọn file + failed: Chưa chọn tệp email: - invalid: Invalid email + invalid: Email không hợp lệ phone_number: - invalid: should be in e164 format + invalid: nên theo đinh dạng e164 categories: locale: - unique: should be unique in the category and portal + unique: phải là duy nhất trong danh mục và cổng thông tin inboxes: imap: - socket_error: Please check the network connection, IMAP address and try again. - no_response_error: Please check the IMAP credentials and try again. - host_unreachable_error: Host unreachable, Please check the IMAP address, IMAP port and try again. - connection_timed_out_error: Connection timed out for %{address}:%{port} - connection_closed_error: Connection closed. + socket_error: Vui lòng kiểm tra kết nối mạng, địa chỉ IMAP và thử lại. + no_response_error: Vui lòng kiểm tra thông tin đăng nhập IMAP và thử lại. + host_unreachable_error: Máy chủ không thể truy cập được, Vui lòng kiểm tra địa chỉ IMAP, cổng IMAP và thử lại. + connection_timed_out_error: Kết nối đã hết thời gian chờ %{address}:%{port} + connection_closed_error: Kêt nối bị đóng. validations: - name: should not start or end with symbols, and it should not have < > / \ @ characters. + name: không nên bắt đầu hoặc kết thúc bằng các ký hiệu và không nên có kí tự < > / \ @. reports: period: Thời gian báo cáo từ %{since} đến %{until} agent_csv: - agent_name: Tên nhà cung cấp - conversations_count: Số cuộc trò chuyện + agent_name: Tên tổng đài viên + conversations_count: Số hội thoại avg_first_response_time: Thời gian trung bình của phản hồi đầu tiên (phút) avg_resolution_time: Thời gian giải quyết trung bình (phút) inbox_csv: - inbox_name: Inbox name - inbox_type: Inbox type - conversations_count: No. of conversations + inbox_name: Tên kênh + inbox_type: Kiểu kênh + conversations_count: Số hội thoại avg_first_response_time: Thời gian trung bình của phản hồi đầu tiên (phút) avg_resolution_time: Thời gian giải quyết trung bình (phút) label_csv: label_title: Nhãn - conversations_count: No. of conversations + conversations_count: Số hội thoại avg_first_response_time: Thời gian trung bình của phản hồi đầu tiên (phút) avg_resolution_time: Thời gian giải quyết trung bình (phút) team_csv: team_name: Tên nhóm - conversations_count: Số cuộc trò chuyện + conversations_count: Số hội thoại avg_first_response_time: Thời gian trung bình của phản hồi đầu tiên (phút) avg_resolution_time: Thời gian giải quyết trung bình (phút) default_group_by: ngày csat: headers: - contact_name: Contact Name - contact_email_address: Contact Email Address - contact_phone_number: Contact Phone Number - link_to_the_conversation: Link to the conversation + contact_name: Tên liên hệ + contact_email_address: Địa chỉ email của liên hệ + contact_phone_number: Số điện thoại của liên hệ + link_to_the_conversation: Liên kế tới hội thoại agent_name: Tên nhà cung cấp rating: Đánh giá - feedback: Feedback Comment - recorded_at: Recorded date + feedback: Bình luận phản hồi + recorded_at: Ngày nghi notifications: notification_title: - conversation_creation: "[Cuộc trò chuyện mới] - #%{display_id} đã được tạo trong %{inbox_name}" + conversation_creation: "[Hội thoại mới] - #%{display_id} đã được tạo trong %{inbox_name}" conversation_assignment: "[Phân công cho bạn] - #%{display_id} đã được phân công cho bạn" assigned_conversation_new_message: "[Tin nhắn mới] - #%{display_id} %{content}" - conversation_mention: "Bạn đã được nhắn đến trong cuộc trò chuyện [ID - %{display_id}] bởi %{name}" + conversation_mention: "Bạn đã được nhắn đến trong hội thoại [ID - %{display_id}] bởi %{name}" conversations: messages: - instagram_story_content: "%{story_sender} mentioned you in the story: " - instagram_deleted_story_content: This story is no longer available. + instagram_story_content: "%{story_sender} đã đề cập đến bạn trong hội thoại: " + instagram_deleted_story_content: Hội thoại này không còn nữa. deleted: Tin nhắn đã bị xoá activity: status: resolved: "Cuộc trò chuyện được đánh dấu là đã giải quyết bởi %{user_name}" - contact_resolved: "Conversation was resolved by %{contact_name}" + contact_resolved: "Hội thoại đã được giải quyết bởi %{contact_name}" open: "Cuộc trò chuyện đã được mở lại bởi %{user_name}" - pending: "Cuộc trò chuyện được đánh dấu là chưa giải quyết bởi %{user_name}" - snoozed: "Cuộc trò chuyện đã được tạm dừng lại bởi %{user_name}" - auto_resolved: "Cuộc trò chuyện được đánh dấu là đã giải quyết bởi hệ thống vì %{duration} ngày không hoạt động" + pending: "Hội thoại được đánh dấu là chưa giải quyết bởi %{user_name}" + snoozed: "Hội thoại đã được tạm dừng lại bởi %{user_name}" + auto_resolved: "Hội thoại được đánh dấu là đã giải quyết bởi hệ thống vì %{duration} ngày không hoạt động" assignee: - self_assigned: "%{user_name} phân công chính mình vào cuộc trò chuyện này" + self_assigned: "%{user_name} phân công chính mình vào hội thoại này" assigned: "Chỉ định %{assignee_name} bởi %{user_name}" removed: "Cuộc hội thoại chưa được chỉ định bởi %{user_name}" team: @@ -117,13 +117,13 @@ vi: labels: added: "%{user_name} thêm %{labels}" removed: "%{user_name} xoá %{labels}" - muted: "%{user_name} đã tắt tiếng cuộc trò chuyện" + muted: "%{user_name} đã tắt tiếng hội thoại" unmuted: "%{user_name} đã bật tiếng cuộc trò chuyện" templates: greeting_message_body: "%{account_name} thường trả lời trong vài giờ." - ways_to_reach_you_message_body: "Cung cấp cho nhóm một cách để tiếp cận bạn." + ways_to_reach_you_message_body: "Trong lúc chờ đội ngũ hỗ trợ phản hồi, bạn hãy để lại email để nhận được thông báo nhanh nhất nhé." email_input_box_message_body: "Nhận thông báo qua email" - csat_input_message_body: "Bạn hãy vui lòng đánh giá cuộc trò chuyện" + csat_input_message_body: "Bạn hãy vui lòng đánh giá hội thoại" reply: email: header: @@ -132,7 +132,7 @@ vi: email_subject: "Tin nhắn mới về cuộc trò chuyện này" transcript_subject: "Bản ghi cuộc hội thoại" survey: - response: "Bạn hãy vui lòng đánh giá cuộc trò chuyện, %{link}" + response: "Bạn hãy vui lòng đánh giá hội thoại, %{link}" contacts: online: delete: "%{contact_name} đang trực tiếng, vui lòng thử lại sau" From 1819041f5a932f394cd54f968eede61d0750ded7 Mon Sep 17 00:00:00 2001 From: "OMAR.A" <58332033+civilcoder55@users.noreply.github.com> Date: Thu, 29 Sep 2022 19:34:55 +0200 Subject: [PATCH 08/62] fix: "wa_source_id" function return value (#5451) - Fix contact inbox builder returning invalid WhatsApp source id - Add specs to cover source id validations Co-authored-by: Sojan Jose --- app/builders/contact_inbox_builder.rb | 2 +- app/models/contact_inbox.rb | 16 +++- lib/regex_helper.rb | 4 + spec/builders/contact_inbox_builder_spec.rb | 92 +++++++++++++++------ spec/factories/contact_inbox.rb | 2 + spec/models/contact_inbox_spec.rb | 55 ++++++++++++ 6 files changed, 143 insertions(+), 28 deletions(-) diff --git a/app/builders/contact_inbox_builder.rb b/app/builders/contact_inbox_builder.rb index e7ae8b0aa..1b8782c51 100644 --- a/app/builders/contact_inbox_builder.rb +++ b/app/builders/contact_inbox_builder.rb @@ -31,7 +31,7 @@ class ContactInboxBuilder return unless @contact.phone_number # whatsapp doesn't want the + in e164 format - "#{@contact.phone_number}.delete('+')" + @contact.phone_number.delete('+').to_s end def twilio_source_id diff --git a/app/models/contact_inbox.rb b/app/models/contact_inbox.rb index dcbd2f56b..24f3b727a 100644 --- a/app/models/contact_inbox.rb +++ b/app/models/contact_inbox.rb @@ -22,6 +22,7 @@ class ContactInbox < ApplicationRecord include Pubsubable + include RegexHelper validates :inbox_id, presence: true validates :contact_id, presence: true validates :source_id, presence: true @@ -51,10 +52,10 @@ class ContactInbox < ApplicationRecord def validate_twilio_source_id # https://www.twilio.com/docs/glossary/what-e164#regex-matching-for-e164 - if inbox.channel.medium == 'sms' && !/\+[1-9]\d{1,14}\z/.match?(source_id) - errors.add(:source_id, 'invalid source id for twilio sms inbox. valid Regex /\+[1-9]\d{1,14}\z/') - elsif inbox.channel.medium == 'whatsapp' && !/whatsapp:\+[1-9]\d{1,14}\z/.match?(source_id) - errors.add(:source_id, 'invalid source id for twilio whatsapp inbox. valid Regex /whatsapp:\+[1-9]\d{1,14}\z/') + if inbox.channel.medium == 'sms' && !TWILIO_CHANNEL_SMS_REGEX.match?(source_id) + errors.add(:source_id, "invalid source id for twilio sms inbox. valid Regex #{TWILIO_CHANNEL_SMS_REGEX}") + elsif inbox.channel.medium == 'whatsapp' && !TWILIO_CHANNEL_WHATSAPP_REGEX.match?(source_id) + errors.add(:source_id, "invalid source id for twilio whatsapp inbox. valid Regex #{TWILIO_CHANNEL_WHATSAPP_REGEX}") end end @@ -62,8 +63,15 @@ class ContactInbox < ApplicationRecord errors.add(:source_id, "invalid source id for Email inbox. valid Regex #{Devise.email_regexp}") unless Devise.email_regexp.match?(source_id) end + def validate_whatsapp_source_id + return if WHATSAPP_CHANNEL_REGEX.match?(source_id) + + errors.add(:source_id, "invalid source id for whatsapp inbox. valid Regex #{WHATSAPP_CHANNEL_REGEX}") + end + def valid_source_id_format? validate_twilio_source_id if inbox.channel_type == 'Channel::TwilioSms' validate_email_source_id if inbox.channel_type == 'Channel::Email' + validate_whatsapp_source_id if inbox.channel_type == 'Channel::Whatsapp' end end diff --git a/lib/regex_helper.rb b/lib/regex_helper.rb index 2bbd51809..ee452b352 100644 --- a/lib/regex_helper.rb +++ b/lib/regex_helper.rb @@ -6,4 +6,8 @@ module RegexHelper # shouldn't start with a underscore or hyphen UNICODE_CHARACTER_NUMBER_HYPHEN_UNDERSCORE = Regexp.new('\A[\p{L}\p{N}]+[\p{L}\p{N}_-]+\Z') MENTION_REGEX = Regexp.new('\[(@[\w_. ]+)\]\(mention://(?:user|team)/\d+/(.*?)+\)') + + TWILIO_CHANNEL_SMS_REGEX = Regexp.new('^\+\d{1,14}\z') + TWILIO_CHANNEL_WHATSAPP_REGEX = Regexp.new('^whatsapp:\+\d{1,14}\z') + WHATSAPP_CHANNEL_REGEX = Regexp.new('^\d{1,14}\z') end diff --git a/spec/builders/contact_inbox_builder_spec.rb b/spec/builders/contact_inbox_builder_spec.rb index 2de5b6b60..47210f6ca 100644 --- a/spec/builders/contact_inbox_builder_spec.rb +++ b/spec/builders/contact_inbox_builder_spec.rb @@ -17,7 +17,7 @@ describe ::ContactInboxBuilder do source_id: contact.phone_number ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do @@ -27,7 +27,7 @@ describe ::ContactInboxBuilder do inbox_id: twilio_inbox.id ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'creates a new contact inbox when different source id is provided' do @@ -38,8 +38,8 @@ describe ::ContactInboxBuilder do source_id: '+224213223422' ).perform - expect(contact_inbox.id).not_to be(existing_contact_inbox.id) - expect(contact_inbox.source_id).not_to be('+224213223422') + expect(contact_inbox.id).not_to eq(existing_contact_inbox.id) + expect(contact_inbox.source_id).to eq('+224213223422') end it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do @@ -48,7 +48,7 @@ describe ::ContactInboxBuilder do inbox_id: twilio_inbox.id ).perform - expect(contact_inbox.source_id).not_to be(contact.phone_number) + expect(contact_inbox.source_id).to eq(contact.phone_number) end end @@ -64,7 +64,7 @@ describe ::ContactInboxBuilder do source_id: "whatsapp:#{contact.phone_number}" ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do @@ -74,7 +74,7 @@ describe ::ContactInboxBuilder do inbox_id: twilio_inbox.id ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'creates a new contact inbox when different source id is provided' do @@ -85,8 +85,8 @@ describe ::ContactInboxBuilder do source_id: 'whatsapp:+555555' ).perform - expect(contact_inbox.id).not_to be(existing_contact_inbox.id) - expect(contact_inbox.source_id).not_to be('whatsapp:+55555') + expect(contact_inbox.id).not_to eq(existing_contact_inbox.id) + expect(contact_inbox.source_id).to eq('whatsapp:+555555') end it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do @@ -95,7 +95,53 @@ describe ::ContactInboxBuilder do inbox_id: twilio_inbox.id ).perform - expect(contact_inbox.source_id).not_to be("whatsapp:#{contact.phone_number}") + expect(contact_inbox.source_id).to eq("whatsapp:#{contact.phone_number}") + end + end + + describe 'whatsapp inbox' do + let(:whatsapp_inbox) { create(:channel_whatsapp, account: account, sync_templates: false, validate_provider_config: false).inbox } + + it 'does not create contact inbox when contact inbox already exists with the source id provided' do + existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) + contact_inbox = described_class.new( + contact_id: contact.id, + inbox_id: whatsapp_inbox.id, + source_id: contact.phone_number&.delete('+') + ).perform + + expect(contact_inbox.id).to be(existing_contact_inbox.id) + end + + it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do + existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) + contact_inbox = described_class.new( + contact_id: contact.id, + inbox_id: whatsapp_inbox.id + ).perform + + expect(contact_inbox.id).to be(existing_contact_inbox.id) + end + + it 'creates a new contact inbox when different source id is provided' do + existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) + contact_inbox = described_class.new( + contact_id: contact.id, + inbox_id: whatsapp_inbox.id, + source_id: '555555' + ).perform + + expect(contact_inbox.id).not_to be(existing_contact_inbox.id) + expect(contact_inbox.source_id).not_to be('555555') + end + + it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do + contact_inbox = described_class.new( + contact_id: contact.id, + inbox_id: whatsapp_inbox.id + ).perform + + expect(contact_inbox.source_id).to eq(contact.phone_number&.delete('+')) end end @@ -111,7 +157,7 @@ describe ::ContactInboxBuilder do source_id: contact.phone_number ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do @@ -121,7 +167,7 @@ describe ::ContactInboxBuilder do inbox_id: sms_inbox.id ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'creates a new contact inbox when different source id is provided' do @@ -132,8 +178,8 @@ describe ::ContactInboxBuilder do source_id: '+224213223422' ).perform - expect(contact_inbox.id).not_to be(existing_contact_inbox.id) - expect(contact_inbox.source_id).not_to be('+224213223422') + expect(contact_inbox.id).not_to eq(existing_contact_inbox.id) + expect(contact_inbox.source_id).to eq('+224213223422') end it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do @@ -142,7 +188,7 @@ describe ::ContactInboxBuilder do inbox_id: sms_inbox.id ).perform - expect(contact_inbox.source_id).not_to be(contact.phone_number) + expect(contact_inbox.source_id).to eq(contact.phone_number) end end @@ -158,7 +204,7 @@ describe ::ContactInboxBuilder do source_id: contact.email ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'does not create contact inbox when contact inbox already exists with email and source id is not provided' do @@ -168,7 +214,7 @@ describe ::ContactInboxBuilder do inbox_id: email_inbox.id ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'creates a new contact inbox when different source id is provided' do @@ -179,8 +225,8 @@ describe ::ContactInboxBuilder do source_id: 'xyc@xyc.com' ).perform - expect(contact_inbox.id).not_to be(existing_contact_inbox.id) - expect(contact_inbox.source_id).not_to be('xyc@xyc.com') + expect(contact_inbox.id).not_to eq(existing_contact_inbox.id) + expect(contact_inbox.source_id).to eq('xyc@xyc.com') end it 'creates a contact inbox with contact email when source id not provided and no contact inbox exists' do @@ -189,7 +235,7 @@ describe ::ContactInboxBuilder do inbox_id: email_inbox.id ).perform - expect(contact_inbox.source_id).not_to be(contact.email) + expect(contact_inbox.source_id).to eq(contact.email) end end @@ -205,7 +251,7 @@ describe ::ContactInboxBuilder do source_id: 'test' ).perform - expect(contact_inbox.id).to be(existing_contact_inbox.id) + expect(contact_inbox.id).to eq(existing_contact_inbox.id) end it 'creates a new contact inbox when different source id is provided' do @@ -216,8 +262,8 @@ describe ::ContactInboxBuilder do source_id: 'test' ).perform - expect(contact_inbox.id).not_to be(existing_contact_inbox.id) - expect(contact_inbox.source_id).not_to be('test') + expect(contact_inbox.id).not_to eq(existing_contact_inbox.id) + expect(contact_inbox.source_id).to eq('test') end it 'creates a contact inbox with SecureRandom.uuid when source id not provided and no contact inbox exists' do diff --git a/spec/factories/contact_inbox.rb b/spec/factories/contact_inbox.rb index 23abde2ca..e114a1567 100644 --- a/spec/factories/contact_inbox.rb +++ b/spec/factories/contact_inbox.rb @@ -15,6 +15,8 @@ def generate_source_id(contact_inbox) contact_inbox.inbox.channel.medium == 'sms' ? Faker::PhoneNumber.cell_phone_in_e164 : "whatsapp:#{Faker::PhoneNumber.cell_phone_in_e164}" when 'Channel::Email' "#{SecureRandom.uuid}@acme.inc" + when 'Channel::Whatsapp' + Faker::PhoneNumber.cell_phone_in_e164.delete('+') else SecureRandom.uuid end diff --git a/spec/models/contact_inbox_spec.rb b/spec/models/contact_inbox_spec.rb index 1c575f105..aba062980 100644 --- a/spec/models/contact_inbox_spec.rb +++ b/spec/models/contact_inbox_spec.rb @@ -37,4 +37,59 @@ RSpec.describe ContactInbox do expect(obj.pubsub_token).to eq(new_token) end end + + describe 'validations' do + context 'when source_id' do + it 'validates whatsapp channel source_id' do + whatsapp_inbox = create(:channel_whatsapp, sync_templates: false, validate_provider_config: false).inbox + contact = create(:contact) + valid_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '1234567890') + ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '1234567890aaa') + ci_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: '+1234567890') + expect(valid_source_id.valid?).to be(true) + expect(ci_character_in_source_id.valid?).to be(false) + expect(ci_character_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for whatsapp inbox. valid Regex (?-mix:^\\d{1,14}\\z)'] + ) + expect(ci_plus_in_source_id.valid?).to be(false) + expect(ci_plus_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for whatsapp inbox. valid Regex (?-mix:^\\d{1,14}\\z)'] + ) + end + + it 'validates twilio sms channel source_id' do + twilio_sms_inbox = create(:channel_twilio_sms).inbox + contact = create(:contact) + valid_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '+1234567890') + ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '+1234567890aaa') + ci_without_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_sms_inbox, source_id: '1234567890') + expect(valid_source_id.valid?).to be(true) + expect(ci_character_in_source_id.valid?).to be(false) + expect(ci_character_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,14}\\z)'] + ) + expect(ci_without_plus_in_source_id.valid?).to be(false) + expect(ci_without_plus_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,14}\\z)'] + ) + end + + it 'validates twilio whatsapp channel source_id' do + twilio_whatsapp_inbox = create(:channel_twilio_sms, medium: :whatsapp).inbox + contact = create(:contact) + valid_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:+1234567890') + ci_character_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:+1234567890aaa') + ci_without_plus_in_source_id = build(:contact_inbox, contact: contact, inbox: twilio_whatsapp_inbox, source_id: 'whatsapp:1234567890') + expect(valid_source_id.valid?).to be(true) + expect(ci_character_in_source_id.valid?).to be(false) + expect(ci_character_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,14}\\z)'] + ) + expect(ci_without_plus_in_source_id.valid?).to be(false) + expect(ci_without_plus_in_source_id.errors.full_messages).to eq( + ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,14}\\z)'] + ) + end + end + end end From 57fcb79d71a88dc8bd97794ec773ee923a1bb637 Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Fri, 30 Sep 2022 19:55:23 +0530 Subject: [PATCH 09/62] fix: Article slug auto saves (#5524) - Auto save article slug --- app/models/article.rb | 8 +++++++- .../20220930025317_add_unique_index_to_slug.rb | 6 ++++++ db/schema.rb | 4 ++-- spec/factories/articles.rb | 3 +-- spec/models/article_spec.rb | 14 +++++++++++++- 5 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 db/migrate/20220930025317_add_unique_index_to_slug.rb diff --git a/app/models/article.rb b/app/models/article.rb index f7318c497..ac6506d01 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -23,7 +23,7 @@ # # index_articles_on_associated_article_id (associated_article_id) # index_articles_on_author_id (author_id) -# index_articles_on_slug (slug) +# index_articles_on_slug (slug) UNIQUE # class Article < ApplicationRecord include PgSearch::Model @@ -45,6 +45,8 @@ class Article < ApplicationRecord belongs_to :author, class_name: 'User' before_validation :ensure_account_id + before_validation :ensure_article_slug + validates :account_id, presence: true validates :category_id, presence: true validates :author_id, presence: true @@ -112,4 +114,8 @@ class Article < ApplicationRecord def ensure_account_id self.account_id = portal&.account_id end + + def ensure_article_slug + self.slug ||= "#{Time.now.utc.to_i}-#{title.underscore.parameterize(separator: '-')}" if title.present? + end end diff --git a/db/migrate/20220930025317_add_unique_index_to_slug.rb b/db/migrate/20220930025317_add_unique_index_to_slug.rb new file mode 100644 index 000000000..e35f6289c --- /dev/null +++ b/db/migrate/20220930025317_add_unique_index_to_slug.rb @@ -0,0 +1,6 @@ +class AddUniqueIndexToSlug < ActiveRecord::Migration[6.1] + def change + remove_index :articles, :slug + add_index :articles, :slug, unique: true + end +end diff --git a/db/schema.rb b/db/schema.rb index ad5c8241a..0793a6587 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_09_26_164441) do +ActiveRecord::Schema.define(version: 2022_09_30_025317) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" @@ -134,7 +134,7 @@ ActiveRecord::Schema.define(version: 2022_09_26_164441) do t.string "slug", null: false t.index ["associated_article_id"], name: "index_articles_on_associated_article_id" t.index ["author_id"], name: "index_articles_on_author_id" - t.index ["slug"], name: "index_articles_on_slug" + t.index ["slug"], name: "index_articles_on_slug", unique: true end create_table "attachments", id: :serial, force: :cascade do |t| diff --git a/spec/factories/articles.rb b/spec/factories/articles.rb index f820ddd6c..30c842621 100644 --- a/spec/factories/articles.rb +++ b/spec/factories/articles.rb @@ -3,8 +3,7 @@ FactoryBot.define do account_id { 1 } category_id { 1 } author_id { 1 } - title { 'MyString' } - slug { 'MyString' } + title { Faker::Movie.title } content { 'MyText' } description { 'MyDescrption' } status { 1 } diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index 3fffa63d6..2e0f957dc 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -119,11 +119,23 @@ RSpec.describe Article, type: :model do records = portal_1.articles.search(params) expect(records.count).to eq(2) end + + it 'auto saves article slug' do + article = create(:article, category_id: category_1.id, title: 'the awesome article 1', content: 'This is the content', portal_id: portal_1.id, + author_id: user.id) + expect(article.slug).to include('the-awesome-article-1') + end end context 'with pagination' do it 'returns paginated articles' do - create_list(:article, 30, category_id: category_2.id, slug: 'title-1', title: 'title 1', portal_id: portal_2.id, author_id: user.id) + build_list(:article, 30) do |record, i| + record.category_id = category_2.id + record.title = "title #{i}" + record.portal_id = portal_2.id + record.author_id = user.id + record.save! + end params = { category_slug: 'category_2' } records = portal_2.articles.search(params) expect(records.count).to eq(25) From 4f0360c7a2ac455a671a688ea897319a73e246b2 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Fri, 30 Sep 2022 11:28:18 -0700 Subject: [PATCH 10/62] chore: Allow setting "users.display_name" in Platform API (#5532) --- .../platform/api/v1/users_controller.rb | 2 +- .../platform/api/v1/users_controller_spec.rb | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/app/controllers/platform/api/v1/users_controller.rb b/app/controllers/platform/api/v1/users_controller.rb index 12c87deb5..2c8995f81 100644 --- a/app/controllers/platform/api/v1/users_controller.rb +++ b/app/controllers/platform/api/v1/users_controller.rb @@ -51,6 +51,6 @@ class Platform::Api::V1::UsersController < PlatformController end def user_params - params.permit(:name, :email, :password, custom_attributes: {}) + params.permit(:name, :display_name, :email, :password, custom_attributes: {}) end end diff --git a/spec/controllers/platform/api/v1/users_controller_spec.rb b/spec/controllers/platform/api/v1/users_controller_spec.rb index 57fa81bd4..ca3cd3bf9 100644 --- a/spec/controllers/platform/api/v1/users_controller_spec.rb +++ b/spec/controllers/platform/api/v1/users_controller_spec.rb @@ -96,15 +96,24 @@ RSpec.describe 'Platform Users API', type: :request do it 'creates a new user and permissible for the user' do expect do - post '/platform/api/v1/users/', params: { name: 'test', email: 'test@test.com', password: 'Password1!', + post '/platform/api/v1/users/', params: { name: 'test', display_name: 'displaytest', + email: 'test@test.com', password: 'Password1!', custom_attributes: { test: 'test_create' } }, headers: { api_access_token: platform_app.access_token.token }, as: :json end.not_to enqueue_mail expect(response).to have_http_status(:success) data = JSON.parse(response.body) - expect(data['email']).to eq('test@test.com') - expect(data['custom_attributes']['test']).to eq('test_create') + expect(data).to match( + hash_including( + 'name' => 'test', + 'display_name' => 'displaytest', + 'email' => 'test@test.com', + 'custom_attributes' => { + 'test' => 'test_create' + } + ) + ) expect(platform_app.platform_app_permissibles.first.permissible_id).to eq data['id'] end From 7b54990ae641ad8199239b76a06166d7c1e6230d Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Sat, 1 Oct 2022 00:03:00 +0530 Subject: [PATCH 11/62] fix: Updated IMAP errors add method (#5520) fixes: #5519 --- app/models/message.rb | 2 +- spec/models/message_spec.rb | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/models/message.rb b/app/models/message.rb index a2382ae3a..2930786f9 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -241,7 +241,7 @@ class Message < ApplicationRecord end def validate_attachments_limit(_attachment) - errors.add(attachments: 'exceeded maximum allowed') if attachments.size >= NUMBER_OF_PERMITTED_ATTACHMENTS + errors.add(:attachments, message: 'exceeded maximum allowed') if attachments.size >= NUMBER_OF_PERMITTED_ATTACHMENTS end def set_conversation_activity diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index e74a1129d..4940d704a 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -106,6 +106,19 @@ RSpec.describe Message, type: :model do end end + context 'when attachments size maximum' do + let(:message) { build(:message, content_type: nil, account: create(:account)) } + + it 'add errors to message for attachment size is more than allowed limit' do + 16.times.each do + attachment = message.attachments.new(account_id: message.account_id, file_type: :image) + attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png') + end + + expect(message.errors.messages).to eq({ attachments: ['exceeded maximum allowed'] }) + end + end + context 'when email notifiable message' do let(:message) { build(:message, content_type: nil, account: create(:account)) } From 705d06ac3c0237e0b07f56bfba676ee8b7f2d83c Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Sat, 1 Oct 2022 03:33:33 +0530 Subject: [PATCH 12/62] fix: Avoid editor formatting issues when a canned response is edited (#5533) --- .../components/widgets/WootWriter/Editor.vue | 132 ++++++++++-------- .../widgets/conversation/ReplyBox.vue | 8 ++ .../dashboard/helper/localStorage.js | 1 + .../helpcenter/components/ArticleEditor.vue | 1 + 4 files changed, 85 insertions(+), 57 deletions(-) diff --git a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue index a21658a8a..92023444c 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue @@ -28,7 +28,7 @@ import { suggestionsPlugin, triggerCharacters, } from '@chatwoot/prosemirror-schema/src/mentions/plugin'; -import { EditorState } from 'prosemirror-state'; +import { EditorState, Selection } from 'prosemirror-state'; import { defaultMarkdownParser } from 'prosemirror-markdown'; import { wootWriterSetup } from '@chatwoot/prosemirror-schema'; @@ -61,23 +61,28 @@ export default { mixins: [eventListenerMixins], props: { value: { type: String, default: '' }, + editorId: { type: String, default: '' }, placeholder: { type: String, default: '' }, isPrivate: { type: Boolean, default: false }, - isFormatMode: { type: Boolean, default: false }, enableSuggestions: { type: Boolean, default: true }, }, data() { return { - lastValue: null, showUserMentions: false, showCannedMenu: false, mentionSearchKey: '', cannedSearchTerm: '', editorView: null, range: null, + state: undefined, }; }, computed: { + contentFromEditor() { + return addMentionsToMarkdownSerializer( + defaultMarkdownSerializer + ).serialize(this.editorView.state.doc); + }, plugins() { if (!this.enableSuggestions) { return []; @@ -102,7 +107,6 @@ export default { onExit: () => { this.mentionSearchKey = ''; this.showUserMentions = false; - this.editorView = null; return false; }, onKeyDown: ({ event }) => { @@ -131,7 +135,6 @@ export default { onExit: () => { this.cannedSearchTerm = ''; this.showCannedMenu = false; - this.editorView = null; return false; }, onKeyDown: ({ event }) => { @@ -149,54 +152,57 @@ export default { this.$emit('toggle-canned-menu', !this.isPrivate && updatedValue); }, value(newValue = '') { - if (newValue !== this.lastValue) { - const { tr } = this.state; - if (this.isFormatMode) { - this.state = createState( - newValue, - this.placeholder, - this.plugins, - this.isFormatMode - ); - } else { - tr.insertText(newValue, 0, tr.doc.content.size); - this.state = this.view.state.apply(tr); - } - this.view.updateState(this.state); + if (newValue !== this.contentFromEditor) { + this.reloadState(); } }, + editorId() { + this.reloadState(); + }, + isPrivate() { + this.reloadState(); + }, }, created() { this.state = createState(this.value, this.placeholder, this.plugins); }, mounted() { - this.view = new EditorView(this.$refs.editor, { - state: this.state, - dispatchTransaction: tx => { - this.state = this.state.apply(tx); - this.emitOnChange(); - }, - handleDOMEvents: { - keyup: () => { - this.onKeyup(); - }, - focus: () => { - this.onFocus(); - }, - blur: () => { - this.onBlur(); - }, - paste: (view, event) => { - const data = event.clipboardData.files; - if (data.length > 0) { - event.preventDefault(); - } - }, - }, - }); + this.createEditorView(); + this.editorView.updateState(this.state); this.focusEditorInputField(); }, methods: { + reloadState() { + this.state = createState(this.value, this.placeholder, this.plugins); + this.editorView.updateState(this.state); + this.focusEditorInputField(); + }, + createEditorView() { + this.editorView = new EditorView(this.$refs.editor, { + state: this.state, + dispatchTransaction: tx => { + this.state = this.state.apply(tx); + this.emitOnChange(); + }, + handleDOMEvents: { + keyup: () => { + this.onKeyup(); + }, + focus: () => { + this.onFocus(); + }, + blur: () => { + this.onBlur(); + }, + paste: (view, event) => { + const data = event.clipboardData.files; + if (data.length > 0) { + event.preventDefault(); + } + }, + }, + }); + }, handleKeyEvents(e) { if (hasPressedAltAndPKey(e)) { this.focusEditorInputField(); @@ -206,47 +212,59 @@ export default { } }, focusEditorInputField() { - this.$refs.editor.querySelector('div.ProseMirror-woot-style').focus(); + const { tr } = this.editorView.state; + const selection = Selection.atEnd(tr.doc); + + this.editorView.dispatch(tr.setSelection(selection)); + this.editorView.focus(); }, insertMentionNode(mentionItem) { - if (!this.view) { + if (!this.editorView) { return null; } - const node = this.view.state.schema.nodes.mention.create({ + const node = this.editorView.state.schema.nodes.mention.create({ userId: mentionItem.key, userFullName: mentionItem.label, }); - const tr = this.view.state.tr.replaceWith( + const tr = this.editorView.state.tr.replaceWith( this.range.from, this.range.to, node ); - this.state = this.view.state.apply(tr); + this.state = this.editorView.state.apply(tr); return this.emitOnChange(); }, insertCannedResponse(cannedItem) { - if (!this.view) { + if (!this.editorView) { return null; } - const tr = this.view.state.tr.insertText( + const tr = this.editorView.state.tr.insertText( cannedItem, this.range.from, this.range.to ); - this.state = this.view.state.apply(tr); - return this.emitOnChange(); + this.state = this.editorView.state.apply(tr); + this.emitOnChange(); + + // Hacky fix for #5501 + this.state = createState( + this.contentFromEditor, + this.placeholder, + this.plugins + ); + this.editorView.updateState(this.state); + return false; }, emitOnChange() { - this.view.updateState(this.state); - this.lastValue = addMentionsToMarkdownSerializer( - defaultMarkdownSerializer - ).serialize(this.state.doc); - this.$emit('input', this.lastValue); + this.editorView.updateState(this.state); + + this.$emit('input', this.contentFromEditor); }, + hideMentions() { this.showUserMentions = false; }, diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index d24b31d30..53a793e48 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -56,6 +56,7 @@ {}, }; }, mounted() { From 9ea43a2678664e6ab550a7877ea2964c90fb40b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kube=C5=A1?= <46596180+KubesDavid@users.noreply.github.com> Date: Mon, 3 Oct 2022 14:13:50 +0200 Subject: [PATCH 13/62] chore: Improve Nginx settings for speed and security (#5144) * fix: Fixes #5138 * Move to helper function * Improve Nginx settings * chore: set ssl_prefer_server_ciphers to off ssl_prefer_server_ciphers should be set to `off` in a modern context. ref: https://ssl-config.mozilla.org/#server=nginx&version=1.17.7&config=modern&openssl=1.1.1k&guideline=5.6 Co-authored-by: Vishnu Narayanan --- deployment/nginx_chatwoot.conf | 54 ++++++++++++++++++++++------------ 1 file changed, 35 insertions(+), 19 deletions(-) diff --git a/deployment/nginx_chatwoot.conf b/deployment/nginx_chatwoot.conf index 8359431c9..95a5b145a 100644 --- a/deployment/nginx_chatwoot.conf +++ b/deployment/nginx_chatwoot.conf @@ -1,3 +1,14 @@ +upstream backend { + zone upstreams 64K; + server 127.0.0.1:3000; + keepalive 32; +} + +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + server { listen 80; listen [::]:80; @@ -6,12 +17,12 @@ server { access_log /var/log/nginx/chatwoot_access_80.log; error_log /var/log/nginx/chatwoot_error_80.log; - return 301 https://chatwoot.domain.com/; + return 301 https://chatwoot.domain.com$request_uri; } server { - listen 443 ssl http2; - listen [::]:443 ssl http2; + listen 443 ssl http2 reuseport; + listen [::]:443 ssl http2 reuseport; server_name chatwoot.domain.com www.chatwoot.domain.com; underscores_in_headers on; @@ -20,28 +31,33 @@ server { error_log /var/log/nginx/chatwoot_error_443.log; location / { - proxy_pass_header Authorization; - proxy_pass http://127.0.0.1:3000; - proxy_set_header Upgrade $http_upgrade; - proxy_set_header Connection "upgrade"; - proxy_set_header Host $host; - proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Forwarded-Ssl on; # Optional - proxy_set_header X-Real-IP $remote_addr; - proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; - proxy_http_version 1.1; - proxy_set_header Connection ""; - proxy_buffering off; - client_max_body_size 0; - proxy_read_timeout 36000s; - proxy_redirect off; + proxy_pass http://backend; + proxy_redirect off; + + proxy_pass_header Authorization; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Ssl on; # Optional + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + client_max_body_size 0; + proxy_read_timeout 36000s; } ssl_certificate /etc/letsencrypt/live/chatwoot.domain.com/fullchain.pem; # managed by Certbot ssl_certificate_key /etc/letsencrypt/live/chatwoot.domain.com/privkey.pem; # managed by Certbot - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; ssl_dhparam /etc/ssl/dhparam; + ssl_early_data on; + ssl_buffer_size 4k; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 1d; + add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; } From beedfc47bfde31545ab67cfa7c0c8d4007ad040f Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Tue, 4 Oct 2022 03:57:34 +0530 Subject: [PATCH 14/62] feat: Allow users to select `Cmd+Enter` as a hotkey (#4401) Co-authored-by: Pranav Raj S --- .../dashboard/components/ui/PreviewCard.vue | 113 ++++++++++++++++++ .../widgets/WootWriter/ReplyBottomPanel.vue | 32 ----- .../widgets/conversation/ReplyBox.vue | 100 ++++++++-------- .../i18n/locale/en/conversation.json | 1 - .../dashboard/i18n/locale/en/settings.json | 15 +++ .../dashboard/mixins/specs/uiSettings.spec.js | 24 ++++ app/javascript/dashboard/mixins/uiSettings.js | 19 ++- .../dashboard/settings/profile/Index.vue | 77 +++++++++++- .../settings/profile/MessageSignature.vue | 2 +- .../settings/profile/NotificationSettings.vue | 6 +- .../shared/helpers/KeyboardHelpers.js | 26 ++++ .../helpers/specs/KeyboardHelpers.spec.js | 22 +++- .../images/dashboard/editor/cmd-editor.png | Bin 0 -> 149362 bytes .../images/dashboard/editor/enter-editor.png | Bin 0 -> 147829 bytes 14 files changed, 344 insertions(+), 93 deletions(-) create mode 100644 app/javascript/dashboard/components/ui/PreviewCard.vue create mode 100644 public/assets/images/dashboard/editor/cmd-editor.png create mode 100644 public/assets/images/dashboard/editor/enter-editor.png diff --git a/app/javascript/dashboard/components/ui/PreviewCard.vue b/app/javascript/dashboard/components/ui/PreviewCard.vue new file mode 100644 index 000000000..751a070a5 --- /dev/null +++ b/app/javascript/dashboard/components/ui/PreviewCard.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue index 74cd9de4d..9ace1ceb2 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue @@ -91,17 +91,6 @@
-
- - -
{ }); }); }); + +describe('isEditorHotKeyEnabled', () => { + it('returns true if hot key is not configured and enter to send flag is true', () => { + expect( + isEditorHotKeyEnabled({ enter_to_send_enabled: true }, 'enter') + ).toEqual(true); + expect( + isEditorHotKeyEnabled({ enter_to_send_enabled: true }, 'cmd_enter') + ).toEqual(false); + + expect(isEditorHotKeyEnabled({}, 'cmd_enter')).toEqual(true); + expect(isEditorHotKeyEnabled({}, 'enter')).toEqual(false); + }); + + it('returns correct value if hot key is configured', () => { + expect( + isEditorHotKeyEnabled({ editor_message_key: 'enter' }, 'enter') + ).toEqual(true); + expect( + isEditorHotKeyEnabled({ editor_message_key: 'cmd_enter' }, 'enter') + ).toEqual(false); + }); +}); diff --git a/app/javascript/dashboard/mixins/uiSettings.js b/app/javascript/dashboard/mixins/uiSettings.js index e265975e1..adc407eb3 100644 --- a/app/javascript/dashboard/mixins/uiSettings.js +++ b/app/javascript/dashboard/mixins/uiSettings.js @@ -10,11 +10,24 @@ export const DEFAULT_CONTACT_SIDEBAR_ITEMS_ORDER = [ { name: 'contact_labels' }, { name: 'previous_conversation' }, ]; + +export const isEditorHotKeyEnabled = (uiSettings, key) => { + const { + editor_message_key: editorMessageKey, + enter_to_send_enabled: enterToSendEnabled, + } = uiSettings || {}; + if (!editorMessageKey) { + if (enterToSendEnabled) { + return key === 'enter'; + } + return key === 'cmd_enter'; + } + return editorMessageKey === key; +}; + export default { computed: { - ...mapGetters({ - uiSettings: 'getUISettings', - }), + ...mapGetters({ uiSettings: 'getUISettings' }), conversationSidebarItemsOrder() { const { conversation_sidebar_items_order: itemsOrder } = this.uiSettings; return itemsOrder || DEFAULT_CONVERSATION_SIDEBAR_ITEMS_ORDER; diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue index 53152f09d..23b5425e2 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/Index.vue @@ -70,6 +70,31 @@
+
+
+

+ {{ $t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.TITLE') }} +

+

+ {{ $t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.NOTE') }} +

+
+
+ +
+
@@ -102,14 +127,19 @@ import alertMixin from 'shared/mixins/alertMixin'; import ChangePassword from './ChangePassword'; import MessageSignature from './MessageSignature'; import globalConfigMixin from 'shared/mixins/globalConfigMixin'; +import uiSettingsMixin, { + isEditorHotKeyEnabled, +} from 'dashboard/mixins/uiSettings'; +import PreviewCard from 'dashboard/components/ui/PreviewCard.vue'; export default { components: { NotificationSettings, ChangePassword, MessageSignature, + PreviewCard, }, - mixins: [alertMixin, globalConfigMixin], + mixins: [alertMixin, globalConfigMixin, uiSettingsMixin], data() { return { avatarFile: '', @@ -119,6 +149,28 @@ export default { email: '', isProfileUpdating: false, errorMessage: '', + keyOptions: [ + { + key: 'enter', + src: '/assets/images/dashboard/editor/enter-editor.png', + heading: this.$t( + 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.ENTER_KEY.HEADING' + ), + content: this.$t( + 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.ENTER_KEY.CONTENT' + ), + }, + { + key: 'cmd_enter', + src: '/assets/images/dashboard/editor/cmd-editor.png', + heading: this.$t( + 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.CMD_ENTER_KEY.HEADING' + ), + content: this.$t( + 'PROFILE_SETTINGS.FORM.SEND_MESSAGE.CARD.CMD_ENTER_KEY.CONTENT' + ), + }, + ], }; }, validations: { @@ -158,6 +210,7 @@ export default { this.avatarUrl = this.currentUser.avatar_url; this.displayName = this.currentUser.display_name; }, + isEditorHotKeyEnabled, async updateUser() { this.$v.$touch(); if (this.$v.$invalid) { @@ -207,6 +260,12 @@ export default { showDeleteButton() { return this.avatarUrl && !this.avatarUrl.includes('www.gravatar.com'); }, + toggleEditorMessageKey(key) { + this.updateUISettings({ editor_message_key: key }); + this.showAlert( + this.$t('PROFILE_SETTINGS.FORM.SEND_MESSAGE.UPDATE_SUCCESS') + ); + }, }, }; @@ -216,18 +275,32 @@ export default { @import '~dashboard/assets/scss/mixins.scss'; .profile--settings { - padding: 24px; overflow: auto; + padding: 24px; } .profile--settings--row { @include border-normal-bottom; + align-items: center; + display: flex; padding: $space-normal; + .small-3 { padding: $space-normal $space-medium $space-normal 0; } + .small-9 { padding: $space-normal; } + + .card-preview { + display: flex; + flex-direction: row; + + .preview-button { + cursor: pointer; + margin-right: var(--space-normal); + } + } } diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue index e08e4fdee..557f239dc 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/MessageSignature.vue @@ -77,7 +77,7 @@ export default { methods: { initValues() { const { message_signature: messageSignature } = this.currentUser; - this.messageSignature = messageSignature; + this.messageSignature = messageSignature || ''; }, async updateSignature() { this.$v.$touch(); diff --git a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue index bbf92b43d..60584d726 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/profile/NotificationSettings.vue @@ -154,7 +154,7 @@ ) }}

-
+
Date: Wed, 5 Oct 2022 13:37:49 +0200 Subject: [PATCH 17/62] feat: Enable Docker Buildx multi-arch builds with arm64 support(#5545) Fixes #2575 multi-arch images with arm64 support CE edition images Co-authored-by: Vishnu Narayanan --- .github/workflows/publish_foss_docker.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/publish_foss_docker.yml b/.github/workflows/publish_foss_docker.yml index 37f0f3e6e..aa1b15df2 100644 --- a/.github/workflows/publish_foss_docker.yml +++ b/.github/workflows/publish_foss_docker.yml @@ -58,5 +58,6 @@ jobs: with: context: . file: docker/Dockerfile + platforms: linux/amd64,linux/arm64 push: true tags: ${{ env.DOCKER_TAG }} From 8b0e95ece8ed77e38e8e3537d8ef45214a9bcf48 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Wed, 5 Oct 2022 10:59:31 -0700 Subject: [PATCH 18/62] fix: Flakiness in CI pipeline (#5562) - Fixing the recent flakiness in CI pipelines --- .circleci/config.yml | 9 ++++++--- Gemfile | 1 + Gemfile.lock | 5 ++++- spec/factories/articles.rb | 2 +- 4 files changed, 12 insertions(+), 5 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index a9e0bd450..fbb4fea90 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -19,6 +19,7 @@ defaults: &defaults - COVERAGE: true - LOG_LEVEL: warn parallelism: 4 + resource_class: large jobs: build: @@ -122,9 +123,11 @@ jobs: mkdir -p coverage ~/tmp/cc-test-reporter before-build TESTFILES=$(circleci tests glob "spec/**/*_spec.rb" | circleci tests split --split-by=timings) - bundle exec rspec --profile 10 \ - --out test-results/rspec/rspec.xml \ + bundle exec rspec --format progress \ + --format RspecJunitFormatter \ + --out ~/tmp/test-results/rspec.xml \ -- ${TESTFILES} + no_output_timeout: 30m - run: name: Code Climate Test Coverage command: | @@ -137,7 +140,7 @@ jobs: ~/tmp/cc-test-reporter before-build TESTFILES=$(circleci tests glob **/specs/*.spec.js | circleci tests split --split-by=timings) yarn test:coverage --profile 10 \ - --out test-results/frontend_specs/rspec.xml \ + --out ~/tmp/test-results/yarn.xml \ -- ${TESTFILES} - run: name: Code Climate Test Coverage diff --git a/Gemfile b/Gemfile index ca6c7856d..d47b5e449 100644 --- a/Gemfile +++ b/Gemfile @@ -174,6 +174,7 @@ group :development, :test do gem 'listen' gem 'mock_redis' gem 'pry-rails' + gem 'rspec_junit_formatter' gem 'rspec-rails', '~> 5.0.0' gem 'rubocop', require: false gem 'rubocop-performance', require: false diff --git a/Gemfile.lock b/Gemfile.lock index 5cf4f020d..e8095a5e5 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -536,6 +536,8 @@ GEM rspec-mocks (~> 3.10) rspec-support (~> 3.10) rspec-support (3.11.0) + rspec_junit_formatter (0.6.0) + rspec-core (>= 2, < 4, != 2.12.0) rubocop (1.31.2) json (~> 2.3) parallel (~> 1.10) @@ -769,6 +771,7 @@ DEPENDENCIES responders rest-client rspec-rails (~> 5.0.0) + rspec_junit_formatter rubocop rubocop-performance rubocop-rails @@ -805,4 +808,4 @@ RUBY VERSION ruby 3.0.4p208 BUNDLED WITH - 2.3.17 + 2.3.18 diff --git a/spec/factories/articles.rb b/spec/factories/articles.rb index 30c842621..ec9c4cd2d 100644 --- a/spec/factories/articles.rb +++ b/spec/factories/articles.rb @@ -3,7 +3,7 @@ FactoryBot.define do account_id { 1 } category_id { 1 } author_id { 1 } - title { Faker::Movie.title } + title { "#{Faker::Movie.title} #{SecureRandom.hex}" } content { 'MyText' } description { 'MyDescrption' } status { 1 } From cd4c1ef27ed7f98774444267122d27def1d3b6cf Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 5 Oct 2022 14:18:16 -0700 Subject: [PATCH 19/62] feat: Update the design of mentions with thumbnail (#5551) --- .../components/widgets/WootWriter/Editor.vue | 7 +- .../widgets/conversation/TagAgents.vue | 161 +++++++++++++++--- .../widgets/mentions/MentionBox.vue | 45 +---- .../mentions/mentionSelectionKeyboardMixin.js | 39 +++++ .../mentionSelectionKeyboardMixin.spec.js | 64 +++++++ 5 files changed, 251 insertions(+), 65 deletions(-) create mode 100644 app/javascript/dashboard/components/widgets/mentions/mentionSelectionKeyboardMixin.js create mode 100644 app/javascript/dashboard/components/widgets/mentions/specs/mentionSelectionKeyboardMixin.spec.js diff --git a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue index 92023444c..ee3337cf9 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/Editor.vue @@ -6,7 +6,7 @@ @click="insertMentionNode" /> @@ -223,8 +223,8 @@ export default { return null; } const node = this.editorView.state.schema.nodes.mention.create({ - userId: mentionItem.key, - userFullName: mentionItem.label, + userId: mentionItem.id, + userFullName: mentionItem.name, }); const tr = this.editorView.state.tr.replaceWith( @@ -256,6 +256,7 @@ export default { this.plugins ); this.editorView.updateState(this.state); + this.focusEditorInputField(); return false; }, diff --git a/app/javascript/dashboard/components/widgets/conversation/TagAgents.vue b/app/javascript/dashboard/components/widgets/conversation/TagAgents.vue index 73002eb5c..8cfe1033b 100644 --- a/app/javascript/dashboard/components/widgets/conversation/TagAgents.vue +++ b/app/javascript/dashboard/components/widgets/conversation/TagAgents.vue @@ -1,49 +1,160 @@ + + diff --git a/app/javascript/dashboard/components/widgets/mentions/MentionBox.vue b/app/javascript/dashboard/components/widgets/mentions/MentionBox.vue index e5963d0ee..4613d8357 100644 --- a/app/javascript/dashboard/components/widgets/mentions/MentionBox.vue +++ b/app/javascript/dashboard/components/widgets/mentions/MentionBox.vue @@ -20,7 +20,9 @@ + diff --git a/app/javascript/dashboard/helper/URLHelper.js b/app/javascript/dashboard/helper/URLHelper.js index 04bd4104e..93dc40f28 100644 --- a/app/javascript/dashboard/helper/URLHelper.js +++ b/app/javascript/dashboard/helper/URLHelper.js @@ -6,7 +6,7 @@ export const frontendURL = (path, params) => { }; const getSSOAccountPath = ({ ssoAccountId, user }) => { - const { accounts = [] } = user || {}; + const { accounts = [], account_id = null } = user || {}; const ssoAccount = accounts.find( account => account.id === Number(ssoAccountId) ); @@ -14,7 +14,9 @@ const getSSOAccountPath = ({ ssoAccountId, user }) => { if (ssoAccount) { accountPath = `accounts/${ssoAccountId}`; } else if (accounts.length) { - accountPath = `accounts/${accounts[0].id}`; + // If the account id is not found, redirect to the first account + const accountId = account_id || accounts[0].id; + accountPath = `accounts/${accountId}`; } return accountPath; }; diff --git a/app/javascript/dashboard/store/modules/auth.js b/app/javascript/dashboard/store/modules/auth.js index 16bd0e4bb..17806959b 100644 --- a/app/javascript/dashboard/store/modules/auth.js +++ b/app/javascript/dashboard/store/modules/auth.js @@ -179,6 +179,14 @@ export const actions = { commit(types.SET_CURRENT_USER_AVAILABILITY, data[$state.currentUser.id]); } }, + + setActiveAccount: async (_, { accountId }) => { + try { + await authAPI.setActiveAccount({ accountId }); + } catch (error) { + // Ignore error + } + }, }; // mutations diff --git a/app/javascript/dashboard/store/modules/specs/auth/actions.spec.js b/app/javascript/dashboard/store/modules/specs/auth/actions.spec.js index f6211f324..6c1c85996 100644 --- a/app/javascript/dashboard/store/modules/specs/auth/actions.spec.js +++ b/app/javascript/dashboard/store/modules/specs/auth/actions.spec.js @@ -165,4 +165,15 @@ describe('#actions', () => { expect(commit.mock.calls).toEqual([]); }); }); + + describe('#setActiveAccount', () => { + it('sends correct mutations if account id is available', async () => { + actions.setActiveAccount( + { + commit, + }, + { accountId: 1 } + ); + }); + }); }); diff --git a/config/routes.rb b/config/routes.rb index 903c5efc8..8b9b43863 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -182,6 +182,7 @@ Rails.application.routes.draw do delete :avatar, on: :collection member do post :availability + put :set_active_account end end diff --git a/spec/controllers/api/v1/profiles_controller_spec.rb b/spec/controllers/api/v1/profiles_controller_spec.rb index 0e386752f..8c331d932 100644 --- a/spec/controllers/api/v1/profiles_controller_spec.rb +++ b/spec/controllers/api/v1/profiles_controller_spec.rb @@ -195,4 +195,27 @@ RSpec.describe 'Profile API', type: :request do end end end + + describe 'PUT /api/v1/profile/set_active_account' do + context 'when it is an unauthenticated user' do + it 'returns unauthorized' do + put '/api/v1/profile/set_active_account' + + expect(response).to have_http_status(:unauthorized) + end + end + + context 'when it is an authenticated user' do + let(:agent) { create(:user, password: 'Test123!', account: account, role: :agent) } + + it 'updates the last active account id' do + put '/api/v1/profile/set_active_account', + params: { profile: { account_id: account.id } }, + headers: agent.create_new_auth_token, + as: :json + + expect(response).to have_http_status(:success) + end + end + end end From 0a9ea6e272f3cfde03976aed57e9dd3af1386ee7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Oct 2022 17:32:00 -0700 Subject: [PATCH 22/62] chore(deps): bump google-protobuf from 3.21.2 to 3.21.7 (#5550) Bumps [google-protobuf](https://github.com/protocolbuffers/protobuf) from 3.21.2 to 3.21.7. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/generate_changelog.py) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v3.21.2...v3.21.7) --- updated-dependencies: - dependency-name: google-protobuf dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: Sojan Jose --- Gemfile.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index e8095a5e5..5b14d5b5e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -286,9 +286,9 @@ GEM google-cloud-core (~> 1.6) googleauth (>= 0.16.2, < 2.a) mini_mime (~> 1.0) - google-protobuf (3.21.2) - google-protobuf (3.21.2-x86_64-darwin) - google-protobuf (3.21.2-x86_64-linux) + google-protobuf (3.21.7) + google-protobuf (3.21.7-x86_64-darwin) + google-protobuf (3.21.7-x86_64-linux) googleapis-common-protos (1.3.12) google-protobuf (~> 3.14) googleapis-common-protos-types (~> 1.2) From 788b766179a9b30d1dd0a1b547a3d658cd54cf92 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 5 Oct 2022 22:00:15 -0700 Subject: [PATCH 23/62] feat: Quickly create canned responses (#5563) --- .../widgets/conversation/Message.vue | 9 +-- .../i18n/locale/en/conversation.json | 3 +- .../components/MessageContextMenu.vue | 69 ++++++++++++++++--- .../dashboard/settings/canned/AddCanned.vue | 9 +-- .../FluentIcon/dashboard-icons.json | 3 +- 5 files changed, 71 insertions(+), 22 deletions(-) diff --git a/app/javascript/dashboard/components/widgets/conversation/Message.vue b/app/javascript/dashboard/components/widgets/conversation/Message.vue index 5051a54fa..3481125ca 100644 --- a/app/javascript/dashboard/components/widgets/conversation/Message.vue +++ b/app/javascript/dashboard/components/widgets/conversation/Message.vue @@ -100,10 +100,11 @@ v-if="isBubble && !isMessageDeleted" :is-open="showContextMenu" :show-copy="hasText" + :show-canned-response-option="isOutgoing" :menu-position="contextMenuPosition" + :message-content="data.content" @toggle="handleContextMenuClick" @delete="handleDelete" - @copy="handleCopy" />
@@ -126,7 +127,6 @@ import alertMixin from 'shared/mixins/alertMixin'; import contentTypeMixin from 'shared/mixins/contentTypeMixin'; import { MESSAGE_TYPE, MESSAGE_STATUS } from 'shared/constants/messages'; import { generateBotMessageContent } from './helpers/botMessageContentHelper'; -import { copyTextToClipboard } from 'shared/helpers/clipboard'; export default { components: { @@ -408,11 +408,6 @@ export default { this.showAlert(this.$t('CONVERSATION.FAIL_DELETE_MESSSAGE')); } }, - async handleCopy() { - await copyTextToClipboard(this.data.content); - this.showAlert(this.$t('CONTACT_PANEL.COPY_SUCCESSFUL')); - this.showContextMenu = false; - }, async retrySendMessage() { await this.$store.dispatch('sendMessageWithData', this.data); }, diff --git a/app/javascript/dashboard/i18n/locale/en/conversation.json b/app/javascript/dashboard/i18n/locale/en/conversation.json index f3d5595e7..7c6fa76d5 100644 --- a/app/javascript/dashboard/i18n/locale/en/conversation.json +++ b/app/javascript/dashboard/i18n/locale/en/conversation.json @@ -150,7 +150,8 @@ }, "CONTEXT_MENU": { "COPY": "Copy", - "DELETE": "Delete" + "DELETE": "Delete", + "CREATE_A_CANNED_RESPONSE": "Add to canned responses" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue index eb069b163..a50e6bb0d 100644 --- a/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue +++ b/app/javascript/dashboard/modules/conversations/components/MessageContextMenu.vue @@ -1,5 +1,15 @@ diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue index 073dc9c9a..a182bb8b2 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/channels/CloudWhatsapp.vue @@ -85,25 +85,6 @@
-
- -
-
'test_key', 'phone_number_id' => '123456789', 'business_account_id' => '123456789', - 'webhook_verify_token': 'test_token' } + channel_whatsapp.provider_config = channel_whatsapp.provider_config.merge({ 'api_key' => 'test_key', 'phone_number_id' => '123456789', + 'business_account_id' => '123456789' }) end end diff --git a/spec/models/channel/whatsapp_spec.rb b/spec/models/channel/whatsapp_spec.rb index d96ffdc85..9a6620a5e 100644 --- a/spec/models/channel/whatsapp_spec.rb +++ b/spec/models/channel/whatsapp_spec.rb @@ -20,4 +20,20 @@ RSpec.describe Channel::Whatsapp do expect(channel.save).to be(true) end end + + describe 'webhook_verify_token' do + it 'generates webhook_verify_token if not present' do + channel = create(:channel_whatsapp, provider_config: { webhook_verify_token: nil }, provider: 'whatsapp_cloud', account: create(:account), + validate_provider_config: false, sync_templates: false) + + expect(channel.provider_config['webhook_verify_token']).not_to be_nil + end + + it 'does not generate webhook_verify_token if present' do + channel = create(:channel_whatsapp, provider: 'whatsapp_cloud', provider_config: { webhook_verify_token: '123' }, account: create(:account), + validate_provider_config: false, sync_templates: false) + + expect(channel.provider_config['webhook_verify_token']).to eq '123' + end + end end diff --git a/spec/models/contact_inbox_spec.rb b/spec/models/contact_inbox_spec.rb index aba062980..e38ad81e8 100644 --- a/spec/models/contact_inbox_spec.rb +++ b/spec/models/contact_inbox_spec.rb @@ -66,11 +66,11 @@ RSpec.describe ContactInbox do expect(valid_source_id.valid?).to be(true) expect(ci_character_in_source_id.valid?).to be(false) expect(ci_character_in_source_id.errors.full_messages).to eq( - ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,14}\\z)'] + ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,15}\\z)'] ) expect(ci_without_plus_in_source_id.valid?).to be(false) expect(ci_without_plus_in_source_id.errors.full_messages).to eq( - ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,14}\\z)'] + ['Source invalid source id for twilio sms inbox. valid Regex (?-mix:^\\+\\d{1,15}\\z)'] ) end @@ -83,11 +83,11 @@ RSpec.describe ContactInbox do expect(valid_source_id.valid?).to be(true) expect(ci_character_in_source_id.valid?).to be(false) expect(ci_character_in_source_id.errors.full_messages).to eq( - ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,14}\\z)'] + ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,15}\\z)'] ) expect(ci_without_plus_in_source_id.valid?).to be(false) expect(ci_without_plus_in_source_id.errors.full_messages).to eq( - ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,14}\\z)'] + ['Source invalid source id for twilio whatsapp inbox. valid Regex (?-mix:^whatsapp:\\+\\d{1,15}\\z)'] ) end end From 9b5c0de0eaf2fd8730cdfe25e1d6647fa66d2b02 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 12 Oct 2022 11:58:52 +1100 Subject: [PATCH 33/62] chore: Add router views for agent_bots (#5600) --- .../layout/config/sidebarItems/settings.js | 11 ++ .../sidebarComponents/SecondaryNavItem.vue | 19 +++- .../dashboard/i18n/locale/en/agentBots.json | 5 + .../dashboard/i18n/locale/en/index.js | 106 +++++++++--------- .../dashboard/i18n/locale/en/settings.json | 1 + .../dashboard/settings/agentBots/Index.vue | 18 +++ .../settings/agentBots/agentBot.routes.js | 40 +++++++ .../settings/agentBots/csml/Edit.vue | 6 + .../dashboard/settings/agentBots/csml/New.vue | 6 + .../dashboard/settings/settings.routes.js | 14 ++- .../FluentIcon/dashboard-icons.json | 1 + config/features.yml | 2 + 12 files changed, 168 insertions(+), 61 deletions(-) create mode 100644 app/javascript/dashboard/i18n/locale/en/agentBots.json create mode 100644 app/javascript/dashboard/routes/dashboard/settings/agentBots/Index.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/agentBots/agentBot.routes.js create mode 100644 app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/Edit.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/New.vue diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js index 990b35d4a..9ea287963 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js @@ -3,6 +3,7 @@ import { frontendURL } from '../../../../helper/URLHelper'; const settings = accountId => ({ parentNav: 'settings', routes: [ + 'agent_bots', 'agent_list', 'canned_list', 'labels_list', @@ -74,10 +75,20 @@ const settings = accountId => ({ { icon: 'automation', label: 'AUTOMATION', + beta: true, hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/automation/list`), toStateName: 'automation_list', }, + { + icon: 'bot', + label: 'AGENT_BOTS', + beta: true, + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/settings/agent-bots`), + toStateName: 'agent_bots', + featureFlagKey: 'agent_bots', + }, { icon: 'chat-multiple', label: 'CANNED_RESPONSES', diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue index 220ab18fa..a7a6761cf 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue @@ -1,5 +1,5 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/agentBots/agentBot.routes.js b/app/javascript/dashboard/routes/dashboard/settings/agentBots/agentBot.routes.js new file mode 100644 index 000000000..e06f18a0b --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/agentBots/agentBot.routes.js @@ -0,0 +1,40 @@ +import SettingsContent from '../Wrapper'; +const Bot = () => import('./Index.vue'); +const CsmlEditBot = () => import('./csml/Edit.vue'); +const CsmlNewBot = () => import('./csml/New.vue'); +import { frontendURL } from '../../../../helper/URLHelper'; + +export default { + routes: [ + { + path: frontendURL('accounts/:accountId/settings/agent-bots'), + roles: ['administrator'], + component: SettingsContent, + props: { + headerTitle: 'AGENT_BOTS.HEADER', + icon: 'bot', + showNewButton: false, + }, + children: [ + { + path: '', + name: 'agent_bots', + component: Bot, + roles: ['administrator'], + }, + { + path: 'csml/new', + name: 'agent_bots_csml_new', + component: CsmlNewBot, + roles: ['administrator'], + }, + { + path: 'csml/:botId', + name: 'agent_bots_csml_edit', + component: CsmlEditBot, + roles: ['administrator'], + }, + ], + }, + ], +}; diff --git a/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/Edit.vue b/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/Edit.vue new file mode 100644 index 000000000..112961193 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/Edit.vue @@ -0,0 +1,6 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/New.vue b/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/New.vue new file mode 100644 index 000000000..84039a483 --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/agentBots/csml/New.vue @@ -0,0 +1,6 @@ + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js index 8f3de8f4e..b4ac93570 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js @@ -1,19 +1,20 @@ import { frontendURL } from '../../../helper/URLHelper'; import account from './account/account.routes'; import agent from './agents/agent.routes'; +import agentBot from './agentBots/agentBot.routes'; +import attributes from './attributes/attributes.routes'; +import automation from './automation/automation.routes'; +import billing from './billing/billing.routes'; +import campaigns from './campaigns/campaigns.routes'; import canned from './canned/canned.routes'; import inbox from './inbox/inbox.routes'; -import integrations from './integrations/integrations.routes'; import integrationapps from './integrationapps/integrations.routes'; +import integrations from './integrations/integrations.routes'; import labels from './labels/labels.routes'; import profile from './profile/profile.routes'; import reports from './reports/reports.routes'; -import campaigns from './campaigns/campaigns.routes'; -import teams from './teams/teams.routes'; -import attributes from './attributes/attributes.routes'; -import automation from './automation/automation.routes'; import store from '../../../store'; -import billing from './billing/billing.routes'; +import teams from './teams/teams.routes'; export default { routes: [ @@ -30,6 +31,7 @@ export default { }, ...account.routes, ...agent.routes, + ...agentBot.routes, ...attributes.routes, ...automation.routes, ...billing.routes, diff --git a/app/javascript/shared/components/FluentIcon/dashboard-icons.json b/app/javascript/shared/components/FluentIcon/dashboard-icons.json index 8b9412efc..0bce7c813 100644 --- a/app/javascript/shared/components/FluentIcon/dashboard-icons.json +++ b/app/javascript/shared/components/FluentIcon/dashboard-icons.json @@ -29,6 +29,7 @@ "M6.5 2A2.5 2.5 0 0 0 4 4.5v15A2.5 2.5 0 0 0 6.5 22h13.25a.75.75 0 0 0 0-1.5H6.5a1 1 0 0 1-1-1h14.25a.75.75 0 0 0 .75-.75V4.5A2.5 2.5 0 0 0 18 2H6.5ZM19 18H5.5V4.5a1 1 0 0 1 1-1H18a1 1 0 0 1 1 1V18Z" ], "book-open-globe-outline": "M3.5 5.75a.25.25 0 0 1 .25-.25H10c.69 0 1.25.56 1.25 1.25v8.959a6.49 6.49 0 0 1 1.5-2.646V6.75c0-.69.56-1.25 1.25-1.25h6.25a.25.25 0 0 1 .25.25v5.982A6.518 6.518 0 0 1 22 12.81V5.75A1.75 1.75 0 0 0 20.25 4H14c-.788 0-1.499.331-2 .863A2.742 2.742 0 0 0 10 4H3.75A1.75 1.75 0 0 0 2 5.75v12.5c0 .966.784 1.75 1.75 1.75H10c.495 0 .96-.13 1.36-.36a6.473 6.473 0 0 1-.343-1.663A1.248 1.248 0 0 1 10 18.5H3.75a.25.25 0 0 1-.25-.25V5.75ZM16.007 17c.04-1.415.248-2.669.553-3.585.171-.513.364-.893.554-1.134.195-.247.329-.281.386-.281.057 0 .192.034.386.281.19.241.383.62.554 1.134.305.916.513 2.17.553 3.585h-2.986Zm-.396-3.9c.108-.323.23-.622.368-.887A5.504 5.504 0 0 0 12.023 17h2.984c.04-1.5.26-2.866.604-3.9Zm3.778 0a6.133 6.133 0 0 0-.368-.887A5.504 5.504 0 0 1 22.978 17h-2.985c-.04-1.5-.26-2.866-.604-3.9Zm.604 4.9h2.985a5.504 5.504 0 0 1-3.957 4.787c.138-.265.26-.564.368-.886.345-1.035.564-2.4.604-3.901Zm-2.107 4.719c-.194.247-.329.281-.386.281-.057 0-.191-.034-.386-.281-.19-.241-.383-.62-.554-1.135-.305-.915-.513-2.17-.553-3.584h2.986c-.04 1.415-.248 2.669-.553 3.584-.171.514-.364.894-.554 1.135ZM12.023 18a5.504 5.504 0 0 0 3.956 4.787 6.133 6.133 0 0 1-.367-.886c-.346-1.035-.565-2.4-.605-3.901h-2.984Z", + "bot-outline": "M17.753 14a2.25 2.25 0 0 1 2.25 2.25v.905a3.75 3.75 0 0 1-1.307 2.846C17.13 21.345 14.89 22 12 22c-2.89 0-5.128-.656-6.691-2a3.75 3.75 0 0 1-1.306-2.843v-.908A2.25 2.25 0 0 1 6.253 14h11.5Zm0 1.5h-11.5a.75.75 0 0 0-.75.75v.908c0 .655.286 1.278.784 1.706C7.545 19.945 9.44 20.502 12 20.502c2.56 0 4.458-.557 5.719-1.64a2.25 2.25 0 0 0 .784-1.706v-.906a.75.75 0 0 0-.75-.75ZM11.898 2.008 12 2a.75.75 0 0 1 .743.648l.007.102V3.5h3.5a2.25 2.25 0 0 1 2.25 2.25v4.505a2.25 2.25 0 0 1-2.25 2.25h-8.5a2.25 2.25 0 0 1-2.25-2.25V5.75A2.25 2.25 0 0 1 7.75 3.5h3.5v-.749a.75.75 0 0 1 .648-.743L12 2l-.102.007ZM16.25 5h-8.5a.75.75 0 0 0-.75.75v4.505c0 .414.336.75.75.75h8.5a.75.75 0 0 0 .75-.75V5.75a.75.75 0 0 0-.75-.75Zm-6.5 1.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5Zm4.492 0a1.25 1.25 0 1 1 0 2.499 1.25 1.25 0 0 1 0-2.499Z", "building-bank-outline": "M13.032 2.325a1.75 1.75 0 0 0-2.064 0L3.547 7.74c-.978.713-.473 2.26.736 2.26H4.5v5.8A2.75 2.75 0 0 0 3 18.25v1.5c0 .413.336.75.75.75h16.5a.75.75 0 0 0 .75-.75v-1.5a2.75 2.75 0 0 0-1.5-2.45V10h.217c1.21 0 1.713-1.547.736-2.26l-7.421-5.416Zm-1.18 1.211a.25.25 0 0 1 .295 0L18.95 8.5H5.05l6.803-4.964ZM18 10v5.5h-2V10h2Zm-3.5 0v5.5h-1.75V10h1.75Zm-3.25 0v5.5H9.5V10h1.75Zm-5.5 7h12.5c.69 0 1.25.56 1.25 1.25V19h-15v-.75c0-.69.56-1.25 1.25-1.25ZM6 15.5V10h2v5.5H6Z", "calendar-clock-outline": [ "M21 6.25A3.25 3.25 0 0 0 17.75 3H6.25A3.25 3.25 0 0 0 3 6.25v11.5A3.25 3.25 0 0 0 6.25 21h5.772a6.471 6.471 0 0 1-.709-1.5H6.25a1.75 1.75 0 0 1-1.75-1.75V8.5h15v2.813a6.471 6.471 0 0 1 1.5.709V6.25ZM6.25 4.5h11.5c.966 0 1.75.784 1.75 1.75V7h-15v-.75c0-.966.784-1.75 1.75-1.75Z", diff --git a/config/features.yml b/config/features.yml index 6fbb73a78..01bfe00e5 100644 --- a/config/features.yml +++ b/config/features.yml @@ -15,3 +15,5 @@ enabled: false - name: help_center enabled: true +- name: agent_bots + enabled: false From 6c160ccad5244f068332348febc111c162e6de10 Mon Sep 17 00:00:00 2001 From: Fayaz Ahmed <15716057+fayazara@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:24:17 +0530 Subject: [PATCH 34/62] feat: Add API module and Vuex store for Macros (#5603) --- app/javascript/dashboard/api/macros.js | 16 ++ .../dashboard/api/specs/macros.spec.js | 14 ++ .../dashboard/store/modules/macros.js | 117 ++++++++++++++ .../modules/specs/macros/actions.spec.js | 151 ++++++++++++++++++ .../store/modules/specs/macros/fixtures.js | 135 ++++++++++++++++ .../modules/specs/macros/getters.spec.js | 32 ++++ .../modules/specs/macros/mutations.spec.js | 38 +++++ .../dashboard/store/mutation-types.js | 7 + 8 files changed, 510 insertions(+) create mode 100644 app/javascript/dashboard/api/macros.js create mode 100644 app/javascript/dashboard/api/specs/macros.spec.js create mode 100644 app/javascript/dashboard/store/modules/macros.js create mode 100644 app/javascript/dashboard/store/modules/specs/macros/actions.spec.js create mode 100644 app/javascript/dashboard/store/modules/specs/macros/fixtures.js create mode 100644 app/javascript/dashboard/store/modules/specs/macros/getters.spec.js create mode 100644 app/javascript/dashboard/store/modules/specs/macros/mutations.spec.js diff --git a/app/javascript/dashboard/api/macros.js b/app/javascript/dashboard/api/macros.js new file mode 100644 index 000000000..7b123c9e8 --- /dev/null +++ b/app/javascript/dashboard/api/macros.js @@ -0,0 +1,16 @@ +/* global axios */ +import ApiClient from './ApiClient'; + +class MacrosAPI extends ApiClient { + constructor() { + super('macros', { accountScoped: true }); + } + + executeMacro({ macroId, conversationIds }) { + return axios.post(`${this.url}/${macroId}/execute`, { + conversation_ids: conversationIds, + }); + } +} + +export default new MacrosAPI(); diff --git a/app/javascript/dashboard/api/specs/macros.spec.js b/app/javascript/dashboard/api/specs/macros.spec.js new file mode 100644 index 000000000..94e936521 --- /dev/null +++ b/app/javascript/dashboard/api/specs/macros.spec.js @@ -0,0 +1,14 @@ +import macros from '../macros'; +import ApiClient from '../ApiClient'; + +describe('#macrosAPI', () => { + it('creates correct instance', () => { + expect(macros).toBeInstanceOf(ApiClient); + expect(macros).toHaveProperty('get'); + expect(macros).toHaveProperty('create'); + expect(macros).toHaveProperty('update'); + expect(macros).toHaveProperty('delete'); + expect(macros).toHaveProperty('show'); + expect(macros.url).toBe('/api/v1/macros'); + }); +}); diff --git a/app/javascript/dashboard/store/modules/macros.js b/app/javascript/dashboard/store/modules/macros.js new file mode 100644 index 000000000..952f53f17 --- /dev/null +++ b/app/javascript/dashboard/store/modules/macros.js @@ -0,0 +1,117 @@ +import * as MutationHelpers from 'shared/helpers/vuex/mutationHelpers'; +import types from '../mutation-types'; +import MacrosAPI from '../../api/macros'; +import { throwErrorMessage } from '../utils/api'; + +export const state = { + records: [], + uiFlags: { + isFetchingItem: false, + isFetching: false, + isCreating: false, + isDeleting: false, + isUpdating: false, + isExecuting: false, + }, +}; + +export const getters = { + getMacros($state) { + return $state.records; + }, + getMacro: $state => id => { + return $state.records.find(record => record.id === Number(id)); + }, + getUIFlags($state) { + return $state.uiFlags; + }, +}; + +export const actions = { + get: async function getMacros({ commit }) { + commit(types.SET_MACROS_UI_FLAG, { isFetching: true }); + try { + const response = await MacrosAPI.get(); + commit(types.SET_MACROS, response.data.payload); + } catch (error) { + // Ignore error + } finally { + commit(types.SET_MACROS_UI_FLAG, { isFetching: false }); + } + }, + getSingleMacro: async function getMacroById({ commit }, macroId) { + commit(types.SET_MACROS_UI_FLAG, { isFetchingItem: true }); + try { + const response = await MacrosAPI.show(macroId); + commit(types.ADD_MACRO, response.data.payload); + } catch (error) { + // Ignore error + } finally { + commit(types.SET_MACROS_UI_FLAG, { isFetchingItem: false }); + } + }, + create: async function createMacro({ commit }, macrosObj) { + commit(types.SET_MACROS_UI_FLAG, { isCreating: true }); + try { + const response = await MacrosAPI.create(macrosObj); + commit(types.ADD_MACRO, response.data.payload); + } catch (error) { + throwErrorMessage(error); + } finally { + commit(types.SET_MACROS_UI_FLAG, { isCreating: false }); + } + }, + execute: async function executeMacro({ commit }, macrosObj) { + commit(types.SET_MACROS_UI_FLAG, { isExecuting: true }); + try { + await MacrosAPI.executeMacro(macrosObj); + } catch (error) { + throwErrorMessage(error); + } finally { + commit(types.SET_MACROS_UI_FLAG, { isExecuting: false }); + } + }, + update: async ({ commit }, { id, ...updateObj }) => { + commit(types.SET_MACROS_UI_FLAG, { isUpdating: true }); + try { + const response = await MacrosAPI.update(id, updateObj); + commit(types.EDIT_MACRO, response.data.payload); + } catch (error) { + throwErrorMessage(error); + } finally { + commit(types.SET_MACROS_UI_FLAG, { isUpdating: false }); + } + }, + delete: async ({ commit }, id) => { + commit(types.SET_MACROS_UI_FLAG, { isDeleting: true }); + try { + await MacrosAPI.delete(id); + commit(types.DELETE_MACRO, id); + } catch (error) { + throwErrorMessage(error); + } finally { + commit(types.SET_MACROS_UI_FLAG, { isDeleting: false }); + } + }, +}; + +export const mutations = { + [types.SET_MACROS_UI_FLAG]($state, data) { + $state.uiFlags = { + ...$state.uiFlags, + ...data, + }; + }, + [types.ADD_MACRO]: MutationHelpers.setSingleRecord, + [types.SET_MACROS]: MutationHelpers.set, + [types.EDIT_MACRO]: MutationHelpers.update, + [types.DELETE_MACRO]: MutationHelpers.destroy, +}; + +export default { + namespaced: true, + actions, + state, + getters, + mutations, +}; diff --git a/app/javascript/dashboard/store/modules/specs/macros/actions.spec.js b/app/javascript/dashboard/store/modules/specs/macros/actions.spec.js new file mode 100644 index 000000000..95bba8e1d --- /dev/null +++ b/app/javascript/dashboard/store/modules/specs/macros/actions.spec.js @@ -0,0 +1,151 @@ +import axios from 'axios'; +import { actions } from '../../macros'; +import * as types from '../../../mutation-types'; +import macrosList from './fixtures'; + +const commit = jest.fn(); +global.axios = axios; +jest.mock('axios'); + +describe('#actions', () => { + describe('#get', () => { + it('sends correct actions if API is success', async () => { + axios.get.mockResolvedValue({ data: { payload: macrosList } }); + await actions.get({ commit }); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isFetching: true }], + [types.default.SET_MACROS, macrosList], + [types.default.SET_MACROS_UI_FLAG, { isFetching: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.get.mockRejectedValue({ message: 'Incorrect header' }); + await actions.get({ commit }); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isFetching: true }], + [types.default.SET_MACROS_UI_FLAG, { isFetching: false }], + ]); + }); + }); + + describe('#getMacroById', () => { + it('sends correct actions if API is success', async () => { + axios.get.mockResolvedValue({ data: { payload: macrosList[0] } }); + await actions.getSingleMacro({ commit }, 22); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isFetchingItem: true }], + [types.default.ADD_MACRO, macrosList[0]], + [types.default.SET_MACROS_UI_FLAG, { isFetchingItem: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.get.mockRejectedValue({ message: 'Incorrect header' }); + await actions.getSingleMacro({ commit }, 22); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isFetchingItem: true }], + [types.default.SET_MACROS_UI_FLAG, { isFetchingItem: false }], + ]); + }); + }); + + describe('#create', () => { + it('sends correct actions if API is success', async () => { + axios.post.mockResolvedValue({ data: { payload: macrosList[0] } }); + await actions.create({ commit }, macrosList[0]); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isCreating: true }], + [types.default.ADD_MACRO, macrosList[0]], + [types.default.SET_MACROS_UI_FLAG, { isCreating: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.post.mockRejectedValue({ message: 'Incorrect header' }); + await expect(actions.create({ commit })).rejects.toThrow(Error); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isCreating: true }], + [types.default.SET_MACROS_UI_FLAG, { isCreating: false }], + ]); + }); + }); + + describe('#execute', () => { + const macroId = 12; + const conversationIds = [1]; + it('sends correct actions if API is success', async () => { + axios.post.mockResolvedValue({ data: null }); + await actions.execute( + { commit }, + { + macroId, + conversationIds, + } + ); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isExecuting: true }], + [types.default.SET_MACROS_UI_FLAG, { isExecuting: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.post.mockRejectedValue({ message: 'Incorrect header' }); + await expect( + actions.execute( + { commit }, + { + macroId, + conversationIds, + } + ) + ).rejects.toThrow(Error); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isExecuting: true }], + [types.default.SET_MACROS_UI_FLAG, { isExecuting: false }], + ]); + }); + }); + + describe('#update', () => { + it('sends correct actions if API is success', async () => { + axios.patch.mockResolvedValue({ + data: { payload: macrosList[0] }, + }); + await actions.update({ commit }, macrosList[0]); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isUpdating: true }], + [types.default.EDIT_MACRO, macrosList[0]], + [types.default.SET_MACROS_UI_FLAG, { isUpdating: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.patch.mockRejectedValue({ message: 'Incorrect header' }); + await expect(actions.update({ commit }, macrosList[0])).rejects.toThrow( + Error + ); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isUpdating: true }], + [types.default.SET_MACROS_UI_FLAG, { isUpdating: false }], + ]); + }); + }); + + describe('#delete', () => { + it('sends correct actions if API is success', async () => { + axios.delete.mockResolvedValue({ data: macrosList[0] }); + await actions.delete({ commit }, macrosList[0].id); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isDeleting: true }], + [types.default.DELETE_MACRO, macrosList[0].id], + [types.default.SET_MACROS_UI_FLAG, { isDeleting: false }], + ]); + }); + it('sends correct actions if API is error', async () => { + axios.delete.mockRejectedValue({ message: 'Incorrect header' }); + await expect( + actions.delete({ commit }, macrosList[0].id) + ).rejects.toThrow(Error); + expect(commit.mock.calls).toEqual([ + [types.default.SET_MACROS_UI_FLAG, { isDeleting: true }], + [types.default.SET_MACROS_UI_FLAG, { isDeleting: false }], + ]); + }); + }); +}); diff --git a/app/javascript/dashboard/store/modules/specs/macros/fixtures.js b/app/javascript/dashboard/store/modules/specs/macros/fixtures.js new file mode 100644 index 000000000..b75bd2836 --- /dev/null +++ b/app/javascript/dashboard/store/modules/specs/macros/fixtures.js @@ -0,0 +1,135 @@ +export default [ + { + id: 22, + name: 'Assign billing label and sales team and message user', + visibility: 'global', + created_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + updated_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + account_id: 1, + actions: [ + { + action_name: 'add_label', + action_params: ['sales', 'billing'], + }, + { + action_name: 'assign_team', + action_params: [1], + }, + { + action_name: 'send_message', + action_params: [ + "Thank you for reaching out, we're looking into this on priority and we'll get back to you asap.", + ], + }, + ], + }, + { + id: 23, + name: 'Assign label priority and send email to team', + visibility: 'global', + created_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + updated_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + account_id: 1, + actions: [ + { + action_name: 'add_label', + action_params: ['priority'], + }, + { + action_name: 'send_email_to_team', + action_params: [ + { + message: 'Hello team,\n\nThis looks important, please take look.', + team_ids: [1], + }, + ], + }, + ], + }, + { + id: 25, + name: 'Webhook', + visibility: 'global', + created_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + updated_by: { + id: 1, + account_id: 1, + availability_status: 'online', + auto_offline: true, + confirmed: true, + email: 'john@acme.inc', + available_name: 'Fayaz Ahmed', + name: 'Fayaz Ahmed', + role: 'administrator', + thumbnail: + 'http://localhost:3000/rails/active_storage/representations/redirect/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaHBUUT09IiwiZXhwIjpudWxsLCJwdXIiOiJibG9iX2lkIn19--16c85844c93f9c139deb782137b49c87c9bc871c/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdCem9MWm05eWJXRjBTU0lJY0c1bkJqb0dSVlE2QzNKbGMybDZaVWtpRERJMU1IZ3lOVEFHT3daVSIsImV4cCI6bnVsbCwicHVyIjoidmFyaWF0aW9uIn19--e0e35266e8ed66e90c51be02408be8a022aca545/memoji.png', + }, + account_id: 1, + actions: [ + { + action_name: 'send_webhook_event', + action_params: ['https://google.com'], + }, + ], + }, +]; diff --git a/app/javascript/dashboard/store/modules/specs/macros/getters.spec.js b/app/javascript/dashboard/store/modules/specs/macros/getters.spec.js new file mode 100644 index 000000000..d855f66ff --- /dev/null +++ b/app/javascript/dashboard/store/modules/specs/macros/getters.spec.js @@ -0,0 +1,32 @@ +import { getters } from '../../macros'; +import macros from './fixtures'; +describe('#getters', () => { + it('getMacros', () => { + const state = { records: macros }; + expect(getters.getMacros(state)).toEqual(macros); + }); + + it('getMacro', () => { + const state = { records: macros }; + expect(getters.getMacro(state)(22)).toEqual(macros[0]); + }); + + it('getUIFlags', () => { + const state = { + uiFlags: { + isFetching: true, + isCreating: false, + isUpdating: false, + isDeleting: false, + isExecuting: false, + }, + }; + expect(getters.getUIFlags(state)).toEqual({ + isFetching: true, + isCreating: false, + isUpdating: false, + isDeleting: false, + isExecuting: false, + }); + }); +}); diff --git a/app/javascript/dashboard/store/modules/specs/macros/mutations.spec.js b/app/javascript/dashboard/store/modules/specs/macros/mutations.spec.js new file mode 100644 index 000000000..436738638 --- /dev/null +++ b/app/javascript/dashboard/store/modules/specs/macros/mutations.spec.js @@ -0,0 +1,38 @@ +import types from '../../../mutation-types'; +import { mutations } from '../../macros'; +import macros from './fixtures'; +describe('#mutations', () => { + describe('#SET_MACROS', () => { + it('set macrtos records', () => { + const state = { records: [] }; + mutations[types.SET_MACROS](state, macros); + expect(state.records).toEqual(macros); + }); + }); + + describe('#ADD_MACRO', () => { + it('push newly created macro to the store', () => { + const state = { records: [macros[0]] }; + mutations[types.ADD_MACRO](state, macros[1]); + expect(state.records).toEqual([macros[0], macros[1]]); + }); + }); + + describe('#EDIT_MACRO', () => { + it('update macro record', () => { + const state = { records: [macros[0]] }; + mutations[types.EDIT_MACRO](state, macros[0]); + expect(state.records[0].name).toEqual( + 'Assign billing label and sales team and message user' + ); + }); + }); + + describe('#DELETE_MACRO', () => { + it('delete macro record', () => { + const state = { records: [macros[0]] }; + mutations[types.DELETE_MACRO](state, 22); + expect(state.records).toEqual([]); + }); + }); +}); diff --git a/app/javascript/dashboard/store/mutation-types.js b/app/javascript/dashboard/store/mutation-types.js index bf971931d..bcb6ad9a5 100755 --- a/app/javascript/dashboard/store/mutation-types.js +++ b/app/javascript/dashboard/store/mutation-types.js @@ -252,4 +252,11 @@ export default { ADD_AGENT_BOT: 'ADD_AGENT_BOT', EDIT_AGENT_BOT: 'EDIT_AGENT_BOT', DELETE_AGENT_BOT: 'DELETE_AGENT_BOT', + + // MACROS + SET_MACROS_UI_FLAG: 'SET_MACROS_UI_FLAG', + SET_MACROS: 'SET_MACROS', + ADD_MACRO: 'ADD_MACRO', + EDIT_MACRO: 'EDIT_MACRO', + DELETE_MACRO: 'DELETE_MACRO', }; From 32d885a19b2ead2a704fc5342a569de438b71b39 Mon Sep 17 00:00:00 2001 From: Fayaz Ahmed <15716057+fayazara@users.noreply.github.com> Date: Wed, 12 Oct 2022 11:50:20 +0530 Subject: [PATCH 35/62] feat: Add macros routes and views (#5604) --- .../layout/config/sidebarItems/settings.js | 60 +++++++++++-------- .../dashboard/i18n/locale/en/index.js | 2 + .../dashboard/i18n/locale/en/macros.json | 5 ++ .../dashboard/i18n/locale/en/settings.json | 8 ++- .../dashboard/settings/macros/Index.vue | 11 ++++ .../dashboard/settings/macros/MacroEditor.vue | 9 +++ .../settings/macros/macros.routes.js | 38 ++++++++++++ .../dashboard/settings/settings.routes.js | 2 + .../FluentIcon/dashboard-icons.json | 1 + config/features.yml | 2 + 10 files changed, 112 insertions(+), 26 deletions(-) create mode 100644 app/javascript/dashboard/i18n/locale/en/macros.json create mode 100644 app/javascript/dashboard/routes/dashboard/settings/macros/Index.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/macros/MacroEditor.vue create mode 100644 app/javascript/dashboard/routes/dashboard/settings/macros/macros.routes.js diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js index 9ea287963..83a0c2309 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js @@ -5,34 +5,37 @@ const settings = accountId => ({ routes: [ 'agent_bots', 'agent_list', - 'canned_list', - 'labels_list', - 'settings_inbox', 'attributes_list', - 'settings_inbox_new', - 'settings_inbox_list', - 'settings_inbox_show', - 'settings_inboxes_page_channel', - 'settings_inboxes_add_agents', - 'settings_inbox_finish', - 'settings_integrations', - 'settings_integrations_webhook', - 'settings_integrations_integration', - 'settings_applications', - 'settings_integrations_dashboard_apps', - 'settings_applications_webhook', - 'settings_applications_integration', - 'general_settings', + 'automation_list', + 'billing_settings_index', + 'canned_list', 'general_settings_index', + 'general_settings', + 'labels_list', + 'macros_edit', + 'macros_new', + 'macros_wrapper', + 'settings_applications_integration', + 'settings_applications_webhook', + 'settings_applications', + 'settings_inbox_finish', + 'settings_inbox_list', + 'settings_inbox_new', + 'settings_inbox_show', + 'settings_inbox', + 'settings_inboxes_add_agents', + 'settings_inboxes_page_channel', + 'settings_integrations_dashboard_apps', + 'settings_integrations_integration', + 'settings_integrations_webhook', + 'settings_integrations', + 'settings_teams_add_agents', + 'settings_teams_edit_finish', + 'settings_teams_edit_members', + 'settings_teams_edit', + 'settings_teams_finish', 'settings_teams_list', 'settings_teams_new', - 'settings_teams_add_agents', - 'settings_teams_finish', - 'settings_teams_edit', - 'settings_teams_edit_members', - 'settings_teams_edit_finish', - 'billing_settings_index', - 'automation_list', ], menuItems: [ { @@ -89,6 +92,15 @@ const settings = accountId => ({ toStateName: 'agent_bots', featureFlagKey: 'agent_bots', }, + { + icon: 'flash-settings', + label: 'MACROS', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/settings/macros`), + toStateName: 'macros_wrapper', + beta: true, + featureFlagKey: 'macros', + }, { icon: 'chat-multiple', label: 'CANNED_RESPONSES', diff --git a/app/javascript/dashboard/i18n/locale/en/index.js b/app/javascript/dashboard/i18n/locale/en/index.js index 6e45310b0..93e560119 100644 --- a/app/javascript/dashboard/i18n/locale/en/index.js +++ b/app/javascript/dashboard/i18n/locale/en/index.js @@ -18,6 +18,7 @@ import integrationApps from './integrationApps.json'; import integrations from './integrations.json'; import labelsMgmt from './labelsMgmt.json'; import login from './login.json'; +import macros from './macros.json'; import report from './report.json'; import resetPassword from './resetPassword.json'; import setNewPassword from './setNewPassword.json'; @@ -47,6 +48,7 @@ export default { ...integrations, ...labelsMgmt, ...login, + ...macros, ...report, ...resetPassword, ...setNewPassword, diff --git a/app/javascript/dashboard/i18n/locale/en/macros.json b/app/javascript/dashboard/i18n/locale/en/macros.json new file mode 100644 index 000000000..3923e4374 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/en/macros.json @@ -0,0 +1,5 @@ +{ + "MACROS": { + "HEADER": "Macros" + } +} diff --git a/app/javascript/dashboard/i18n/locale/en/settings.json b/app/javascript/dashboard/i18n/locale/en/settings.json index a99bfc2e8..c5f954b1c 100644 --- a/app/javascript/dashboard/i18n/locale/en/settings.json +++ b/app/javascript/dashboard/i18n/locale/en/settings.json @@ -99,7 +99,11 @@ }, "AVAILABILITY": { "LABEL": "Availability", - "STATUSES_LIST": ["Online", "Busy", "Offline"] + "STATUSES_LIST": [ + "Online", + "Busy", + "Offline" + ] }, "EMAIL": { "LABEL": "Your email address", @@ -186,6 +190,7 @@ "LABELS": "Labels", "CUSTOM_ATTRIBUTES": "Custom Attributes", "AUTOMATION": "Automation", + "MACROS": "Macros", "TEAMS": "Teams", "BILLING": "Billing", "CUSTOM_VIEWS_FOLDER": "Folders", @@ -230,7 +235,6 @@ "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", "BUTTON_TXT": "Go to the billing portal" }, - "CHAT_WITH_US": { "TITLE": "Need help?", "DESCRIPTION": "Do you face any issues in billing? We are here to help.", diff --git a/app/javascript/dashboard/routes/dashboard/settings/macros/Index.vue b/app/javascript/dashboard/routes/dashboard/settings/macros/Index.vue new file mode 100644 index 000000000..39f017fef --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/macros/Index.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/macros/MacroEditor.vue b/app/javascript/dashboard/routes/dashboard/settings/macros/MacroEditor.vue new file mode 100644 index 000000000..2de1f787c --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/macros/MacroEditor.vue @@ -0,0 +1,9 @@ + + + + + diff --git a/app/javascript/dashboard/routes/dashboard/settings/macros/macros.routes.js b/app/javascript/dashboard/routes/dashboard/settings/macros/macros.routes.js new file mode 100644 index 000000000..9752b79fb --- /dev/null +++ b/app/javascript/dashboard/routes/dashboard/settings/macros/macros.routes.js @@ -0,0 +1,38 @@ +import SettingsContent from '../Wrapper'; +import Macros from './Index'; +const MacroEditor = () => import('./MacroEditor'); +import { frontendURL } from 'dashboard/helper/URLHelper'; + +export default { + routes: [ + { + path: frontendURL('accounts/:accountId/settings/macros'), + component: SettingsContent, + props: { + headerTitle: 'MACROS.HEADER', + icon: 'flash-settings', + showNewButton: false, + }, + children: [ + { + path: '', + name: 'macros_wrapper', + component: Macros, + roles: ['administrator', 'agent'], + }, + { + path: 'new', + name: 'macros_new', + component: MacroEditor, + roles: ['administrator', 'agent'], + }, + { + path: ':macroId/edit', + name: 'macros_edit', + component: MacroEditor, + roles: ['administrator', 'agent'], + }, + ], + }, + ], +}; diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js index b4ac93570..7c8cc11fa 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js @@ -11,6 +11,7 @@ import inbox from './inbox/inbox.routes'; import integrationapps from './integrationapps/integrations.routes'; import integrations from './integrations/integrations.routes'; import labels from './labels/labels.routes'; +import macros from './macros/macros.routes'; import profile from './profile/profile.routes'; import reports from './reports/reports.routes'; import store from '../../../store'; @@ -41,6 +42,7 @@ export default { ...integrationapps.routes, ...integrations.routes, ...labels.routes, + ...macros.routes, ...profile.routes, ...reports.routes, ...teams.routes, diff --git a/app/javascript/shared/components/FluentIcon/dashboard-icons.json b/app/javascript/shared/components/FluentIcon/dashboard-icons.json index 0bce7c813..9a5eaa893 100644 --- a/app/javascript/shared/components/FluentIcon/dashboard-icons.json +++ b/app/javascript/shared/components/FluentIcon/dashboard-icons.json @@ -80,6 +80,7 @@ "filter-outline": "M13.5 16a.75.75 0 0 1 0 1.5h-3a.75.75 0 0 1 0-1.5h3Zm3-5a.75.75 0 0 1 0 1.5h-9a.75.75 0 0 1 0-1.5h9Zm3-5a.75.75 0 0 1 0 1.5h-15a.75.75 0 0 1 0-1.5h15Z", "file-upload-outline": "M6 2a2 2 0 0 0-2 2v5.207a5.48 5.48 0 0 1 1-.185V4a1 1 0 0 1 1-1h4v3.5A1.5 1.5 0 0 0 11.5 8H15v8a1 1 0 0 1-1 1h-3.6a5.507 5.507 0 0 1-.657 1H14a2 2 0 0 0 2-2V7.414a1.5 1.5 0 0 0-.44-1.06l-3.914-3.915A1.5 1.5 0 0 0 10.586 2H6Zm8.793 5H11.5a.5.5 0 0 1-.5-.5V3.207L14.793 7ZM5.5 19a4.5 4.5 0 1 0 0-9a4.5 4.5 0 0 0 0 9Zm2.354-4.854a.5.5 0 1 1-.708.708L6 13.707V16.5a.5.5 0 0 1-1 0v-2.793l-1.146 1.147a.5.5 0 1 1-.708-.707l2-2A.5.5 0 0 1 5.497 12h.006a.498.498 0 0 1 .348.144l.003.003l2 2Z", "flash-on-outline": "m8.294 14-1.767 7.068c-.187.746.736 1.256 1.269.701L19.79 9.27A.75.75 0 0 0 19.25 8h-4.46l1.672-5.013A.75.75 0 0 0 15.75 2h-7a.75.75 0 0 0-.721.544l-3 10.5A.75.75 0 0 0 5.75 14h2.544Zm4.745-5.487a.75.75 0 0 0 .711.987h3.74l-8.824 9.196 1.316-5.264a.75.75 0 0 0-.727-.932h-2.51l2.57-9h5.394l-1.67 5.013Z", + "flash-settings-outline": "M6.19 2.77c.13-.455.547-.77 1.02-.77h5.25c.724 0 1.236.71 1.007 1.398l-.002.008L12.204 7h2.564c.946 0 1.407 1.144.766 1.811l-.003.004l-.237.242a5.545 5.545 0 0 0-1.374-.027l.894-.912a.056.056 0 0 0 .017-.032a.084.084 0 0 0-.007-.044a.079.079 0 0 0-.025-.034c-.005-.004-.013-.008-.031-.008h-3.27a.5.5 0 0 1-.471-.666L12.52 3.08a.062.062 0 0 0-.06-.08H7.211a.062.062 0 0 0-.06.045l-2.25 7.874c-.01.04.019.08.06.08H6.87a.5.5 0 0 1 .485.62l-1.325 5.3a.086.086 0 0 0-.003.03a.02.02 0 0 0 .003.011a.08.08 0 0 0 .072.04a.03.03 0 0 0 .01-.004a.087.087 0 0 0 .024-.018l.003-.004l2.882-2.94a5.573 5.573 0 0 0 .054 1.372l-2.22 2.267c-.754.782-2.059.06-1.795-.996l1.17-4.679H4.96a1.062 1.062 0 0 1-1.021-1.354l2.25-7.873Zm5.877 8.673a2 2 0 0 1-1.431 2.478l-.461.118a4.702 4.702 0 0 0 .01 1.016l.35.083a2 2 0 0 1 1.456 2.519l-.127.422c.257.204.537.378.835.518l.325-.344a2 2 0 0 1 2.91.002l.337.358c.292-.135.568-.302.822-.498l-.157-.556a2 2 0 0 1 1.431-2.479l.46-.117a4.702 4.702 0 0 0-.01-1.017l-.348-.082a2 2 0 0 1-1.456-2.52l.126-.421a4.32 4.32 0 0 0-.835-.519l-.325.344a2 2 0 0 1-2.91-.001l-.337-.358a4.316 4.316 0 0 0-.821.497l.156.557ZM14.5 15.5a1 1 0 1 1 0-2a1 1 0 0 1 0 2Z", "folder-outline": "M8.207 4c.46 0 .908.141 1.284.402l.156.12L12.022 6.5h7.728a2.25 2.25 0 0 1 2.229 1.938l.016.158.005.154v9a2.25 2.25 0 0 1-2.096 2.245L19.75 20H4.25a2.25 2.25 0 0 1-2.245-2.096L2 17.75V6.25a2.25 2.25 0 0 1 2.096-2.245L4.25 4h3.957Zm1.44 5.979a2.25 2.25 0 0 1-1.244.512l-.196.009-4.707-.001v7.251c0 .38.282.694.648.743l.102.007h15.5a.75.75 0 0 0 .743-.648l.007-.102v-9a.75.75 0 0 0-.648-.743L19.75 8h-7.729L9.647 9.979ZM8.207 5.5H4.25a.75.75 0 0 0-.743.648L3.5 6.25v2.749L8.207 9a.75.75 0 0 0 .395-.113l.085-.06 1.891-1.578-1.89-1.575a.75.75 0 0 0-.377-.167L8.207 5.5Z", "globe-outline": "M12 1.999c5.524 0 10.002 4.478 10.002 10.002 0 5.523-4.478 10.001-10.002 10.001-5.524 0-10.002-4.478-10.002-10.001C1.998 6.477 6.476 1.999 12 1.999ZM14.939 16.5H9.06c.652 2.414 1.786 4.002 2.939 4.002s2.287-1.588 2.939-4.002Zm-7.43 0H4.785a8.532 8.532 0 0 0 4.094 3.411c-.522-.82-.953-1.846-1.27-3.015l-.102-.395Zm11.705 0h-2.722c-.324 1.335-.792 2.5-1.373 3.411a8.528 8.528 0 0 0 3.91-3.127l.185-.283ZM7.094 10H3.735l-.005.017a8.525 8.525 0 0 0-.233 1.984c0 1.056.193 2.067.545 3h3.173a20.847 20.847 0 0 1-.123-5Zm8.303 0H8.603a18.966 18.966 0 0 0 .135 5h6.524a18.974 18.974 0 0 0 .135-5Zm4.868 0h-3.358c.062.647.095 1.317.095 2a20.3 20.3 0 0 1-.218 3h3.173a8.482 8.482 0 0 0 .544-3c0-.689-.082-1.36-.236-2ZM8.88 4.09l-.023.008A8.531 8.531 0 0 0 4.25 8.5h3.048c.314-1.752.86-3.278 1.583-4.41ZM12 3.499l-.116.005C10.62 3.62 9.396 5.622 8.83 8.5h6.342c-.566-2.87-1.783-4.869-3.045-4.995L12 3.5Zm3.12.59.107.175c.669 1.112 1.177 2.572 1.475 4.237h3.048a8.533 8.533 0 0 0-4.339-4.29l-.291-.121Z", "globe-desktop-outline": "M22.002 12C22.002 6.477 17.524 2 12 2 6.476 1.999 2 6.477 2 12.001c0 5.186 3.947 9.45 9.001 9.952V20.11c-.778-.612-1.478-1.905-1.939-3.61h1.94V15H8.737a18.969 18.969 0 0 1-.135-5h6.794c.068.64.105 1.31.105 2h1.5c0-.684-.033-1.353-.095-2h3.358c.154.64.237 1.31.237 2h1.5ZM4.786 16.5h2.722l.102.396c.317 1.17.748 2.195 1.27 3.015a8.532 8.532 0 0 1-4.094-3.41ZM3.736 10h3.358a20.847 20.847 0 0 0-.095 2c0 1.043.075 2.051.217 3H4.043a8.483 8.483 0 0 1-.544-3c0-.682.08-1.347.232-1.983L3.736 10Zm5.122-5.902.023-.008C8.16 5.222 7.611 6.748 7.298 8.5H4.25c.905-2 2.56-3.587 4.608-4.402Zm3.026-.594L12 3.5l.126.006c1.262.126 2.48 2.125 3.045 4.995H8.83c.568-2.878 1.79-4.88 3.055-4.996Zm3.343.76-.107-.174.291.121a8.533 8.533 0 0 1 4.339 4.29h-3.048c-.298-1.665-.806-3.125-1.475-4.237Z M12 19a1 1 0 0 0 1 1h3v2h-.5a.5.5 0 1 0 0 1h4a.5.5 0 0 0 0-1H19v-2h3a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1h-9a1 1 0 0 0-1 1v5Z", diff --git a/config/features.yml b/config/features.yml index 01bfe00e5..ec779cd08 100644 --- a/config/features.yml +++ b/config/features.yml @@ -17,3 +17,5 @@ enabled: true - name: agent_bots enabled: false +- name: macros + enabled: false From 1bdd59f0259d3d7204145acea2ec0c98120eb0e9 Mon Sep 17 00:00:00 2001 From: Jordan Brough Date: Wed, 12 Oct 2022 02:08:18 -0600 Subject: [PATCH 36/62] Find by downcased email in SupportMailbox (#5211) --- app/mailboxes/support_mailbox.rb | 2 +- spec/fixtures/files/support_uppercase.eml | 632 ++++++++++++++++++++++ spec/mailboxes/support_mailbox_spec.rb | 31 +- spec/support/negated_matchers.rb | 3 + 4 files changed, 662 insertions(+), 6 deletions(-) create mode 100644 spec/fixtures/files/support_uppercase.eml create mode 100644 spec/support/negated_matchers.rb diff --git a/app/mailboxes/support_mailbox.rb b/app/mailboxes/support_mailbox.rb index b0a1a68df..8accda902 100644 --- a/app/mailboxes/support_mailbox.rb +++ b/app/mailboxes/support_mailbox.rb @@ -72,7 +72,7 @@ class SupportMailbox < ApplicationMailbox end def find_or_create_contact - @contact = @inbox.contacts.find_by(email: @processed_mail.original_sender) + @contact = @inbox.contacts.find_by(email: @processed_mail.original_sender&.downcase) if @contact.present? @contact_inbox = ContactInbox.find_by(inbox: @inbox, contact: @contact) else diff --git a/spec/fixtures/files/support_uppercase.eml b/spec/fixtures/files/support_uppercase.eml new file mode 100644 index 000000000..9354312ee --- /dev/null +++ b/spec/fixtures/files/support_uppercase.eml @@ -0,0 +1,632 @@ +From: Sony Mathew +Mime-Version: 1.0 (Apple Message framework v1244.3) +Content-Type: multipart/alternative; boundary="Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74" +Subject: Discussion: Let's debate these attachments +Date: Tue, 20 Apr 2020 04:20:20 -0400 +In-Reply-To: <4e6e35f5a38b4_479f13bb90078178@small-app-01.mail> +Reply-To: Sony Mathew +To: "Replies" +References: <4e6e35f5a38b4_479f13bb90078178@small-app-01.mail> +Message-Id: <0CB459E0-0336-41DA-BC88-E6E28C697DDB@chatwoot.com> +X-Mailer: Apple Mail (2.1244.3) + +--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; + charset=utf-8 + +Let's talk about these images: + + +--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74 +Content-Type: multipart/related; + type="text/html"; + boundary="Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1" + + +--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1 +Content-Transfer-Encoding: base64 +Content-Disposition: inline; + filename=avatar1.jpeg +Content-Type: image/jpg; + name="avatar1.jpeg" +Content-Id: <7AAEB353-2341-4D46-A054-5CA5CB2363B7> + +/9j/4AAQSkZJRgABAQAAAQABAAD/4gxYSUNDX1BST0ZJTEUAAQEAAAxITGlubwIQAABtbnRyUkdC +IFhZWiAHzgACAAkABgAxAABhY3NwTVNGVAAAAABJRUMgc1JHQgAAAAAAAAAAAAAAAAAA9tYAAQAA +AADTLUhQICAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABFj +cHJ0AAABUAAAADNkZXNjAAABhAAAAGx3dHB0AAAB8AAAABRia3B0AAACBAAAABRyWFlaAAACGAAA +ABRnWFlaAAACLAAAABRiWFlaAAACQAAAABRkbW5kAAACVAAAAHBkbWRkAAACxAAAAIh2dWVkAAAD +TAAAAIZ2aWV3AAAD1AAAACRsdW1pAAAD+AAAABRtZWFzAAAEDAAAACR0ZWNoAAAEMAAAAAxyVFJD +AAAEPAAACAxnVFJDAAAEPAAACAxiVFJDAAAEPAAACAx0ZXh0AAAAAENvcHlyaWdodCAoYykgMTk5 +OCBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQAAZGVzYwAAAAAAAAASc1JHQiBJRUM2MTk2Ni0yLjEA +AAAAAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPNRAAEAAAABFsxYWVogAAAAAAAAAAAAAAAA +AAAAAFhZWiAAAAAAAABvogAAOPUAAAOQWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAJKAA +AA+EAAC2z2Rlc2MAAAAAAAAAFklFQyBodHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAFklFQyBo +dHRwOi8vd3d3LmllYy5jaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAABkZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt +IHNSR0IAAAAAAAAAAAAAAC5JRUMgNjE5NjYtMi4xIERlZmF1bHQgUkdCIGNvbG91ciBzcGFjZSAt +IHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZGVzYwAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcg +Q29uZGl0aW9uIGluIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAALFJlZmVyZW5jZSBWaWV3aW5nIENv +bmRpdGlvbiBpbiBJRUM2MTk2Ni0yLjEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHZpZXcAAAAA +ABOk/gAUXy4AEM8UAAPtzAAEEwsAA1yeAAAAAVhZWiAAAAAAAEwJVgBQAAAAVx/nbWVhcwAAAAAA +AAABAAAAAAAAAAAAAAAAAAAAAAAAAo8AAAACc2lnIAAAAABDUlQgY3VydgAAAAAAAAQAAAAABQAK +AA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUA +mgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEy +ATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMC +DAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMh +Ay0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4E +jASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3 +BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDII +RghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqY +Cq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUAN +Wg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBh +EH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT +5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReu +F9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9oc +AhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCY +IMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZcl +xyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2 +K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIx +SjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDec +N9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+ +oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXe +RiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN +3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYP +VlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1f +D19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/ +aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfBy +S3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyB +fOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuH +n4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLj +k02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6f +HZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1 +q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm4 +0blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZG +xsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnU +y9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj +4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozz +GfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t////2wBDAAICAgIC +AQICAgICAgIDAwYEAwMDAwcFBQQGCAcICAgHCAgJCg0LCQkMCggICw8LDA0ODg4OCQsQEQ8OEQ0O +Dg7/2wBDAQICAgMDAwYEBAYOCQgJDg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4O +Dg4ODg4ODg4ODg4ODg7/wAARCADwAPADASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAEC +AwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0Kx +wRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1 +dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ +2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QA +tREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYk +NOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaH +iImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq +8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD9v1Wob5cWEh5q4v3qhvlzp0gz2oA+XvEwiTXbtWwTuJ59 +6/Mn4tCGP9p+OabLR5UEKeB81fo345uPK8Y3lvnkj86/M341XaW3xuSfjYeWz3IPFAHv+r6mINN0 +LdLt3na+Bnj6nmvtn4ISiT4eaeN2VVSAfXrX583Eiah4L8PrCgeVmGZT2yucV90fAZnTwLbiQ/vQ +SKAPrjTseWMVsL0rhdU8UaF4R8E3/iLxJqUGkaLYw+Zd3UxwqD8OSScDA55r4n8Yftla1r0l/bfC +rwxcQaWG2w6zrVs0YkyR8wQ4IVgTtJGTQB+iEl1awRk3FxFEoGSXcKB78kV5n4m+MHwu0W5TStY8 +c+GbS/mDlbd75C20dWO0kjFfiD8Y/ib8V9e1Kzmu/Ef9owLcx3U9pZ6o8TSIzlGgAyAQvXH+1XkX +iP4ca0uq3ev6fJHo2nXOnTCeVSX8iKVlQfvDncVYqrjrhgegoA+xfi9J+zR4ul8RfEZ/iO/2G5u2 +imtYLDfdCYHaDEpwQrY9ORXhej/DT4A61q2oahonxIkdbexa7vYdV0do4lj3KkgV93Ubs4+pr4ck +8F+LLmaz068WKwuWl2hJnIFwFTd8vcDaAQehwa5PWfE15HomnaQt1NpMls6xsshDCRxv2yAqM4wS +Dj1oA/c/9mz4O2Pwt+OGpeJ/D9/4e17wvqaobHU9OvUm2wkE4bPKnPav1XsJ1n0xWVw+ByQfbP8A +Wv4/tB+N/jHwHbKPDGuXaRXOyS5tIZCsSspPzIeBj2PNfU3w2/4KK+NfC3jjT73UL3UbnThax2dw +s0rSb23sTcFehbaQuP8AYoA/psHRfxplwhe1IHPB4r81Pgf+394d8ZR6g3ia7tJ7CC4X/TreJ4sR +FQNxRhuyGznAxzX6SaNq+l6/osGpaVeQX1lOgaOWI8MD0oA+SfjX4S8Rz3yX9pcB9PLbJY8cqCOu +fxr4J8ZeAr6y1YbJ237+cnOa/YfxtZRT+E7oMoI8tsHNfnX8Q7i2ttfjMwjVdvJPrmgDrf2UPhdb +vfap4q1PM96lwILTP8AwCx/Wv0UtoPs8CoDkAcV8q/sx6jb3nw4uli+8l64fjHOBX1sBx1BoAjC8 +Uu3PHpUoXj/69L0oAwNZ02C50e4WVN4dcN7jHSvgPxR4b03S/FGrQrbeUBOzqM4wCOBjvX6H3p/0 +F8gkbT0FfnH8d9e/sLx1fGSC5hjkAw7IQrHDd6ALPw9ttNj+K2jzMka4uNqZ+9nFfonZL/oEfPav +x7+Gev8AiDxP8YtLXw9ps+pXVvcrLNGH2oiZxuJ+nbrX6+6OZjo0AnULJs+bFAGnTgMU6igA7V81 +fHG8srDRLWa5kiTbNxu6/dNfSh5U151488D6R4t8OT22p2a3MRXj1U460AX1B80U26QnTpR3xVlV +4x39ajuQTZyYGaAPjT4nosXjGeXG1sYQj1r8u/jq+34rQzNgAHDhugz6V+qXxYg/4qhwOAw4NfmB +8e7Zk8dWqlR8/V2XIHpQB6b4Uxd/DPSIRMWLMHDKPbpX1T4U+JPg74VfCsav441eDRY2ceTE0bGS +VicAIO5JwK+LLDxloPgfwHo+i6xLNJ4mmKyWljaL5hmQ92C9Fr6j+DX7OF/8afHlp8TPiLHfw+Hh +KH0zSrp9yKi9BtI+XnmgDfu/D/jT9pXWLHUNVguLLwjHcpcaVpkTsINqnlrg/wAbnghegr2vw9+z +TpHhnTpILxm1ppJzcKbvDorduP7o6AV9g6Zoum6Lo8NjplnDa2sSbEjjQKBirMkAkYbwuPpmgD8a +/jx+zvf6ppUy3dxp+kWVjKj6febREFk3Z2lgOFI6+4r5q0eP4p+HPi3caBDp9t4u0a5sJ7q50CZU +P2YpGFMgJ/5ZnCsMZzX9A2t+GNK1rSJrK/topoJVZGBQelfF/j/9mG1l+IGn+LtKudSi1exiaG2k +trgoAmDjev8AEP4SO4JoA/Jn4m22kReCfDWtabpuqaNf6jDHca4uopi12qCQ0DDn5gSMDtmvhXUd +Klt/FkkxZ4nW28+1Mluf3SqcBVz13Zzk1+wvxq/Z08QWvgm0t9Age0tjeiSexsZz5NsrqRIsCvzs +blmX+E4xxXx/rHwB8ceIYtXWSwvnksdtnYwYO+FCOPlxkDHPNAH58apJfzeIDbugaNQ3mb1wVz06 +VNo+hXd9enT0i8+Vx9yEZI9zX3p4J/Y18Za7dPealGYAB5ayyRk9OpAxzn+lfaHw6/Yw8K+GjDdX +0dxM+P3m9fnYkc8HpQB+afhT4KeO9Z8E2S6Ok1rLMrRho8KyRHHJwfUV9X/D74+fEv8AZ/8AEtho +vju/8V6Jp9nai2XU4ZfOjuGByMoflBxxn0r9JtC+HGl6Do8dtaW8duqR+UmE/h+vrWb41+E/hXxx +4PudI1zSYL61mG12ZRvPGMhuxFAHtXgj9pbwN8bPg8jeFNds5tYe1HmxHLFHK4G8fwkn8K/O34ze +IvEGh/GG80HW5Qt7AqsHAIRgScYzx1r558cfDH4n/ssfE+08ffC+8vb7w+rGG5tjllkhbOYpFB7A +5DV2Wl/ETSP2lfhdL9tk0jS/ijo48i3+1XbRrLGTkELn5iP6UAfr5+zJ8OLvwr8MotVvdQuL251S +NLqRWOFjyoIAr61UYQD0FeQ/BN5z8APDEV3JHJdQ6bDFMydCyoAT+lexYB96AGUYNPwKWgCNkDQl +W5Br5T/ah8I6Zf8A7Out3clsslzbAXETAYYEH1/GvrCvD/j9bNdfs2+KkQAuLByM98YOKAPiL9iq +K3HxT8cW5jVnUQvGx6gZI4NfqTGirEFUYGK/KX9ja6Fv+0p4rtndf3umo+M9w4/xr9XEIMS4I6UA +OoozSblHVh+dAC1VuhnT3HXipvMT+8KqXdwiWL8joe9AGAoPPFOkX/RXzTgCDTn/ANQwoA+R/izF +/wAVKGPKlDgetfmh+0E+nLrFn54dL5lH2TYMtI5ONuO4r9Jfj/qFrotmdTuXRI44mLEngcGvz9+H +XhO6+Inx2/4Tnxf5ptYbh10TTwMpGRwHP6cUAdp+zF+zJP4z+IFv4g8a28xWGOKYL5eCADuC8/qK +/aDStMs9J0W206whjt7aGMJHGiYAArifhp4dj0XwHAxiQXUyhpXUY5x0+mK9LVcUAMKcVWlyGGOl +Xz05qpcDEZNAFB3A61k3Gx3J6n0x1q5cPgEd6xJJMTHNAFC/0rT7tClzbQSIPVBmvMLn4e6Rb67c +XdlZwq07hpiRncR06V6dNOPM64+tQF8HcckY7c0AcFb+FNNhgYC3i8wdWCbRUdzpdlGuFjHHcCuq +1CYpFlQ2Se9c1PORuXkkigDmL62jWJAqfxelYEtuU4UZ56V092ZPJL/dweprJkQtuc79w6YoA4vV +dJtNS0u6s721guEkRhtdQRyMd6/Ff9qf4KS/DL4uDxZoEVxaaPeEOPs+Va1kGfm46jJz+dfuVNGs +8GSxLA8jvXzp+0B4Eg8afA/VrN4/KuooWaGYLlhwTQBf/YR/aLl8QaBp3grxRqNtc3gsYza3sT5F +zhcEsD0bjkV+pIuo/LBDhhjrmv4+PAfjrVvhN+1FpHm3t1pWmremGa6tXKzW7HjfjoRX9J3wU+L9 +j8Qfhdavp2rx6rqdhGq3gA2uRtGHI/2uDn3oA+uDexA4J5+tMN/ED3x9a88S7upow2GTIyQDmmlr +lpMGQ+2TQB3ralEGPP615D8ZdTiPwM8RrlfnsnABPtXSfZrhxuJevOfifo0138LdVjILZtmwPXjN +AH5xfs++Jf8AhF/2v4HYOUvYWgfnjqCP5V+v9tr0b6bGyvu+TjFfiz8PbQXX7WXh2EKoR7g/pX7H +abpoGiwnoAlAGu+vjPy5P0qBtclz0asXUL3T9NtmeRkXb97ccYrjJPiT4Ztrry5NUsVc/wAJmWgD +0Y6pdO3y7h+FVLy8v205znsccVFouvaXqtukkE0UqseGVwRXVfY4pdPZlwwPSgBPtCD+IVFJeIIH +5HtXnD6+4J5HHvULavcSRcNgepoA8J+P+iSeMrvTPD6TbYJnMt4yx5PlqckZ9T0qD4VeA9Ni8TaW +tvFi1tmJIcY3MeRx9Bmuj8W6xHpxS5uZYxc3Eqwwr3bJ5/CvSvh5aK0cV2xiUMRsjVcHPTJoA+g7 +RFjsokUAKB0FW6rW/wDqUHtVmgBrMAue9U5zuXOasP8AKMkZ9qpyAtGTnA9KAMm7GMk9MVzUzYbk +nJPFdNcgDJOTx6Vz158iltvXrx0oAzWAOfm/IVI6qUXLP+Aqtna2BuJJx0rXS3DRZPpjA9aAOS1A +b3cIWYD1rl5jiZvvbSOSD0rvbmyzIQCVbGc/zrlru2xFKwQhc/dFAHPSAtjIOzoCeap3EZcGJsq2 +3IYKeaufP5qD5goPAxSF90rHf83TINAHNtbqB8uVnJwc1zfi23YeDbxRF5p8k7sLmu/8tTMemeu4 +jNYniC3WbRXH3d0TKcHAORxQB/O/+0X4TGnfHDV7kwAWtwxLxhcEdwR719n/APBN/wCM1hpHxE1H +wVr4cXs8I+zXTHLSRDpG/rjqPbFeVftRaOV8a3lvL+7uoyT5eM7k/vZrwf8AZ28Rx+A/2vdC1yec +WtlHGxedVDHGRxg98n8qAP6MvFHxg8MeHb2W2uNVtRMibvKjILYxkfoRXlQ/aT0l74Rw+Y6g5zuA +r5TtfgP8VPjF+2r4k1SDV4dF+G8kUElvejLyT70VnCqOnJIHtivraz/Yl8FWunfLrPiFrwIMyNKv +X1xigD0nwd8dvC+tahDaz3y2t052rHK+M/TtXr/iXUNMvPAN5+8WRXtmIIYYIINfnR8S/wBnbxf4 +BsH1jw/e3Wv6VCSWiCDz4sd8jtXI+Hfin4rm8ItoralLJFHF5WyWP94oHGDnnigDiPCur2ui/tfe +H724Kx20OqOoI7gsRX6x6z8QtE0P4cyatdXESQRR5GJBuNfj9eaHv8epeyNIiRyiQtjGD611PjLx +l4n8QX2keCdDmu7/AFC72xwxLJuGT/EfQD3oA6b4k/H3xZ418bvo3h23vnDyYgsbI73YerEVgwfB +74/arp66uPDDxqfuwz3KiQ/m1foN8Av2evD3w58K2t9c2seoeKriPdfahIoLFz1VM9AK+pU022SM +KI0X6DkUAfiRo/jz4k/DLxoIdRg1nQLuFvmtrk5hkHoCTg56cGv0n+BvxusfiT4ZuYZ1S01i1Rft +NvnoOPm/Wuw+Lfwp8PeOfAF/a32n273Rib7PPj54mAOCD9a/LPwh4lvvhH8eZrmTcFj821vR03gE +YPv0oA+wdT+JOmWCmeXVokY9FZhWt4O+KmieINdOnw6lZXE687N3NfCei/sifHfWvD0V14m8e26X +fa2SIkD8a4bWvhr8WPgd4ph8QXEyX9tZzh/tUbZ3A8EP/k0Aff3j3UDd/GvT9Osx5zgRFEYZX5jy +R9BX1Z4LiA0a0d1EcxGWGMdsV8QfDjVLnXviPc6zf4897G2KW5XhGZclgTX3/wCErMy6fFKuPLRQ +oHtjP86APQbc4jUe1WjytQDCqPYU+WaOGAvIdqjqaAGzEbTyOlUTINmM8is+41yyDOvmqFH8R6Hm +sefXrMT7FuIM9wW6f0oA1rmQFWAZRxXJ6nchoGUOcj0ps3iHTPtBj+22zT4zsVwTzWNdXkM29VYE +hucUAWbb57sFi5Xp1rrbMp5Wzg/hXHxPHGZGEinH88ZqzpmpCe9aLzASvJxQBq6tIsKk8Z71wt7d +K1wI/wC8Ogre1qVpZv3WXyOOeK4p3mMiO6qnXnPH60AMmh+csMHH+1VWe1PlZBNOa4T5klnVJeoD +EAH8azn1yzRGhN5ayFW+crKp2/rQBYVGR8E/LjFEkMc0Dps8xAhDJ7mnFormz3wzblOfmXnBHak8 +mS3tFcgNuOD3P40Afkb+11p0ln8QEfyE+0NG2GI5MeT8v86+FdOt7P8A4S/Ss23mWksiM5Xg7DuW +T/vng/hX7J/tYfDNvEXw+/tvTYQ8tsv71UHzNX463dmdE1WeHMqtFd9BztznP/6qAP6Mf2MbhtW/ +Ye8KXd5GXvbMS2byt/y2WORljf3+QLX2AqgghcY+lfAX/BPnxRbah+wRplq0redaatcwN5h5ILBx ++jCv0Et9phDD5uOwxQBmXmkQ31q0UsaFXUhsjOR6V+f/AMd/gMnhjVpfHvhmN47czF9SskXK8nJd +cD3zX6Odq5/xLpMGteDNT064UFLi2ePpnqp7UAfij491a2ttGa4twhDruyD1Fe+/sYfDo65far8T +NZt/MneU22m704SMdWGe5r5R+KOkXeia5rGhXqTI9lcPCMjhlDcEfhiv13/Z68NQeG/2b/C1jArA +LZISSO5GSaAPdoohDbqiAcdKmzmkZgqkk8Cub1bxLY6VCXupo4VHdjigC7rlxFBocrSHACE5r8TP +ifa/8JZ+0JqGnaQHmlv9UkjhCdTzzX3P8bvj5YWHhe/0zRLuOS6ljKtcI3CDHOD0zivGv2VfhjqP +iv4nT/EvxDaulhb7otLjljIMjnhpORyOeDQB+gMccSLsVVAHQcV5r8SPC2m+IPAGo2d5AJUmi+Yd +jg969IxtbJzXHeONUt9M8FXs88ipEsRLMegHqaAPjn4b6dLZ/F7UQd8sjgMGEoIjijyAAv04r9KP +DlukPhi3YIwZ1DYPB6V+cHgvxRpD+O7S+02CNreOUW81ymPl3PkCTngZ716n8VP+ChX7MPwN8S3P +hHxh4t1S+8UafDG13p2jaa9w8bOoIXcSq5wc9aAPuaV/LhLBCzcgDsa8u8R+IL5JTH87IeCqDBHN +fOPgv9qH4sfG/wCHY8S/BT9m/wAQR+GLpd2m674+1uDR7W9TODJHHH5spXjqVGe1a2sP+1rLpLTz +j9mnwyQMiSS+1O8KDv1gUUAcl8TPH/jDw8zvY+Gtf1lQ/wA6WKDESdiMn5j6ivknxP8AHT4k6pLP +YaZ4A8QafbSykW9xJK6SSN0OVwdvT8a3PiR8Xvjf4X1aTTda+L/wLudRmQywWml+E7uYEDqCxcYP +1r5ktv2j/jPca1DDc3XwpmBnKLnTrm3Zz6/KzYoA9Eh+IPxIu9YjkvfDWoadqUISIXKxMzEbuWJ4 +6fSvpnRfix4h0uG0tdVmlluDKUQgE+cOCD+Wa8Y8M/FD4rX2mC8b4c+EPGzRDDJoPiTZdfMM8xXM +anHXvXRaR+0B8Kz4ks9A+JPhTxd8INWL7EfxXpgjtAxz9y6jLR4PqSBxQB92eHfET6ppqzApIzxA +8HjJrQh1uPR9f3zMiIRhgetWPB3g6K68GWWp6K1td6dLGr29xayCVJlPRlZcgqRz1rn/AIheGb59 +MutsUlvc+WRHIVOM/hQB5F8Wf2l/C3geymhkik1O6jO5bZDjdnjqK/Orx9+2T8QNR1NhoerT6RZw +zOu6KNeehA+YHpz+dYnxzbR9C8feX418U2sd+rsfs8MvmSYHT5Rz36V5nZ3GhT6TDcaT8KvG2r2d +wQYrq9gjtYpj3I8xt2D64oA6Wx/bB+KGoavDa39zc6lbBSZHiiAd/TOAK7VfiF4x1uddRsbTxLbS +mPDfZ43ZexYkY54xXEWPxO1zwzrzR6Z8EfCNo1uVMi6nqgLIp6E7UP6E19D+B/2lviRf+Ko9Mt/B +nwb0uW5IEEOo63NbRMMfMRIIiOlAHT+BPF/xOQrNFd3UIkkU2ofiM9jvBPfHpX234E8bXXiOxey1 +zR7rRNVjj+ZiQ6SEfxKQeh9K8X0bWPjfq+lpqy/Ab4WaxpUsfE2g+OUcyYJyQssKjP41har8edR+ +HYWbxz8APjd4aslc4vNM0uDVYkA65+zyFto65K9KAPqnXtNg1TwvPaXG0FlwrEZGcelfz/8Axn0t +9G/aB8T6e0oSVbyRQDHtzzhSB9K/XXw9+2T+zZ4xttkHxU0bSL1JhG9nrkT2UyOMcMrjj0r84f2r +H0iT9rqDWdOvbG/0TV7Tzbee0ZZI5M9JEYcHoR7HigDa/Z0+PHin4YfD3S7fT72M2E2tTxypOpEb +nZGcA9mr9d/g3+1Jpvi3xrp3h3WLM6beXqYt3WTekjDGRwetfN/7CHwe8LePP2ANXufE+g2Wrwze +Mbs2b3MKkgJHGmVI6DKnv1zX2r4U/Zw+HnhTxZHq+kaDDb3cZzE+4nyz3Kg9KAPpKORZIwynIIzm +ormZILOWWQgIqk5J6cVSghktbVETJOcc9Kp+IrG41DwxdW0TbXeMqCvagD80P2jdD0298WanrkKW +y+bOAz7hg4719Ofs5fE7TPFngCHTUljXUdOjSK4iB6DHB+lfD/7QX9taJruoaBqAkXyJfMR8fK6c +4P1r339iv4e3dj4Nv/G9/Jum1kr5Ean/AFcanA/WgD7/ALzzG09vL5Jr4B+NHgL41eIfiIp0OCHU +tFf5IlFwYxCfVh3r9DQuItpwaryWkUsgZ1DEHJJHWgD4D8AfsmtLfWeqfEW9Or3Snc2nRDFshz39 +a+6tD0Kz0bSYLSygitreFdkUUabQorZSKONNqIq+mBVjjbz1oA+XvFfxF0nw7EzXN4iEKTtB5OK+ +BfjF8Y/G/wAUdI13wX8IfC+veJ9R2hb+ewt2dbVSQAXIGAD/ACr6O+MHwBuviFOHh1rUdJlAIL2s +hGc19E/s+fCjw/8ABX9nqx8O2Amnury4kuNR1CfBmuJGOAWYegGAO1AH5p+D/BPj/wAMyQ2nikRa +JDPpyz61ehCymBEIkG0DJcdABzmvCP2tf2O7Dx18B/Ev7Tnh+bxfoWvJDHe3vhvXIVEcunxhEyvA +aJ/LBkwxJGce9fu14x0XRPL0uQ6fay313qEUcbsD8gzuYj/vmrvxK8Gad46/Z38a+D9St47iy1rQ +rqyljK8kSwlev4/WgDA8B3+g6P8ABnwh4e0wC107TdCs7e0j9I0gQL9eMc9818c/tQ/GDVbLTV0n +wxBc3l3NP5dvaxNtkuJMckgZJQf0r6I+CenQeLf2BPg7qkgY6u3gzTrbUW6EXUFskNwrZ/iWWN1P +uprc0v4baZ4d1afU2tYLnU3yPtdzCsjop6qpPQfSgD8qvjP8IbL4cfsC3HxK8V+E9R8Y/EnxD5Vs +ki3726aCZlyJSF4cL0wcZJHNflh8Ix4k8U/H5tNsYtdvvJMkxiRAjEA4AmJBABweByQeor+pTxjo +un+I/BOpeHdat7PVNGu4TFNa3AwpHb6Edj2r5MtPgr8N/h3Ndy6FZXuixTNulSDVZZBIPT5jmgD5 +C1Pw/p3w2+KulaUuqXdrBeW6SQNE7+ZYyPjfGxA5jB7E19C+G7G713Vrzw547tNM1bwRJYsNSS7U +SW7W7Kd8nIOAF+YntRd+AND8R+N47tNEdLBAwmuJ3O+XJ7nOTXR/Gn4d+JdP/YWtbzwpd22n6jHf +2VlpOlSs63GtXEsywWlkrKwxvmdC+cr5YcngUAfGf7IH7JHjz4taz8X9Z0j4+/Ev4W/AbRvF19ov +hy38O6i6XGpmCU/OvmZVIkRkXhTuJI42nPo/x1/YZ+IHhb4banrPw/8A2qvjLqGpRRM4tfEV+Xiu +DtJ274ymzOMZINfqv+zt8J7H4Tfsd+Dfh5a3BvU0OzaK4vCpH2+9aRpLy6YEk5kneVgMnAIAJxmu +u8X6dZXPh+5tbmKOWCRSrKy/ez26GgD+YT9mzwx/anhjU9cv0XxH8So9ceC9+3sZ57dUO0Ehs/KT +u59q+1Y4NQ8R/Fa18Ixam8d+I9mpXgcFIU7xRA8AkZGe2OnFeJf8Kq8W/Cj/AILBvovhTWrHT7TV +rifUIxODtvbVsG4hAx80mzayDsd1fTllpPh7SfGP2m20bzNQhuGaaOclnQMxzznnrnNAHwF+07p4 +8O/FLxDp9l/bemT6TqAt7Kz8t3gS2aNT5rOGyzMT9PpX1Z+yP4A8PfHD4a6x4Z1HRr+WXT9Jjnm1 +LVblW+z3TMw/dKACkZXB2kk5zzX1BrXwM8EfFSW31G8SW11Z4ET7RDc+UxxgAOCGzwK9o+HnwCm8 +A+Fp9E8LS2WmWFzk3twDumuTggFnAHAAHGKAPjT4aa/47+Dvx1l8Im4v49Fiumt4lnB+y3MYPRc8 +KT/eFfpA3jjTpvBUOoGb7HOQP3DOQ68cjj/JryM/Ae61W626tqF1qQChYy5ztGc4Bz2z1r1Pwl8J +I9Itxb6jqEt3GhwiyYYgdsk0AfhV+3l8OIPHn7efhq58A+HILK+1vQpJdUaO08uOV4JGDXDgDrtI +BOOcCvcvhH8GvDPxQ/4JBaN4Og1nTrP49/DbxkbeWOdtsws7+72qjK5BeB1lVlYZwy4r9FW8B+Hr +z/gpBq2rf2dFLHoHw+t7BUl5Ec95dzyv14OY44/w+ted/HvQ/C/hn4t/C/xbqejaV/Yt3fLo+pq8 +KgbWYywPlRkMkq5U9iaAPrL9jLwU/wAPv+Cavw10i8Ahubq1l1K5DJ5e1riV5QCD0IVlFfU8TB4l +ZSjIehVsiviXWNNubvSDd+ONa1PXtB0uAtZ6X5ax20MajCqIYwokOAOZNx54wMCu4+B/j8ap4hGi +xWk+naTNAWs7WVt5jIG4Ef3QRn5e1AH1VwR2NI5+RvoaUfdFUdRuUtdJmmdtoVGP5DNAH5k/tXQr +qnxIv44UDLFbAOQM8n1r139izxXHqv7PEekOcXWk3L20qkYOM5XNcN9mj+IXxJ8bM4+0Ib1xGSM7 +VAwB+lcx8FHl+E37buq+Db92gsNfgWa0APymRf64oA/UCiobV1ms1ZWyCM5qzx7UAJt5p1GR60ZH +rQB5oFBYE5OPXnNdLIobQ7FAdqMyjA+tYIGOxroLMCa1tQ/PlzDP06igCj4jgjl8UeF45BuAvmeP +nphD/jXYj/V+uBXBa1cl/Heil8lYZ2x6DIxXcr93k9s8UAfLOnaT8Zfgv418VW3hrwpa/Fv4Vajq +k+p6NpthqEFlrOhSXEjz3UJ89liuIGmeSRNriRd+3aQAak1f9prwZpemLN408EfGTwLCx2tPq/gm +7ECt3HmorKfqODX1HkZPSqUzSeWyoxXjggkYoA+Gte/aL+BWoWgvI/iXaWMDtjbcWU8b4z3UpkV5 +PqXxz/ZyFw0svxH0zU5hu2KqTysfYKEr9D9R077W379VmbGCWUHP6Uy28OWULCUWkEZA/gjC/wAh +QB+f/h/46fDjVr54fCnhT4p/EK4i+ePTvDng27k8zjJUyOioPxPevpTwP4V8feOPHWj/ABC+K/hq +x8D6RoTyy+CPA63S3U1pLLGYvt+oOvyNciJpEjjQlYllkBJYgr9BxSNEwjMj+X0xuPNacWLm8RcH +YvJPqaAL9lapa6XFbxLtRVwAa8+8a7k06QxqTg9MV6TI6RozOcCvP/E9wJbCYLjBFAH53fHb4Y3X +i7WdJ8TeE7m30H4i6O63PhvW5Uylrdx8eXIO8UsZaNvQEHtivID8WvC8lzbWHxc8M658GPiKF23M +txpslxpV2y8GSC6iVl8ts5AbBGelffWoWMFxJcQTACOTBBB5B9RWVFa+TcfY50MJPPnFidwH6ZoA ++cfC/wAVvg7dygJ8SPB2+JwhY6ksbDA7bsV9A6f8Tvh9DYxsPil4OWA9PM1eEDHv81WJ/B2kaoJJ +L3SNC1IN90XenRSH8SVyafB8LfALMDL4D8Fyucbn/seHI/8AHaAHTftCfATQrQR6l8Zfhxbyj+/r +MZP5AmsHVP2sfguNKkg8LazqHxH1mVCtvpfhXSZr2e5bB+VcKFGf7zEAcEmvSLLwd4S01Qtj4U8M +WpXo0WkwKfzC5roBI0dm0EREUWMBIwFAH0FAHiPwo0fxRHpnijxr4901tD8VeMNXGoy6ObgXD6Ta +JCkNraO44LpGm5tvAZyMnGa8Z/bVvIbb9ky1iZGMp1eAxvHj5DuJLc9OlfYshYq2CDkc1+d37eGq +xxfBXTtOLMBLqiRsVHAUAnn60AfdOif8Tn4U2+p+YJ0utLjdeRtY+WDn8a4r4KpJP8Z9LCblEM0m +Qp4AAP515d+yt4qutb+DGlaZdXD3It7IQhT/AAqFwB+VfSnwQ0dLG+u9SlUAxvOIiepBkIH6UAfV +W84POB2rxv4yeJx4f+EuqT+ZtkaMxx4P8TcYr0s3a+QSzEfjXx9+0JrP9oTaPoolyjTGSVVPp0zQ +ByfwJsp5tV1ed1LISvmHH8Z61yf7UGj3mg634W+IOmq63uj3auTGMEr3BPpXuHwKt47XwnOzgB55 +y+K9I+Inhmy8VeBL/TbiFJ4ZIiNuAeaAOw+Gviu28VfCrRtXgkDR3Nsj4J6ZHI/OvQ/MFfn1+zn4 +rk8F6trnwy1u5ZJrC8drIynG6JjkAfSvtM65B5akODlc/e4oA7EzKD1FMNwgNcI/iK3BO6WPHfD9 +KzpvFtlGfnuY1696ANlQW2kdDWtprkNNGccgEfhWJZyCWwjcNkHpitmy+XVYm/2se3IoA5LxvdjT +tSgmLFVDeYTnHCjcf5V6Jp9yt1o8E6n/AFkSkV5x8XdP+0fCm/1CGMNewrtjBOOvek+FviWLXfBA +XcBLEem7PH/6xQB6pTTtbgioy3ynHWkDYGc80AQmKMyHIxj0rPupdsfyk4qzNMVjcnGa5y9vMAAD +B5oAhmuQsuWLYBya7PTgselRytw0nNeVNPLcXgjHzMeta/jKXUJvhrJb6bczWN3JaNHHPFwY2IwG +HoQeaAOm8QaqkFiMH5jxgHp6V5zrOqwiwhikLnzCdxHavnX9nLRv2lbfwr4z8M/G7V7bxLo1hOh8 +Ka5cbFvrhDu3JKVADAALg4B46nNdPrN1qi6w9lcKsUsTfL5zbRj19xQB18dul9NIYgvykAkZ/X0r +Onl2aqLCeGMSIMlycg185eGNK/aGt/2ztf8AE/i7xRFB8K7a3aHRdEsI4xbzqwAEr4yxb6n8K+gd +RlF9NBLHuVo4/vEfeP8AkUAdHbqrwrIg6HoOlasKDzBgsuRzzXOWk5eNNhZcD5gPWuhiYpGrj5z3 +BNAF/agTaS2fWqUx2nJOFPGR1zQb2KRiELZBw2V6VBIwklGG3KOgI70ANLBQS21UXhjux9TX5P8A +7cXiO0vfEXh3w6/mSs9z9okRTw2GAHP0Jr9RNcv/ALF4fubjjcqMB7nFfhd8e/FNv4r/AGx3Essl +5b2t9FCkZ5AU7QcY/GgD9Fv2U4WHh/xZPaxmLyVZbJTIPkXbx296+m7/AOJvh34domjXd5bRXgiW +SZTJlskZ5A9+awPgj4J0Twj8MrS30aORjqMQOZCGZQcEknHoa+R/jJ4P8S+KP2i/F2pR3E0NibwQ +xiMZIVVAGP1oA+2bX46aHeaC0ttcmX5SQea8fv8AUJPFfjVdRuI3eLqpXpjtXiOheDda0vw3bx3F +2zKflGVwSp9R619BeGNOMFgo+YYTbgd6AJ9M8cJ4PYwSLweVABB/nXuXw88bw+MtDklAKujlXUnu +a8C8QeCP7cu43MbqB1bPNegfC/w/J4W8RzRR/NbTDOD60AeD/tEaTfeCvjVpfjTTA1ss8YhmdO5F +VbP43a9eaPAIJnZlXDlVzX1P8e/CSeJvgnfCOISXMEZmiJ5ww/pXw78ItPi1fU47W6jVQsjRyAdd +woA6+b4oeK2DYeVgx6KORWRceOvFl4JCDcljxjJr6Tg+H+lrhvs6cDnK9ad/wg2moxbyUAPt0oA9 +y+G3iODxL8MdF1a1ZZLa7tEuImBzlWXNekxkpMjDqrAivz//AGK/F1wfhXqHgPWZWGs+E9Rl02dT +/cVyEI9sAV+gEeSgYtxQAeNbBdW+FWrRkneLRpUwcbioJx+lfKPwQ10WPxIvLFbiGO0m5WEtyAcn ++dfTuvambHwfdrI3yPC6IxGQuQea+DPBkk/h79oi0t7qS3kzuRWCcuoCuG+g3GgD9IlcNHu7VBI+ +AeaxdD1L7Tp5Z+jn5SfTtitWcjqDxQBk3cxAZielcndtJI4+fac4HvXQXAaW48teSetT6do6Taj9 +ouMCGL7qnuaAH6LobQwiecAu3PPpXVNaWz2QjmjSRAehqGW7VQVyqjGMVk3eqxxxgLJlu/vQBmeJ +ruPT/D83kLsiij3bQeuBXxd4l8d2mqeNZo9sCXUWQBKeCB24r3vx9rc03gu/SOOV3MT7lA5AFfCW +g28moa1qs9zAIriK93QkOcquOQSetAHsGk+Lnkmis53jks5hveSInauD9017NpTWE1sjRliNgbbt +xg88c18369p9jpi6bcyLkTtiMJIQu4jjOPerXh/xRqekSzTXRnnRo95CNvLkHG0enWgD6aitxHdN +Mny55welaMDliWOGUjGK8dt/iEspjR4HgZQBJuHKk9M12uk66l/cI0MgRGcocj7rYGDzQB10jhYy +Q7AdCoFQmQmLaoGCOAPX1oM6l5AQpOOF/rWNc6tb2FrJcSsmVUgJ6nFAHjXxz8XL4c+H+qwRTJDc +R2jujHkbsHrX4W6Pcz6h+0D9v1BozcSXSSJK0m1Qd4AJz25Nffn7S/xVs1tfEVib5BeMoEdu5wGA +5P5Zr82fB13Pe/F6zinRpruW4iW0VCCOWAXPbGaAP6aPh9FDY/C6xYTGeOG2AEqsCDhQDgjsSK42 +40OKe7mufKV5biVpHyOpJqD4YyX0XwVsLC/uYLi/EYS4+zsWSIqACBjg/wCNeg21t8hkYEKoxz7U +AeJeLLWOzkihVBkEZA7VveGZIWC26bCwAPJyayPEkjT+MPJTEmSQSQTiul8I6LLFqr3Mm1lzgcUA +d/Dbj7OuEUH1x1q0irHdo4UKc54qZuE2jjFNwSBu7UAd3IsWq+E5IpFBV4yGB7ivzbFtJ8Pf2vNR +0xgYbCe6MkBx1zX6K6BdKY/IbpjGDXy/+0x4JIgs/F1jC32qylzI6ngr3oA9osZvtWkW8y/xLkgf +Snyjgj73qK86+F3iFdc8A2ZLbpljwxByOK9MnA8rjg45oA+Fy8/we/4KzQOSYvDfji32njCrdRk8 +H3Oa/UXTLkXOlRvjhlzwa/PX9t3wrej4RWfjrRoHfWPDGpRajblRyFU5cce2a+t/gr41tPG/wX8P +eILOZJIL6xSYAHJBI5B9waAO88Ypu8C3eACwU4z06GvhdZ7OHxJC8kdvHcacSkcu7LsG4fd+lffH +iGAXPg+8hHDGM8+nBr84fEyz23jzUYtPhDPGyuzY+8GfBzQB9l+GfFcK6NGzXILsqeVG2OV2jkV6 +/balFcWO1yiOQAvzdTX5/wDh3xVFe6jLYsXihkt1jgBPzxOh5Of7uK+ltE8R+dYCNJDJNakLPnsw +H9aAPahDh5JASMDr6GrWo3/9nWixrt2hNzMe3HJrM06+GoaArk4fHIrjvHurvFo6x20ck88oUKB6 +5xigDattQm1GFpVJdNxwcEB/oaR3s4pB9puVY5+4vJX2+teQ6f4c+Md9qdoLOXw9b+GXB+1wSXTp +dKexTClcevOa9CufA3jRrURabrOg6MeMO8T3EmcDOTgdeaAK+r31mbCSEaZcSrKfndmCkj6V59Jb ++FNKL3EumD7RKxMpYIM+nTis/wAU/Df41zazHNB4u8G6nZRkma2ms5YHPPADKT/KvNfGnhn4z3cN +vp9l4X8LPCp3yzR60wIOOmCm40AbvifxFotxLHbLo7XtuMDEJH7r0OK81nvPD5tZbYSjT33kKr/u +y34j0/rXlV38LvjRfeK7q/uvFsPhywcKBYaYokIx1ZmfBq2fhNr8unSwan8QNTvA0ZCbbdGYMeOO +M0Ad+1tdRadcPDi8jbDYS4Jyv+93ru/BkE1rpdws3meaAssblicgHGK8e8G/BnX/AA14Unkl8e+I +NQnL/uYbjAjiXPQjFe/ac/m6fFAAGukdYiVXaCCRk0Ad54p1ZNC8H3GpMIUl8jKZPGcV8E+Lvi3d +Jpup6tJeCODHlRqkhI8w54x+Br6F/aN1y7svhbJa2ilpSmxUH8bHI/TGa/LzXry7bwtdWOozNBZW +YeZWjGfMcDnr6ZoA+fvHPiLVfGXiy+v9TmWVoGkCK6YEkZruv2cfA8HjL4sq1/Oum2VraNcI6AF3 +bdhVGa8t1xoF1O0061DS7o/MXcPu5Hc19ffsq6ZE3imGeeGNLgwsjxbcAgdCPwoA/XrwVYpYfD7T +LK3thBHFEFwrZz6k+pPWu+v/APRfDjSDG4qc5rnPCke7RLIKP3eOlWvG18tp4VfB7dB9KAPKrErd +eJrlmJyrZznPfpXrekWogsQVHykZryTwjBJI/nMpyzZJPWvdbWHbp8SgfMR+lAFZlO4EHGac+DFx +96pMAscimBeelAFywlMGqJzgN39K1vGehWfiX4b3unzIksc0JU7RXOKxznHI613mkSi60jY3U9c0 +AfBvweu5PDXj/VvCt3K8Ztrlkj3emTivrJk327OGBGBj3r5W+K2nS+C/2pbLXBGwstQfbIU4APAr +6U0O/j1DwxbXCKwXyxgE8mgDpfid4Zg8SfDfVtNnQSR3Nq8ThhkEMMV8V/sS+KJdA1Xxf8IdVd4r +3w3qMi20Uh+Y2zsSp96/RbUoBcWUkbKXyMH6V+X3jK1l+D//AAVU8GeM4kNtoviqJtM1F+ieaAfL +J9ycUAfqpcos2jzgdWjOPyr84viPfQ6D8VtWhNu11cXtwLdsEI0S/MwYDoRkV+iOk3X2zw/HMGD5 +HGPpX5i/tXRzaL8evD9yqv8A2ddBmu+dpkCg4QHqCT6UASaVdWcmvPLDbra2N4gSBwdxDA4c+xr3 +LQdWKeMriDzpHiuYVdiOnHAb68V8Tx+JNUvtVsNTsrYQW1w/krHPJt278geWPUGvqDRIJbSW0S1k +23SRmOWRyZBhTkqSeh68YoA+xPBmpi4t5rfuhZSexA71uPp6ahrMUMm8LG2c+o9K8k+Huos/iWFY +GMttIm4+gPfivfLWPbfh8+tAHR2sMNvbBEUKo6cVBO8Y5LHHSmtOFBBOfrWDqV0PIfnbQBzHinxT +p2kWDtdyTfdJ3BfSvnfXvi3oUa/ahcTrHK4QOy/catj4ntez6NPFDPHCJU+QnqOa+NvEOmz/ANlx +6fJfzqEuPNmcKQHHYZoA+hh4v0HU5PObzpYnyBKHxkg9h+NdLBLpk1ruto4Wdjxg5Ixivm/wt4fh +1CSFXkn8xQfLKyZGD65719AaJottp/lli0kkYG07uOev8qAOyhjQ2o/d8bTuB5oiiX+1o59mY/L5 +Zudp+lRK7iUgSgemBx+NWlDfaFLs+4rhNnAxQB8sftEazGusWcbySSQrEwKK2CWPRv6V+YfjySWG +Yx+aQiR5njL/AHC3O0+ua+9v2ntRT+1biAxOzW6eYHj6luyfng1+YviJdV1DUHnurhpzfDz7nDgi +NVzt/KgDkbaaDU/FEUlxujkW62xgNzIu3v7V99fsytZXPjVbR5Zlmh3Kh2fJJ7cfXFfnxClt/aUl +ufOEKSrslXh2YnkfSv0a/ZC04z/Gv7OZAbGCAyMBgruYDCj6UAfrpoFr9m020jCgGJACo6HgZrjP +iBOJoorZCWZ5MBRXo1viNlYHgj9MV5jqpS88bIOGQMePSgC54asDawwxSZJUDJr0xF2RAljkdvSu +a0eDcWwOAcDPtXUffkfKHOKAKLYy2PWndQMdutSeWAOBn2NI20oduAe+KAISACQOAeprd0O4MN0s +TO23HTNYgXMb5GafBKsF5G43HHWgDhf2hPCA134Q3V9bRhr2zAmhYL8wxycflXnPwV8TNqnguG2n +fM0Y2sS3PBxjFfWt/bRav4JmhZVKvGVOR2Ir8+vDjS+Af2kNY8PzqyRSzGW2LHqCelAH6SEFgcV8 +EftreErq+/ZzvfEOnRsdU0G6h1O2KDDAxyKWwRz0zX33GteY/E3w9Br3w01XT54/NhngeNwehzxQ +Bgfs/eOLXx3+zp4b161mE32uwRmcHkOFwwP418kftz6Y39k+GdYgVfOsNSDDPAIIzj6VS/Yl1u68 +H+OPiP8ABzUXKz6DqrT2Ubn/AJd5ckY9gRXoP7Z1otx8GrK52sdl6h+T64oA/NDwf4iiuvHOiWd/ +dCRv7UX552YeWGYnCc4HNforZGax1f8AtC1aE6XbttmgY7hIzcBwevU81+feg+EtQ8VfErw/aaHo +V9rlzBdrNc2ttFvZQrY3SEcR/U1+5Or/AAg0O+8DxQ6bbJYzTQx70HbjJ6dT2oA8U+Ft/bx6rZwi +Q+fkh0ycqSx9e3NfWNugDbuvH9a+WbH4ceKvC/xMfUGC3OjtKJC4OGjKjA+ua+mtMvI7iyjlJA7M +O+aANOaMueCRWNeWEsqsvJBrpUZWRivrVaZwEOaAPLdY8F2F/EZL6JnEa7cZ9a+b/iH8PNEh065N +v9raAYMgSZsDHP8A9avsye6jaFy2CFGCT2rwD4kavbwWrxR4lkZxny03GgD5d0fQpNOliubZJljL +gMj/AMJPTp2xXrdm8n2eMNPbICcEEHJPtXCazr0UUgtonEUk0m3KgqQ3b6mtjRmuDJFJczuwiOJN +2NzH2xQB6bbDYrb9wRVznGQa0lkDEfO3loQSwHQVjfaolsdyA4bAwWxj61C+oQxRsjMAmM/I2c+3 +1oA+Ff2ndatNK1y8mm8uNnm+Qq3zOW+X9OtfnLqek6tqF2iaetxcTXbm3SCIbyEH9T1r9M/jD8C9 +b+Lv7Ruj3iT21r4RjieTUYizedIwxsAA4r6p+FP7P3gvwZLBeR6RZCcbSH27juA9TQB+O+s/syeN +/Bvwo0bxprVheQW9/M0sVqkDSuAo4LYGQD6V7r+xhL/Z/wAZLuzuo3gl80MPtEbRkg/w/N3r6w/b +2+JfjD4d+FvhpB4U8RXHhu0u7qZL8wTKrOileNpHIr4F8EftvfFrTPGeq2Gm3ui+INOswsrw6vYx +zNKc4wGxuUe+RQB+5Wr3X9naA15kLtTOPbFeXeGp11HX7i68wMHJC5PSvMvDf7Q/hb4n/seat42u +3svBN3oUiw+I7S9uh5Npv4WZWPWNjx04OR2qT4X+KfC3iK2kXwr4q0bXZly5SyvVkYepCg5xQB9X +aVGiwFxgnNbBAy3OOK5bSzNb6fHmQSnp93pWtDdgHZN8o9fU0ASgHBNRhFEJZvu9zVtWUythuoqF +bm0kumtkuLSSZOWjDgt+QoAqsdm3ByT37UhVgDtKlvSrLR7pNzfIPSm8hj/Cv8NAHVaDdebZ+RJ0 +Awa+Nf2oNBfw/r+h+OLJTHIk3lzY/iBHQ19WaVcNBqAz909Ky/jJ4Uh8X/AnXNO2Bp2tW8okdHA4 +/WgD1xO9ZfiKXTbPwxdXWq39pplise6a4up0jjjHqzNivz4/bP8A26R+z9q9r8PPhxpVh4o+KN2m +6f7XL/o2lK33GlA5LEdE7V+Efxk/aa+LnxU8Xxad8QPFmr+OS9xldONx5GnxyMeEEKYVgP8AbzQB ++sPxP+NPws+GX7dmifEbwb4x0Pxg01tJZa5pXh66S6nlXIKE7SVHPrxXG/Ev9rHxf8fvGfh/4R+A +PB9no2oa3qMcFp9snF3dn5gXkZEysYQfNz6V+a2lL/whngWSbybG31K6XNy1rGIyncJkdcV9f/8A +BMeyh8W/8FPPEHiS9jDtoHg+4uLIHpFJLJHDn67WNAH6K/E+20j9nv8AZLuvD/hy6FrfR2IfWdeE +Q8+6cj523dgWzxX6UeFbpdQ+Ffhq/SQyLcaVbyBv7waNTn61+O3/AAUhu7iw/ZambzWhtLm8SC5I +HUHmv1i+D0zXX7J3w1ncfM/hmyPPb9yv/wBagDq763WSJwy7lPauFlhk02+M0Ct5ROWA616XMmSR +7Vz9xaB1IYAj36UAUbTVIZYMq6pxnHenXeoRrACDnIznOK4fWbC9sbuSa0L4IyQvSvNtZ8X3sFg6 +ywtvXjaxwGoA7TXPFFrb3HlzMQRGSFEn3iOcV4f441q3vLCK4sZYhIcb1Zs5JHSvO/EfiW6k1Z7s +28ylFyux84Pt+Ga87k8S3F5fBLuXZZQtuQLF3PYmgDtY4yZDd3M1u7AkeQ65Ue496ty6sselxiAM +v7z95KVwVXuBXDNr+nC1inDl3CEhc8nnjisr+2tR1TUUt7YM8W87jjqcDigD1r/hIrh4ooUAK9v7 +23sasRanPPNJHCTPgde34VwukaJqsl0skjh18vGxh69q9k0DQswmNrIKFQYB9fWgDpfDGlCGJp5s +jIBI7Zr1iyEvmKCsSQBflb3NcvZW7R2cMTDyyi9u/tXV2bEWwfGMHpQB+YX/AAU/8H3Wt/DD4W6x +BftbLb3N1azhT8hUhXBIr8gvh/oaWPjnVz9oaYG3QOSdoZs9a/eP9v8A0aPxD+wlqSrcfZrvTrtL +yJgOW4KsoP0Nfhh8JUc3OoXs9uDc2swt5A5yGwaAPur4C29pqg8d+CNSMR0fxN4M1Gx1FZB5kJxA +0sRbjgq6Aj61+Tnw68f+Lvhr8SdO8ReEtavdK1eykBBgnKI+1uUYdwcV+lFj4kg8EfCrxbqYlRLm +fTbiC3SEYyXUgkn6HH4V+UEEYS4ZZGIDMSxznJzQB/SP4A/4KE/DPVfgR4d1TxXpus2viGa12X6W +UO6MzqBu2+2c0/X/APgot8J4tah0vwz4Z8T+JNVliB+zIqIVOcbee/rX4h/BrS7nxrp+raDY6tY2 +eqWIF9apeviGTJ2spPbjmsvW/FOn+Cp9T0nwrfLqHiu53RaprafdhGSPKtvT0Ld6AP04/aQ/4KMa +xYeGo/Bfw605dD8RTRg6tqYdZVsgRzEuOsg6H0Ir44+HP7WHxH8KfEi18SjUrjU9QglEs26VsXce +fmDZPWviv7TKnmlndwc+ZHIc5J/iPqau6XevbzQE/vEWTK/U9aAP67vAvj218f8Awa8K+NdMGLHW +bBLtR/cLDJU16AsjeWn8dfIv7G82m3n/AATX+GT6Xem/ijs5EnJ/5YyCRtyfhX1lZfPbbd/3aAJ0 +fbcBuhU7jXokSpfeG5YmAcMnOfpXnz4EeW78HFdl4buM2rwvywPP07UAfyzfHrXr3xH+3d4v8Ta2 +7SXc3im7juNy8hElaKNefRVFfLuiaeH/AGsxBPHGoiunlRW4XoSDX1l8fLS21r45+NtZ0dQ+n3mv +3dxZSKeiNMzKSRXzBr1tdad4z0jxorK8BYQagy9YHPGT7GgD1T4jqf8AhDHuol3yfOrBex7mvuH/ +AIJBukn7QPxjuCokaDQrWFJG7K07HH0+Svh/XbpdY8IRfZwPKIw0q/MrDA55r6n/AOCX3i618Dft +++L/AAdqUyQDxXonlWRyADNC29V57ld2KAP0u/by+HV18QP2CfG1jpVnLc6xYW6ahZFOSWiYMRjv +xmv0D+DOsafr37JPw31fS2RrG48OWnlbTwAIlUj8wa8x120ttY8P3CXiK1u9u0c6OMkgggivIf2L +vEl54RtfF/7PXieaUan4WvnuPD0sp+W70yZi8ZUnrsyVIHSgD7ycbhis6eMZJrUPSs646Hgn6UAY +09usyuGAYY6E15H4v8KQX9nMPKBOMjBr2GRhlsgjisHVIhJZvgA/LQB8W614LaO9mjKOseNoIPIA +7+/WuCuPAdw2IbeZpYi2XA44/wAa+pvENnt1AOMAbeSa4janm/u0VcNyaAPG4fhpDHcCT7wABWRm +yy+oNdXBodjbTwrHbRKoH3k+UMR613JVSXLjCE4wPWgWyO4XylZO/qtAFG202FEaOVQUIGwBs4zX +Z6RAIoEXDu2OAwxVCGFjGoUg7Tg/LW/apsjVmZcZ5KtmgDai+VSAqJKRkMTwKd9ujtUd5SUXaOpI +rFu9S+yxSMyL5XZ8818b/tCftFWPgTw/cQWd2kmqyLtgj80ZGcjO3+VAHgH7dnxmcs/gC0d5EaNZ +LlY29WIVcevtXw/4Z0X+yvC6WYEUdzK/n3DgfxZztP4cVBql3qnifxbc+LfFDyXl9M7GCOT7yqef +MI/QCpbjXodP0J3uZPKIjyVbG4fWgDlPit4vjtvAE9ujqpkiaCMFcDOMn/Cvie3VmkWOEMXkPyv2 +X3NezfEPXE127t7O2aN7VGLu7OBgkV5za28EaNEkn7z+GQj7w/pQBt2WqXOheGr7SdFjSG4vlVdS +1DPzumeY0/uj1rn4U3bdxL5JABU/KetWktSS6EED72d2SfpS7UKOY3Ykp8qHhlIODmgCoqSbvMy7 +v/GMDFRu5S4RQNzHk7R0rdVYvMCLtQKP3jA5zWRfaVd395tsSXK9Qo60Afsr/wAEtfjZAw8T/AzX +Ls/a55W1bQGcj958oE0S/QLux7V+y0DtFcbQm2P1Nfy8/sk+FviP4d/b1+Eviyx0PUXsLbxFDFez +oQUjt5PkkDeg2sc59K/qLuUQyyrGxaMv8hHT86ANLKlBtxir+iXBg1rBcAP2FcebiaJtpJbFP0q8 +mk8VWW5WRGJGAOaAP//Z + +--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1 +Content-Transfer-Encoding: base64 +Content-Disposition: inline; + filename=avatar2.jpg +Content-Type: image/jpg; + x-unix-mode=0700; + name="avatar2.jpg" +Content-Id: <4594E827-6E69-4329-8691-6BC35E3E73A0> + +/9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b +AIQAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAgICAgICAgIC +AwMDAwMDAwMDAwEBAQEBAQECAQECAgIBAgIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD +AwMDAwMDAwMDAwMDAwMDAwMD/8AAEQgAwwDDAwERAAIRAQMRAf/EAJ8AAQABBAMBAQEAAAAAAAAA +AAAKBAUJCwYHCAMBAgEBAAAAAAAAAAAAAAAAAAAAABAAAAUDAgMDBgcIDQkDDQAAAQIEBQYAAwcR +CCESCTEVCkFRIhMUFvBhcYGhJRfRMiMkNEQ1RZGxweFCUpIzZGV1JhhyslRVNkZWZhliooXSQ3SE +tJWltbYnN0c4EQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwCZBQKBQKBQKBQKBQKBQKBQ +KBQKBQKBQKBQKBQKBQKBQKBQKBQKBQWx5emeOta98f3VuZGVrS3lrk7O61M3NrejTkNdvqlq5Xcs +pkqezbKJjHOYpSgGojQYANyviVenfgaW3oTEHKb7gHhArXoXlxxc0JvdZsUodbY27cikSppSvZb6 +gOUl1AVTYEAE3rNNOYMEm4TxW26yTqpg2bdMRYvx3GHATJonJZOgdJXPmVPy8ntt21edrcRurrg+ +kBbqG/btiOmhu2g8CSnxE3VNmDYytxM6oowtaAL65dFoZF2pY8GAnKJnQxGw1u+U33wgBShrQdPM +vW+6qLGtfVybeFkxZdflHtN609Xmt8RN1wAAoEY0DsgWImVPoH80mt27Yjx5deNB3rFvEh9WCOub +WsX5yi8sQN9m2nUMsgxLjT2N0t2xKInXLGqMtjv7ScpdBuW1JDDqIjxoM1u1HxW7M+SWMRbd7g5F +D2NcYqF9yhixwXuqdpumJpad1sJcvWrrqAL2nryJFNy6Qgie3bOIBbEJRe27ebtc3dxoZXtyzXCc +otdq4FlZYZXC4kfG2+Jeb1DtGXiw3SJru6dgX0tvXThrQenKBQKBQKBQKBQKBQKBQKBQKBQYSeph +1ytsXT0FTA0xbmac93UN28mxxE3JIRujl09u57JencgAb5Ga3cuFD8XtW7yoxe0pO2gg0b9+rZvP +6i6qylyO5+7GLmFVfVt2OscJHZsiSQ94BtlUPd4VKpS9LCWB5fWKrpihx5Sl10oMSIqR1HUR1146 +9uvl19HtoK781Q/2n+5QUH5z8PPQV3/tnw/71BXJvxT6fi8/Z2UHJ4tFJZkSTs8Lg0ed5XK5AttN +zKwMSG+4ujktvmALSZGkTW7l67cMPmCg9o5B2cdQzY9djuRJlhzPWCbqv1LixS1K1SNi5DEL623c +7ybAKWwchR15bhg7eIUEifpY+JVkTE+x/BHUDXGd4/fBIzR/PlhKPfTSpADWbBMhI7YFBajOYCBc +Xk1ukH0jEENaCbFFpVG5vHmiWRF7bZHG35Cncmd6aFVpa3uCFVaLesKE6i0YxTFPbOHAdDFHgIAI +CFBf6BQKBQKBQKBQKBQKBQKCMv11OtNY2gs7ptZ24OFh23JylmEsjfkVwiqzixmcieqLqWyJ+aVr +rVz8DZH0rIDzCADpoGPboreHMkW9Qj5u96liTIzRAZUrtOcAx+rdlDJN8sqV4FWLZpLHS7656aIo +BTltprRQsqlxhMYp7dq2UboTacK9NvY9t+xPewpjHbfjVqx8sSqEjo2OjEnka55tqiGIoO7vT8Dg +7OF64U2nMe8IgHZppQQQfEJ+H6S7L7DtvK2nWHl329v8l5cjY6BECxVhlwergijcm5SjtgZRAlq8 +RslNdIUyC7ct2zmOU5TAESX8z+HnoKJL2j8v7g0H5w/JPj+P4a0BUq7ePw+nz0E9jwj/AE2Udxsm +fUVyrFrV4664rx7t6tvCIpwt2kl4PfOeN1tQQQAwqLZG5IoL2CRTyj5aCdEub0DolvIXNCjcUSm1 +csKEa5NZVpb9m6USXbN5OoJctXbVwg6GKYBAQ4DQRr+rr4dDbZvVgshyTtfhUK2/bqmlOpdWVfGW +61GoBkdXbIa8ZjmDA02SNTcvcTl5bTmmTkulum1vhcLxKEYDpCdRrOnTO3XOWwPeXdeI5i1NNluP +npvl9+6f7IJYF8bCBzQq7pzFtRZUpOT1glEbHs90t4no+kAT+kaxI4pEy9AqTrUK2xaVI1iS9bUJ +lSa+QtyyoT37RjW71m7bMBimKIgIDqFBU0CgUCgUCgUCgUCgUGKzq79Q9i6eO1aQTpCpRKswTYiu +KYejd2+T2pZIr6fS++GSAB791BHbN4t+5oXQTCUuvGgjLeHG6cl/qPbu8m75N2CZVkPHWGpOkfzp +5OQ65Bk/OUgv3XZsSuYKRPacGKHI7IrlScdSGunR2TlNaOctBsj7Fiyms2k6azaTp7FolmxYsWyW +rNmzaKBLVq1atgUlu1bIUAKUAAAANAoPrQWeQR5hljI6xmUMzXIo6+oFLW9MT2gTObQ7Nqy0awrQ +OLestXkqxIpsnEp7dwpimAdBCghudSfwl2NcuSCUZd2Fzdpw9InY6h6XYKmdpXexyudLXOptJYZI +khVLjEbKm9qS2lUWVKW2JgALlq2GgBHxhPhiOpE/7as/Zwk0eYsbTnFze9OuOtvjqrTOmSM0I4+7 +LrMqWoAQqLzbErZGtEYGg1s4g/Dy+QxRMGFHG+2LPGYXlHHscYPyVM3pfbC8ibmaGP70pv2DGKUL +5CIUN7WwJhD0/vfjoJaPTU8JZknIl6N5R6g0hT46xw4NKd3SYThjlfPlRdfUjbuWEcwcrjeLNEk/ +sxhNct2rqtYU/oHt2h1Ggnu4exFjvAmL4LhrE0ZQQ7HOOI22xSIxxtJyJm1na7BbFggnHW4pVXhA +bl+9cE12/eOa4cROYREOyaBQa+XxgGxhDCMr4i34wtuOmTZbtWsW5XOmKIWPfOKNhbkQfLnIGltS +7RhMZKc3DmFvKP3wjqF48Md1K5PMweNjebphfdL7SzLJHgd1kLlcV3lSBtU2SOsGa3NUIivsJm+9 +7Witc4mLas3ilDQtBMqoFAoFAoFAoFAoFB8VCiwksXlSq/ZTJk9s96+oUXCWbFizbKJ7l29duGLb +t27ZQETGMIAABxoNX/1p98jjvl3mzt7aXE9/E2LVazHmLURD2DprjWzq7tpzkIDZExDqH9eUTibm +H8Fbth5KDYR+HYwy14e6SO1m4lb7KN6ykySDLUpv27RCXXF1l0lde71ag5fSunLGkKG2UREdCkAA +4aUGbugCADwENQ8w8aBQfO7cC1auXRLcOFsh7gktWzXbpgIUTCW3bIBj3DmANAKACIjwCgpCAS/e +IIDp6kx7ptPKY2gAA/JQfidpa0hiHStremNaKYtsydGnsmtlOYTnKQbdsokKc5hEQDtEdaC4UCgU +Cgj5+J3xEqyp0kM0OSBDaXK8US7HGTDgYgGvWG5FI7MZdFCc2giQydJJxunEP/NkNrQau7EGQ5Ji +nJkVn8QdlrFJog+tr+yu7ddMnWIVzcqtqLF+xdIICUwDb0EOwQHQeA0G2w2gbi4dus254tzhCXhK +8t8vjLed1OmuWznb5OjTWk0jaVZLf8wqQuhLgCQQAeUSm00EKD0rQKBQKBQKBQKBQYlut1ubXbWO +nTnCZMTiLZLJkhR4tiiq2cbaiw6zk9xsNfTXwOT2W/aRet5Lo6gS4YvDUQoNW46PrQivpk61ztGW +rroXVgCcTnIa+fUx1BilMW2c4mEePy0G622Iw+O4/wBku0OFRK0isxuM7aMHtLOVuuWryE6NNjaN +lKoTX7BSWb9tUYRu+sKABcE/MAcaD1dQKBQBDUBAfLw830hxoLQf1SC6UeNmxasHualtmPZspLHK +a9bEpREbYgI6lEA8/wAlBdSmKcpTFEDFMAGKIdggYAEB+cBoP4vXSWLZrlwwFKXzjpqI9gB8YjQW +2y4GG4BLhP54/wCD5jgQxfSIF21y6CTnT+tKUQ5uY5y3ADiUAMF3oFB4Z6m8KbMh9O/exEni0N9v +cdsmY1N4gEC4cDssId3xNdtkEBAbthU2kOT/ALRQoNL4nD2NYIeYdO3X0QEQ7aDYIeFmyndlW0TM ++MxMa8kxpldsdm9SJtS+zz6NlOdKUv8AB9Qoi57g+f11BKBoFAoFAoFAoFAoIpfi152WMbI8KR0i +w1hVKc33r9pKUwgC20xxFyC6BygIc9uxdd7RhDjoIgPkoNcua4e5cG4cTHOY/MYREREwiP7NBvBe +l0uXOXTd2IrHJEsbV9zaXgQipA4Wrllakup8ax1ONhTZugW5bu2wtAAgIBpQe76AIgACIjoAcREe +AAAdoiNB8Qv2xONvX0y66lABHQOYQKOoAIemAagHaNB9dQ05tQ5dNddQ008+vZpQWNUrTXb3qzcp +xMnulKU9/wBnT3Ut/kC8e5d04h+D4AHk184UHztPyG1rbOJilAR5TAUTfMIAGutBa3dxBbb5bHMU +SCPIUeHMP8YQ837lB/aVVoOqvUBDyhpw8w0HJUd8bpClObU/IFwoiUSH9UcTerLeIIiJVFsoAFzy +c3Zp2AFbQeVN9hil2R7wzHHlKG13PomNygflKGKpXqPIPA+geTy0GlBWffD8o/51BNM8JS9ONtZv +Djw3rFtoVo8av1lvIP4a2tTukyRmv3g17RtLhL2UE0WgUCgUCgUCgUCgh/8AjCGlMp2p7Wng6stt +W2ZolSROiHTnVWnOKoTqb5fLokFvIA+T8JQQcNnWIVGfd2G2/CiYnObKObcaQq9+CG+W2ifpc1IX +G+eyACNy2nQXbhzBpxKUaDelxliQReOMEaa09lI2x9mbGVAmT2rdiwnRtiOyjT2bNm0Utu1bt2rI +ABSgAAHZQVaxWFg4FtiQ14SGONsboENyWiX7xdAMUwaXj2BII9oBqIdlBVCYR7f2KC3UFOqt3QKJ +AuH5f4uo6fHwAaC2+y+16ir7POH08KCt7rS+cP2A+7QPZE3mH6fuUH77P/Qfh/JoKyg/U14SXA5j +Dym4DqIjp5vpoOJ5ax/H8uYryTiiUnvkjWUIHLsdSAyQRBWVmmzEvi7mKbTiCgErocCeY+lBpZd2 +m3SZbUdy2cds02Xd9SHBeUJjClr4Hpd7g0iItEv11/3gYKCVR4R9vtlf95DlYDntCz4vT+u/j21S +6Sr0oecdCGPQTXaBQKBQKBQKBQKCLb4rKIR6QbNMHurtaLfcmrOV9sarImEDntP8JfAXmt6CHpWr +jYnNrx0oInPRCxoz3erHsAI1K7qhzJuIgkgMRSNs9oGZg1dH0pScgBqJPRAR1EAoNxGN843Qt8AD +yiAcR+5QR1Ooz4jzZhsNnMrwcwMUv3K5+h7TpJofj9zZWSC49lP8GLZJys73rgRyQX7YahbbrT3d +IA6HKU4CABHpk3jHd6QKwVx3aztNjbWIAX2GSzLKTtr8Yuhfcoga/EAUFc2+Mf3frA0DaXtNeOPa +15IyeI/94pgoMqnTj8UhjfdHlCC4J3UYSLt0nWTJaywqE5CiEyPK8SvElebxGyMM0q942Zhfcf3X +125gtc4GDm5dRAOYaCWpQUiVL8PN+/QQ3OoH1jOo9uN3DZS2X9IzA2ZFkh27zyXQTN+VIdjxld3P +vVnezNjQDPKZ3rAYBH9CmMIupROIecAAKDBpmRq8QgjUShFuN3vTrESOLNQOMp+0bffhSJtLQDqB +XMAeAxfNRLHwAA/RDpp+1QYiWzN+6FVOu8nffbJ2SQoBB0993Leq8urZ3v8A1QeBzKZn0+IWvT4q +DKTsK8R1vk2kZPi7TmfODvu/2/23Vojk0hE1d7kqyCMYKYmrphSXL7sfkJn7Ti1kdtQMJQAQ0HUA +m+QPxCfSAnDWmWWN5kVjKhU294Wm/IePcowJ3brQhprdK9QaxbtmAB4gBjfL5KCAP4gPJ22rNfU5 +y7mnajlOMZpxrleB4hkT7MIZcF5izbPysbxE3NquDykL6wxWJrMbQA9Iwhx0AaDNN4S1M8e3b0FC +VOnCKWLWJk15UY/40L5dPMBR2LVvTUycECS+Y4j96blAO0aCZ5QKBQKBQKBQKBQYM/EO4xJPem5P +pARImvrcZS2GS21fvCBbyZKpd7UeUilEe25cUO6fmAOIlKPmoINnTK3UxjZJvuwFuum2OpTkyE4Z +c5iL3F4OBe9yu+QoS9RaIGZuYpyiIP8A5wEKCQ7uS8X5uElTXKGDbltAjWGUrzGnlCyTbNUvenOU +NBjFO1HdmdmjAM7H3+xHuCYCmOblEA0HQKDExs26DnUV3vxlFml3RxnB2Pp45XZmhylufeXwMhT8 +XYAuuuQmqJtZTzx8HW+U/enATAIiHlEAzhYu8LvDMZKyyM3UIycabg26vr1C9t+MAaGrQdRKP2mm +KYAHTyCA0F5y34bN/kCZY7RLf02SjITO26RVFnzaviyVxN0DlE3MaXQUzyLAAiGnDUdRDyaiAYM8 +oYFyj0otyeL5Vvw6dm3XPuHXuSs7jB5diPvnHsAljtFHwrmBsdZExmDQVhyOQR1BolRTdnENNaDK +Blfxg+7G/OnxZhHadt4iGNwM19yseXnibSzIAl9EXQXV3gL2xx0TDqIaAQvKABxHUdA63HxW/Unl +qGQSpJi3Z5F4/ieLhkWVxVwieVQNkZnGaw6BGibPec34t23dD31B0AS+lp5Q5QoOhJh1A+rX1386 +W9rGHHuNbfIRJYy7yLJGOsKvr3j7EzTEBFgJKcsbh8i3CGkE+j4mAQ7qETcwiHDt5gza4A6B3Tn2 +0MXvbuDWOG7KQRdqNJJRlLca7PjRiaHtEVZjGdgHHZjCxmjhdeAu4mNoABrwoPW2y/ed0ud0ORXv +CWzxZhsJXAGszj7jt2BwxQ1S2Ksxu6TyvEoOeoz2PFHiJR0EAEB7BARD31kba/t9yvGFsUyvh3Dm +QIo8/Vy1km2N2R2Hhpr8dBCt6znSwwl0+ZPineNgfHLXNNs8kyc1QbKe1rI7w+OsAiUodWIHNnJE +5e1iL8aNT0veoB/qF8HTsAAAI++e5/D8jZJnT1ivCLbtZxVkV2iLrjzCceenx4izXFoqyvbaY55i +7CMhyCY0gHi7jxHWgl5eEmWorsa3jWb7mnB7vLsNqSs6e4AEO3Eb5oN1yJa11OFpUrJaEwcC84AP +bQTIKBQKBQKBQKBQKCPZ4jPcPCsebPl2AHO69qJtmpU33GFmYjmtOQoYxIGle4qVRSiIHTequksc +nZ68dfIFBBh2vwfI0/3Asm3LHolheeMzzvEeN8WSuTOs0x/KsRZta8nsznE3geYBf8fyMH7s8oDx +DQaDPb0pYvuT6j3VaSX+pI+SjLci6ceL3ZtW4yy0I92s+WMTTU8DaIhLCRnWNv0jYJ4dzdXh2MU/ +fpifWg6agITplStUrVe1q13tqseK5d8PIOlBgx8QPA92k32Crmnaf7+LUiKeM7ln6LYl78+0KW4o +Bk/VHuu9C/yCOd//AKXaKDzx4dSD7x4ZtVyGl3HtmS4phN5nTQ2bWoTlYH4ssi7Ya4c+RXpqZnYw +zqOY7K/HAjQDi5kIBSunDXURDNNvK2kId4exbcxiFZF41JLE2xbMEETROds4OLXm6KAcuO8gM98x +PUsV2APxRN3mBuflDXTloI6fhK4Dt9zHC90kTybtWw/KMxYancPkqLN8ziLLPpd3TkFmMIY7A85Z +3oWD3AFhAPqsSB6Qh5tQkwdUeMQzGfTr3gzKL7b8Y5YdYdg+YSRBjBbDYKaLu7mRsOhNKXW3dh9w +twIFZdjyU33hh5DCAlHQShHa8LDi9hadjOfshNK7+8OXNxgRt9XdndETx8ycGj/43QSBdxuCEm4P +A+Y9uKxc5oUm4HF0wxMK9t7Gd2lgatP66ZuHf7L81BHe6ZHh+M17EN48WzfuXzHA3oMSRl7DFcVx +uZ5M7OztKmUYAMseBcw/2eIwvLqAtPn8gaUEqBL3okV+1pVzWALWvu1chcmgHZp7p83yUGHjr5R9 +ieOlFveUqW9sSJkbZjaaMKAoCLU1O8Vm7KDQDOUA9IwmenTh5aCHV1KWmxHdg/QbhC1LzP6TZ5uO +kysugfWTRkLcFbcojb119LU5TG4/xvMFBx7p17jcydOp4xbvMxzOMQzmBZOl0txHljDzbKl16bRd +AjXWHYbmTIkoaSPbNdlFhLaVMbmhJdsGOTQ5DFEQoNlHivKLbleIMM2jxrfccla2x0QqSmE4GbHp +suX+cdQDQwAfT5qDtSgUCgUCgUCgUETPxDcXfse7jNj+5ppXNa3uWe43bEKGSfWzS0SyJ5RhcoaO +9v8AlygjZ573hbp5tv1w7lzdchbmXeDti3EQ6P5Sm7bEGSAyt5+z3JzG5RVryC0NJWMDSKBmJ3WG +gCPcGgajprQSfMJRMuyfxRW7HEKoXEsP6guK5dluDLiCUbLs65B0ycJ7RiiJDWTZbLKWwpg4CXQa +CT5QUaVVp5/xIfN+/wAaAr/G/wAr/HVfk4UFvkGdf8PuG8pziQssZVQnHkXyTlqUrnF4eOEUijG9 +Sd2NoZjHUQBlHTycezsoMLPhNNvnuVsGnO5h2bzJJDu/zJLZShAAKBWzH+OxNBIeQphEdBLctuY6 +/J5xoJQMij7FL2B7ikhRNrvHpK3Okek7IvKHdjq1OjQLW7tPEDehctjoYO3lEeIDxoIa3RwiA7AN +5HUU6W+QFzgilLPlQu4/AhrjV6tpyHiY7G9ldOQvKbnOeDPZXICiJf0F26gBRCSeKoEqpC7Jfypl +dGdyQh5wag00HXgOtBV5NnJslCyilhp2l1ZnQoA8md7YgRpddSnEvJbIb0x4jrrx7NOyg4y1pXT8 +7XfDs17aDAx4g7Ib/LdueEenzicBes8dQDO0Qx4yxZsIU7qGPYm+A4yt3MU4lAxDSQxSj26APYPZ +QYZPFRY5YsK7gOnxgloAyOI4J6fzXG0S5uDTkaGWde6PfHZwKJmQP2aBlLpCRjaJ4f1futywxlR7 +t8zZOwRkhWdxKbvfE+KHV91iWJWsOTlKHu+Yrq66mExtRDQALxCWZ0q/alfT72rq1n5WtxhD/wD5 +Hp5aDIZQKBQKBQKBQKCL14ophVq9r+K5Ck/U07efYfi/uS9a0EZPrfZFxTlffxK8m4VXtL28TTBW +3SS5hfGsNGj/ABAGxkzDKXaI+XmJa0B48mtBN73lbC5b1I9suwrfFgmWtUY3z7ZIdCMhY/kYWrdt +jmjw3JmxzmmJ5RbIIFtxpLPWZRbACh9+U/EObloPXm1LdXjvdjDn52iqxpZMrwt1LG8+YQcTC15D +xLlYSlGXNRmgSF79jwHEQaHYBHgADrx0APTir8U8vk83k+bWg/fzVc6+w/VKP8vfHL6paWj/AMX+ +UaCNv1I92D71DsksXRz6c8rLkCZZalLa2b3dw8F0v4v287fGF4tnmMQGSWjA1Pr8b1gFdTaemIGa +LfMZzMABLBwfhuD7ccJYtwTjdEDPAMSwaKY4iiINeDNFGfuu2A83pCY5SgJhH+FrpQdsJvJ8P41B +gz6wnTbypukJivdxsukjfj/f/tMdTyHELm6EZgi2Vo0S6VydcR5FtvJu47idQBvQM4hyl5R1HlNq +UPCeFOuBt5azDjPf/GZ506dzzO5dwZAx9mqGzUMUXJMICYrziXIIGfikjwELqIOhjAHaBjF0MIZF +Eu/rZGri77LEu9LaWtjzK1+8b4ubcwMjt3Q0/tUHhHcZ1uNpcIi/dO3CVf4tdx8zax+x3B+JWd6l +nvdLHbQIi0O/uv31Qc66WHS63GuO4OTdVPqj3W163sTNqux/C+IG7u0IBtYx4RoBsZSILbWpOity +K3HjgQtv9TEMfm5nQR5Qjz+LmB0V7+MXNuhraJm2kwFGhMJSgCh/c5llq6a3buCHMPs9sSmOUo6f +hCCID6IgHpjrR9SC5vF6cnSowLAUDiimu8xtxvnrIMXazEud2M+PALBWuLFOXQOSRZfHlAB/ia8d +QoJSu0zF/wBiO2nCGJ/y33LgTPG/bv7JZBoPR9AoFAoFAoFAoMOvXMw39rGwXIyRIhBarhbozzVA +P9k/pfj8TBQa62eJVUTS+1yFja1qTJzV/cicOXfbT3O7RN7/AL3C0eaR6/pag2anh3Mypsx9LXEF +62495OGN5ZkrH0qvCcTnM7BML2QiWzBza2/ZYvPENkA/iWwHy0HPN43R7xtuDzIi3XbfcqSvZjvX +ZGwW8mfMTs4OrZLWs+pjNWWcdg+MdvIFsSgUoauZD6E1ETcKDyFHtiXXwg6ebMEX6i+05+b5MYDM +02mOCZrbl0UtgICcrLFzEfrdoxihwEXMwAPHQQDSg4M2+H73R7glKr/qNdXTc1uBijwcRf8AF2F2 +pmwjFXkumoC7uTWF23eAohwL3SXXyjQZttm2w/arsDxiGLNrmH43jOK8omkrwQDuUolbm29jrMZW +5mF7kdz0dNTjoAhwAvHUPWXtSpWq/onZ5h+AUFd+SUFD7Uk9q9l0/wDUfJ+z2UHBMo4bxLm2PjE8 +xYrgmWY7x+pMiw5klzUHER5iklBDgIjrx4caDwE49EjpMOrkDou2CbdRXAGpu7Yd3UA8R491tTtb +IbT4gD5KD1pgfZ/tX2rpXNLt027YcweR8H2F5W4pxvH4k6ufLobldXdqt235+AptBATGMOvHXhQe +kknsn5pr8+v33x6+Wg14HiKMUZW3j9YiFbb9vURXZAzI9xHHUNjsUI+WmollRaht2bLpA9PGhAj0 +dZmY6ozsJjcvIQBAQ5h1DovpMbQVmY+pt7v+/Jct4n6frX9nEWnBQegiTs7Y+EYv3vEQcQAAjcgf +w710oJ/qVKlSJUKRJr+JfRQf1QKBQKBQKBQKDic8i7XNobKom7IfbWmTtbxG1yH+1vmANaCGht+w +Oyv8c6pHRrzBFYo4T52juYNyWyZ2dmcXV0bc/wAUgx3N3LjsSctz3kf2TldR5TlHl10HXSg9U+Df +3NN7rBd3W0tZfIkfrMoie6WItvrhMdQzZBisfx3kO1bsj/NhFFsRiwnEOBu+Sa6CHEJwPs4fF9H/ +AJNBQ+zAl0EBAddfPpQflB1JnCKTycYkyhEcUTdBjPJcjgkvjeOcid0keCwGfO7DcTxKXXmo2oHL +H3w/rBLrzCIB2jwoMT3To2z9YzblPTx3eDvOwTuxwCtI5OIuLnH5wXNrQ6uQga2ETl4gQl6NW9Ox +zMJigI8ogI60GUjcUz5vkGEpy1bcJ1BcfZsXNJhx3NskRI8uikTdzCTleHWKtgiZ8KQAN6Iej6VB +h56c2xfqt7eNwE2yrvi6kJd0uMZLFXhrQ4SaQmYM5JU5PRQtSlqLKGhlDH5I6Ajyg0l4ajxDhQZ4 +Ff5KOn5X5PP2cPh5qDivtSpIPzfP+6HkoKH2lV/pv+dQcqa1X417Jp9zt+Sg12uaN+cIxR1yOpzv +QTPI2JRt4wtm3Fe3VtsN9u9ZmO5M7dCttcJLaMUD2jJ2YJY4vbsbTmuWkYDqACUaDM54c/bSrw5s +tXZMkKD+9mdZR7ye3f1T+qOFBIWoFAoFAoFAoFAoFBg86r3Txyfm5+xzuw2nvjnC90uF3RncmNdG +/ql1d+6v0R3R3pr/AHjoIJER3X7sOkf1DU+VouwXMZZvhzurWziAPaNtSwuYQ7IjgeVSeASdgZrV +n2mPTNoUtdwTW1FtQiUprSlOa2otWrpA2nPTb6lO3/qc7a2XPOD3MELml9mZMq4rdVqe/MsRTsUv +r1cZkVqyFoVbcrAh77S627RErqjD1hAt3SKE9gMgntQ+Yfo+5QWSg/j2oPMH0/coHeof6CP0UFEq +fvZPzHTt+L46Cu70/Ffa/L5+Oumnm81BQqn5KrS+bT4aUHFFXYHyfuhQf1/ROPtn7vw+agwfdb3r +UYw6V2KbUWgp2LIW9DIzABsZYzu3QWIYPZCwRMiyjkpKmuFvJo+hV3Td3N5jW770rtchNLBL922E +SDoi9MJJ1EJBLs95hlrveh8QyevvPOtklh2yu7Op1zyZx7xt3rpbR1p043Dl5h0OYeI0GwTjEXYY +QwsUTiSHuWPMrV3axoW39UNLT+3QX6gUCgUCgUCgUCgUCgggeLB2cEQS3H27KNtyowuyW7FJOqTN +g2U4g3ktODStv3S8SlOkV3LIa66GTaeegjZ7BOoTuk6duXEud9rs7CJShU1Gjstj7y323+CZBjJr +9tRdjs4i6k9pO7toqbRbtm7bOnXIrwesSqLFz06DYRdJvxQGIN/uScdbX874cfcH7msgX77PFXKF +HUTPC08fG9pXvCuykUKDFmOPVitG3XTWEi+26oyFtiB3TnEhBCUd7UHmD6fuUFf7N8Xw/lUD2f8A +oPw/k0D2b4vh/KoOPt8qhrs5rmhqlMZeXVIURXMra8szk6l0Lz6GaymA9vgHboFB9FTCl0D5P3v2 +qDrOYzGJ48iclnk8kjHDoTDWJ1k8tlkmc0bLHo1HGNFecXh9e3dwvWELY1NiBPcvX7945Ldq2QTG +EACgiM7/ALxbO3fF9p3g2wyBr9w88spVaFNmGdJHaD4WYHG4nEidxZ48vSoshZHM3rAEt1PdsR1F +c0LcsLVFsdBCBBmvNWV9y2WpvmjNczfMk5ZyW9LX2RyZ7VjddXd9XiFhtto7VoLdhGgbFF5PbSIk +xLaZKjsBZtWyWyAUA2cnQy2vG2sdP/E7WuQmRSWesFibP6A46mC48lAxwMPZqAjpQZlaBQKBQKBQ +KBQKBQKBQYsespt8btxHT6zzHFDf3gvYYkeYM63s1c4sUXIfP56DVAL2w8eenRgumC4REoOZFdEB +AL6K5qe0YupQEwkKPKbT+EAhQZeOgffBN1hNhtwbg2+bMd+wBg14+1QqWJQt8A1/Cje5R8mg8aDb +v8PyT4/j+GtBi46n217qN7oo1jCP7Cd4LbtLTNTs7DmVwFtfWyUytvLbIDQdolUbtnfLWlspw5CC +TUTAbmERMUQwoj4YveRkFT78Zu6w2eXrLIOQuSB6a2iauzU1iGoho7yqbA/aj2cRAKDlBfDK7qZw +l93s89YjcZkHH3YvYu6Xp2M6tenMBTe802ewA4APkoL6/eEc2wtLWiV4T3abn8Y5MZTd4sU4cRhL +w1d6ejoJmhsZWLQPOACPD46DN507tr+47Zlt1JiHcJuklO7ycDOHmQo8nzkXj1jRFHUS9yxExpFe +f3seQebXiOgmHQQ8ocU6tS49vpj7/hUGKU5toWf7IGNygGqjGcis6cTaamC7oHl1Gg04lB696emH +Q3Bb4du+LbgWRbXeftl13u3ya2EaBuLec1Ks5/4iRMlPdMGnH1Q8aDb6MLWljzCxx9o/EkbM1s7a +h1/qny+Sgv8AQW/89+HmoLhQKBQKBQKBQKC30FwoOjd0DD7w7c84NOv5bi/JH0sj15vjoNU5k3aJ +Pp1tryZvAgdkr/HdvOV4nizNLClIAusEj8/tOqXGE+dA1KYI5K5AwrWk94Q5bS6xbAeBxEA7j6EC +4P8Aq6bBFVsto2ueWe2e2oAwlKFxme7N4pigICFwhDmEvEQ5g7PJQbe50Sqkirj9zjx/yaCva3T8 +04/D4fJQeC99rV1K3VPClHT2k+CWVQhK7BkSLZt74aXB3KHMVoc2SVkhs0EvqgLx1KGuocR0HQMS +/wBiHidcnKwapDuZ2lYXj638tXRx3+tw1D9Ti17fOHCgzzbOcXZ3wlt9hWPtx+cTbjctMguwSnKg +s/uuDwVze/WDpbA4gAMRTCUR0Awh8gUHc6qUflyTT5fpHtGgxndXQ43elz1AFZC857e1DMxFZQNy +cpr8Mc05T66Dwtjd10/haacNaDTzakJbu3ro8tmwUDHADlJcumMPLZT2NSXBMoU3TAUgAQ/LxOYO +QpjAGbjoqYpkkT6jG0lmnDK5w97m7uyTi2nemS9bc7sOl8WI5wJ8aS3RG4ZskLW5kV2DDxPbtgOn +Gg2i1AoLH+c/Dz0F8oFAoFAoFAoFAoFB1vlpL7Xi/IyVV+SLYHMGzs/1syfPQRaPDWQ6HzfMvVo2 +25AijdNcZTeNw5slcKkIFFolTQWZ5RjfdVzm1AbZ2F3AnDjqYNNO0AxIbn+n9IugH1WtsW5NZFJr +kXZW3bho3PMXy5uS2zya3HbLtzu+G38pQ5XDL8KZLt0ycDjyyZNbtqbYAJ74gGyjwxmfGO43FOP8 +u4ombZPMbZIjDTIobNmIxitjw2udpPoa2Y1rmZnzQ4lM2jxKcvKIagIFDsNKl7pVf+m9v7vH56Dk +FAoOByhzVpPxRIuHT975NKCxtbCrVqtfzT976KDGn11Z3FcX9I7fCofndG0kkuGHTH7SdUptIlb3 +Mp8rRxlrj6BKe8Fxe8uV9yC6CK2BjWEFu9d0ApDCAQEuhP0dXrqL5oTZJyzHVSbZ1geStTlld4vn +IlsZWlgJiObVhGN63LalcpfbdwUkhUCNv3bRhzfg1CgxRDMVkVqSKvFErStCBqQtEWc8DRhiQtjM +DQ0M7Q0bXcLgDOz/APLYUEy+gUFv9l/Gu3h9H7etBcKBQKBQKBQKBQKBQcGyh/sHOPa/+F3j5P0J ++xQRlvC/6O+9LqaStJqtSf3PbES7savrbKOTnPUB4Dw7loJYm6va9hLehhqbbdNwULb5njCftpkT +83gTV3bHQSn7plUTdTEPdYJDHTH5gdS6GAwAHZqUQhPMkh3o+GO3RLIVMGnIm5vppZslZHNvfm+7 +daBZ3RfbuJrcpx/a0MwwTcKyWiAWUNBvQnRQAQ0ECmKEx3b3uuwzu6xgxZp2+ZTa8sQB5KXleo2G +jlE3YSmHubIEU5SvsDkhfVjqDpoYoBqIAAgIh3MlfnT/AE7234fL8dB+9+qvZfy7h5/39aCg70+V +YHw+fQKDxPv86tG07pr48XSDPE2aHDJXdxl8MwDDXdmc825CcfVczTyRAxDhB4+c5ih3s6CUoAI8 +dS8pgiewXDfUP8TZmtiz1uDcpZtm6c+LnYjlB2WPkdjtN0AtnLcaMUA6Ax28v5FPw74yA5k9WyAY +e6gAAABCZriLDWJ9vOI4NgfCmO2qA4rxi1BGoVGGsnIDUbiI8roJji/SGQDq6urqJjCAeUR40ETb +cSdFjbxMKF4fkhWhnmZsFSFkFwMBwdmtywvDYpcddQEQ5iXISICHkEBCgl7JPyX9j/NoP6oFAoFA +oFAoFAoFAoLC/PzDE2BdIZC+NjK0srWLkuXOf6KaGnXWgih9XLrwRdpYXzA2zmVNcndlrW8Nk3yo +2fW0TaGnT/dH/iCR8aDIn4VrbE54n2MS7cJNWRwZ5buzyh76My50OUHN1xRFCg3Y8drg8RAX57fH +QwgIBqA/PQSQ350VpHT2v804fPrxoOKT2LYlz1A3rGWWIvGZ/CZM1d2vsVkbODs0PID/AABAQEPn +4DQRoc0+HPyFhLIS3O/Sn3TzfbJOu8gcUUJty98aGY/okAzULmYX1inZhuCbQkpbbgAUOJhoPLjp +uq8UVtPfl0eybtJgm6pp/wCKW3D3vZ3v5vrfDc0839V0HE3XrHeIHWJQSR/o8NqFWHYucdrO4qVB +2eXlFk7dPLQcWM+eLE3kMKtqaWBq2rwiSD3e9OBmfF230QbHcpiCYoyiZZNy8QRIYQ+qmvXQR40H +vPYd4XXDcKfkOd+oZlVw3l5sXCDk5RxxdHp8xaDoJbnrAlMqlRiTrLpyjyCQ7qDOGuoDbEONBKwY +o+xRppQsEcZ29lZmRtam5nZG5rI2NLO0tfFqbGtqRDpbJaEB0AvAPNpwoPkqa0ventfsP0cOzhxo +I9XXg6X8o3SwKK7mtuCF0/xS7cNO42KNh9b5cxP3370O+Omnj/tHH38O9Gmg6r6afVyxhm3HSHGW +4+VNeMs8wv8Au2+e+31S0y52aP8A6fkf+t2igzgNbqldkqF2aVwrUi38hXNvyfTQXCgUCgUCgUCg +UHW+UMtY5w5F104ybOIvC48i1/HpI8A0j5P3KCMtvc8SxA8eql0T2nwgZo7fmE4m31TE+9v7ID6/ +1oIqW6rqg7vt3ar/AO7OYZQtj3/A8b/unE//AHQ10HafRdw5gHdH1MdtOEt0DN74YsyCSZlVQkXV +9bWaWSyKsBpNjxpeiEuWz3I0Pc3EoCAmARDUKDbVsLC0xlpRR6PIm5naGduaW5mZm5pBpamdqaQH +upra2rUOQpNNOH3vAAANAAAuipKlV8OPk+X5x40FjVMLX5PJ9z7oUFclSpUg/ivy60Fd7T8fw/k0 +D8W+GlB+eyJvMP0/coPrQfL2RN5h+n7lB9aC2pfaUn9NS/F8n7VBhV6kPRe26b2SPOWIosvbc9yO +neAZhhTIV2bZgctsxjfaRj0nLYnoiJBDXUr1zcAHiFBFVxb1JNxfSM3ZZg2eZhfGzM8dxPJix6Uo +G92uW2sAEAOzy3HhJYBTkMAD+hxABDy0Er7aD1DttO8aLd7YyyM1+8I/l0GcnfumWcP6oCg94UCg +UCgUCgsEl9r7qXd3d5e2/wDLHc3evze9X1DQQfeun72e8yHvD/qA+26//tb7Ffs67P8AdD3Z+oaC +I7KO9u8lv+3f336z9y+zh837v0UHFU/evtHD3k1+L3N1+fm9HWg9pdPb3g/xx7SO7vte9u/xN459 +g+zn7M/tD9Z37w91vej+73vlp2d5fgvPxoNz83e1d12vaO9Pbe7Q5u9+5u9P5sf073X9Qa/5Hk1o +L7QU9AoKigp6BQKC2pfa9f1n83cvm8nxUD8b9r/Wfb/UnN2UFyoFBqTOvl3p/wBW/ePr78a+/bRp +3f7na69yk/S3L6PNprprw018ulB0lsj94vtjg/8A/Umnegf/AIk+y37Qu3/dHy0Gyl2Xe932ZJ/e +r/Fxp3Y0d2/4tvsR95f/AAH7Gvwmn9rUHsOgUCg//9k= + +--Apple-Mail=_83444AF4-343C-4F75-AF8F-14E1E7434FC1-- + +--Apple-Mail=_33A037C7-4BB3-4772-AE52-FCF2D7535F74-- \ No newline at end of file diff --git a/spec/mailboxes/support_mailbox_spec.rb b/spec/mailboxes/support_mailbox_spec.rb index 59217b212..946275b71 100644 --- a/spec/mailboxes/support_mailbox_spec.rb +++ b/spec/mailboxes/support_mailbox_spec.rb @@ -103,14 +103,35 @@ RSpec.describe SupportMailbox, type: :mailbox do end describe 'handle inbox contacts' do - let(:contact) { create(:contact, account: account, email: support_mail.mail.from.first) } - let(:contact_inbox) { create(:contact_inbox, inbox: channel_email.inbox, contact: contact) } + let!(:contact) { create(:contact, account: account, email: support_mail.mail.from.first) } + let!(:contact_inbox) { create(:contact_inbox, inbox: channel_email.inbox, contact: contact) } it 'does not create new contact if that contact exists in the inbox' do - # making sure we have a contact already present - expect(contact_inbox.contact.email).to eq(support_mail.mail.from.first) - described_subject + expect do + described_subject + end + .to(not_change { Contact.count } + .and(not_change { ContactInbox.count })) + expect(conversation.messages.last.sender.id).to eq(contact.id) + expect(conversation.contact_inbox).to eq(contact_inbox) + end + + context 'with uppercase reply-to' do + let(:support_mail) { create_inbound_email_from_fixture('support_uppercase.eml') } + let!(:contact) { create(:contact, account: account, email: support_mail.mail.from.first) } + let!(:contact_inbox) { create(:contact_inbox, inbox: channel_email.inbox, contact: contact) } + + it 'does not create new contact if that contact exists in the inbox' do + expect do + described_subject + end + .to(not_change { Contact.count } + .and(not_change { ContactInbox.count })) + + expect(conversation.messages.last.sender.id).to eq(contact.id) + expect(conversation.contact_inbox).to eq(contact_inbox) + end end end diff --git a/spec/support/negated_matchers.rb b/spec/support/negated_matchers.rb new file mode 100644 index 000000000..2adeec64a --- /dev/null +++ b/spec/support/negated_matchers.rb @@ -0,0 +1,3 @@ +# "not_change" is needed to support chaining "change" matchers +# see https://stackoverflow.com/a/34969429/58876 +RSpec::Matchers.define_negated_matcher :not_change, :change From 242de0b3f973e1ae8205b4c2ba18236c283b7aa5 Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Wed, 12 Oct 2022 23:32:24 +0530 Subject: [PATCH 37/62] chore: `Vscode` extension recommendations (#5607) * Added vscode extension recommendations * Revert the change * Revert .gitignore * Change `volar` to `vetur` --- .gitignore | 5 +---- .vscode/extensions.json | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 .vscode/extensions.json diff --git a/.gitignore b/.gitignore index e4b14d2f5..11a8c50e3 100644 --- a/.gitignore +++ b/.gitignore @@ -39,9 +39,6 @@ public/packs* *.un~ .jest-cache -#VS Code files -.vscode - # ignore jetbrains IDE files .idea @@ -62,4 +59,4 @@ package-lock.json test/cypress/videos/* /config/master.key -/config/*.enc \ No newline at end of file +/config/*.enc diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..254e696a4 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,32 @@ +{ + "recommendations": [ + // Spell check + "streetsidesoftware.code-spell-checker", + // Better Comments + "aaron-bond.better-comments", + // Rails Test Runner + "davidpallinder.rails-test-runner", + // Eslint + "dbaeumer.vscode-eslint", + // Auto Close Tag + "formulahendry.auto-close-tag", + // Auto Rename Tag + "formulahendry.auto-rename-tag", + // Hight light colors + "naumovs.color-highlight", + // GitLens + "eamodio.gitlens", + // Ruby + "rebornix.ruby", + // Vue + "octref.vetur", + // Prettier + "esbenp.prettier-vscode", + // Dot Env + "mikestead.dotenv", + // HTML CSS Support + "ecmel.vscode-html-css", + // Tailwind CSS Intellisense + "bradlc.vscode-tailwindcss", + ] +} From 1b5a335f93564885f2ab179fa712f798bc5dda65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kube=C5=A1?= <46596180+KubesDavid@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:00:42 +0200 Subject: [PATCH 38/62] fix: Update .editorconfig to fix spaces and indent_style (#5612) --- .editorconfig | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.editorconfig b/.editorconfig index 7203adb09..2a5fe28cf 100644 --- a/.editorconfig +++ b/.editorconfig @@ -7,8 +7,8 @@ end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true -indent_style = spaces +indent_style = space tab_width = 2 -[{*.{rb,erb,js,coffee,json,yml,css,scss,sh,markdown,md,html}] +[*.{rb,erb,js,coffee,json,yml,css,scss,sh,markdown,md,html}] indent_size = 2 From fca629a32afdc98afdaac526f9b240d12560143d Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Thu, 13 Oct 2022 03:02:54 +0530 Subject: [PATCH 39/62] fix: Update timezone to get `wday` from working_hours (#5605) Co-authored-by: Pranav Raj S --- app/models/working_hour.rb | 5 ++++- spec/models/working_hour_spec.rb | 14 ++++++++++++++ spec/services/contacts/filter_service_spec.rb | 1 + spec/services/conversations/filter_service_spec.rb | 1 + 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/app/models/working_hour.rb b/app/models/working_hour.rb index 885165da2..5ad4d0446 100644 --- a/app/models/working_hour.rb +++ b/app/models/working_hour.rb @@ -40,7 +40,10 @@ class WorkingHour < ApplicationRecord validate :open_all_day_and_closed_all_day def self.today - find_by(day_of_week: Date.current.wday) + # While getting the day of the week, consider the timezone as well. `first` would + # return the first working hour from the list of working hours available per week. + inbox = first.inbox + find_by(day_of_week: Time.zone.now.in_time_zone(inbox.timezone).to_date.wday) end def open_at?(time) diff --git a/spec/models/working_hour_spec.rb b/spec/models/working_hour_spec.rb index c126f6f87..a5018a28e 100644 --- a/spec/models/working_hour_spec.rb +++ b/spec/models/working_hour_spec.rb @@ -88,4 +88,18 @@ RSpec.describe WorkingHour do 'Validation failed: open_all_day and closed_all_day cannot be true at the same time') end end + + context 'when on monday 9am in Sydney timezone' do + let(:inbox) { create(:inbox) } + + before do + Time.zone = 'Australia/Sydney' + inbox.update(timezone: 'Australia/Sydney') + travel_to '10.10.2022 9:00 AEDT' + end + + it 'is considered working hour' do + expect(described_class.today.open_now?).to be true + end + end end diff --git a/spec/services/contacts/filter_service_spec.rb b/spec/services/contacts/filter_service_spec.rb index 5f52a1a3c..7e6661aed 100644 --- a/spec/services/contacts/filter_service_spec.rb +++ b/spec/services/contacts/filter_service_spec.rb @@ -167,6 +167,7 @@ describe ::Contacts::FilterService do context 'with x_days_before filter' do before do + Time.zone = 'UTC' el_contact.update(last_activity_at: (Time.zone.today - 4.days)) cs_contact.update(last_activity_at: (Time.zone.today - 5.days)) en_contact.update(last_activity_at: (Time.zone.today - 2.days)) diff --git a/spec/services/conversations/filter_service_spec.rb b/spec/services/conversations/filter_service_spec.rb index ed489bd30..a17351ec3 100644 --- a/spec/services/conversations/filter_service_spec.rb +++ b/spec/services/conversations/filter_service_spec.rb @@ -309,6 +309,7 @@ describe ::Conversations::FilterService do context 'with x_days_before filter' do before do + Time.zone = 'UTC' en_conversation_1.update!(last_activity_at: (Time.zone.today - 4.days)) en_conversation_2.update!(last_activity_at: (Time.zone.today - 5.days)) user_2_assigned_conversation.update!(last_activity_at: (Time.zone.today - 2.days)) From 0c8f744c33b5d2fc691cab43755285fd671fb1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kube=C5=A1?= <46596180+KubesDavid@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:42:06 +0200 Subject: [PATCH 40/62] chore: Remove unnecessary methods and polyfills (#5614) --- app/javascript/packs/sdk.js | 10 ++--- app/javascript/sdk/DOMHelpers.js | 58 +++-------------------------- app/javascript/sdk/IFrameHelper.js | 15 ++++---- app/javascript/sdk/bubbleHelpers.js | 14 +++---- 4 files changed, 24 insertions(+), 73 deletions(-) diff --git a/app/javascript/packs/sdk.js b/app/javascript/packs/sdk.js index 064033841..2fdd6c57b 100755 --- a/app/javascript/packs/sdk.js +++ b/app/javascript/packs/sdk.js @@ -10,7 +10,7 @@ import { getUserCookieName, hasUserKeys, } from '../sdk/cookieHelpers'; -import { addClass, removeClass } from '../sdk/DOMHelpers'; +import { addClasses, removeClasses } from '../sdk/DOMHelpers'; import { SDK_SET_BUBBLE_VISIBILITY } from 'shared/constants/sharedFrameEvents'; const runSDK = ({ baseUrl, websiteToken }) => { if (window.$chatwoot) { @@ -41,12 +41,12 @@ const runSDK = ({ baseUrl, websiteToken }) => { let widgetElm = document.querySelector('.woot--bubble-holder'); let widgetHolder = document.querySelector('.woot-widget-holder'); if (visibility === 'hide') { - addClass(widgetHolder, 'woot-widget--without-bubble'); - addClass(widgetElm, 'woot-hidden'); + addClasses(widgetHolder, 'woot-widget--without-bubble'); + addClasses(widgetElm, 'woot-hidden'); window.$chatwoot.hideMessageBubble = true; } else if (visibility === 'show') { - removeClass(widgetElm, 'woot-hidden'); - removeClass(widgetHolder, 'woot-widget--without-bubble'); + removeClasses(widgetElm, 'woot-hidden'); + removeClasses(widgetHolder, 'woot-widget--without-bubble'); window.$chatwoot.hideMessageBubble = false; } IFrameHelper.sendMessage(SDK_SET_BUBBLE_VISIBILITY, { diff --git a/app/javascript/sdk/DOMHelpers.js b/app/javascript/sdk/DOMHelpers.js index 2ac6188e6..47a45cc78 100644 --- a/app/javascript/sdk/DOMHelpers.js +++ b/app/javascript/sdk/DOMHelpers.js @@ -3,68 +3,20 @@ import { IFrameHelper } from './IFrameHelper'; export const loadCSS = () => { const css = document.createElement('style'); - css.type = 'text/css'; css.innerHTML = `${SDK_CSS}`; document.body.appendChild(css); }; -export const wootOn = (elm, event, fn) => { - if (document.addEventListener) { - elm.addEventListener(event, fn, false); - } else if (document.attachEvent) { - // <= IE 8 loses scope so need to apply, we add this to object so we - // can detach later (can't detach anonymous functions) - // eslint-disable-next-line - elm[event + fn] = function() { - // eslint-disable-next-line - return fn.apply(elm, arguments); - }; - elm.attachEvent(`on${event}`, elm[event + fn]); - } -}; - -export const classHelper = (classes, action, elm) => { - let search; - let replace; - let i; - let has = false; - if (classes) { - // Trim any whitespace - const classarray = classes.split(/\s+/); - for (i = 0; i < classarray.length; i += 1) { - search = new RegExp(`\\b${classarray[i]}\\b`, 'g'); - replace = new RegExp(` *${classarray[i]}\\b`, 'g'); - if (action === 'remove') { - // eslint-disable-next-line - elm.className = elm.className.replace(replace, ''); - } else if (action === 'toggle') { - // eslint-disable-next-line - elm.className = elm.className.match(search) - ? elm.className.replace(replace, '') - : `${elm.className} ${classarray[i]}`; - } else if (action === 'has') { - if (elm.className.match(search)) { - has = true; - break; - } - } - } - } - return has; -}; - -export const addClass = (elm, classes) => { - if (classes) { - elm.className += ` ${classes}`; - } +export const addClasses = (elm, classes) => { + elm.classList.add(...classes.split(' ')); }; export const toggleClass = (elm, classes) => { - classHelper(classes, 'toggle', elm); + elm.classList.toggle(classes); }; -export const removeClass = (elm, classes) => { - classHelper(classes, 'remove', elm); +export const removeClasses = (elm, classes) => { + elm.classList.remove(...classes.split(' ')); }; export const onLocationChange = ({ referrerURL, referrerHost }) => { diff --git a/app/javascript/sdk/IFrameHelper.js b/app/javascript/sdk/IFrameHelper.js index 47596bce3..bbc2cfafd 100644 --- a/app/javascript/sdk/IFrameHelper.js +++ b/app/javascript/sdk/IFrameHelper.js @@ -1,9 +1,8 @@ import Cookies from 'js-cookie'; import { - wootOn, - addClass, + addClasses, loadCSS, - removeClass, + removeClasses, onLocationChangeListener, } from './DOMHelpers'; import { @@ -68,7 +67,7 @@ export const IFrameHelper = { holderClassName += ` woot-widget-holder--flat`; } - addClass(widgetHolder, holderClassName); + addClasses(widgetHolder, holderClassName); widgetHolder.appendChild(iframe); body.appendChild(widgetHolder); IFrameHelper.initPostMessageCommunication(); @@ -99,7 +98,7 @@ export const IFrameHelper = { }; }, initWindowSizeListener: () => { - wootOn(window, 'resize', () => IFrameHelper.toggleCloseButton()); + window.addEventListener('resize', () => IFrameHelper.toggleCloseButton()); }, preventDefaultScroll: () => { widgetHolder.addEventListener('wheel', event => { @@ -241,9 +240,9 @@ export const IFrameHelper = { event.unreadMessageCount > 0 && !bubbleElement.classList.contains('unread-notification') ) { - addClass(bubbleElement, 'unread-notification'); + addClasses(bubbleElement, 'unread-notification'); } else if (event.unreadMessageCount === 0) { - removeClass(bubbleElement, 'unread-notification'); + removeClasses(bubbleElement, 'unread-notification'); } }, @@ -284,7 +283,7 @@ export const IFrameHelper = { target: chatBubble, }); - addClass(closeBubble, closeBtnClassName); + addClasses(closeBubble, closeBtnClassName); chatIcon.style.background = widgetColor; closeBubble.style.background = widgetColor; diff --git a/app/javascript/sdk/bubbleHelpers.js b/app/javascript/sdk/bubbleHelpers.js index b1ef9110f..5eab20f5d 100644 --- a/app/javascript/sdk/bubbleHelpers.js +++ b/app/javascript/sdk/bubbleHelpers.js @@ -1,4 +1,4 @@ -import { addClass, removeClass, toggleClass, wootOn } from './DOMHelpers'; +import { addClasses, removeClasses, toggleClass } from './DOMHelpers'; import { IFrameHelper } from './IFrameHelper'; import { isExpandedView } from './settingsHelper'; @@ -41,14 +41,14 @@ export const createBubbleIcon = ({ className, src, target }) => { export const createBubbleHolder = hideMessageBubble => { if (hideMessageBubble) { - addClass(bubbleHolder, 'woot-hidden'); + addClasses(bubbleHolder, 'woot-hidden'); } - addClass(bubbleHolder, 'woot--bubble-holder'); + addClasses(bubbleHolder, 'woot--bubble-holder'); body.appendChild(bubbleHolder); }; export const createNotificationBubble = () => { - addClass(notificationBubble, 'woot--notification'); + addClasses(notificationBubble, 'woot--notification'); return notificationBubble; }; @@ -71,15 +71,15 @@ export const onBubbleClick = (props = {}) => { }; export const onClickChatBubble = () => { - wootOn(bubbleHolder, 'click', onBubbleClick); + bubbleHolder.addEventListener('click', onBubbleClick); }; export const addUnreadClass = () => { const holderEl = document.querySelector('.woot-widget-holder'); - addClass(holderEl, 'has-unread-view'); + addClasses(holderEl, 'has-unread-view'); }; export const removeUnreadClass = () => { const holderEl = document.querySelector('.woot-widget-holder'); - removeClass(holderEl, 'has-unread-view'); + removeClasses(holderEl, 'has-unread-view'); }; From 6c048626d0a8b8fc38e7e9244d2ac7de399a26bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kube=C5=A1?= <46596180+KubesDavid@users.noreply.github.com> Date: Wed, 12 Oct 2022 23:55:59 +0200 Subject: [PATCH 41/62] chore: Replace deprecated functions (#5611) Co-authored-by: Pranav Raj S --- app/javascript/dashboard/components/widgets/Avatar.vue | 2 +- .../dashboard/components/widgets/conversation/ReplyBox.vue | 2 +- .../dashboard/conversation/contact/ConversationForm.vue | 2 +- .../routes/dashboard/settings/inbox/WidgetBuilder.vue | 2 +- app/javascript/shared/mixins/campaignMixin.js | 4 ++-- app/javascript/survey/views/Response.vue | 2 +- app/models/working_hour.rb | 2 +- 7 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/javascript/dashboard/components/widgets/Avatar.vue b/app/javascript/dashboard/components/widgets/Avatar.vue index daf044288..df654ee7e 100644 --- a/app/javascript/dashboard/components/widgets/Avatar.vue +++ b/app/javascript/dashboard/components/widgets/Avatar.vue @@ -78,7 +78,7 @@ export default { if (initials.length > 2 && initials.search(/[A-Z]/) !== -1) { initials = initials.replace(/[a-z]+/g, ''); } - initials = initials.substr(0, 2).toUpperCase(); + initials = initials.substring(0, 2).toUpperCase(); return initials; }, }, diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index 1b0b9ca36..bbc2f017e 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -477,7 +477,7 @@ export default { const hasNextWord = updatedMessage.includes(' '); const isShortCodeActive = this.hasSlashCommand && !hasNextWord; if (isShortCodeActive) { - this.mentionSearchKey = updatedMessage.substr(1, updatedMessage.length); + this.mentionSearchKey = updatedMessage.substring(1); this.showMentions = true; } else { this.mentionSearchKey = ''; diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ConversationForm.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ConversationForm.vue index 9dda5c02c..c9294aa2a 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/contact/ConversationForm.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ConversationForm.vue @@ -239,7 +239,7 @@ export default { const hasNextWord = value.includes(' '); const isShortCodeActive = this.hasSlashCommand && !hasNextWord; if (isShortCodeActive) { - this.cannedResponseSearchKey = value.substr(1, value.length); + this.cannedResponseSearchKey = value.substring(1); this.showCannedResponseMenu = true; } else { this.cannedResponseSearchKey = ''; diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue index 8da5183d7..bdc20e14e 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/WidgetBuilder.vue @@ -243,7 +243,7 @@ export default { this.$t('INBOX_MGMT.WIDGET_BUILDER.SCRIPT_SETTINGS', { options: JSON.stringify(options), }) + - script.substring(13, script.length) + script.substring(13) ); }, getWidgetViewOptions() { diff --git a/app/javascript/shared/mixins/campaignMixin.js b/app/javascript/shared/mixins/campaignMixin.js index b9353ff29..ebf98aa37 100644 --- a/app/javascript/shared/mixins/campaignMixin.js +++ b/app/javascript/shared/mixins/campaignMixin.js @@ -1,10 +1,10 @@ import { CAMPAIGN_TYPES } from '../constants/campaign'; + export default { computed: { campaignType() { const pageURL = window.location.href; - const type = pageURL.substr(pageURL.lastIndexOf('/') + 1); - return type; + return pageURL.substring(pageURL.lastIndexOf('/') + 1); }, isOngoingType() { return this.campaignType === CAMPAIGN_TYPES.ONGOING; diff --git a/app/javascript/survey/views/Response.vue b/app/javascript/survey/views/Response.vue index 6ec4ec100..828a9cbee 100644 --- a/app/javascript/survey/views/Response.vue +++ b/app/javascript/survey/views/Response.vue @@ -93,7 +93,7 @@ export default { computed: { surveyId() { const pageURL = window.location.href; - return pageURL.substr(pageURL.lastIndexOf('/') + 1); + return pageURL.substring(pageURL.lastIndexOf('/') + 1); }, isRatingSubmitted() { return this.surveyDetails && this.surveyDetails.rating; diff --git a/app/models/working_hour.rb b/app/models/working_hour.rb index 5ad4d0446..01b972bd4 100644 --- a/app/models/working_hour.rb +++ b/app/models/working_hour.rb @@ -40,7 +40,7 @@ class WorkingHour < ApplicationRecord validate :open_all_day_and_closed_all_day def self.today - # While getting the day of the week, consider the timezone as well. `first` would + # While getting the day of the week, consider the timezone as well. `first` would # return the first working hour from the list of working hours available per week. inbox = first.inbox find_by(day_of_week: Time.zone.now.in_time_zone(inbox.timezone).to_date.wday) From ee520bdf982186eec0c74f32741a61363b50cdf4 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Thu, 13 Oct 2022 04:52:44 +0530 Subject: [PATCH 42/62] feat: Show last active portal articles when sidebar portal icon is clicked (#5616) --- .../layout/config/sidebarItems/primaryMenu.js | 2 +- .../components/HelpCenterLayout.vue | 11 +++++-- .../helpcenter/components/PortalListItem.vue | 8 ++++- .../dashboard/helpcenter/helpcenter.routes.js | 8 +++++ .../pages/articles/DefaultPortalArticles.vue | 31 +++++++++++++++++++ 5 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 app/javascript/dashboard/routes/dashboard/helpcenter/pages/articles/DefaultPortalArticles.vue diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/primaryMenu.js b/app/javascript/dashboard/components/layout/config/sidebarItems/primaryMenu.js index cc4287503..fa4633ec1 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/primaryMenu.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/primaryMenu.js @@ -39,7 +39,7 @@ const primaryMenuItems = accountId => [ label: 'HELP_CENTER.TITLE', featureFlag: 'help_center', toState: frontendURL(`accounts/${accountId}/portals`), - toStateName: 'list_all_portals', + toStateName: 'default_portal_articles', roles: ['administrator'], }, { diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/HelpCenterLayout.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/HelpCenterLayout.vue index 528b55575..562d6bd07 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/HelpCenterLayout.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/HelpCenterLayout.vue @@ -59,6 +59,7 @@ import HelpCenterSidebar from '../components/Sidebar/Sidebar.vue'; import CommandBar from 'dashboard/routes/dashboard/commands/commandbar.vue'; import WootKeyShortcutModal from 'dashboard/components/widgets/modal/WootKeyShortcutModal'; import NotificationPanel from 'dashboard/routes/dashboard/notifications/components/NotificationPanel'; +import uiSettingsMixin from 'dashboard/mixins/uiSettings'; import portalMixin from '../mixins/portalMixin'; import AddCategory from '../pages/categories/AddCategory'; @@ -72,7 +73,7 @@ export default { PortalPopover, AddCategory, }, - mixins: [portalMixin], + mixins: [portalMixin, uiSettingsMixin], data() { return { isSidebarOpen: false, @@ -231,7 +232,13 @@ export default { }, updated() { const slug = this.$route.params.portalSlug; - if (slug) this.lastActivePortalSlug = slug; + if (slug) { + this.lastActivePortalSlug = slug; + this.updateUISettings({ + last_active_portal_slug: slug, + last_active_locale_code: this.selectedLocaleInPortal, + }); + } }, methods: { handleResize() { diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue index e0e002002..0354ad22b 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalListItem.vue @@ -188,13 +188,15 @@ From d2fd05ee4e18701fcc10ba95e1404d4af364abef Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Wed, 12 Oct 2022 21:45:28 -0700 Subject: [PATCH 43/62] fix: Show webhook url only on WhatsApp inbox (#5618) --- .../routes/dashboard/settings/inbox/FinishSetup.vue | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/app/javascript/dashboard/routes/dashboard/settings/inbox/FinishSetup.vue b/app/javascript/dashboard/routes/dashboard/settings/inbox/FinishSetup.vue index 01c46f5dc..7931016e4 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/inbox/FinishSetup.vue +++ b/app/javascript/dashboard/routes/dashboard/settings/inbox/FinishSetup.vue @@ -19,15 +19,11 @@ :script="currentInbox.callback_webhook_url" />
-
+

{{ $t('INBOX_MGMT.ADD.WHATSAPP.API_CALLBACK.WEBHOOK_URL') }}

- +

{{ $t( @@ -36,7 +32,6 @@ }}

From 8f4944fda065e4e6282930ff76bdfc18798b0984 Mon Sep 17 00:00:00 2001 From: Vishnu Narayanan Date: Thu, 13 Oct 2022 13:46:28 +0530 Subject: [PATCH 44/62] chore: revert arm64 docker build in gh action (#5619) ref: https://github.com/chatwoot/chatwoot/pull/5575 https://github.com/chatwoot/chatwoot/pull/5575#issuecomment-1277208625 --- .github/workflows/publish_foss_docker.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/publish_foss_docker.yml b/.github/workflows/publish_foss_docker.yml index aa1b15df2..2ddaba7e5 100644 --- a/.github/workflows/publish_foss_docker.yml +++ b/.github/workflows/publish_foss_docker.yml @@ -58,6 +58,6 @@ jobs: with: context: . file: docker/Dockerfile - platforms: linux/amd64,linux/arm64 + platforms: linux/amd64 push: true tags: ${{ env.DOCKER_TAG }} From a533f43fbf5ed6273ad3e0026d87d2d2a934c83e Mon Sep 17 00:00:00 2001 From: Tejaswini Chile Date: Fri, 14 Oct 2022 02:01:49 +0530 Subject: [PATCH 45/62] fix: Stop raising errors for unsupported Whatsapp messages (#5541) - Handle unsupported Whatsapp messages --- .../whatsapp/incoming_message_base_service.rb | 6 ++- .../jobs/webhooks/whatsapp_events_job_spec.rb | 53 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/app/services/whatsapp/incoming_message_base_service.rb b/app/services/whatsapp/incoming_message_base_service.rb index e55d5fd26..40dafaced 100644 --- a/app/services/whatsapp/incoming_message_base_service.rb +++ b/app/services/whatsapp/incoming_message_base_service.rb @@ -12,7 +12,7 @@ class Whatsapp::IncomingMessageBaseService set_conversation - return if @processed_params[:messages].blank? + return if @processed_params[:messages].blank? || unprocessable_message_type? @message = @conversation.messages.build( content: message_content(@processed_params[:messages].first), @@ -86,6 +86,10 @@ class Whatsapp::IncomingMessageBaseService @processed_params[:messages].first[:type] end + def unprocessable_message_type? + %w[reaction contacts].include?(message_type) + end + def attach_files return if %w[text button interactive].include?(message_type) diff --git a/spec/jobs/webhooks/whatsapp_events_job_spec.rb b/spec/jobs/webhooks/whatsapp_events_job_spec.rb index 2a28fe41f..00fde3d41 100644 --- a/spec/jobs/webhooks/whatsapp_events_job_spec.rb +++ b/spec/jobs/webhooks/whatsapp_events_job_spec.rb @@ -62,6 +62,59 @@ RSpec.describe Webhooks::WhatsappEventsJob, type: :job do job.perform_now(wb_params) end + it 'Ignore reaction type message and stop raising error' do + other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false, + validate_provider_config: false) + wb_params = { + phone_number: channel.phone_number, + object: 'whatsapp_business_account', + entry: [{ + changes: [{ + value: { + contacts: [{ profile: { name: 'Test Test' }, wa_id: '1111981136571' }], + messages: [{ + from: '1111981136571', reaction: { emoji: '👍' }, timestamp: '1664799904', type: 'reaction' + }], + metadata: { + phone_number_id: other_channel.provider_config['phone_number_id'], + display_phone_number: other_channel.phone_number.delete('+') + } + } + }] + }] + }.with_indifferent_access + expect do + Whatsapp::IncomingMessageWhatsappCloudService.new(inbox: other_channel.inbox, params: wb_params).perform + end.not_to change(Message, :count) + end + + it 'Ignore contacts type message and stop raising error' do + other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false, + validate_provider_config: false) + wb_params = { + phone_number: channel.phone_number, + object: 'whatsapp_business_account', + entry: [{ + changes: [{ + value: { + contacts: [{ profile: { name: 'Test Test' }, wa_id: '1111981136571' }], + messages: [{ from: '1111981136571', + contacts: [{ phones: [{ phone: '+1987654' }], name: { first_name: 'contact name' } }], + timestamp: '1664799904', + type: 'contacts' }], + metadata: { + phone_number_id: other_channel.provider_config['phone_number_id'], + display_phone_number: other_channel.phone_number.delete('+') + } + } + }] + }] + }.with_indifferent_access + expect do + Whatsapp::IncomingMessageWhatsappCloudService.new(inbox: other_channel.inbox, params: wb_params).perform + end.not_to change(Message, :count) + end + it 'will not enque Whatsapp::IncomingMessageWhatsappCloudService when invalid phone number id' do other_channel = create(:channel_whatsapp, phone_number: '+1987654', provider: 'whatsapp_cloud', sync_templates: false, validate_provider_config: false) From bf4338ef9e3fc7637f0d8d3549afc7a002873e47 Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Fri, 14 Oct 2022 02:05:11 +0530 Subject: [PATCH 46/62] feat: Make category name in article table clickable (#5626) Co-authored-by: Pranav Raj S --- .../helpcenter/components/ArticleItem.vue | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue index cecf1f39e..b602baaa8 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue @@ -16,7 +16,12 @@
- {{ category.name }} + + {{ category.name }} + @@ -43,6 +48,8 @@ From 1f271356ca065e6a9a0169503cababad240cd3bc Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Fri, 14 Oct 2022 02:06:42 +0530 Subject: [PATCH 47/62] feat: Update the design for dropdown buttons (#5625) --- .../assets/scss/widgets/_buttons.scss | 17 +++++++++++- .../dashboard/assets/scss/widgets/_modal.scss | 10 ++----- app/javascript/dashboard/components/Modal.vue | 10 ++++--- .../components/ui/MultiselectDropdown.vue | 26 ++++++++++++++++--- .../ui/MultiselectDropdownItems.vue | 13 +++++----- .../components/ui/dropdown/DropdownItem.vue | 8 ++---- 6 files changed, 57 insertions(+), 27 deletions(-) diff --git a/app/javascript/dashboard/assets/scss/widgets/_buttons.scss b/app/javascript/dashboard/assets/scss/widgets/_buttons.scss index 9d3f84b25..478045000 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_buttons.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_buttons.scss @@ -113,9 +113,22 @@ $default-button-height: 4.0rem; } &.clear { + color: var(--w-700); + + &.secondary { + color: var(--s-700) + } + + &.success { + color: var(--g-700) + } + + &.alert { + color: var(--r-700) + } &.warning { - color: var(--y-600); + color: var(--y-700) } &:hover { @@ -146,6 +159,8 @@ $default-button-height: 4.0rem; &.small { height: var(--space-large); + padding-bottom: var(--space-smaller); + padding-top: var(--space-smaller); } &.large { diff --git a/app/javascript/dashboard/assets/scss/widgets/_modal.scss b/app/javascript/dashboard/assets/scss/widgets/_modal.scss index fc497f069..543a60797 100644 --- a/app/javascript/dashboard/assets/scss/widgets/_modal.scss +++ b/app/javascript/dashboard/assets/scss/widgets/_modal.scss @@ -14,15 +14,9 @@ } .modal--close { - border-radius: 50%; - color: $color-heading; - cursor: pointer; - font-size: $font-size-big; - line-height: $space-normal; - padding: $space-normal; position: absolute; - right: $space-micro; - top: $space-micro; + right: $space-small; + top: $space-small; &:hover { background: $color-background; diff --git a/app/javascript/dashboard/components/Modal.vue b/app/javascript/dashboard/components/Modal.vue index f4cad844a..d5dd55ffa 100644 --- a/app/javascript/dashboard/components/Modal.vue +++ b/app/javascript/dashboard/components/Modal.vue @@ -7,9 +7,13 @@ @click="onBackDropClick" >
- +
diff --git a/app/javascript/shared/components/ui/MultiselectDropdown.vue b/app/javascript/shared/components/ui/MultiselectDropdown.vue index 76908c380..1636ca252 100644 --- a/app/javascript/shared/components/ui/MultiselectDropdown.vue +++ b/app/javascript/shared/components/ui/MultiselectDropdown.vue @@ -41,9 +41,18 @@ :class="{ 'dropdown-pane--open': showSearchDropdown }" class="dropdown-pane" > -

- {{ multiselectorTitle }} -

+ diff --git a/app/javascript/shared/components/ui/MultiselectDropdownItems.vue b/app/javascript/shared/components/ui/MultiselectDropdownItems.vue index 8aadcb7cb..96aa99323 100644 --- a/app/javascript/shared/components/ui/MultiselectDropdownItems.vue +++ b/app/javascript/shared/components/ui/MultiselectDropdownItems.vue @@ -20,6 +20,7 @@ .dropdown-menu__item { list-style: none; + margin-bottom: var(--space-micro); ::v-deep { a, .button { + display: inline-flex; width: 100%; text-align: left; color: var(--s-700); - white-space: nowrap; - display: inline-flex; - padding: var(--space-small); - padding-top: var(--space-small); - padding-bottom: var(--space-small); - border-radius: var(--border-radius-normal); &:hover { background: var(--color-background); From e310230f624df59f99c4c602129d29652bb26c5a Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Thu, 13 Oct 2022 15:12:04 -0700 Subject: [PATCH 48/62] chore: Refactor Contact Inbox Builders (#5617) - Remove duplicate code and move everything to builders - fixes: #4680 --- .rubocop.yml | 1 + app/builders/contact_inbox_builder.rb | 43 ++-- ... => contact_inbox_with_contact_builder.rb} | 56 +++-- .../messages/facebook/message_builder.rb | 32 +-- .../contacts/contact_inboxes_controller.rb | 7 +- .../api/v1/accounts/contacts_controller.rb | 7 +- .../v1/accounts/conversations_controller.rb | 27 ++- .../concerns/request_exception_handler.rb | 2 + .../api/v1/inboxes/contacts_controller.rb | 2 +- app/mailboxes/mailbox_helper.rb | 2 +- app/models/channel/facebook_page.rb | 15 +- app/models/channel/twitter_profile.rb | 15 +- app/models/channel/web_widget.rb | 18 +- app/services/line/incoming_message_service.rb | 2 +- app/services/sms/incoming_message_service.rb | 2 +- .../telegram/incoming_message_service.rb | 2 +- .../twilio/incoming_message_service.rb | 2 +- .../whatsapp/incoming_message_base_service.rb | 2 +- db/seeds.rb | 9 +- spec/builders/contact_inbox_builder_spec.rb | 196 +++++++++--------- ...ontact_inbox_with_contact_builder_spec.rb} | 2 +- 21 files changed, 234 insertions(+), 210 deletions(-) rename app/builders/{contact_builder.rb => contact_inbox_with_contact_builder.rb} (51%) rename spec/builders/{contact_builder_spec.rb => contact_inbox_with_contact_builder_spec.rb} (98%) diff --git a/.rubocop.yml b/.rubocop.yml index dafd9a620..3665ad2e3 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -16,6 +16,7 @@ Metrics/ClassLength: - 'app/models/message.rb' - 'app/builders/messages/facebook/message_builder.rb' - 'app/controllers/api/v1/accounts/contacts_controller.rb' + - 'app/controllers/api/v1/accounts/conversations_controller.rb' - 'app/listeners/action_cable_listener.rb' - 'app/models/conversation.rb' RSpec/ExampleLength: diff --git a/app/builders/contact_inbox_builder.rb b/app/builders/contact_inbox_builder.rb index 1b8782c51..8fcd2b158 100644 --- a/app/builders/contact_inbox_builder.rb +++ b/app/builders/contact_inbox_builder.rb @@ -1,13 +1,12 @@ +# This Builder will create a contact inbox with specified attributes. If the contact inbox already exists, it will be returned. +# For Specific Channels like whatsapp, email etc . it smartly generated appropriate the source id when none is provided. + class ContactInboxBuilder - pattr_initialize [:contact_id!, :inbox_id!, :source_id] + pattr_initialize [:contact, :inbox, :source_id, { hmac_verified: false }] def perform - @contact = Contact.find(contact_id) - @inbox = @contact.account.inboxes.find(inbox_id) - return unless ['Channel::TwilioSms', 'Channel::Sms', 'Channel::Email', 'Channel::Api', 'Channel::Whatsapp'].include? @inbox.channel_type - - source_id = @source_id || generate_source_id - create_contact_inbox(source_id) if source_id.present? + @source_id ||= generate_source_id + create_contact_inbox if source_id.present? end private @@ -19,23 +18,37 @@ class ContactInboxBuilder when 'Channel::Whatsapp' wa_source_id when 'Channel::Email' - @contact.email + email_source_id when 'Channel::Sms' - @contact.phone_number - when 'Channel::Api' + phone_source_id + when 'Channel::Api', 'Channel::WebWidget' SecureRandom.uuid + else + raise "Unsupported operation for this channel: #{@inbox.channel_type}" end end + def email_source_id + raise ActionController::ParameterMissing, 'contact email' unless @contact.email + + @contact.email + end + + def phone_source_id + raise ActionController::ParameterMissing, 'contact phone number' unless @contact.phone_number + + @contact.phone_number + end + def wa_source_id - return unless @contact.phone_number + raise ActionController::ParameterMissing, 'contact phone number' unless @contact.phone_number # whatsapp doesn't want the + in e164 format @contact.phone_number.delete('+').to_s end def twilio_source_id - return unless @contact.phone_number + raise ActionController::ParameterMissing, 'contact phone number' unless @contact.phone_number case @inbox.channel.medium when 'sms' @@ -45,11 +58,11 @@ class ContactInboxBuilder end end - def create_contact_inbox(source_id) - ::ContactInbox.find_or_create_by!( + def create_contact_inbox + ::ContactInbox.create_with(hmac_verified: hmac_verified || false).find_or_create_by!( contact_id: @contact.id, inbox_id: @inbox.id, - source_id: source_id + source_id: @source_id ) end end diff --git a/app/builders/contact_builder.rb b/app/builders/contact_inbox_with_contact_builder.rb similarity index 51% rename from app/builders/contact_builder.rb rename to app/builders/contact_inbox_with_contact_builder.rb index 938072643..d97f64cfe 100644 --- a/app/builders/contact_builder.rb +++ b/app/builders/contact_inbox_with_contact_builder.rb @@ -1,25 +1,47 @@ -class ContactBuilder - pattr_initialize [:source_id!, :inbox!, :contact_attributes!, :hmac_verified] +# This Builder will create a contact and contact inbox with specified attributes. +# If an existing identified contact exisits, it will be returned. +# for contact inbox logic it uses the contact inbox builder + +class ContactInboxWithContactBuilder + pattr_initialize [:inbox!, :contact_attributes!, :source_id, :hmac_verified] def perform - contact_inbox = inbox.contact_inboxes.find_by(source_id: source_id) - return contact_inbox if contact_inbox + find_or_create_contact_and_contact_inbox + # in case of race conditions where contact is created by another thread + # we will try to find the contact and create a contact inbox + rescue ActiveRecord::RecordNotUnique + find_or_create_contact_and_contact_inbox + end - build_contact_inbox + def find_or_create_contact_and_contact_inbox + @contact_inbox = inbox.contact_inboxes.find_by(source_id: source_id) if source_id.present? + return @contact_inbox if @contact_inbox + + ActiveRecord::Base.transaction(requires_new: true) do + build_contact_with_contact_inbox + update_contact_avatar(@contact) unless @contact.avatar.attached? + @contact_inbox + end end private + def build_contact_with_contact_inbox + @contact = find_contact || create_contact + @contact_inbox = create_contact_inbox + end + def account @account ||= inbox.account end - def create_contact_inbox(contact) - ::ContactInbox.create_with(hmac_verified: hmac_verified || false).find_or_create_by!( - contact_id: contact.id, - inbox_id: inbox.id, - source_id: source_id - ) + def create_contact_inbox + ContactInboxBuilder.new( + contact: @contact, + inbox: @inbox, + source_id: @source_id, + hmac_verified: hmac_verified + ).perform end def update_contact_avatar(contact) @@ -61,16 +83,4 @@ class ContactBuilder account.contacts.find_by(phone_number: phone_number) end - - def build_contact_inbox - ActiveRecord::Base.transaction do - contact = find_contact || create_contact - contact_inbox = create_contact_inbox(contact) - update_contact_avatar(contact) - contact_inbox - rescue StandardError => e - Rails.logger.error e - raise e - end - end end diff --git a/app/builders/messages/facebook/message_builder.rb b/app/builders/messages/facebook/message_builder.rb index 9f670602a..42d567e54 100644 --- a/app/builders/messages/facebook/message_builder.rb +++ b/app/builders/messages/facebook/message_builder.rb @@ -22,10 +22,9 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder return if @inbox.channel.reauthorization_required? ActiveRecord::Base.transaction do - build_contact + build_contact_inbox build_message end - ensure_contact_avatar rescue Koala::Facebook::AuthenticationError @inbox.channel.authorization_error! rescue StandardError => e @@ -35,15 +34,12 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder private - def contact - @contact ||= @inbox.contact_inboxes.find_by(source_id: @sender_id)&.contact - end - - def build_contact - return if contact.present? - - @contact = Contact.create!(contact_params.except(:remote_avatar_url)) - @contact_inbox = ContactInbox.find_or_create_by!(contact: contact, inbox: @inbox, source_id: @sender_id) + def build_contact_inbox + @contact_inbox = ::ContactInboxWithContactBuilder.new( + source_id: @sender_id, + inbox: @inbox, + contact_attributes: contact_params + ).perform end def build_message @@ -54,19 +50,11 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder end end - def ensure_contact_avatar - return if contact_params[:remote_avatar_url].blank? - return if @contact.avatar.attached? - - Avatar::AvatarFromUrlJob.perform_later(@contact, contact_params[:remote_avatar_url]) - end - def conversation @conversation ||= Conversation.find_by(conversation_params) || build_conversation end def build_conversation - @contact_inbox ||= contact.contact_inboxes.find_by!(source_id: @sender_id) Conversation.create!(conversation_params.merge( contact_inbox_id: @contact_inbox.id )) @@ -94,7 +82,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder { account_id: @inbox.account_id, inbox_id: @inbox.id, - contact_id: contact.id + contact_id: @contact_inbox.contact_id } end @@ -105,7 +93,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder message_type: @message_type, content: response.content, source_id: response.identifier, - sender: @outgoing_echo ? nil : contact + sender: @outgoing_echo ? nil : @contact_inbox.contact } end @@ -113,7 +101,7 @@ class Messages::Facebook::MessageBuilder < Messages::Messenger::MessageBuilder { name: "#{result['first_name'] || 'John'} #{result['last_name'] || 'Doe'}", account_id: @inbox.account_id, - remote_avatar_url: result['profile_pic'] || '' + avatar_url: result['profile_pic'] } end diff --git a/app/controllers/api/v1/accounts/contacts/contact_inboxes_controller.rb b/app/controllers/api/v1/accounts/contacts/contact_inboxes_controller.rb index fdcdcaf9e..b4287ae08 100644 --- a/app/controllers/api/v1/accounts/contacts/contact_inboxes_controller.rb +++ b/app/controllers/api/v1/accounts/contacts/contact_inboxes_controller.rb @@ -2,8 +2,11 @@ class Api::V1::Accounts::Contacts::ContactInboxesController < Api::V1::Accounts: before_action :ensure_inbox, only: [:create] def create - source_id = params[:source_id] || SecureRandom.uuid - @contact_inbox = ContactInbox.create!(contact: @contact, inbox: @inbox, source_id: source_id) + @contact_inbox = ContactInboxBuilder.new( + contact: @contact, + inbox: @inbox, + source_id: params[:source_id] + ).perform end private diff --git a/app/controllers/api/v1/accounts/contacts_controller.rb b/app/controllers/api/v1/accounts/contacts_controller.rb index 1c56e9c04..b86b973df 100644 --- a/app/controllers/api/v1/accounts/contacts_controller.rb +++ b/app/controllers/api/v1/accounts/contacts_controller.rb @@ -134,8 +134,11 @@ class Api::V1::Accounts::ContactsController < Api::V1::Accounts::BaseController return if params[:inbox_id].blank? inbox = Current.account.inboxes.find(params[:inbox_id]) - source_id = params[:source_id] || SecureRandom.uuid - ContactInbox.create!(contact: @contact, inbox: inbox, source_id: source_id) + ContactInboxBuilder.new( + contact: @contact, + inbox: inbox, + source_id: params[:source_id] + ).perform end def permitted_params diff --git a/app/controllers/api/v1/accounts/conversations_controller.rb b/app/controllers/api/v1/accounts/conversations_controller.rb index 0515eabca..8734a3dd4 100644 --- a/app/controllers/api/v1/accounts/conversations_controller.rb +++ b/app/controllers/api/v1/accounts/conversations_controller.rb @@ -3,7 +3,7 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro include DateRangeHelper before_action :conversation, except: [:index, :meta, :search, :create, :filter] - before_action :contact_inbox, only: [:create] + before_action :inbox, :contact, :contact_inbox, only: [:create] def index result = conversation_finder.perform @@ -109,22 +109,35 @@ class Api::V1::Accounts::ConversationsController < Api::V1::Accounts::BaseContro authorize @conversation.inbox, :show? end + def inbox + return if params[:inbox_id].blank? + + @inbox = Current.account.inboxes.find(params[:inbox_id]) + authorize @inbox, :show? + end + + def contact + return if params[:contact_id].blank? + + @contact = Current.account.contacts.find(params[:contact_id]) + end + def contact_inbox @contact_inbox = build_contact_inbox + # fallback for the old case where we do look up only using source id + # In future we need to change this and make sure we do look up on combination of inbox_id and source_id + # and deprecate the support of passing only source_id as the param @contact_inbox ||= ::ContactInbox.find_by!(source_id: params[:source_id]) authorize @contact_inbox.inbox, :show? end def build_contact_inbox - return if params[:contact_id].blank? || params[:inbox_id].blank? - - inbox = Current.account.inboxes.find(params[:inbox_id]) - authorize inbox, :show? + return if @inbox.blank? || @contact.blank? ContactInboxBuilder.new( - contact_id: params[:contact_id], - inbox_id: inbox.id, + contact: @contact, + inbox: @inbox, source_id: params[:source_id] ).perform end diff --git a/app/controllers/concerns/request_exception_handler.rb b/app/controllers/concerns/request_exception_handler.rb index 6e9ed04cc..2f53fdc2b 100644 --- a/app/controllers/concerns/request_exception_handler.rb +++ b/app/controllers/concerns/request_exception_handler.rb @@ -13,6 +13,8 @@ module RequestExceptionHandler render_not_found_error('Resource could not be found') rescue Pundit::NotAuthorizedError render_unauthorized('You are not authorized to do this action') + rescue ActionController::ParameterMissing => e + render_could_not_create_error(e.message) ensure # to address the thread variable leak issues in Puma/Thin webserver Current.reset diff --git a/app/controllers/public/api/v1/inboxes/contacts_controller.rb b/app/controllers/public/api/v1/inboxes/contacts_controller.rb index eb794f2a0..1fde3051e 100644 --- a/app/controllers/public/api/v1/inboxes/contacts_controller.rb +++ b/app/controllers/public/api/v1/inboxes/contacts_controller.rb @@ -4,7 +4,7 @@ class Public::Api::V1::Inboxes::ContactsController < Public::Api::V1::InboxesCon def create source_id = params[:source_id] || SecureRandom.uuid - @contact_inbox = ::ContactBuilder.new( + @contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: source_id, inbox: @inbox_channel.inbox, contact_attributes: permitted_params.except(:identifier, :identifier_hash) diff --git a/app/mailboxes/mailbox_helper.rb b/app/mailboxes/mailbox_helper.rb index 1519343ca..216d5c2c3 100644 --- a/app/mailboxes/mailbox_helper.rb +++ b/app/mailboxes/mailbox_helper.rb @@ -34,7 +34,7 @@ module MailboxHelper end def create_contact - @contact_inbox = ::ContactBuilder.new( + @contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: processed_mail.original_sender, inbox: @inbox, contact_attributes: { diff --git a/app/models/channel/facebook_page.rb b/app/models/channel/facebook_page.rb index 2153708e2..bba45f326 100644 --- a/app/models/channel/facebook_page.rb +++ b/app/models/channel/facebook_page.rb @@ -37,16 +37,11 @@ class Channel::FacebookPage < ApplicationRecord end def create_contact_inbox(instagram_id, name) - ActiveRecord::Base.transaction do - contact = inbox.account.contacts.create!(name: name) - ::ContactInbox.create!( - contact_id: contact.id, - inbox_id: inbox.id, - source_id: instagram_id - ) - rescue StandardError => e - Rails.logger.error e - end + @contact_inbox = ::ContactInboxWithContactBuilder.new({ + source_id: instagram_id, + inbox: inbox, + contact_attributes: { name: name } + }).perform end def subscribe diff --git a/app/models/channel/twitter_profile.rb b/app/models/channel/twitter_profile.rb index 4f6fa7ba1..d0f765e9f 100644 --- a/app/models/channel/twitter_profile.rb +++ b/app/models/channel/twitter_profile.rb @@ -32,16 +32,11 @@ class Channel::TwitterProfile < ApplicationRecord end def create_contact_inbox(profile_id, name, additional_attributes) - ActiveRecord::Base.transaction do - contact = inbox.account.contacts.create!(additional_attributes: additional_attributes, name: name) - ::ContactInbox.create!( - contact_id: contact.id, - inbox_id: inbox.id, - source_id: profile_id - ) - rescue StandardError => e - Rails.logger.error e - end + ::ContactInboxWithContactBuilder.new({ + source_id: profile_id, + inbox: inbox, + contact_attributes: { name: name, additional_attributes: additional_attributes } + }).perform end def twitter_client diff --git a/app/models/channel/web_widget.rb b/app/models/channel/web_widget.rb index b85443633..59d392892 100644 --- a/app/models/channel/web_widget.rb +++ b/app/models/channel/web_widget.rb @@ -98,19 +98,9 @@ class Channel::WebWidget < ApplicationRecord end def create_contact_inbox(additional_attributes = {}) - ActiveRecord::Base.transaction do - contact = inbox.account.contacts.create!( - name: ::Haikunator.haikunate(1000), - additional_attributes: additional_attributes - ) - contact_inbox = ::ContactInbox.create!( - contact_id: contact.id, - inbox_id: inbox.id, - source_id: SecureRandom.uuid - ) - contact_inbox - rescue StandardError => e - Rails.logger.error e - end + ::ContactInboxWithContactBuilder.new({ + inbox: inbox, + contact_attributes: { additional_attributes: additional_attributes } + }).perform end end diff --git a/app/services/line/incoming_message_service.rb b/app/services/line/incoming_message_service.rb index 535c03dc7..48a52eb8f 100644 --- a/app/services/line/incoming_message_service.rb +++ b/app/services/line/incoming_message_service.rb @@ -81,7 +81,7 @@ class Line::IncomingMessageService end def set_contact - contact_inbox = ::ContactBuilder.new( + contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: line_contact_info['userId'], inbox: inbox, contact_attributes: contact_attributes diff --git a/app/services/sms/incoming_message_service.rb b/app/services/sms/incoming_message_service.rb index 7ee6e3e63..7aa22b19e 100644 --- a/app/services/sms/incoming_message_service.rb +++ b/app/services/sms/incoming_message_service.rb @@ -37,7 +37,7 @@ class Sms::IncomingMessageService end def set_contact - contact_inbox = ::ContactBuilder.new( + contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: params[:from], inbox: @inbox, contact_attributes: contact_attributes diff --git a/app/services/telegram/incoming_message_service.rb b/app/services/telegram/incoming_message_service.rb index a26bda14e..e8ab8a72c 100644 --- a/app/services/telegram/incoming_message_service.rb +++ b/app/services/telegram/incoming_message_service.rb @@ -31,7 +31,7 @@ class Telegram::IncomingMessageService end def set_contact - contact_inbox = ::ContactBuilder.new( + contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: params[:message][:from][:id], inbox: inbox, contact_attributes: contact_attributes diff --git a/app/services/twilio/incoming_message_service.rb b/app/services/twilio/incoming_message_service.rb index 50c77111c..4473131df 100644 --- a/app/services/twilio/incoming_message_service.rb +++ b/app/services/twilio/incoming_message_service.rb @@ -47,7 +47,7 @@ class Twilio::IncomingMessageService end def set_contact - contact_inbox = ::ContactBuilder.new( + contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: params[:From], inbox: inbox, contact_attributes: contact_attributes diff --git a/app/services/whatsapp/incoming_message_base_service.rb b/app/services/whatsapp/incoming_message_base_service.rb index 40dafaced..da08e02d6 100644 --- a/app/services/whatsapp/incoming_message_base_service.rb +++ b/app/services/whatsapp/incoming_message_base_service.rb @@ -48,7 +48,7 @@ class Whatsapp::IncomingMessageBaseService contact_params = @processed_params[:contacts]&.first return if contact_params.blank? - contact_inbox = ::ContactBuilder.new( + contact_inbox = ::ContactInboxWithContactBuilder.new( source_id: contact_params[:wa_id], inbox: inbox, contact_attributes: { name: contact_params.dig(:profile, :name), phone_number: "+#{@processed_params[:messages].first[:from]}" } diff --git a/db/seeds.rb b/db/seeds.rb index c4c7eda71..ead862669 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -46,8 +46,13 @@ unless Rails.env.production? inbox = Inbox.create!(channel: web_widget, account: account, name: 'Acme Support') InboxMember.create!(user: user, inbox: inbox) - contact = Contact.create!(name: 'jane', email: 'jane@example.com', phone_number: '+2320000', account: account) - contact_inbox = ContactInbox.create!(inbox: inbox, contact: contact, source_id: user.id, hmac_verified: true) + contact = ::ContactInboxWithContactBuilder.new( + source_id: user.id, + inbox: inbox, + hmac_verified: true, + contact_attributes: { name: 'jane', email: 'jane@example.com', phone_number: '+2320000' } + ).perform&.contact + conversation = Conversation.create!( account: account, inbox: inbox, diff --git a/spec/builders/contact_inbox_builder_spec.rb b/spec/builders/contact_inbox_builder_spec.rb index 47210f6ca..46b0d749c 100644 --- a/spec/builders/contact_inbox_builder_spec.rb +++ b/spec/builders/contact_inbox_builder_spec.rb @@ -12,8 +12,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id, + contact: contact, + inbox: twilio_inbox, source_id: contact.phone_number ).perform @@ -23,8 +23,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id + contact: contact, + inbox: twilio_inbox ).perform expect(contact_inbox.id).to eq(existing_contact_inbox.id) @@ -33,8 +33,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id, + contact: contact, + inbox: twilio_inbox, source_id: '+224213223422' ).perform @@ -44,12 +44,23 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id + contact: contact, + inbox: twilio_inbox ).perform expect(contact_inbox.source_id).to eq(contact.phone_number) end + + it 'raises error when contact phone number is not present and no source id is provided' do + contact.update!(phone_number: nil) + + expect do + described_class.new( + contact: contact, + inbox: twilio_inbox + ).perform + end.to raise_error(ActionController::ParameterMissing, 'param is missing or the value is empty: contact phone number') + end end describe 'twilio whatsapp inbox' do @@ -59,8 +70,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: "whatsapp:#{contact.phone_number}") contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id, + contact: contact, + inbox: twilio_inbox, source_id: "whatsapp:#{contact.phone_number}" ).perform @@ -70,8 +81,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: "whatsapp:#{contact.phone_number}") contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id + contact: contact, + inbox: twilio_inbox ).perform expect(contact_inbox.id).to eq(existing_contact_inbox.id) @@ -80,8 +91,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: twilio_inbox, source_id: "whatsapp:#{contact.phone_number}") contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id, + contact: contact, + inbox: twilio_inbox, source_id: 'whatsapp:+555555' ).perform @@ -91,12 +102,23 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twilio_inbox.id + contact: contact, + inbox: twilio_inbox ).perform expect(contact_inbox.source_id).to eq("whatsapp:#{contact.phone_number}") end + + it 'raises error when contact phone number is not present and no source id is provided' do + contact.update!(phone_number: nil) + + expect do + described_class.new( + contact: contact, + inbox: twilio_inbox + ).perform + end.to raise_error(ActionController::ParameterMissing, 'param is missing or the value is empty: contact phone number') + end end describe 'whatsapp inbox' do @@ -105,8 +127,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: whatsapp_inbox.id, + contact: contact, + inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+') ).perform @@ -116,8 +138,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: whatsapp_inbox.id + contact: contact, + inbox: whatsapp_inbox ).perform expect(contact_inbox.id).to be(existing_contact_inbox.id) @@ -126,8 +148,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: whatsapp_inbox, source_id: contact.phone_number&.delete('+')) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: whatsapp_inbox.id, + contact: contact, + inbox: whatsapp_inbox, source_id: '555555' ).perform @@ -137,12 +159,23 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: whatsapp_inbox.id + contact: contact, + inbox: whatsapp_inbox ).perform expect(contact_inbox.source_id).to eq(contact.phone_number&.delete('+')) end + + it 'raises error when contact phone number is not present and no source id is provided' do + contact.update!(phone_number: nil) + + expect do + described_class.new( + contact: contact, + inbox: whatsapp_inbox + ).perform + end.to raise_error(ActionController::ParameterMissing, 'param is missing or the value is empty: contact phone number') + end end describe 'sms inbox' do @@ -152,8 +185,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: sms_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: sms_inbox.id, + contact: contact, + inbox: sms_inbox, source_id: contact.phone_number ).perform @@ -163,8 +196,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with phone number and source id is not provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: sms_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: sms_inbox.id + contact: contact, + inbox: sms_inbox ).perform expect(contact_inbox.id).to eq(existing_contact_inbox.id) @@ -173,8 +206,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: sms_inbox, source_id: contact.phone_number) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: sms_inbox.id, + contact: contact, + inbox: sms_inbox, source_id: '+224213223422' ).perform @@ -184,12 +217,23 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with contact phone number when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: sms_inbox.id + contact: contact, + inbox: sms_inbox ).perform expect(contact_inbox.source_id).to eq(contact.phone_number) end + + it 'raises error when contact phone number is not present and no source id is provided' do + contact.update!(phone_number: nil) + + expect do + described_class.new( + contact: contact, + inbox: sms_inbox + ).perform + end.to raise_error(ActionController::ParameterMissing, 'param is missing or the value is empty: contact phone number') + end end describe 'email inbox' do @@ -199,8 +243,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: email_inbox, source_id: contact.email) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: email_inbox.id, + contact: contact, + inbox: email_inbox, source_id: contact.email ).perform @@ -210,8 +254,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with email and source id is not provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: email_inbox, source_id: contact.email) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: email_inbox.id + contact: contact, + inbox: email_inbox ).perform expect(contact_inbox.id).to eq(existing_contact_inbox.id) @@ -220,8 +264,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: email_inbox, source_id: contact.email) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: email_inbox.id, + contact: contact, + inbox: email_inbox, source_id: 'xyc@xyc.com' ).perform @@ -231,12 +275,23 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with contact email when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: email_inbox.id + contact: contact, + inbox: email_inbox ).perform expect(contact_inbox.source_id).to eq(contact.email) end + + it 'raises error when contact email is not present and no source id is provided' do + contact.update!(email: nil) + + expect do + described_class.new( + contact: contact, + inbox: email_inbox + ).perform + end.to raise_error(ActionController::ParameterMissing, 'param is missing or the value is empty: contact email') + end end describe 'api inbox' do @@ -246,8 +301,8 @@ describe ::ContactInboxBuilder do it 'does not create contact inbox when contact inbox already exists with the source id provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: api_inbox, source_id: 'test') contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: api_inbox.id, + contact: contact, + inbox: api_inbox, source_id: 'test' ).perform @@ -257,8 +312,8 @@ describe ::ContactInboxBuilder do it 'creates a new contact inbox when different source id is provided' do existing_contact_inbox = create(:contact_inbox, contact: contact, inbox: api_inbox, source_id: SecureRandom.uuid) contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: api_inbox.id, + contact: contact, + inbox: api_inbox, source_id: 'test' ).perform @@ -268,61 +323,12 @@ describe ::ContactInboxBuilder do it 'creates a contact inbox with SecureRandom.uuid when source id not provided and no contact inbox exists' do contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: api_inbox.id + contact: contact, + inbox: api_inbox ).perform expect(contact_inbox.source_id).not_to be_nil end end - - describe 'web widget' do - let!(:website_channel) { create(:channel_widget, account: account) } - let!(:website_inbox) { create(:inbox, channel: website_channel, account: account) } - - it 'does not create contact inbox' do - contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: website_inbox.id, - source_id: 'test' - ).perform - - expect(contact_inbox).to be_nil - end - end - - describe 'facebook inbox' do - before do - stub_request(:post, /graph.facebook.com/) - end - - let!(:facebook_channel) { create(:channel_facebook_page, account: account) } - let!(:facebook_inbox) { create(:inbox, channel: facebook_channel, account: account) } - - it 'does not create contact inbox' do - contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: facebook_inbox.id, - source_id: 'test' - ).perform - - expect(contact_inbox).to be_nil - end - end - - describe 'twitter inbox' do - let!(:twitter_channel) { create(:channel_twitter_profile, account: account) } - let!(:twitter_inbox) { create(:inbox, channel: twitter_channel, account: account) } - - it 'does not create contact inbox' do - contact_inbox = described_class.new( - contact_id: contact.id, - inbox_id: twitter_inbox.id, - source_id: 'test' - ).perform - - expect(contact_inbox).to be_nil - end - end end end diff --git a/spec/builders/contact_builder_spec.rb b/spec/builders/contact_inbox_with_contact_builder_spec.rb similarity index 98% rename from spec/builders/contact_builder_spec.rb rename to spec/builders/contact_inbox_with_contact_builder_spec.rb index 29df0da22..e76d199d4 100644 --- a/spec/builders/contact_builder_spec.rb +++ b/spec/builders/contact_inbox_with_contact_builder_spec.rb @@ -1,6 +1,6 @@ require 'rails_helper' -describe ::ContactBuilder do +describe ::ContactInboxWithContactBuilder do let(:account) { create(:account) } let(:inbox) { create(:inbox, account: account) } let(:contact) { create(:contact, email: 'xyc@example.com', phone_number: '+23423424123', account: account, identifier: '123') } From a6960dc2d38f64f02eb17af88c59ca3f50a24c48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Kube=C5=A1?= <46596180+KubesDavid@users.noreply.github.com> Date: Fri, 14 Oct 2022 05:43:11 +0200 Subject: [PATCH 49/62] chore: Refactor widget (#5621) --- app/javascript/widget/api/agent.js | 3 +-- app/javascript/widget/api/campaign.js | 3 +-- app/javascript/widget/api/conversation.js | 12 ++++-------- app/javascript/widget/assets/scss/woot.scss | 5 +---- app/javascript/widget/components/AgentMessage.vue | 3 +-- app/javascript/widget/components/ChatAttachment.vue | 4 ++-- .../widget/components/ChatHeaderExpanded.vue | 7 ++++++- app/javascript/widget/components/ChatInputWrap.vue | 4 +--- app/javascript/widget/components/FileBubble.vue | 3 +-- app/javascript/widget/components/PreChat/Form.vue | 7 ++----- .../widget/components/TeamAvailability.vue | 4 ++-- .../widget/components/UnreadMessageList.vue | 3 +-- app/javascript/widget/helpers/IframeEventHelper.js | 2 +- app/javascript/widget/helpers/utils.js | 11 +---------- .../widget/store/modules/conversation/getters.js | 6 ++---- .../widget/store/modules/conversation/helpers.js | 2 +- .../widget/store/modules/conversation/mutations.js | 3 +-- .../widget/store/modules/conversationLabels.js | 4 ++-- 18 files changed, 31 insertions(+), 55 deletions(-) diff --git a/app/javascript/widget/api/agent.js b/app/javascript/widget/api/agent.js index 0debeccaf..5dceecad7 100644 --- a/app/javascript/widget/api/agent.js +++ b/app/javascript/widget/api/agent.js @@ -3,6 +3,5 @@ import { API } from 'widget/helpers/axios'; export const getAvailableAgents = async websiteToken => { const urlData = endPoints.getAvailableAgents(websiteToken); - const result = await API.get(urlData.url, { params: urlData.params }); - return result; + return API.get(urlData.url, { params: urlData.params }); }; diff --git a/app/javascript/widget/api/campaign.js b/app/javascript/widget/api/campaign.js index 57d81e084..efa154f41 100644 --- a/app/javascript/widget/api/campaign.js +++ b/app/javascript/widget/api/campaign.js @@ -3,8 +3,7 @@ import { API } from 'widget/helpers/axios'; const getCampaigns = async websiteToken => { const urlData = endPoints.getCampaigns(websiteToken); - const result = await API.get(urlData.url, { params: urlData.params }); - return result; + return API.get(urlData.url, { params: urlData.params }); }; const triggerCampaign = async ({ diff --git a/app/javascript/widget/api/conversation.js b/app/javascript/widget/api/conversation.js index fdb3842fd..4cf4de25e 100755 --- a/app/javascript/widget/api/conversation.js +++ b/app/javascript/widget/api/conversation.js @@ -3,26 +3,22 @@ import { API } from 'widget/helpers/axios'; const createConversationAPI = async content => { const urlData = endPoints.createConversation(content); - const result = await API.post(urlData.url, urlData.params); - return result; + return API.post(urlData.url, urlData.params); }; const sendMessageAPI = async content => { const urlData = endPoints.sendMessage(content); - const result = await API.post(urlData.url, urlData.params); - return result; + return API.post(urlData.url, urlData.params); }; const sendAttachmentAPI = async attachment => { const urlData = endPoints.sendAttachment(attachment); - const result = await API.post(urlData.url, urlData.params); - return result; + return API.post(urlData.url, urlData.params); }; const getMessagesAPI = async ({ before }) => { const urlData = endPoints.getConversation({ before }); - const result = await API.get(urlData.url, { params: urlData.params }); - return result; + return API.get(urlData.url, { params: urlData.params }); }; const getConversationAPI = async () => { diff --git a/app/javascript/widget/assets/scss/woot.scss b/app/javascript/widget/assets/scss/woot.scss index 9a2a6a8e6..3f882eb38 100755 --- a/app/javascript/widget/assets/scss/woot.scss +++ b/app/javascript/widget/assets/scss/woot.scss @@ -61,10 +61,7 @@ body { .is-flat-design { .chat-bubble { - border-bottom-left-radius: 0 !important; - border-bottom-right-radius: 0 !important; - border-top-left-radius: 0 !important; - border-top-right-radius: 0 !important; + border-radius: 0 !important; box-shadow: none; } diff --git a/app/javascript/widget/components/AgentMessage.vue b/app/javascript/widget/components/AgentMessage.vue index c338dce83..6b1fb782b 100755 --- a/app/javascript/widget/components/AgentMessage.vue +++ b/app/javascript/widget/components/AgentMessage.vue @@ -104,8 +104,7 @@ export default { ) { return false; } - if (!this.message.content) return false; - return true; + return this.message.content; }, readableTime() { const { created_at: createdAt = '' } = this.message; diff --git a/app/javascript/widget/components/ChatAttachment.vue b/app/javascript/widget/components/ChatAttachment.vue index 87da3f5df..0412ca5fb 100755 --- a/app/javascript/widget/components/ChatAttachment.vue +++ b/app/javascript/widget/components/ChatAttachment.vue @@ -54,9 +54,9 @@ export default { }, async onFileUpload(file) { if (this.globalConfig.directUploadsEnabled) { - this.onDirectFileUpload(file); + await this.onDirectFileUpload(file); } else { - this.onIndirectFileUpload(file); + await this.onIndirectFileUpload(file); } }, async onDirectFileUpload(file) { diff --git a/app/javascript/widget/components/ChatHeaderExpanded.vue b/app/javascript/widget/components/ChatHeaderExpanded.vue index c1823f504..f82f66c46 100755 --- a/app/javascript/widget/components/ChatHeaderExpanded.vue +++ b/app/javascript/widget/components/ChatHeaderExpanded.vue @@ -7,7 +7,12 @@ class="flex items-start" :class="[avatarUrl ? 'justify-between' : 'justify-end']" > - + Avatar

{ - if ( + return !( (isUserEmailAvailable && field.name === 'emailAddress') || (isUserPhoneNumberAvailable && field.name === 'phoneNumber') - ) { - return false; - } - return true; + ); }); }, enabledPreChatFields() { diff --git a/app/javascript/widget/components/TeamAvailability.vue b/app/javascript/widget/components/TeamAvailability.vue index 1f4c5d046..a3a6b0c02 100644 --- a/app/javascript/widget/components/TeamAvailability.vue +++ b/app/javascript/widget/components/TeamAvailability.vue @@ -13,7 +13,7 @@ }}
- {{ replyWaitMeessage }} + {{ replyWaitMessage }}
@@ -75,7 +75,7 @@ export default { } return anyAgentOnline; }, - replyWaitMeessage() { + replyWaitMessage() { const { workingHoursEnabled } = this.channelConfig; if (this.isOnline) { diff --git a/app/javascript/widget/components/UnreadMessageList.vue b/app/javascript/widget/components/UnreadMessageList.vue index 19afe49d1..6683c585e 100644 --- a/app/javascript/widget/components/UnreadMessageList.vue +++ b/app/javascript/widget/components/UnreadMessageList.vue @@ -107,13 +107,12 @@ export default { .clear-button { background: transparent; color: $color-woot; - padding: 0; border: 0; font-weight: $font-weight-bold; font-size: $font-size-medium; transition: all 0.3s var(--ease-in-cubic); margin-left: $space-smaller; - padding-right: $space-one; + padding: 0 $space-one 0 0; &:hover { transform: translateX($space-smaller); diff --git a/app/javascript/widget/helpers/IframeEventHelper.js b/app/javascript/widget/helpers/IframeEventHelper.js index 953802df8..40c0e1f1c 100644 --- a/app/javascript/widget/helpers/IframeEventHelper.js +++ b/app/javascript/widget/helpers/IframeEventHelper.js @@ -10,7 +10,7 @@ export const loadedEventConfig = () => { export const getExtraSpaceToScroll = () => { // This function calculates the extra space needed for the view to - // accomodate the height of close button + height of + // accommodate the height of close button + height of // read messages button. So that scrollbar won't appear const unreadMessageWrap = document.querySelector('.unread-messages'); const unreadCloseWrap = document.querySelector('.close-unread-wrap'); diff --git a/app/javascript/widget/helpers/utils.js b/app/javascript/widget/helpers/utils.js index 1a4b2c1d6..a4d5dafa3 100755 --- a/app/javascript/widget/helpers/utils.js +++ b/app/javascript/widget/helpers/utils.js @@ -3,13 +3,6 @@ import { WOOT_PREFIX } from './constants'; export const isEmptyObject = obj => Object.keys(obj).length === 0 && obj.constructor === Object; -export const arrayToHashById = array => - array.reduce((map, obj) => { - const newMap = map; - newMap[obj.id] = obj; - return newMap; - }, {}); - export const sendMessage = msg => { window.parent.postMessage( `chatwoot-widget:${JSON.stringify({ ...msg })}`, @@ -22,9 +15,7 @@ export const IFrameHelper = { sendMessage, isAValidEvent: e => { const isDataAString = typeof e.data === 'string'; - const isAValidWootEvent = - isDataAString && e.data.indexOf(WOOT_PREFIX) === 0; - return isAValidWootEvent; + return isDataAString && e.data.indexOf(WOOT_PREFIX) === 0; }, getMessage: e => JSON.parse(e.data.replace(WOOT_PREFIX, '')), }; diff --git a/app/javascript/widget/store/modules/conversation/getters.js b/app/javascript/widget/store/modules/conversation/getters.js index 9d1c067f4..74e582348 100644 --- a/app/javascript/widget/store/modules/conversation/getters.js +++ b/app/javascript/widget/store/modules/conversation/getters.js @@ -32,7 +32,7 @@ export const getters = { }, getUnreadMessageCount: _state => { const { userLastSeenAt } = _state.meta; - const count = Object.values(_state.conversations).filter(chat => { + return Object.values(_state.conversations).filter(chat => { const { created_at: createdAt, message_type: messageType } = chat; const isOutGoing = messageType === MESSAGE_TYPE.OUTGOING; const hasNotSeen = userLastSeenAt @@ -40,7 +40,6 @@ export const getters = { : true; return hasNotSeen && isOutGoing; }).length; - return count; }, getUnreadTextMessages: (_state, _getters) => { const unreadCount = _getters.getUnreadMessageCount; @@ -50,7 +49,6 @@ export const getters = { return messageType === MESSAGE_TYPE.OUTGOING; }); const maxUnreadCount = Math.min(unreadCount, 3); - const allUnreadMessages = unreadAgentMessages.splice(-maxUnreadCount); - return allUnreadMessages; + return unreadAgentMessages.splice(-maxUnreadCount); }, }; diff --git a/app/javascript/widget/store/modules/conversation/helpers.js b/app/javascript/widget/store/modules/conversation/helpers.js index 44e2a6729..2ebac5242 100644 --- a/app/javascript/widget/store/modules/conversation/helpers.js +++ b/app/javascript/widget/store/modules/conversation/helpers.js @@ -29,7 +29,7 @@ const shouldShowAvatar = (message, nextMessage) => { export const groupConversationBySender = conversationsForADate => conversationsForADate.map((message, index) => { - let showAvatar = false; + let showAvatar; const isLastMessage = index === conversationsForADate.length - 1; if (isASubmittedFormMessage(message)) { showAvatar = false; diff --git a/app/javascript/widget/store/modules/conversation/mutations.js b/app/javascript/widget/store/modules/conversation/mutations.js index f47971f07..ca6dafada 100644 --- a/app/javascript/widget/store/modules/conversation/mutations.js +++ b/app/javascript/widget/store/modules/conversation/mutations.js @@ -88,8 +88,7 @@ export const mutations = { }, toggleAgentTypingStatus($state, { status }) { - const isTyping = status === 'on'; - $state.uiFlags.isAgentTyping = isTyping; + $state.uiFlags.isAgentTyping = status === 'on'; }, setMetaUserLastSeenAt($state, lastSeen) { diff --git a/app/javascript/widget/store/modules/conversationLabels.js b/app/javascript/widget/store/modules/conversationLabels.js index 3fbcd230d..3ae600082 100644 --- a/app/javascript/widget/store/modules/conversationLabels.js +++ b/app/javascript/widget/store/modules/conversationLabels.js @@ -9,14 +9,14 @@ export const actions = { try { await conversationLabels.create(label); } catch (error) { - // Ingore error + // Ignore error } }, destroy: async (_, label) => { try { await conversationLabels.destroy(label); } catch (error) { - // Ingore error + // Ignore error } }, }; From db53af91e740f9a0efecf855d9da63250d1be4d2 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Fri, 14 Oct 2022 12:46:41 -0700 Subject: [PATCH 50/62] chore (#5636) * New translations conversation.json (Latvian) * New translations bulkActions.json (Portuguese, Brazilian) * New translations agentMgmt.json (Latvian) * New translations teamsSettings.json (Latvian) * New translations contactFilters.json (Latvian) * New translations automation.json (Latvian) * New translations attributesMgmt.json (Latvian) * New translations labelsMgmt.json (Latvian) * New translations settings.json (Latvian) * New translations integrations.json (Latvian) * New translations inboxMgmt.json (Latvian) * New translations generalSettings.json (Latvian) * New translations contact.json (Latvian) * New translations helpCenter.json (Latvian) --- app/javascript/dashboard/i18n/locale/lv/agentMgmt.json | 6 +++--- .../dashboard/i18n/locale/lv/attributesMgmt.json | 2 +- .../dashboard/i18n/locale/lv/automation.json | 2 +- app/javascript/dashboard/i18n/locale/lv/contact.json | 2 +- .../dashboard/i18n/locale/lv/contactFilters.json | 2 +- .../dashboard/i18n/locale/lv/conversation.json | 2 +- .../dashboard/i18n/locale/lv/generalSettings.json | 2 +- .../dashboard/i18n/locale/lv/helpCenter.json | 10 +++++----- app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json | 6 ++++-- .../dashboard/i18n/locale/lv/integrations.json | 4 ++-- .../dashboard/i18n/locale/lv/labelsMgmt.json | 2 +- app/javascript/dashboard/i18n/locale/lv/settings.json | 2 ++ .../dashboard/i18n/locale/lv/teamsSettings.json | 2 +- .../dashboard/i18n/locale/pt_BR/bulkActions.json | 4 +++- 14 files changed, 27 insertions(+), 21 deletions(-) diff --git a/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json index 5b4319962..933a88bab 100644 --- a/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/agentMgmt.json @@ -12,12 +12,12 @@ "404": "Šim kontam nav piesaistīts neviens aģents", "TITLE": "Pārvaldīt Jūsu komandas aģentus", "DESC": "Jūs varat pievienot/noņemt aģentus pie/no savas komandas.", - "NAME": "Vārds", - "EMAIL": "e-pasts", + "NAME": "Nosaukums", + "EMAIL": "Epasts", "STATUS": "Statuss", "ACTIONS": "Darbības", "VERIFIED": "Pārbaudīts", - "VERIFICATION_PENDING": "Gaida apstiprinājumu" + "VERIFICATION_PENDING": "Tiek gaidīta verifikācija" }, "ADD": { "TITLE": "Pievienot aģentu Jūsu komandai", diff --git a/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json index 716f98705..ef12fa631 100644 --- a/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/attributesMgmt.json @@ -81,7 +81,7 @@ }, "LIST": { "TABLE_HEADER": [ - "Vārds", + "Nosaukums", "Apraksts", "Tips", "Atslēga" diff --git a/app/javascript/dashboard/i18n/locale/lv/automation.json b/app/javascript/dashboard/i18n/locale/lv/automation.json index a7edf9c25..84d8beedb 100644 --- a/app/javascript/dashboard/i18n/locale/lv/automation.json +++ b/app/javascript/dashboard/i18n/locale/lv/automation.json @@ -40,7 +40,7 @@ }, "LIST": { "TABLE_HEADER": [ - "Vārds", + "Nosaukums", "Apraksts", "Aktīvs", "Izveidots" diff --git a/app/javascript/dashboard/i18n/locale/lv/contact.json b/app/javascript/dashboard/i18n/locale/lv/contact.json index 2e167ae2c..ffe81f9af 100644 --- a/app/javascript/dashboard/i18n/locale/lv/contact.json +++ b/app/javascript/dashboard/i18n/locale/lv/contact.json @@ -202,7 +202,7 @@ "404": "Neviena kontaktpersona neatbilst jūsu meklēšanas vaicājumam 🔍", "NO_CONTACTS": "Nav pieejamu kontaktpersonu", "TABLE_HEADER": { - "NAME": "Vārds", + "NAME": "Nosaukums", "PHONE_NUMBER": "Telefona Numurs", "CONVERSATIONS": "Sarunas", "LAST_ACTIVITY": "Pēdējās Darbības", diff --git a/app/javascript/dashboard/i18n/locale/lv/contactFilters.json b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json index e86ac2152..5ec1c3f4b 100644 --- a/app/javascript/dashboard/i18n/locale/lv/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/lv/contactFilters.json @@ -26,7 +26,7 @@ "days_before": "Ir x dienas pirms" }, "ATTRIBUTES": { - "NAME": "Vārds", + "NAME": "Nosaukums", "EMAIL": "E-pasts", "PHONE_NUMBER": "Tālruņa numurs", "IDENTIFIER": "Identifikators", diff --git a/app/javascript/dashboard/i18n/locale/lv/conversation.json b/app/javascript/dashboard/i18n/locale/lv/conversation.json index bb6274007..088a5e8bb 100644 --- a/app/javascript/dashboard/i18n/locale/lv/conversation.json +++ b/app/javascript/dashboard/i18n/locale/lv/conversation.json @@ -151,7 +151,7 @@ "CONTEXT_MENU": { "COPY": "Kopēt", "DELETE": "Dzēst", - "CREATE_A_CANNED_RESPONSE": "Add to canned responses" + "CREATE_A_CANNED_RESPONSE": "Pievienot sagatavotajām atbildēm" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/lv/generalSettings.json b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json index f2a3c3b6f..5e5e39a98 100644 --- a/app/javascript/dashboard/i18n/locale/lv/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/lv/generalSettings.json @@ -71,7 +71,7 @@ "LOADING_MESSAGE": "Notiek paziņojumu ielāde...", "404": "Nav paziņojumu", "TABLE_HEADER": [ - "Vārds", + "Nosaukums", "Telefona numurs", "Sarunas", "Pēdējā Sazināšanās" diff --git a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json index c877bdb20..39705cf26 100644 --- a/app/javascript/dashboard/i18n/locale/lv/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/lv/helpCenter.json @@ -92,7 +92,7 @@ "PORTAL_CONFIG": { "TITLE": "Portāla Konfigurācijas", "ITEMS": { - "NAME": "Vārds", + "NAME": "Nosaukums", "DOMAIN": "Pielāgots domēns", "SLUG": "Slug", "TITLE": "Portāla nosaukums", @@ -144,7 +144,7 @@ "TITLE": "Kategorijas iekš", "NEW_CATEGORY": "Jauna kategorija", "TABLE": { - "NAME": "Vārds", + "NAME": "Nosaukums", "DESCRIPTION": "Apraksts", "LOCALE": "Lokalizācija", "ARTICLE_COUNT": "Rakstu skaits", @@ -204,7 +204,7 @@ "HELP_TEXT": "Šis logotips tiks attēlots portāla galvenē." }, "NAME": { - "LABEL": "Vārds", + "LABEL": "Nosaukums", "PLACEHOLDER": "Portāla nosaukums", "HELP_TEXT": "Nosaukums tiks izmantots publiskajā portālā iekšēji.", "ERROR": "Nepieciešams nosaukums" @@ -344,7 +344,7 @@ "PORTAL": "Portāls", "LOCALE": "Lokalizācija", "NAME": { - "LABEL": "Vārds", + "LABEL": "Nosaukums", "PLACEHOLDER": "Kategorijas nosaukums", "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", "ERROR": "Nepieciešams nosaukums" @@ -375,7 +375,7 @@ "PORTAL": "Portāls", "LOCALE": "Lokalizācija", "NAME": { - "LABEL": "Vārds", + "LABEL": "Nosaukums", "PLACEHOLDER": "Kategorijas nosaukums", "HELP_TEXT": "Kategorijas nosaukums tiks izmantots publiskajā portālā, lai klasificētu rakstus.", "ERROR": "Nepieciešams nosaukums" diff --git a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json index 12f32f6f0..f62035e3c 100644 --- a/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/inboxMgmt.json @@ -239,7 +239,9 @@ }, "API_CALLBACK": { "TITLE": "Atzvanīšanas URL", - "SUBTITLE": "Jums ir facebook izstrādātāju portālā jānokonfigurē webhook URL, izmantojot šeit minēto URL." + "SUBTITLE": "Jums Facebook izstrādātāju portālā ir jānokonfigurē webhoot URL un verifikācijas token ar tālāk norādītajām vērtībām.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verifikācijas Token" }, "SUBMIT_BUTTON": "Izveidot WhatsApp kanālu", "API": { @@ -357,7 +359,7 @@ }, "FINISH": { "TITLE": "Jūsu Iesūtne ir gatava!", - "MESSAGE": "Tagad Jūs varat izmantot savu jauno Kanālu lai sazinātos ar saviem klientiem. Priecīgu atbalstīšanu ", + "MESSAGE": "Tagad Jūs varat izmantot savu jauno Kanālu lai sazinātos ar saviem klientiem. Priecīgu atbalstīšanu", "BUTTON_TEXT": "Iet uz", "MORE_SETTINGS": "Papildu iestatījumi", "WEBSITE_SUCCESS": "Jūs esat veiksmīgi pabeidzis tīmekļa vietnes kanāla izveidi. Nokopējiet tālāk redzamo kodu un ievietojiet to savā tīmekļa vietnē. Nākamreiz, kad klients izmantos tiešsaistes tērzēšanu, saruna automātiski tiks parādīta Jūsu iesūtnē." diff --git a/app/javascript/dashboard/i18n/locale/lv/integrations.json b/app/javascript/dashboard/i18n/locale/lv/integrations.json index 372061132..48752ccce 100644 --- a/app/javascript/dashboard/i18n/locale/lv/integrations.json +++ b/app/javascript/dashboard/i18n/locale/lv/integrations.json @@ -94,14 +94,14 @@ "404": "Šajā kontā vēl nav nokonfigurēta neviena informācijas paneļa lietotne", "LOADING": "Notiek informācijas paneļa lietotņu iegūšana...", "TABLE_HEADER": [ - "Vārds", + "Nosaukums", "Endpoint" ], "EDIT_TOOLTIP": "Rediģēt lietotni", "DELETE_TOOLTIP": "Dzēst lietotni" }, "FORM": { - "TITLE_LABEL": "Vārds", + "TITLE_LABEL": "Nosaukums", "TITLE_PLACEHOLDER": "Ievadiet informācijas paneļa lietotnes nosaukumu", "TITLE_ERROR": "Informācijas paneļa lietotnei ir jānorāda nosaukums", "URL_LABEL": "Endpoint", diff --git a/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json index 81b975bbc..011b780c1 100644 --- a/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json +++ b/app/javascript/dashboard/i18n/locale/lv/labelsMgmt.json @@ -10,7 +10,7 @@ "TITLE": "Pārvaldīt Etiķetes", "DESC": "Etiķetes ļauj grupēt sarunas kopā.", "TABLE_HEADER": [ - "Vārds", + "Nosaukums", "Apraksts", "Krāsa" ] diff --git a/app/javascript/dashboard/i18n/locale/lv/settings.json b/app/javascript/dashboard/i18n/locale/lv/settings.json index effdabc47..e2b82e781 100644 --- a/app/javascript/dashboard/i18n/locale/lv/settings.json +++ b/app/javascript/dashboard/i18n/locale/lv/settings.json @@ -179,6 +179,7 @@ "CONTACTS": "Kontaktpersonas", "HOME": "Sākums", "AGENTS": "Aģenti", + "AGENT_BOTS": "Bots", "INBOXES": "Iesūtnes", "NOTIFICATIONS": "Paziņojumi", "CANNED_RESPONSES": "Sagatavotās Atbildes", @@ -189,6 +190,7 @@ "LABELS": "Etiķetes", "CUSTOM_ATTRIBUTES": "Pielāgotas Īpašības", "AUTOMATION": "Automatizācija", + "MACROS": "Macros", "TEAMS": "Komandas", "BILLING": "Norēķini", "CUSTOM_VIEWS_FOLDER": "Mapes", diff --git a/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json index 960b5b26d..8d6f4b4da 100644 --- a/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json +++ b/app/javascript/dashboard/i18n/locale/lv/teamsSettings.json @@ -69,7 +69,7 @@ }, "AGENTS": { "AGENT": "AĢENTS", - "EMAIL": "e-pasts", + "EMAIL": "Epasts", "BUTTON_TEXT": "Pievienot aģentus", "ADD_AGENTS": "Notiek aģentu pievienošana Jūsu komandai...", "SELECT": "izvēlēties", diff --git a/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json index f3f54ea9f..caf0ed3df 100644 --- a/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/pt_BR/bulkActions.json @@ -2,9 +2,11 @@ "BULK_ACTION": { "CONVERSATIONS_SELECTED": "%{conversationCount} conversas selecionadas", "AGENT_SELECT_LABEL": "Selecione Agente", - "ASSIGN_CONFIRMATION_LABEL": "Você tem certeza que deseja atribuir %{conversationCount} %{conversationLabel} para", + "ASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer atribuir %{conversationCount} %{conversationLabel} para", + "UNASSIGN_CONFIRMATION_LABEL": "Você tem certeza que quer remover a atribuição de %{conversationCount} %{conversationLabel}?", "GO_BACK_LABEL": "Voltar atrás", "ASSIGN_LABEL": "Atribua", + "YES": "Sim", "ASSIGN_AGENT_TOOLTIP": "Atribuir Agente", "ASSIGN_SUCCESFUL": "Conversas atribuídas com sucesso", "ASSIGN_FAILED": "Falha ao atribuir conversas, por favor, tente novamente", From ce3730d64078da7546a22db0a2749e0a84875b89 Mon Sep 17 00:00:00 2001 From: Simon Pankovski <46830637+simonpankovski@users.noreply.github.com> Date: Fri, 14 Oct 2022 22:38:08 +0200 Subject: [PATCH 51/62] fix: Avoid email icon getting distorted (#5633) Co-authored-by: Pranav Raj S --- .../routes/dashboard/conversation/contact/ContactInfoRow.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue index 33559e123..4e33bc7fa 100644 --- a/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue +++ b/app/javascript/dashboard/routes/dashboard/conversation/contact/ContactInfoRow.vue @@ -10,10 +10,11 @@ From 252eda14c6e62cb8f91a8f7337d2dc05dc550bdf Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Mon, 17 Oct 2022 05:18:32 +0530 Subject: [PATCH 52/62] chore: Add woot button to message context menu (#5638) --- .../components/widgets/conversation/Message.vue | 2 ++ .../conversations/components/MessageContextMenu.vue | 12 +++++++----- .../shared/components/ui/dropdown/DropdownItem.vue | 1 + 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/app/javascript/dashboard/components/widgets/conversation/Message.vue b/app/javascript/dashboard/components/widgets/conversation/Message.vue index 3481125ca..7fb24301b 100644 --- a/app/javascript/dashboard/components/widgets/conversation/Message.vue +++ b/app/javascript/dashboard/components/widgets/conversation/Message.vue @@ -420,6 +420,8 @@ export default { diff --git a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue index c4da84234..893026451 100644 --- a/app/javascript/shared/components/ui/dropdown/DropdownItem.vue +++ b/app/javascript/shared/components/ui/dropdown/DropdownItem.vue @@ -35,6 +35,7 @@ export default { a, .button { display: inline-flex; + white-space: nowrap; width: 100%; text-align: left; color: var(--s-700); From 706ab872f36ffb116f2bb37eea840f6c30789ffa Mon Sep 17 00:00:00 2001 From: Muhsin Keloth Date: Mon, 17 Oct 2022 20:59:17 +0530 Subject: [PATCH 53/62] fix: Disable name in pre-chat form if the name is already provided in `setUser` (#5466) --- .../widget/components/PreChat/Form.vue | 20 +++++++++++++++---- .../api/v1/widget/contacts/show.json.jbuilder | 1 + 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/app/javascript/widget/components/PreChat/Form.vue b/app/javascript/widget/components/PreChat/Form.vue index 69e543b21..1649068c6 100644 --- a/app/javascript/widget/components/PreChat/Form.vue +++ b/app/javascript/widget/components/PreChat/Form.vue @@ -117,11 +117,23 @@ export default { filteredPreChatFields() { const isUserEmailAvailable = !!this.currentUser.email; const isUserPhoneNumberAvailable = !!this.currentUser.phone_number; + const isUserIdentifierAvailable = !!this.currentUser.identifier; + const isUserNameAvailable = !!( + isUserIdentifierAvailable || + isUserEmailAvailable || + isUserPhoneNumberAvailable + ); return this.preChatFields.filter(field => { - return !( - (isUserEmailAvailable && field.name === 'emailAddress') || - (isUserPhoneNumberAvailable && field.name === 'phoneNumber') - ); + if (isUserEmailAvailable && field.name === 'emailAddress') { + return false; + } + if (isUserPhoneNumberAvailable && field.name === 'phoneNumber') { + return false; + } + if (isUserNameAvailable && field.name === 'fullName') { + return false; + } + return true; }); }, enabledPreChatFields() { diff --git a/app/views/api/v1/widget/contacts/show.json.jbuilder b/app/views/api/v1/widget/contacts/show.json.jbuilder index d6228cbfe..2e7a38277 100644 --- a/app/views/api/v1/widget/contacts/show.json.jbuilder +++ b/app/views/api/v1/widget/contacts/show.json.jbuilder @@ -2,3 +2,4 @@ json.id @contact.id json.name @contact.name json.email @contact.email json.phone_number @contact.phone_number +json.identifier @contact.identifier From 704554d453455bcec78ad2d5338a6e596c698794 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Mon, 17 Oct 2022 11:14:29 -0700 Subject: [PATCH 54/62] chore: Update translations (#5644) --- .../dashboard/i18n/locale/el/agentBots.json | 5 + .../dashboard/i18n/locale/el/bulkActions.json | 2 + .../dashboard/i18n/locale/el/contact.json | 4 +- .../i18n/locale/el/contactFilters.json | 2 +- .../i18n/locale/el/conversation.json | 40 +- .../dashboard/i18n/locale/el/helpCenter.json | 372 +++++++++--------- .../dashboard/i18n/locale/el/inboxMgmt.json | 52 +-- .../i18n/locale/el/integrations.json | 46 +-- .../dashboard/i18n/locale/el/macros.json | 5 + .../dashboard/i18n/locale/el/settings.json | 50 +-- .../dashboard/i18n/locale/he/chatlist.json | 4 +- .../dashboard/i18n/locale/he/contact.json | 8 +- .../i18n/locale/he/conversation.json | 60 +-- .../i18n/locale/he/generalSettings.json | 18 +- .../dashboard/i18n/locale/he/inboxMgmt.json | 8 +- .../dashboard/i18n/locale/he/settings.json | 4 +- config/locales/el.yml | 10 +- 17 files changed, 355 insertions(+), 335 deletions(-) create mode 100644 app/javascript/dashboard/i18n/locale/el/agentBots.json create mode 100644 app/javascript/dashboard/i18n/locale/el/macros.json diff --git a/app/javascript/dashboard/i18n/locale/el/agentBots.json b/app/javascript/dashboard/i18n/locale/el/agentBots.json new file mode 100644 index 000000000..708b82173 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/el/agentBots.json @@ -0,0 +1,5 @@ +{ + "AGENT_BOTS": { + "HEADER": "Bots" + } +} diff --git a/app/javascript/dashboard/i18n/locale/el/bulkActions.json b/app/javascript/dashboard/i18n/locale/el/bulkActions.json index acf4a2d10..1593857a6 100644 --- a/app/javascript/dashboard/i18n/locale/el/bulkActions.json +++ b/app/javascript/dashboard/i18n/locale/el/bulkActions.json @@ -3,8 +3,10 @@ "CONVERSATIONS_SELECTED": "%{conversationCount} σινομιλίες επιλέχθηκαν", "AGENT_SELECT_LABEL": "Επιλογή πράκτορα", "ASSIGN_CONFIRMATION_LABEL": "Είσαστε σίγουροι ότι θέλετε να αντιστοιχίσετε %{conversationCount} %{conversationLabel} στον", + "UNASSIGN_CONFIRMATION_LABEL": "Είσαστε σίγουροι ότι θέλετε να αφαιρέσετε την αντιστοίχιση %{conversationCount} %{conversationLabel} στον;", "GO_BACK_LABEL": "Πίσω", "ASSIGN_LABEL": "Αντιστοίχιση", + "YES": "Ναι", "ASSIGN_AGENT_TOOLTIP": "Ανάθεση σε πράκτορα", "ASSIGN_SUCCESFUL": "Οι σινομιλίες αντιστοιχήθηκαν επιτυχώς", "ASSIGN_FAILED": "Αποτυχία στην αντιστοίχιση σινομιλιών, παρακαλώ δοκιμάστε αργότερα", diff --git a/app/javascript/dashboard/i18n/locale/el/contact.json b/app/javascript/dashboard/i18n/locale/el/contact.json index fff494d7e..dc65bd7b9 100644 --- a/app/javascript/dashboard/i18n/locale/el/contact.json +++ b/app/javascript/dashboard/i18n/locale/el/contact.json @@ -152,8 +152,8 @@ }, "DELETE_AVATAR": { "API": { - "SUCCESS_MESSAGE": "Contact avatar deleted successfully", - "ERROR_MESSAGE": "Could not delete the contact avatar. Please try again later." + "SUCCESS_MESSAGE": "Το avatar της επαφής διαγράφηκε επιτυχώς", + "ERROR_MESSAGE": "Δεν ήταν δυνατή η διαγραφή του avatar της επαφής. Παρακαλώ προσπαθήστε ξανά αργότερα." } }, "SUCCESS_MESSAGE": "Η επαφή αποθηκεύτηκε με επιτυχία", diff --git a/app/javascript/dashboard/i18n/locale/el/contactFilters.json b/app/javascript/dashboard/i18n/locale/el/contactFilters.json index 7e897fe15..1bcbee2a5 100644 --- a/app/javascript/dashboard/i18n/locale/el/contactFilters.json +++ b/app/javascript/dashboard/i18n/locale/el/contactFilters.json @@ -39,7 +39,7 @@ "CUSTOM_ATTRIBUTE_CHECKBOX": "Checkbox", "CREATED_AT": "Δημιουργήθηκε στις", "LAST_ACTIVITY": "Τελευταία Δραστηριότητα", - "REFERER_LINK": "Referrer link" + "REFERER_LINK": "Σύνδεσμος αναφοράς" }, "GROUPS": { "STANDARD_FILTERS": "Τυπικά Φίλτρα", diff --git a/app/javascript/dashboard/i18n/locale/el/conversation.json b/app/javascript/dashboard/i18n/locale/el/conversation.json index c84a077ef..9bd7b8208 100644 --- a/app/javascript/dashboard/i18n/locale/el/conversation.json +++ b/app/javascript/dashboard/i18n/locale/el/conversation.json @@ -2,8 +2,8 @@ "CONVERSATION": { "SELECT_A_CONVERSATION": "Παρακαλώ επιλέξτε συζήτηση από το αριστερό τμήμα", "CSAT_REPLY_MESSAGE": "Παρακαλώ αξιολογήστε τη συνομιλία", - "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", + "404": "Λυπούμαστε, δεν μπορούμε να βρούμε την συνομιλία. Παρακαλώ προσπαθήστε ξανά", + "SWITCH_VIEW_LAYOUT": "Εναλλαγή διάταξης", "DASHBOARD_APP_TAB_MESSAGES": "Μηνύματα", "UNVERIFIED_SESSION": "Η ταυτότητα αυτού του χρήστη δεν επαληθεύεται", "NO_MESSAGE_1": "Ωχ ωχ! Φαίνεται ότι δεν υπάρχουν μηνύματα από τους πελάτες στα εισερχόμενά σας.", @@ -63,30 +63,30 @@ }, "CARD_CONTEXT_MENU": { "PENDING": "Σήμανση ως εκκρεμής", - "RESOLVED": "Mark as resolved", + "RESOLVED": "Σήμανση ως επιλυμένου", "REOPEN": "Άνοιγμα συνομιλίας", "SNOOZE": { - "TITLE": "Snooze", + "TITLE": "Αναβολή", "NEXT_REPLY": "Μέχρι την επόμενη απάντηση", "TOMORROW": "Μέχρι αύριο", "NEXT_WEEK": "Έως την επόμενη εβδομάδα" }, - "ASSIGN_AGENT": "Assign agent", - "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "ASSIGN_AGENT": "Ανάθεση σε πράκτορα", + "ASSIGN_LABEL": "Εκχώρηση ετικέτας", + "AGENTS_LOADING": "Φόρτωση πρακτόρων...", + "ASSIGN_TEAM": "Ανάθεση ομάδας", "API": { "AGENT_ASSIGNMENT": { - "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", - "FAILED": "Couldn't assign agent. Please try again." + "SUCCESFUL": "Η συνομιλία με αριθμό %{conversationId} ανατέθηκε στον \"%{agentName}\"", + "FAILED": "Αδυναμία αντιστοίχισης σε πράκτορα. Παρακαλώ δοκιμάστε ξανά." }, "LABEL_ASSIGNMENT": { - "SUCCESFUL": "Assigned label #%{labelName} to conversation id %{conversationId}", - "FAILED": "Couldn't assign label. Please try again." + "SUCCESFUL": "Εκχώρηση ετικέτας #%{labelName} στην συνομιλία με αριθμό %{conversationId}", + "FAILED": "Αποτυχία στην εκχώρηση ετικέτας, παρακαλώ δοκιμάστε αργότερα." }, "TEAM_ASSIGNMENT": { - "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "SUCCESFUL": "Η συνομιλία με αριθμό %{conversationId} ανατέθηκε στην ομάδα \"%{team}\"", + "FAILED": "Αδυναμία αντιστοίχισης ομάδας. Παρακαλώ δοκιμάστε ξανά." } } }, @@ -131,13 +131,13 @@ }, "VISIBLE_TO_AGENTS": "Ιδιωτική Σημείωση: Ορατή μόνο σε σας και την ομάδα σας", "CHANGE_STATUS": "Η κατάσταση της συνομιλίας άλλαξε", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "Η αλλαγή κατάστασης συνομιλίας απέτυχε", "CHANGE_AGENT": "Η εκπροσώπηση για την συνομιλία άλλαξε", - "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", + "CHANGE_AGENT_FAILED": "Η αλλαγή της ανάθεσης απέτυχε", + "ASSIGN_LABEL_SUCCESFUL": "Επιτυχής εκχώρηση ετικέτας", + "ASSIGN_LABEL_FAILED": "Η εκχώρηση ετικέτας απέτυχε", "CHANGE_TEAM": "Η ομάδα συνομιλίας άλλαξε", - "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", + "FILE_SIZE_LIMIT": "Το αρχείο υπερβαίνει το όριο συνημμένου {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE}", "MESSAGE_ERROR": "Δεν είναι δυνατή η αποστολή του μηνύματος, παρακαλώ προσπαθήστε ξανά αργότερα", "SENT_BY": "Αποστολή από:", "BOT": "Bot", @@ -151,7 +151,7 @@ "CONTEXT_MENU": { "COPY": "Αντιγραφή", "DELETE": "Διαγραφή", - "CREATE_A_CANNED_RESPONSE": "Add to canned responses" + "CREATE_A_CANNED_RESPONSE": "Προσθήκη στις έτοιμες απαντήσεις" } }, "EMAIL_TRANSCRIPT": { diff --git a/app/javascript/dashboard/i18n/locale/el/helpCenter.json b/app/javascript/dashboard/i18n/locale/el/helpCenter.json index 2f6be5952..859e8373a 100644 --- a/app/javascript/dashboard/i18n/locale/el/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/el/helpCenter.json @@ -1,409 +1,409 @@ { "HELP_CENTER": { "HEADER": { - "FILTER": "Filter by", - "SORT": "Sort by", + "FILTER": "Φιλτράρισμα κατά", + "SORT": "Ταξινόμηση κατά", "SETTINGS_BUTTON": "Ρυθμίσεις", - "NEW_BUTTON": "New Article", + "NEW_BUTTON": "Νέο Άρθρο", "DROPDOWN_OPTIONS": { - "PUBLISHED": "Published", - "DRAFT": "Draft", - "ARCHIVED": "Archived" + "PUBLISHED": "Δημοσιευμένο", + "DRAFT": "Πρόχειρο", + "ARCHIVED": "Αρχειοθετημένο" }, "TITLES": { - "ALL_ARTICLES": "All Articles", - "MINE": "My Articles", - "DRAFT": "Draft Articles", - "ARCHIVED": "Archived Articles" + "ALL_ARTICLES": "Όλα Τα Άρθρα", + "MINE": "Τα Άρθρα Μου", + "DRAFT": "Πρόχειρα Άρθρα", + "ARCHIVED": "Αρχειοθετημένα Άρθρα" } }, "EDIT_HEADER": { - "ALL_ARTICLES": "All Articles", - "PUBLISH_BUTTON": "Publish", - "MOVE_TO_ARCHIVE_BUTTON": "Move to archived", - "PREVIEW": "Preview", - "ADD_TRANSLATION": "Add translation", - "OPEN_SIDEBAR": "Open sidebar", - "CLOSE_SIDEBAR": "Close sidebar", - "SAVING": "Saving...", - "SAVED": "Saved" + "ALL_ARTICLES": "Όλα Τα Άρθρα", + "PUBLISH_BUTTON": "Δημοσιευμένο", + "MOVE_TO_ARCHIVE_BUTTON": "Μετακίνηση στα αρχειοθετημένα", + "PREVIEW": "Προεπισκόπηση", + "ADD_TRANSLATION": "Προσθήκη μετάφρασης", + "OPEN_SIDEBAR": "Άνοιγμα πλευρικής μπάρας", + "CLOSE_SIDEBAR": "Κλείσιμο πλευρικής μπάρας", + "SAVING": "Αποθηκεύεται...", + "SAVED": "Αποθηκεύτηκε" }, "ARTICLE_SETTINGS": { - "TITLE": "Article Settings", + "TITLE": "Ρυθμίσεις Άρθρου", "FORM": { "CATEGORY": { "LABEL": "Κατηγορία", - "TITLE": "Select category", - "PLACEHOLDER": "Select category", - "NO_RESULT": "No category found", - "SEARCH_PLACEHOLDER": "Search category" + "TITLE": "Επιλογή κατηγορίας", + "PLACEHOLDER": "Επιλογή κατηγορίας", + "NO_RESULT": "Δεν βρέθηκε καμία κατηγορία", + "SEARCH_PLACEHOLDER": "Αναζήτηση κατηγορίας" }, "AUTHOR": { - "LABEL": "Author", - "TITLE": "Select author", - "PLACEHOLDER": "Select author", - "NO_RESULT": "No authors found", - "SEARCH_PLACEHOLDER": "Search author" + "LABEL": "Συγγραφέας", + "TITLE": "Επιλογή συγγραφέα", + "PLACEHOLDER": "Επιλογή συγγραφέα", + "NO_RESULT": "Δεν βρέθηκαν συγγραφείς", + "SEARCH_PLACEHOLDER": "Αναζήτηση συγγραφέα" }, "META_TITLE": { - "LABEL": "Meta title", - "PLACEHOLDER": "Add a meta title" + "LABEL": "Μετα-τίτλος", + "PLACEHOLDER": "Προσθήκη meta Τίτλου" }, "META_DESCRIPTION": { - "LABEL": "Meta description", - "PLACEHOLDER": "Add your meta description for better SEO results..." + "LABEL": "Meta περιγραφή", + "PLACEHOLDER": "Προσθέστε τη meta περιγραφή σας για καλύτερα αποτελέσματα SEO..." }, "META_TAGS": { "LABEL": "Meta tags", - "PLACEHOLDER": "Add meta tags separated by comma..." + "PLACEHOLDER": "Προσθήκη μετα-ετικετών διαχωρισμένων με κόμμα..." } }, "BUTTONS": { - "ARCHIVE": "Archive article", - "DELETE": "Delete article" + "ARCHIVE": "Αρχειοθέτηση άρθρου", + "DELETE": "Διαγραφή άρθρου" } }, "PORTAL": { - "HEADER": "Portals", - "DEFAULT": "Default", - "NEW_BUTTON": "New Portal", + "HEADER": "Πύλες", + "DEFAULT": "Προεπιλογή", + "NEW_BUTTON": "Νέα Πύλη", "ACTIVE_BADGE": "ενεργή", - "CHOOSE_LOCALE_LABEL": "Choose a locale", - "LOADING_MESSAGE": "Loading portals...", - "ARTICLES_LABEL": "articles", - "NO_PORTALS_MESSAGE": "There are no available portals", - "ADD_NEW_LOCALE": "Add a new locale", + "CHOOSE_LOCALE_LABEL": "Επιλέξτε μια γλώσσα", + "LOADING_MESSAGE": "Φόρτωση πυλών...", + "ARTICLES_LABEL": "άρθρα", + "NO_PORTALS_MESSAGE": "Δεν υπάρχουν διαθέσιμες πύλες", + "ADD_NEW_LOCALE": "Προσθέστε μια νέα γλώσσα", "POPOVER": { - "TITLE": "Portals", - "PORTAL_SETTINGS": "Portal settings", - "SUBTITLE": "You have multiple portals and can have different locales for each portal.", + "TITLE": "Πύλες", + "PORTAL_SETTINGS": "Ρυθμίσεις πύλης", + "SUBTITLE": "Έχετε πολλαπλές πύλες με διαφορετικές γλώσσες για κάθε πύλη.", "CANCEL_BUTTON_LABEL": "Άκυρο", - "CHOOSE_LOCALE_BUTTON": "Choose Locale" + "CHOOSE_LOCALE_BUTTON": "Επιλέξτε γλώσσα" }, "PORTAL_SETTINGS": { "LIST_ITEM": { "HEADER": { - "COUNT_LABEL": "articles", - "ADD": "Add locale", - "VISIT": "Visit site", + "COUNT_LABEL": "άρθρα", + "ADD": "Προσθήκη γλώσσας", + "VISIT": "Επίσκεψη site", "SETTINGS": "Ρυθμίσεις", "DELETE": "Διαγραφή" }, "PORTAL_CONFIG": { - "TITLE": "Portal Configurations", + "TITLE": "Ρυθμίσεις Πύλης", "ITEMS": { "NAME": "Όνομα", - "DOMAIN": "Custom domain", + "DOMAIN": "Προσαρμοσμένο Domain", "SLUG": "Slug", - "TITLE": "Portal title", - "THEME": "Theme color", - "SUB_TEXT": "Portal sub text" + "TITLE": "Τίτλος πύλης", + "THEME": "Χρώμα θέματος", + "SUB_TEXT": "Υποκείμενο πύλης" } }, "AVAILABLE_LOCALES": { - "TITLE": "Available locales", + "TITLE": "Διαθέσιμες γλώσσες", "TABLE": { - "NAME": "Locale name", - "CODE": "Locale code", - "ARTICLE_COUNT": "No. of articles", - "CATEGORIES": "No. of categories", - "SWAP": "Swap", + "NAME": "Όνομα γλώσσας", + "CODE": "Κωδικός γλώσσας", + "ARTICLE_COUNT": "Αριθμός άρθρων", + "CATEGORIES": "Αριθμός κατηγοριών", + "SWAP": "Εναλλαγή", "DELETE": "Διαγραφή", - "DEFAULT_LOCALE": "Default" + "DEFAULT_LOCALE": "Προεπιλογή" } } }, "DELETE_PORTAL": { - "TITLE": "Delete portal", - "MESSAGE": "Are you sure you want to delete this portal", - "YES": "Yes, delete portal", - "NO": "No, keep portal", + "TITLE": "Διαγραφή πύλης", + "MESSAGE": "Είστε βέβαιοι ότι θέλετε να διαγράψετε αυτήν την πύλη", + "YES": "Ναι, διαγραφή πύλης", + "NO": "Όχι, διατήρηση πύλης", "API": { - "DELETE_SUCCESS": "Portal deleted successfully", - "DELETE_ERROR": "Error while deleting portal" + "DELETE_SUCCESS": "Η πύλη διαγράφηκε επιτυχώς", + "DELETE_ERROR": "Σφάλμα κατά τη διαγραφή της πύλης" } } }, "EDIT": { - "HEADER_TEXT": "Edit portal", + "HEADER_TEXT": "Επεξεργασία πύλης", "TABS": { "BASIC_SETTINGS": { - "TITLE": "Basic information" + "TITLE": "Βασικές πληροφορίες" }, "CUSTOMIZATION_SETTINGS": { - "TITLE": "Portal customization" + "TITLE": "Προσαρμογή πύλης" }, "CATEGORY_SETTINGS": { - "TITLE": "Categories" + "TITLE": "Κατηγορίες" }, "LOCALE_SETTINGS": { - "TITLE": "Locales" + "TITLE": "Γλώσσες" } }, "CATEGORIES": { - "TITLE": "Categories in", - "NEW_CATEGORY": "New category", + "TITLE": "Κατηγορίες στο", + "NEW_CATEGORY": "Νέα κατηγορία", "TABLE": { "NAME": "Όνομα", "DESCRIPTION": "Περιγραφή", - "LOCALE": "Locale", - "ARTICLE_COUNT": "No. of articles", + "LOCALE": "Γλώσσα", + "ARTICLE_COUNT": "Αριθμός άρθρων", "ACTION_BUTTON": { - "EDIT": "Edit category", - "DELETE": "Delete category" + "EDIT": "Επεξεργασία κατηγορίας", + "DELETE": "Διαγραφή κατηγορίας" }, - "EMPTY_TEXT": "No categories found" + "EMPTY_TEXT": "Δεν βρέθηκαν κατηγορίες" } }, "EDIT_BASIC_INFO": { - "BUTTON_TEXT": "Update basic settings" + "BUTTON_TEXT": "Ενημέρωση βασικών ρυθμίσεων" } }, "ADD": { "CREATE_FLOW": [ { - "title": "Help center information", + "title": "Πληροφορίες κέντρου βοήθειας", "route": "new_portal_information", - "body": "Basic information about portal", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "body": "Βασικές πληροφορίες σχετικά με την πύλη", + "CREATE_BASIC_SETTING_BUTTON": "Δημιουργία βασικών ρυθμίσεων πύλης" }, { - "title": "Help center customization", + "title": "Προσαρμογή του κέντρου βοήθειας", "route": "portal_customization", - "body": "Customize portal", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "body": "Προσαρμογή πύλης", + "UPDATE_PORTAL_BUTTON": "Ενημέρωση ρυθμίσεων πύλης" }, { - "title": "Voila! 🎉", + "title": "Έξοχα! 🎉", "route": "portal_finish", - "body": "You're all set!", + "body": "Είναι όλα έτοιμα!", "FINISH": "Τέλος" } ], "CREATE_FLOW_PAGE": { "BACK_BUTTON": "Πίσω", "BASIC_SETTINGS_PAGE": { - "HEADER": "Create Portal", - "TITLE": "Help center information", - "CREATE_BASIC_SETTING_BUTTON": "Create portal basic settings" + "HEADER": "Δημιουργία Πύλης", + "TITLE": "Πληροφορίες κέντρου βοήθειας", + "CREATE_BASIC_SETTING_BUTTON": "Δημιουργία βασικών ρυθμίσεων πύλης" }, "CUSTOMIZATION_PAGE": { - "HEADER": "Portal customisation", - "TITLE": "Help center customization", - "UPDATE_PORTAL_BUTTON": "Update portal settings" + "HEADER": "Προσαρμογή πύλης", + "TITLE": "Προσαρμογή του κέντρου βοήθειας", + "UPDATE_PORTAL_BUTTON": "Ενημέρωση ρυθμίσεων πύλης" }, "FINISH_PAGE": { - "TITLE": "Voila!🎉 You're all set up!", - "MESSAGE": "You can now see this created portal on your all portals page.", - "FINISH": "Go to all portals page" + "TITLE": "Έξοχα!🎉 Έχετε ρυθμιστεί!", + "MESSAGE": "Τώρα μπορείτε να δείτε την πύλη που δημιουργήθηκε στη σελίδα με όλες τις πύλες.", + "FINISH": "Μετάβαση στις πύλες" } }, "LOGO": { - "LABEL": "Logo", - "UPLOAD_BUTTON": "Upload logo", - "HELP_TEXT": "This logo will be displayed on the portal header." + "LABEL": "Λογότυπο", + "UPLOAD_BUTTON": "Μεταφόρτωση λογότυπου", + "HELP_TEXT": "Το λογότυπο θα εμφανιστεί στην κεφαλίδα της πύλης." }, "NAME": { "LABEL": "Όνομα", - "PLACEHOLDER": "Portal name", - "HELP_TEXT": "The name will be used in the public facing portal internally.", + "PLACEHOLDER": "Όνομα πύλης", + "HELP_TEXT": "Το όνομα θα χρησιμοποιηθεί στο κοινό που βλέπει την πύλη εσωτερικά.", "ERROR": "Απαιτείται όνομα" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Portal slug for urls", - "ERROR": "Slug is required" + "PLACEHOLDER": "Slug Πύλης για τα urls", + "ERROR": "Το Slug είναι απαραίτητο" }, "DOMAIN": { - "LABEL": "Custom Domain", - "PLACEHOLDER": "Portal custom domain", - "HELP_TEXT": "Add only If you want to use a custom domain for your portals.", - "ERROR": "Custom Domain is required" + "LABEL": "Προσαρμοσμένο Domain", + "PLACEHOLDER": "Προσαρμοσμένος τομέας πύλης", + "HELP_TEXT": "Προσθήκη μόνο Αν θέλετε να χρησιμοποιήσετε ένα προσαρμοσμένο τομέα για τις πύλες σας. (Automatic Translation).", + "ERROR": "Ο Προσαρμοσμένος Τομέας απαιτείται" }, "HOME_PAGE_LINK": { - "LABEL": "Home Page Link", - "PLACEHOLDER": "Portal home page link", - "HELP_TEXT": "The link used to return from the portal to the home page.", - "ERROR": "Home Page Link is required" + "LABEL": "Σύνδεσμος Αρχικής Σελίδας", + "PLACEHOLDER": "Σύνδεσμος αρχικής σελίδας πύλης", + "HELP_TEXT": "Ο σύνδεσμος που χρησιμοποιείται για την επιστροφή από την πύλη στην αρχική σελίδα.", + "ERROR": "Ο σύνδεσμος αρχικής σελίδας απαιτείται" }, "THEME_COLOR": { - "LABEL": "Portal theme color", - "HELP_TEXT": "This color will show as the theme color for the portal." + "LABEL": "Χρώμα θέματος πύλης", + "HELP_TEXT": "Αυτό το χρώμα θα εμφανίζεται ως το χρώμα θέματος της πύλης. " }, "PAGE_TITLE": { - "LABEL": "Page Title", - "PLACEHOLDER": "Portal page title", - "HELP_TEXT": "The page title will be used in the public facing portal.", - "ERROR": "Page title is required" + "LABEL": "Τίτλος Σελίδας", + "PLACEHOLDER": "Τίτλος σελίδας πύλης", + "HELP_TEXT": "Ο τίτλος της σελίδας θα χρησιμοποιηθεί στην πύλη που βλέπει το κοινό.", + "ERROR": "Ο τίτλος είναι απαραίτητος" }, "HEADER_TEXT": { - "LABEL": "Header Text", - "PLACEHOLDER": "Portal header text", - "HELP_TEXT": "The Portal header text will be used in the public facing portal.", - "ERROR": "Portal header text is required" + "LABEL": "Κείμενο Κεφαλίδας", + "PLACEHOLDER": "Κείμενο κεφαλίδας πύλης", + "HELP_TEXT": "Το κείμενο κεφαλίδας πύλης θα χρησιμοποιηθεί στο κοινό που βλέπει πύλη.", + "ERROR": "Απαιτείται κείμενο κεφαλίδας πύλης" }, "API": { - "SUCCESS_MESSAGE_FOR_BASIC": "Portal created successfully.", - "ERROR_MESSAGE_FOR_BASIC": "Couldn't create the portal. Try again.", - "SUCCESS_MESSAGE_FOR_UPDATE": "Portal updated successfully.", - "ERROR_MESSAGE_FOR_UPDATE": "Couldn't update the portal. Try again." + "SUCCESS_MESSAGE_FOR_BASIC": "Ο φάκελος δημιουργήθηκε με επιτυχία.", + "ERROR_MESSAGE_FOR_BASIC": "Δεν ήταν δυνατή η δημιουργία της πύλης. Δοκιμάστε ξανά.", + "SUCCESS_MESSAGE_FOR_UPDATE": "Η πύλη ενημερώθηκε με επιτυχία.", + "ERROR_MESSAGE_FOR_UPDATE": "Δεν ήταν δυνατή η ενημέρωση της πύλης. Δοκιμάστε ξανά." } }, "ADD_LOCALE": { - "TITLE": "Add a new locale", - "SUB_TITLE": "This adds a new locale to your available translation list.", - "PORTAL": "Portal", + "TITLE": "Προσθέστε μια νέα γλώσσα", + "SUB_TITLE": "Προσθέτει μια νέα γλώσσα στη διαθέσιμη λίστα μεταφράσεών σας.", + "PORTAL": "Πύλη", "LOCALE": { - "LABEL": "Locale", - "PLACEHOLDER": "Choose a locale", - "ERROR": "Locale is required" + "LABEL": "Γλώσσα", + "PLACEHOLDER": "Επιλέξτε μια γλώσσα", + "ERROR": "Η γλώσσα απαιτείται" }, "BUTTONS": { - "CREATE": "Create locale", + "CREATE": "Δημιουργία γλώσσας", "CANCEL": "Άκυρο" }, "API": { - "SUCCESS_MESSAGE": "Locale added successfully", - "ERROR_MESSAGE": "Unable to add locale. Try again." + "SUCCESS_MESSAGE": "Η γλώσσα προστέθηκε επιτυχώς", + "ERROR_MESSAGE": "Δεν είναι δυνατή η προσθήκη γλώσσας. Δοκιμάστε ξανά." } }, "CHANGE_DEFAULT_LOCALE": { "API": { - "SUCCESS_MESSAGE": "Default locale updated successfully", - "ERROR_MESSAGE": "Unable to update default locale. Try again." + "SUCCESS_MESSAGE": "Η προεπιλεγμένη γλώσσα ενημερώθηκε επιτυχώς", + "ERROR_MESSAGE": "Δεν είναι δυνατή η ενημέρωση της προεπιλεγμένης γλώσσας. Δοκιμάστε ξανά." } }, "DELETE_LOCALE": { "API": { - "SUCCESS_MESSAGE": "Locale removed from portal successfully", - "ERROR_MESSAGE": "Unable to remove locale from portal. Try again." + "SUCCESS_MESSAGE": "Η γλώσσα αφαιρέθηκε επιτυχώς από την πύλη", + "ERROR_MESSAGE": "Δεν είναι δυνατή η αφαίρεση γλώσσας από την πύλη. Δοκιμάστε ξανά." } } }, "TABLE": { - "LOADING_MESSAGE": "Loading articles...", - "404": "No articles matches your search 🔍", - "NO_ARTICLES": "There are no available articles", + "LOADING_MESSAGE": "Φόρτωση άρθρων...", + "404": "Δεν υπάρχουν άρθρα που να ταιριάζουν στην αναζήτησή σας 🔍", + "NO_ARTICLES": "Δεν υπάρχουν διαθέσιμα άρθρα", "HEADERS": { "TITLE": "Τίτλος", "CATEGORY": "Κατηγορία", - "READ_COUNT": "Read count", + "READ_COUNT": "Πλήθος ανάγνωσεων", "STATUS": "Κατάσταση", - "LAST_EDITED": "Last edited" + "LAST_EDITED": "Τελευταία επεξεργασία" }, "COLUMNS": { - "BY": "by" + "BY": "από" } }, "EDIT_ARTICLE": { - "LOADING": "Loading article...", - "TITLE_PLACEHOLDER": "Article title goes here", - "CONTENT_PLACEHOLDER": "Write your article here", + "LOADING": "Φόρτωση άρθρου...", + "TITLE_PLACEHOLDER": "Ο τίτλος του άρθρου εμφανίζεται εδώ", + "CONTENT_PLACEHOLDER": "Γράψτε το άρθρο σας εδώ", "API": { - "ERROR": "Error while saving article" + "ERROR": "Σφάλμα κατά την αποθήκευση άρθρου" } }, "PUBLISH_ARTICLE": { "API": { - "ERROR": "Error while publishing article", - "SUCCESS": "Article publishied successfully" + "ERROR": "Σφάλμα κατά τη δημοσίευση του άρθρου", + "SUCCESS": "Το Άρθρο δημοσιεύθηκε με επιτυχία" } }, "ARCHIVE_ARTICLE": { "API": { - "ERROR": "Error while archiving article", - "SUCCESS": "Article archived successfully" + "ERROR": "Σφάλμα κατά την αρχειοθέτηση άρθρου", + "SUCCESS": "Το άρθρο αρχειοθετήθηκε επιτυχώς" } }, "DELETE_ARTICLE": { "MODAL": { "CONFIRM": { "TITLE": "Επιβεβαίωση Διαγραφής", - "MESSAGE": "Are you sure to delete the article?", + "MESSAGE": "Είστε βέβαιοι να διαγράψετε το άρθρο;", "YES": "Ναι, Διέγραψε το", "NO": "Όχι, Κράτησε τον/την" } }, "API": { - "SUCCESS_MESSAGE": "Article deleted successfully", - "ERROR_MESSAGE": "Error while deleting article" + "SUCCESS_MESSAGE": "Η επαφή διαγράφηκε επιτυχώς", + "ERROR_MESSAGE": "Σφάλμα κατά τη διαγραφή άρθρου" } }, "CREATE_ARTICLE": { - "ERROR_MESSAGE": "Please add the article heading and content then only you can update the settings" + "ERROR_MESSAGE": "Παρακαλώ προσθέστε την επικεφαλίδα και το περιεχόμενο του άρθρου για να μπορείτε να ενημερώσετε τις ρυθμίσεις" }, "SIDEBAR": { "SEARCH": { - "PLACEHOLDER": "Search for articles" + "PLACEHOLDER": "Αναζήτηση άρθρων" } }, "CATEGORY": { "ADD": { - "TITLE": "Create a category", - "SUB_TITLE": "The category will be used in the public facing portal to categorize articles.", - "PORTAL": "Portal", - "LOCALE": "Locale", + "TITLE": "Δημιουργία κατηγορίας", + "SUB_TITLE": "Η κατηγορία θα χρησιμοποιηθεί στην πύλη που βλέπει το κοινό για την κατηγοριοποίηση των άρθρων.", + "PORTAL": "Πύλη", + "LOCALE": "Γλώσσα", "NAME": { "LABEL": "Όνομα", - "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "PLACEHOLDER": "Όνομα κατηγορίας", + "HELP_TEXT": "Η κατηγορία θα χρησιμοποιηθεί στην πύλη που βλέπει το κοινό για την κατηγοριοποίηση των άρθρων.", "ERROR": "Απαιτείται όνομα" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Category slug for urls", + "PLACEHOLDER": "Slug κατηγορίας για urls", "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", - "ERROR": "Slug is required" + "ERROR": "Το Slug είναι απαραίτητο" }, "DESCRIPTION": { "LABEL": "Περιγραφή", - "PLACEHOLDER": "Give a short description about the category.", + "PLACEHOLDER": "Δώστε μια σύντομη περιγραφή της κατηγορίας.", "ERROR": "Η περιγραφή απαιτείται" }, "BUTTONS": { - "CREATE": "Create category", + "CREATE": "Δημιουργία κατηγορίας", "CANCEL": "Άκυρο" }, "API": { - "SUCCESS_MESSAGE": "Category created successfully", - "ERROR_MESSAGE": "Unable to create category" + "SUCCESS_MESSAGE": "Η κατηγορία δημιουργήθηκε με επιτυχία", + "ERROR_MESSAGE": "Αδυναμία δημιουργίας κατηγορίας" } }, "EDIT": { - "TITLE": "Edit a category", - "SUB_TITLE": "Editing a category will update the category in the public facing portal.", - "PORTAL": "Portal", - "LOCALE": "Locale", + "TITLE": "Επεξεργασία κατηγορίας", + "SUB_TITLE": "Η επεξεργασία μιας κατηγορίας θα ενημερώσει την κατηγορία στην πύλη που βλέπει το κοινό.", + "PORTAL": "Πύλη", + "LOCALE": "Γλώσσα", "NAME": { "LABEL": "Όνομα", - "PLACEHOLDER": "Category name", - "HELP_TEXT": "The category name will be used in the public facing portal to categorize articles.", + "PLACEHOLDER": "Όνομα κατηγορίας", + "HELP_TEXT": "Η κατηγορία θα χρησιμοποιηθεί στην πύλη που βλέπει το κοινό για την κατηγοριοποίηση των άρθρων.", "ERROR": "Απαιτείται όνομα" }, "SLUG": { "LABEL": "Slug", - "PLACEHOLDER": "Category slug for urls", + "PLACEHOLDER": "Slug κατηγορίας για urls", "HELP_TEXT": "app.chatwoot.com/hc/my-portal/en-US/categories/my-slug", - "ERROR": "Slug is required" + "ERROR": "Το Slug είναι απαραίτητο" }, "DESCRIPTION": { "LABEL": "Περιγραφή", - "PLACEHOLDER": "Give a short description about the category.", + "PLACEHOLDER": "Δώστε μια σύντομη περιγραφή της κατηγορίας.", "ERROR": "Η περιγραφή απαιτείται" }, "BUTTONS": { - "CREATE": "Update category", + "CREATE": "Επεξεργασία κατηγορίας", "CANCEL": "Άκυρο" }, "API": { - "SUCCESS_MESSAGE": "Category updated successfully", - "ERROR_MESSAGE": "Unable to update category" + "SUCCESS_MESSAGE": "Η ετικέτα ενημερώθηκε επιτυχώς", + "ERROR_MESSAGE": "Αδύνατη η ενημέρωση της κατηγορίας" } }, "DELETE": { "API": { - "SUCCESS_MESSAGE": "Category deleted successfully", - "ERROR_MESSAGE": "Unable to delete category" + "SUCCESS_MESSAGE": "Η καμπάνια διαγράφηκε επιτυχώς", + "ERROR_MESSAGE": "Δεν είναι δυνατή η διαγραφή κατηγορίας" } } } diff --git a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json index e92a89ebf..07baaba4b 100644 --- a/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/el/inboxMgmt.json @@ -112,10 +112,10 @@ "ERROR": "Το πεδίο είναι απαραίτητο" }, "MESSAGING_SERVICE_SID": { - "LABEL": "Messaging Service SID", - "PLACEHOLDER": "Please enter your Twilio Messaging Service SID", + "LABEL": "SID Υπηρεσίας Μηνυμάτων", + "PLACEHOLDER": "Παρακαλώ εισάγετε το Twilio Messaging Service SID σας", "ERROR": "Το πεδίο είναι απαραίτητο", - "USE_MESSAGING_SERVICE": "Use a Twilio Messaging Service" + "USE_MESSAGING_SERVICE": "Χρήση μιας υπηρεσίας μηνυμάτων Twilio" }, "CHANNEL_TYPE": { "LABEL": "Τύπος Καναλιού", @@ -239,7 +239,9 @@ }, "API_CALLBACK": { "TITLE": "URL επανάκλησης", - "SUBTITLE": "Θα πρέπει να ρυθμίσετε το URL webhook στο facebook developer portal με το URL που αναφέρεται εδώ." + "SUBTITLE": "Πρέπει να ρυθμίσετε τη διεύθυνση URL του webhook και το διακριτικό επαλήθευσης στην πύλη Προγραμματιστή Facebook με τις τιμές που εμφανίζονται παρακάτω.", + "WEBHOOK_URL": "Σύνδεσμος Webhook", + "WEBHOOK_VERIFICATION_TOKEN": "Token Επαλήθευσης Webhook" }, "SUBMIT_BUTTON": "Δημιουργία Καναλιού WhatsApp", "API": { @@ -357,7 +359,7 @@ }, "FINISH": { "TITLE": "Το κιβώτιο σας είναι έτοιμο!", - "MESSAGE": "Μπορείτε να συνομιλείτε με τους πελάτες σας από το νέο κανάλι. Καλή υποστήριξη ", + "MESSAGE": "Μπορείτε να συνομιλείτε με τους πελάτες σας από το νέο κανάλι. Καλή υποστήριξη", "BUTTON_TEXT": "Μετάβαση", "MORE_SETTINGS": "Περισσότερες ρυθμίσεις", "WEBSITE_SUCCESS": "Επιτυχής δημιουργία του καναλιού ιστοσελίδας. Αντιγράψτε τον κώδικα που παρουσιάζεται παρακάτω, και τοποθετήστε τον στην ιστοσελίδα σας. Την επόμενη φορά που κάποιος πελάτης χρησιμοποιήσει το 'live chat', η συνομιλία θα εμφανιστεί στο κιβώτιο εισερχομένων σας." @@ -414,7 +416,7 @@ "CAMPAIGN": "Καμπάνιες", "PRE_CHAT_FORM": "Φόρμα Προ-Συνομιλίας", "BUSINESS_HOURS": "Ώρες Εργασίας", - "WIDGET_BUILDER": "Widget Builder" + "WIDGET_BUILDER": "Δημιουργός Widget" }, "SETTINGS": "Ρυθμίσεις", "FEATURES": { @@ -579,10 +581,10 @@ "WIDGET_BUILDER": { "WIDGET_OPTIONS": { "AVATAR": { - "LABEL": "Website Avatar", + "LABEL": "Avatar Ιστοσελίδας", "DELETE": { "API": { - "SUCCESS_MESSAGE": "Avatar deleted successfully", + "SUCCESS_MESSAGE": "Το Avatar διαγράφηκε επιτυχώς", "ERROR_MESSAGE": "Υπήρξε ένα σφάλμα, παρακαλώ προσπαθήστε ξανά" } } @@ -590,7 +592,7 @@ "WEBSITE_NAME": { "LABEL": "Όνομα Ιστοσελίδας", "PLACE_HOLDER": "Συμπληρώστε την ονομασία της ιστοσελίδας σας (π.χ: Ελληνικό Μεσογειακό Πανεπιστήμιο)", - "ERROR": "Please enter a valid website name" + "ERROR": "Παρακαλώ δώστε ένα έγκυρο όνομα ιστοσελίδας" }, "WELCOME_HEADING": { "LABEL": "Καλώς ήλθατε (Heading)", @@ -601,42 +603,42 @@ "PLACE_HOLDER": "Είναι απλό να συνδεθείτε μαζί μας. Ζητήστε μας οτιδήποτε, ή μοιραστείτε την εμπειρία σας." }, "REPLY_TIME": { - "LABEL": "Reply Time", + "LABEL": "Χρόνος Απάντησης", "IN_A_FEW_MINUTES": "Σε μερικά λεπτά", "IN_A_FEW_HOURS": "Σε μερικές ώρες", "IN_A_DAY": "Σε μία ημέρα" }, "WIDGET_COLOR_LABEL": "Χρώμα Widget", - "WIDGET_BUBBLE_POSITION_LABEL": "Widget Bubble Position", - "WIDGET_BUBBLE_TYPE_LABEL": "Widget Bubble Type", + "WIDGET_BUBBLE_POSITION_LABEL": "Θέση Φυσαλίδας Widget", + "WIDGET_BUBBLE_TYPE_LABEL": "Τύπος Φυσαλίδας Widget", "WIDGET_BUBBLE_LAUNCHER_TITLE": { "DEFAULT": "Συνομιλήστε μαζί μας", - "LABEL": "Widget Bubble Launcher Title", + "LABEL": "Τίτλος Εκκίνησης Φυσαλίδας Widget", "PLACE_HOLDER": "Συνομιλήστε μαζί μας" }, "UPDATE": { - "BUTTON_TEXT": "Update Widget Settings", + "BUTTON_TEXT": "Ενημέρωση Ρυθμίσεων Widget", "API": { - "SUCCESS_MESSAGE": "Widget settings updated successfully", - "ERROR_MESSAGE": "Unable to update widget settings" + "SUCCESS_MESSAGE": "Οι ρυθμίσεις widget ενημερώθηκαν με επιτυχία", + "ERROR_MESSAGE": "Δεν είναι δυνατή η ενημέρωση ρυθμίσεων widget" } }, "WIDGET_VIEW_OPTION": { - "PREVIEW": "Preview", + "PREVIEW": "Προεπισκόπηση", "SCRIPT": "Script" }, "WIDGET_BUBBLE_POSITION": { - "LEFT": "Left", - "RIGHT": "Right" + "LEFT": "Αριστερά", + "RIGHT": "Δεξιά" }, "WIDGET_BUBBLE_TYPE": { "STANDARD": "Standard", - "EXPANDED_BUBBLE": "Expanded Bubble" + "EXPANDED_BUBBLE": "Εκτεταμένη Φυσαλίδα" } }, "WIDGET_SCREEN": { - "DEFAULT": "Default", - "CHAT": "Chat" + "DEFAULT": "Προεπιλογή", + "CHAT": "Συνομιλία" }, "REPLY_TIME": { "IN_A_FEW_MINUTES": "Τυπικά έχετε απάντηση σε μερικά λεπτά", @@ -649,11 +651,11 @@ }, "BODY": { "TEAM_AVAILABILITY": { - "ONLINE": "We are Online", + "ONLINE": "Είμαστε online", "OFFLINE": "Προς το παρόν, είμαστε εκτός" }, - "USER_MESSAGE": "Hi", - "AGENT_MESSAGE": "Hello" + "USER_MESSAGE": "Γειά", + "AGENT_MESSAGE": "Γειά σας" }, "BRANDING_TEXT": "με την δύναμη του Chatwoot", "SCRIPT_SETTINGS": "\n window.chatwootSettings = {options};" diff --git a/app/javascript/dashboard/i18n/locale/el/integrations.json b/app/javascript/dashboard/i18n/locale/el/integrations.json index 5302f0bf5..b4a9e2c3f 100644 --- a/app/javascript/dashboard/i18n/locale/el/integrations.json +++ b/app/javascript/dashboard/i18n/locale/el/integrations.json @@ -86,49 +86,49 @@ "BUTTON_TEXT": "Σύνδεση" }, "DASHBOARD_APPS": { - "TITLE": "Dashboard Apps", - "HEADER_BTN_TXT": "Add a new dashboard app", - "SIDEBAR_TXT": "

Dashboard Apps

Dashboard Apps allow organizations to embed an application inside the Chatwoot dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that inside the dashboard to provide user information, their orders, or their previous payment history.

When you embed your application using the dashboard in Chatwoot, your application will get the context of the conversation and contact as a window event. Implement a listener for the message event on your page to receive the context.

To add a new dashboard app, click on the button 'Add a new dashboard app'.

", - "DESCRIPTION": "Dashboard Apps allow organizations to embed an application inside the dashboard to provide the context for customer support agents. This feature allows you to create an application independently and embed that to provide user information, their orders, or their previous payment history.", + "TITLE": "Εφαρμογές Dashboard", + "HEADER_BTN_TXT": "Προσθήκη νέας εφαρμογής Dashboard", + "SIDEBAR_TXT": "

Εφαρμογές Dashboard

Οι εφαρμογές Dashboard επιτρέπουν σε οργανισμούς να ενσωματώσουν μια εφαρμογή μέσα στο ταμπλό Chatwoot για να παρέχουν το πλαίσιο για τους πράκτορες υποστήριξης πελατών. Αυτό το χαρακτηριστικό σας επιτρέπει να δημιουργήσετε μια εφαρμογή ανεξάρτητα και ενσωματωμένη που μέσα στον πίνακα ελέγχου για να παρέχει πληροφορίες χρήστη, τις παραγγελίες τους, ή το ιστορικό προηγούμενων πληρωμών τους.

Όταν ενσωματώσετε την εφαρμογή σας χρησιμοποιώντας το Dashboard στο Chatwoot, η εφαρμογή σας θα πάρει το πλαίσιο της συνομιλίας και θα επικοινωνήσει ως ένα παράθυρο εκδήλωσης. Εφαρμόστε έναν ακροατή για το γεγονός του μηνύματος στη σελίδα σας για να λάβετε το πλαίσιο.

Για να προσθέσετε μια νέα εφαρμογή ταμπλό, κάντε κλικ στο κουμπί 'Προσθήκη μιας νέας εφαρμογής Dashboard'.

", + "DESCRIPTION": "Οι εφαρμογές Dashboard επιτρέπουν στους οργανισμούς να ενσωματώσουν μια εφαρμογή μέσα στον πίνακα ελέγχου για να παρέχουν το περιεχόμενο για τους πράκτορες υποστήριξης πελατών. Αυτή η λειτουργία σας επιτρέπει να δημιουργήσετε μια εφαρμογή ανεξάρτητα και ενσωματωμένη που θα παρέχει πληροφορίες χρήστη, τις παραγγελίες τους, ή το ιστορικό προηγούμενων πληρωμών τους.", "LIST": { - "404": "There are no dashboard apps configured on this account yet", - "LOADING": "Fetching dashboard apps...", + "404": "Δεν έχουν δημιουργηθεί εφαρμογές Dashboard για αυτόν το λογαριασμό", + "LOADING": "Λήψη εφαρμογών dashboard ...", "TABLE_HEADER": [ "Όνομα", "Endpoint" ], - "EDIT_TOOLTIP": "Edit app", - "DELETE_TOOLTIP": "Delete app" + "EDIT_TOOLTIP": "Επεξεργασία εφαρμογής", + "DELETE_TOOLTIP": "Διαγραφή εφαρμογής" }, "FORM": { "TITLE_LABEL": "Όνομα", - "TITLE_PLACEHOLDER": "Enter a name for your dashboard app", - "TITLE_ERROR": "A name for the dashboard app is required", + "TITLE_PLACEHOLDER": "Εισάγετε όνομα για την εφαρμογή dashboard", + "TITLE_ERROR": "Απαιτείται ένα όνομα για την εφαρμογή dashboard", "URL_LABEL": "Endpoint", - "URL_PLACEHOLDER": "Enter the endpoint URL where your app is hosted", - "URL_ERROR": "A valid URL is required" + "URL_PLACEHOLDER": "Εισάγετε το URL του endpoint όπου φιλοξενείται η εφαρμογή σας", + "URL_ERROR": "Απαιτείται ένα έγκυρο URL" }, "CREATE": { - "HEADER": "Add a new dashboard app", + "HEADER": "Προσθήκη νέας εφαρμογής Dashboard", "FORM_SUBMIT": "Καταχώρηση", "FORM_CANCEL": "Άκυρο", - "API_SUCCESS": "Dashboard app configured successfully", - "API_ERROR": "We couldn't create an app. Please try again later" + "API_SUCCESS": "Η εφαρμογή dashboard ρυθμίστηκε επιτυχώς", + "API_ERROR": "Δεν μπορούμε να δημιουργήσουμε μια εφαρμογή. Παρακαλώ δοκιμάστε ξανά αργότερα" }, "UPDATE": { - "HEADER": "Edit dashboard app", + "HEADER": "Επεξεργασία εφαρμογής dashboard", "FORM_SUBMIT": "Ενημέρωση", "FORM_CANCEL": "Άκυρο", - "API_SUCCESS": "Dashboard app updated successfully", - "API_ERROR": "We couldn't update the app. Please try again later" + "API_SUCCESS": "Η εφαρμογή dashboard ενημερώθηκε με επιτυχία", + "API_ERROR": "Δεν ήταν δυνατή η ενημέρωση της εφαρμογής. Παρακαλώ δοκιμάστε ξανά αργότερα" }, "DELETE": { - "CONFIRM_YES": "Yes, delete it", - "CONFIRM_NO": "No, keep it", + "CONFIRM_YES": "Ναι, Διέγραψε την", + "CONFIRM_NO": "Όχι, Κράτησε την", "TITLE": "Επιβεβαίωση Διαγραφής", - "MESSAGE": "Are you sure to delete the app - %{appName}?", - "API_SUCCESS": "Dashboard app deleted successfully", - "API_ERROR": "We couldn't delete the app. Please try again later" + "MESSAGE": "Είστε βέβαιοι να διαγράψετε την εφαρμογή - %{appName};", + "API_SUCCESS": "Η εφαρμογή dashboard διαγράφηκε επιτυχώς", + "API_ERROR": "Δεν μπορούμε να διαγράψουμε την εφαρμογή. Παρακαλώ δοκιμάστε ξανά αργότερα" } } } diff --git a/app/javascript/dashboard/i18n/locale/el/macros.json b/app/javascript/dashboard/i18n/locale/el/macros.json new file mode 100644 index 000000000..439241619 --- /dev/null +++ b/app/javascript/dashboard/i18n/locale/el/macros.json @@ -0,0 +1,5 @@ +{ + "MACROS": { + "HEADER": "Μακροεντολές" + } +} diff --git a/app/javascript/dashboard/i18n/locale/el/settings.json b/app/javascript/dashboard/i18n/locale/el/settings.json index 69cd0a401..651e2de5d 100644 --- a/app/javascript/dashboard/i18n/locale/el/settings.json +++ b/app/javascript/dashboard/i18n/locale/el/settings.json @@ -20,17 +20,17 @@ "NOTE": "Η διεύθυνση email είναι η ταυτότητά σας και χρησιμοποιείται για την είσοδο (login) σας." }, "SEND_MESSAGE": { - "TITLE": "Hotkey to send messages", - "NOTE": "You can select a hotkey (either Enter or Cmd/Ctrl+Enter) based on your preference of writing.", - "UPDATE_SUCCESS": "Your settings have been updated successfully", + "TITLE": "Πλήκτρο συντόμευσης για αποστολή μηνυμάτων", + "NOTE": "Μπορείτε να επιλέξετε μια συντόμευση (είτε εισάγετε είτε Cmd/Ctrl+Enter) με βάση την προτίμηση για το γράψιμο.", + "UPDATE_SUCCESS": "Οι ρυθμίσεις σας έχουν ενημερωθεί με επιτυχία", "CARD": { "ENTER_KEY": { "HEADING": "Enter (↵)", - "CONTENT": "Send messages by pressing Enter key instead of clicking the send button." + "CONTENT": "Αποστολή μηνυμάτων πατώντας το πλήκτρο Enter αντί να πατήσετε το κουμπί αποστολής." }, "CMD_ENTER_KEY": { "HEADING": "Cmd/Ctrl + Enter (⌘ + ↵)", - "CONTENT": "Send messages by pressing Cmd/Ctrl + enter key instead of clicking the send button." + "CONTENT": "Αποστολή μηνυμάτων πατώντας το πλήκτρο Enter αντί να πατήσετε το κουμπί αποστολής." } } }, @@ -141,8 +141,8 @@ "TRAIL_BUTTON": "Αγόρασε τώρα", "DELETED_USER": "Διαγραμμένος Χρήστης", "ACCOUNT_SUSPENDED": { - "TITLE": "Account Suspended", - "MESSAGE": "Your account is suspended. Please reach out to the support team for more information." + "TITLE": "Αναστολή Λογαριασμού", + "MESSAGE": "Ο λογαριασμός σας έχει ανασταλεί. Επικοινωνήστε με την ομάδα υποστήριξης για περισσότερες πληροφορίες." } }, "COMPONENTS": { @@ -179,6 +179,7 @@ "CONTACTS": "Επαφές", "HOME": "Αρχική", "AGENTS": "Πράκτορες", + "AGENT_BOTS": "Bots", "INBOXES": "Κιβώτια Εισερχομένων", "NOTIFICATIONS": "Ειδοποιήσεις", "CANNED_RESPONSES": "Έτοιμες Απαντήσεις", @@ -189,8 +190,9 @@ "LABELS": "Ετικέτες", "CUSTOM_ATTRIBUTES": "Προσαρμοζόμενες Ιδιότητες", "AUTOMATION": "Αυτοματισμός", + "MACROS": "Μακροεντολές", "TEAMS": "Ομάδες", - "BILLING": "Billing", + "BILLING": "Χρεώσεις", "CUSTOM_VIEWS_FOLDER": "Φάκελοι", "CUSTOM_VIEWS_SEGMENTS": "Τμήματα", "ALL_CONTACTS": "Όλες Οι Επαφές", @@ -212,33 +214,33 @@ "REPORTS_OVERVIEW": "Επισκόπηση", "FACEBOOK_REAUTHORIZE": "Η σύνδεση Facebook έχει λήξει, παρακαλώ ξανασυνδεθείτε στο Facebook για να συνεχίσετε", "HELP_CENTER": { - "TITLE": "Help Center (Beta)", - "ALL_ARTICLES": "All Articles", - "MY_ARTICLES": "My Articles", - "DRAFT": "Draft", - "ARCHIVED": "Archived", + "TITLE": "Κέντρο Βοήθειας (Beta)", + "ALL_ARTICLES": "Όλα Τα Άρθρα", + "MY_ARTICLES": "Τα Άρθρα Μου", + "DRAFT": "Πρόχειρο", + "ARCHIVED": "Αρχειοθετημένο", "CATEGORY": "Κατηγορία", - "CATEGORY_EMPTY_MESSAGE": "No categories found" + "CATEGORY_EMPTY_MESSAGE": "Δεν βρέθηκαν κατηγορίες" }, - "DOCS": "Read docs" + "DOCS": "Ανάγνωση εγγράφων" }, "BILLING_SETTINGS": { - "TITLE": "Billing", + "TITLE": "Χρεώσεις", "CURRENT_PLAN": { - "TITLE": "Current Plan", - "PLAN_NOTE": "You are currently subscribed to the **%{plan}** plan with **%{quantity}** licenses" + "TITLE": "Τρέχον Πλάνο", + "PLAN_NOTE": "Αυτή τη στιγμή έχετε εγγραφεί στο πλάνο **%{plan}** με **%{quantity}** άδειες" }, "MANAGE_SUBSCRIPTION": { - "TITLE": "Manage your subscription", - "DESCRIPTION": "View your previous invoices, edit your billing details, or cancel your subscription.", - "BUTTON_TXT": "Go to the billing portal" + "TITLE": "Διαχειριστείτε τη συνδρομή σας", + "DESCRIPTION": "Δείτε τα προηγούμενα τιμολόγια σας, επεξεργαστείτε τα στοιχεία χρέωσης ή ακυρώστε τη συνδρομή σας.", + "BUTTON_TXT": "Μετάβαση στην πύλη χρέωσης" }, "CHAT_WITH_US": { - "TITLE": "Need help?", - "DESCRIPTION": "Do you face any issues in billing? We are here to help.", + "TITLE": "Χρειάζεστε βοήθεια;", + "DESCRIPTION": "Αντιμετωπίζετε οποιαδήποτε προβλήματα στην τιμολόγηση? Είμαστε εδώ για να βοηθήσουμε.", "BUTTON_TXT": "Συνομιλήστε μαζί μας" }, - "NO_BILLING_USER": "Your billing account is being configured. Please refresh the page and try again." + "NO_BILLING_USER": "Ο λογαριασμός χρέωσης έχει ρυθμιστεί. Παρακαλώ ανανεώστε τη σελίδα και προσπαθήστε ξανά." }, "CREATE_ACCOUNT": { "NO_ACCOUNT_WARNING": "Ωχ! Δεν μπορέσαμε να βρούμε κανένα λογαριασμό Chatwoot. Παρακαλούμε δημιουργήστε ένα νέο λογαριασμό για να συνεχίσετε.", diff --git a/app/javascript/dashboard/i18n/locale/he/chatlist.json b/app/javascript/dashboard/i18n/locale/he/chatlist.json index e669054ac..7f25908b8 100644 --- a/app/javascript/dashboard/i18n/locale/he/chatlist.json +++ b/app/javascript/dashboard/i18n/locale/he/chatlist.json @@ -54,12 +54,12 @@ "RECEIVED_VIA_EMAIL": "התקבל בדואר אלקטרוני", "VIEW_TWEET_IN_TWITTER": "צפה בציוץ בטוויטר", "REPLY_TO_TWEET": "הגב לציוץ זה", - "LINK_TO_STORY": "Go to instagram story", + "LINK_TO_STORY": "מעבר לסטורי באינסטגרם", "SENT": "נשלח בהצלחה", "NO_MESSAGES": "אין הודעות", "NO_CONTENT": "אין תוכן זמין", "HIDE_QUOTED_TEXT": "הסתר טקסט מצוטט", "SHOW_QUOTED_TEXT": "הצג טקסט מצוטט", - "MESSAGE_READ": "Read" + "MESSAGE_READ": "קרא" } } diff --git a/app/javascript/dashboard/i18n/locale/he/contact.json b/app/javascript/dashboard/i18n/locale/he/contact.json index c4f12e24c..236066ce7 100644 --- a/app/javascript/dashboard/i18n/locale/he/contact.json +++ b/app/javascript/dashboard/i18n/locale/he/contact.json @@ -3,11 +3,11 @@ "NOT_AVAILABLE": "לא זמין", "EMAIL_ADDRESS": "כתובת מייל", "PHONE_NUMBER": "מספר טלפון", - "IDENTIFIER": "Identifier", + "IDENTIFIER": "מזהה", "COPY_SUCCESSFUL": "הועתק ללוח בהצלחה", "COMPANY": "חברה", "LOCATION": "מיקום", - "BROWSER_LANGUAGE": "Browser Language", + "BROWSER_LANGUAGE": "שפת דפדפן", "CONVERSATION_TITLE": "פרטי שיחה", "VIEW_PROFILE": "צפה בפרופיל", "BROWSER": "דפדפן", @@ -75,8 +75,8 @@ "DELETE_NOTE": { "CONFIRM": { "TITLE": "אשר מחיקה", - "MESSAGE": "Are you want sure to delete this note?", - "YES": "Yes, Delete it", + "MESSAGE": "אתה בטוח שתרצה למחוק את ההערה הזו?", + "YES": "כן, מחק", "NO": "לא, השאר" } }, diff --git a/app/javascript/dashboard/i18n/locale/he/conversation.json b/app/javascript/dashboard/i18n/locale/he/conversation.json index 310f127f9..3a121e019 100644 --- a/app/javascript/dashboard/i18n/locale/he/conversation.json +++ b/app/javascript/dashboard/i18n/locale/he/conversation.json @@ -1,10 +1,10 @@ { "CONVERSATION": { "SELECT_A_CONVERSATION": "אנא בחר שיחה מהחלונית השמאלית", - "CSAT_REPLY_MESSAGE": "Please rate the conversation", + "CSAT_REPLY_MESSAGE": "נא דרג שיחה זו", "404": "Sorry, we cannot find the conversation. Please try again", - "SWITCH_VIEW_LAYOUT": "Switch the layout", - "DASHBOARD_APP_TAB_MESSAGES": "Messages", + "SWITCH_VIEW_LAYOUT": "החלף תצוגה", + "DASHBOARD_APP_TAB_MESSAGES": "הודעות", "UNVERIFIED_SESSION": "זהות המשתמש לא מְאוּמָתת", "NO_MESSAGE_1": "או - או! נראה שאין הודעות מלקוחות בתיבת הדואר הנכנס שלך.", "NO_MESSAGE_2": " לשלוח הודעה לעמוד שלך!", @@ -34,7 +34,7 @@ "REPLYING_TO": "אתה משיב ל:", "REMOVE_SELECTION": "הסר בחירה", "DOWNLOAD": "הורד", - "UNKNOWN_FILE_TYPE": "Unknown File", + "UNKNOWN_FILE_TYPE": "קובץ לא ידוע", "UPLOADING_ATTACHMENTS": "מעלה קובץ מצורף...", "SUCCESS_DELETE_MESSAGE": "ההודעה נמחקה בהצלחה", "FAIL_DELETE_MESSSAGE": "לא ניתן למחוק את ההודעה! נסה שוב", @@ -63,18 +63,18 @@ }, "CARD_CONTEXT_MENU": { "PENDING": "סמן כממתין", - "RESOLVED": "Mark as resolved", + "RESOLVED": "סמן כפתור", "REOPEN": "פתח מחדש את השיחה", "SNOOZE": { "TITLE": "Snooze", - "NEXT_REPLY": "Until next reply", - "TOMORROW": "Until tomorrow", - "NEXT_WEEK": "Until next week" + "NEXT_REPLY": "עד תגובה הבאה", + "TOMORROW": "עד מחר", + "NEXT_WEEK": "עד שבוע הבא" }, - "ASSIGN_AGENT": "Assign agent", + "ASSIGN_AGENT": "שייך סוכן", "ASSIGN_LABEL": "Assign label", - "AGENTS_LOADING": "Loading agents...", - "ASSIGN_TEAM": "Assign team", + "AGENTS_LOADING": "טוען סוכנים...", + "ASSIGN_TEAM": "שייך צוות", "API": { "AGENT_ASSIGNMENT": { "SUCCESFUL": "Conversation id %{conversationId} assigned to \"%{agentName}\"", @@ -86,18 +86,18 @@ }, "TEAM_ASSIGNMENT": { "SUCCESFUL": "Assigned team \"%{team}\" to conversation id %{conversationId}", - "FAILED": "Couldn't assign team. Please try again." + "FAILED": "השמה לצוות לא הצליחה, בבקשה נסה שנית." } } }, "FOOTER": { "MESSAGE_SIGN_TOOLTIP": "Message signature", - "ENABLE_SIGN_TOOLTIP": "Enable signature", - "DISABLE_SIGN_TOOLTIP": "Disable signature", + "ENABLE_SIGN_TOOLTIP": "אפשר חתימה", + "DISABLE_SIGN_TOOLTIP": "נטרל חתימה", "MSG_INPUT": "Shift + Enter עבור שורה חדשה. התחל עם '/' כדי לבחור תגובה מוכנה.", "PRIVATE_MSG_INPUT": "Shift + Enter עבור שורה חדשה. זה יהיה גלוי רק לסוכנים", "MESSAGE_SIGNATURE_NOT_CONFIGURED": "Message signature is not configured, please configure it in profile settings.", - "CLICK_HERE": "Click here to update" + "CLICK_HERE": "לחץ כאן כדי לעדכן" }, "REPLYBOX": { "REPLY": "הגב", @@ -108,12 +108,12 @@ "TIP_FORMAT_ICON": "הצג עורך טקסט עשיר", "TIP_EMOJI_ICON": "הצג בחירת אימוג'ים", "TIP_ATTACH_ICON": "הוסף קבצים", - "TIP_AUDIORECORDER_ICON": "Record audio", - "TIP_AUDIORECORDER_PERMISSION": "Allow access to audio", - "TIP_AUDIORECORDER_ERROR": "Could not open the audio", + "TIP_AUDIORECORDER_ICON": "הקלט אודיו", + "TIP_AUDIORECORDER_PERMISSION": "אפשר גישה לאודיו", + "TIP_AUDIORECORDER_ERROR": "לא יכול לפתוח אודיו", "DRAG_DROP": "גרור ושחרר כאן להוספת קובץ מצורף", - "START_AUDIO_RECORDING": "Start audio recording", - "STOP_AUDIO_RECORDING": "Stop audio recording", + "START_AUDIO_RECORDING": "התחל הקלטת אודיו", + "STOP_AUDIO_RECORDING": "עצור הקלטת אודיו", "": "", "EMAIL_HEAD": { "ADD_BCC": "הוסף bcc", @@ -131,11 +131,11 @@ }, "VISIBLE_TO_AGENTS": "פתקים פרטיים: רק אתה והצוות שלך יכולים לראות", "CHANGE_STATUS": "סטטוס השיחה השתנה", - "CHANGE_STATUS_FAILED": "Conversation status change failed", + "CHANGE_STATUS_FAILED": "סטטוס השיחה השתנה לנכשלה", "CHANGE_AGENT": "שיוך שיחה השתנתה", "CHANGE_AGENT_FAILED": "Assignee change failed", - "ASSIGN_LABEL_SUCCESFUL": "Label assigned successfully", - "ASSIGN_LABEL_FAILED": "Label assignment failed", + "ASSIGN_LABEL_SUCCESFUL": "סמן משימה כבוצעה בהצלחה", + "ASSIGN_LABEL_FAILED": "סמן משימה כנכשלה", "CHANGE_TEAM": "שיחת קבוצה השתנתה", "FILE_SIZE_LIMIT": "File exceeds the {MAXIMUM_SUPPORTED_FILE_UPLOAD_SIZE} MB attachment limit", "MESSAGE_ERROR": "לא ניתן לשלוח הודעה, אנא נסה שוב מאוחר יותר", @@ -151,7 +151,7 @@ "CONTEXT_MENU": { "COPY": "העתק", "DELETE": "מחק", - "CREATE_A_CANNED_RESPONSE": "Add to canned responses" + "CREATE_A_CANNED_RESPONSE": "הוסף לתגובות מוכנות" } }, "EMAIL_TRANSCRIPT": { @@ -182,17 +182,17 @@ "TEAM_MEMBERS": { "TITLE": "הזמן את חברי הצוות שלך", "DESCRIPTION": "Since you are getting ready to talk to your customer, bring in your teammates to assist you. You can invite your teammates by adding their email addresses to the agent list.", - "NEW_LINK": "Click here to invite a team member" + "NEW_LINK": "לחץ כאן כדי להזמין חבר צוות" }, "INBOXES": { - "TITLE": "Connect Inboxes", + "TITLE": "התחבר לתיבות", "DESCRIPTION": "Connect various channels through which your customers would be talking to you. It can be a website live-chat, your Facebook or Twitter page or even your WhatsApp number.", - "NEW_LINK": "Click here to create an inbox" + "NEW_LINK": "לחץ כאן כדי ליצור תיבה" }, "LABELS": { "TITLE": "Organize conversations with labels", "DESCRIPTION": "Labels provide an easier way to categorize your conversation. Create some labels like #support-enquiry, #billing-question etc., so that you can use them in a conversation later.", - "NEW_LINK": "Click here to create tags" + "NEW_LINK": "לחץ כאן כדי ליצור תגיות" } }, "CONVERSATION_SIDEBAR": { @@ -200,7 +200,7 @@ "SELF_ASSIGN": "Assign to me", "TEAM_LABEL": "Assigned Team", "SELECT": { - "PLACEHOLDER": "None" + "PLACEHOLDER": "כלום" }, "ACCORDION": { "CONTACT_DETAILS": "Contact Details", @@ -233,7 +233,7 @@ } }, "EMAIL_HEADER": { - "FROM": "From", + "FROM": "מאת", "TO": "אל", "BCC": "Bcc", "CC": "עותק", diff --git a/app/javascript/dashboard/i18n/locale/he/generalSettings.json b/app/javascript/dashboard/i18n/locale/he/generalSettings.json index dfda9965a..2f7b4d580 100644 --- a/app/javascript/dashboard/i18n/locale/he/generalSettings.json +++ b/app/javascript/dashboard/i18n/locale/he/generalSettings.json @@ -14,7 +14,7 @@ "NOTE": "" }, "ACCOUNT_ID": { - "TITLE": "Account ID", + "TITLE": "מזהה חשבון", "NOTE": "This ID is required if you are building an API based integration" }, "NAME": { @@ -60,12 +60,12 @@ "NOTIFICATIONS_PAGE": { "HEADER": "התראות", "MARK_ALL_DONE": "סמן הכל כבוצע", - "DELETE_TITLE": "deleted", + "DELETE_TITLE": "נמחק", "UNREAD_NOTIFICATION": { - "TITLE": "Unread Notifications", - "ALL_NOTIFICATIONS": "View all notifications", - "LOADING_UNREAD_MESSAGE": "Loading unread notifications...", - "EMPTY_MESSAGE": "You have no unread notifications" + "TITLE": "התראות שלא נקראו", + "ALL_NOTIFICATIONS": "הצג את כל ההתראות", + "LOADING_UNREAD_MESSAGE": "טוען התראות שלא נקראו...", + "EMPTY_MESSAGE": "אין לך התראות שלא נקראו" }, "LIST": { "LOADING_MESSAGE": "טוען הודעות...", @@ -93,10 +93,10 @@ } }, "COMMAND_BAR": { - "SEARCH_PLACEHOLDER": "Search or jump to", + "SEARCH_PLACEHOLDER": "חפש או קפוץ ל", "SECTIONS": { - "GENERAL": "General", - "REPORTS": "Reports", + "GENERAL": "כללי", + "REPORTS": "דוחות", "CONVERSATION": "שיחה", "CHANGE_ASSIGNEE": "Change Assignee", "CHANGE_TEAM": "Change Team", diff --git a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json index 8dcdf0131..1b04432f9 100644 --- a/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json +++ b/app/javascript/dashboard/i18n/locale/he/inboxMgmt.json @@ -158,7 +158,7 @@ }, "BANDWIDTH": { "ACCOUNT_ID": { - "LABEL": "Account ID", + "LABEL": "מזהה חשבון", "PLACEHOLDER": "Please enter your Bandwidth Account ID", "ERROR": "שדה חובה" }, @@ -239,7 +239,9 @@ }, "API_CALLBACK": { "TITLE": "כתובת אתר להתקשרות חוזרת", - "SUBTITLE": "You have to configure the webhook URL in facebook developer portal with the URL mentioned here." + "SUBTITLE": "You have to configure the webhook URL and the verification token in the Facebook Developer portal with the values shown below.", + "WEBHOOK_URL": "Webhook URL", + "WEBHOOK_VERIFICATION_TOKEN": "Webhook Verification Token" }, "SUBMIT_BUTTON": "צור ערוץ וואטסאפ", "API": { @@ -357,7 +359,7 @@ }, "FINISH": { "TITLE": "תיבת הדואר הנכנס שלך מוכנה!", - "MESSAGE": "כעת תוכל ליצור קשר עם הלקוחות שלך דרך הערוץ החדש שלך. תמיכה שמחה ", + "MESSAGE": "כעת תוכל ליצור קשר עם הלקוחות שלך דרך הערוץ החדש שלך. תמיכה שמחה", "BUTTON_TEXT": "קח אותי לשם", "MORE_SETTINGS": "הגדרות נוספות", "WEBSITE_SUCCESS": "סיימת בהצלחה ליצור ערוץ אתר אינטרנט. העתק את הקוד המוצג למטה והדבק אותו באתר שלך. בפעם הבאה שלקוח ישתמש בצ'אט החי, השיחה תופיע אוטומטית בתיבת הדואר הנכנס שלך." diff --git a/app/javascript/dashboard/i18n/locale/he/settings.json b/app/javascript/dashboard/i18n/locale/he/settings.json index 380b13761..3216cf128 100644 --- a/app/javascript/dashboard/i18n/locale/he/settings.json +++ b/app/javascript/dashboard/i18n/locale/he/settings.json @@ -58,7 +58,7 @@ "AUDIO_NOTIFICATIONS_SECTION": { "TITLE": "Audio Notifications", "NOTE": "Enable audio notifications in dashboard for new messages and conversations.", - "NONE": "None", + "NONE": "כלום", "ASSIGNED": "Assigned Conversations", "ALL_CONVERSATIONS": "All Conversations" }, @@ -179,6 +179,7 @@ "CONTACTS": "איש קשר", "HOME": "בית", "AGENTS": "סוכנים", + "AGENT_BOTS": "Bots", "INBOXES": "תיבות דואר נכנס", "NOTIFICATIONS": "התראות", "CANNED_RESPONSES": "תגובות מוכנות", @@ -189,6 +190,7 @@ "LABELS": "Labels", "CUSTOM_ATTRIBUTES": "מאפיינים בהתאמה אישית", "AUTOMATION": "Automation", + "MACROS": "Macros", "TEAMS": "Teams", "BILLING": "Billing", "CUSTOM_VIEWS_FOLDER": "Folders", diff --git a/config/locales/el.yml b/config/locales/el.yml index df0cac548..d53161c16 100644 --- a/config/locales/el.yml +++ b/config/locales/el.yml @@ -23,7 +23,7 @@ el: reset_password_failure: Ωχ όχι! Δεν υπάρχει κάποιος χρήστης με το συγκεκριμένο email. errors: validations: - presence: must not be blank + presence: δεν πρέπει να είναι κενό webhook: invalid: Μη έγκυρα συμβάντα signup: @@ -33,17 +33,17 @@ el: failed: Η εγγραφή απέτυχε data_import: data_type: - invalid: Invalid data type + invalid: Μη έγκυρος τύπος δεδομένων contacts: import: failed: Το αρχείο είναι κενό email: - invalid: Invalid email + invalid: Ακατάλληλο email phone_number: - invalid: should be in e164 format + invalid: πρέπει να είναι σε μορφή e164 categories: locale: - unique: should be unique in the category and portal + unique: πρέπει να είναι μοναδικό στην κατηγορία και την πύλη inboxes: imap: socket_error: Παρακαλώ ελέγξτε τη σύνδεση δικτύου, τη διεύθυνση IMAP και προσπαθήστε ξανά. From 73f5595762877bcc1d15144cdf4bd7a3db34069d Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Tue, 18 Oct 2022 01:43:02 +0530 Subject: [PATCH 55/62] chore: Sync colors from dashboard to tailwind config (#5656) --- .../sidebarComponents/SecondaryNavItem.vue | 2 +- .../widgets/conversation/MessagesView.vue | 2 +- .../widgets/conversation/ReplyBox.vue | 2 +- .../conversationBulkActions/Index.vue | 2 +- .../widget-preview/components/Widget.vue | 6 +- .../helpcenter/components/PortalPopover.vue | 2 +- .../pages/categories/CategoryListItem.vue | 2 +- .../shared/assets/stylesheets/colors.scss | 28 +++---- tailwind.config.js | 74 ++++++++++--------- 9 files changed, 62 insertions(+), 58 deletions(-) diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue index a7a6761cf..cd155bce8 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue @@ -321,7 +321,7 @@ export default { .beta { padding-right: var(--space-smaller) !important; padding-left: var(--space-smaller) !important; - margin-left: var(--space-half) !important; + margin-left: var(--space-smaller) !important; display: inline-block; font-size: var(--font-size-micro); font-weight: var(--font-weight-medium); diff --git a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue index 52a43091c..5b2d322e3 100644 --- a/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue +++ b/app/javascript/dashboard/components/widgets/conversation/MessagesView.vue @@ -434,7 +434,7 @@ export default { &::before { transform: rotate(0deg); - left: var(--space-half); + left: var(--space-smaller); bottom: var(--space-minus-slab); } } diff --git a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue index bbc2f017e..b5bc55235 100644 --- a/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue +++ b/app/javascript/dashboard/components/widgets/conversation/ReplyBox.vue @@ -970,7 +970,7 @@ export default { &::before { transform: rotate(0deg); - left: var(--space-half); + left: var(--space-smaller); bottom: var(--space-minus-slab); } } diff --git a/app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/Index.vue b/app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/Index.vue index 70b0464cc..600ff4393 100644 --- a/app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/Index.vue +++ b/app/javascript/dashboard/components/widgets/conversation/conversationBulkActions/Index.vue @@ -181,7 +181,7 @@ export default { color: var(--y-700); font-size: var(--font-size-mini); margin-top: var(--space-small); - padding: var(--space-half) var(--space-one); + padding: var(--space-smaller) var(--space-small); } .popover-animation-enter-active, diff --git a/app/javascript/dashboard/modules/widget-preview/components/Widget.vue b/app/javascript/dashboard/modules/widget-preview/components/Widget.vue index d2e5622a2..8ec864042 100644 --- a/app/javascript/dashboard/modules/widget-preview/components/Widget.vue +++ b/app/javascript/dashboard/modules/widget-preview/components/Widget.vue @@ -249,8 +249,8 @@ export default { display: flex; align-items: center; border-radius: calc(var(--border-radius-small) * 10); - height: calc(var(--space-three) * 2); - width: calc(var(--space-three) * 2); + height: calc(var(--space-large) * 2); + width: calc(var(--space-large) * 2); position: relative; overflow-wrap: anywhere; cursor: pointer; @@ -274,7 +274,7 @@ export default { display: inline; height: var(--space-medium); width: var(--space-micro); - left: var(--space-three); + left: var(--space-large); position: absolute; } diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue index 1f5eebe0e..67d1b33f1 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/PortalPopover.vue @@ -104,7 +104,7 @@ export default { .new-popover-link { display: flex; align-items: center; - padding: var(--space-half) var(--space-one); + padding: var(--space-smaller) var(--space-small); background-color: var(--s-25); font-size: var(--font-size-mini); color: var(--s-500); diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/CategoryListItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/CategoryListItem.vue index 3a8b7a850..45b23e5ed 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/CategoryListItem.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/pages/categories/CategoryListItem.vue @@ -118,6 +118,6 @@ table { justify-content: center; color: var(--s-500); font-size: var(--font-size-default); - margin-top: var(--space-three); + margin-top: var(--space-large); } diff --git a/app/javascript/shared/assets/stylesheets/colors.scss b/app/javascript/shared/assets/stylesheets/colors.scss index 7c13fc39c..64b7f3f94 100644 --- a/app/javascript/shared/assets/stylesheets/colors.scss +++ b/app/javascript/shared/assets/stylesheets/colors.scss @@ -26,16 +26,16 @@ --g-800: #009000; --g-900: #007000; - --y-50: #fefde8; - --y-100: #fdfcc4; - --y-200: #fcf68c; - --y-300: #f9e736; - --y-400: #f6d819; - --y-500: #e6c00c; - --y-600: #c69608; - --y-700: #9e6b0a; + --y-50: #FEFDE8; + --y-100: #FDFCC4; + --y-200: #FCF68C; + --y-300: #F9E736; + --y-400: #F6D819; + --y-500: #E6C00C; + --y-600: #C69608; + --y-700: #9E6b0A; --y-800: #835510; - --y-900: #6f4514; + --y-900: #6F4514; --s-25: #F8FAFC; --s-50: #F1F5F8; @@ -50,11 +50,11 @@ --s-800: #293F51; --s-900: #1B2836; - --b-50: #f7f7f7; - --b-100: #ececed; - --b-200: #dddde0; - --b-300: #c6c7ca; - --b-400: #abacaf; + --b-50: #F7F7F7; + --b-100: #ECECED; + --b-200: #DDDDE0; + --b-300: #C6C7CA; + --b-400: #ABACAF; --b-500: #96979C; --b-600: #6E6F73; --b-700: #5A5B5F; diff --git a/tailwind.config.js b/tailwind.config.js index e839d00ec..90408a779 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -14,16 +14,18 @@ module.exports = { colors: { white: colors.white, woot: { - 50: '#E3F2FF', - 100: '#BBDDFF', - 200: '#8FC9FF', - 300: '#61B3FF', - 400: '#3FA3FF', + 25: '#F5FAFF', + 50: '#EBF5FF', + 75: '#D6EBFF', + 100: '#C2E1FF', + 200: '#99CEFF', + 300: '#70BAFF', + 400: '#47A6FF', 500: '#1F93FF', - 600: '#2284F0', - 700: '#2272DC', - 800: '#2161CA', - 900: '#1F41AB', + 600: '#1976CC', + 700: '#135899', + 800: '#0C3B66', + 900: '#061D33', }, green: { 50: '#E6F8E6', @@ -38,38 +40,40 @@ module.exports = { 900: '#007000', }, yellow: { - 50: '#FFFEE8', - 100: '#FFFAC5', - 200: '#FFF69E', - 300: '#FEF176', - 400: '#FCEC56', - 500: '#F9E736', - 600: '#FFDD3A', - 700: '#FFC532', - 800: '#FDAD2A', - 900: '#F9841B', + 50: '#FEFDE8', + 100: '#FDFCC4', + 200: '#FCF68C', + 300: '#F9E736', + 400: '#F6D819', + 500: '#E6C00C', + 600: '#C69608', + 700: '#9E6b0A', + 800: '#835510', + 900: '#6F4514', }, slate: { - 50: '#F4F6FB', - 100: '#C8D6E6', - 200: '#ABBACE', - 300: '#8C9EB6', - 400: '#7489A4', - 500: '#5D7592', - 600: '#506781', - 700: '#40546B', - 800: '#314155', - 900: '#1F2D3D', + 25: '#F8FAFC', + 50: '#F1F5F8', + 75: '#EBF0F5', + 100: ' #E4EBF1', + 200: ' #C9D7E3', + 300: ' #AEC3D5', + 400: ' #93AFC8', + 500: ' #779BBB', + 600: ' #446888', + 700: ' #37546D', + 800: ' #293F51', + 900: ' #1B2836', }, black: { - 50: '#F8F9FE', - 100: '#F2F3F7', - 200: '#E9EAEF', - 300: '#DADBDF', - 400: '#B6B7BB', + 50: '#F7F7F7', + 100: '#ECECED', + 200: '#DDDDE0', + 300: '#C6C7CA', + 400: '#ABACAF', 500: '#96979C', 600: '#6E6F73', - 700: '#3C4858', + 700: '#5A5B5F', 800: '#3C3D40', 900: '#1B1C1F', }, From 20b4a91122e9b5db5ccc0546c06783a6c08fa247 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Mon, 17 Oct 2022 14:59:44 -0700 Subject: [PATCH 56/62] chore: Add feature flags in the settings console (#5657) --- .../dashboard/components/layout/Sidebar.vue | 10 +++---- .../layout/config/sidebarItems/settings.js | 28 +++++++++++++------ .../layout/sidebarComponents/Secondary.vue | 17 ++++++++--- .../sidebarComponents/SecondaryNavItem.vue | 6 ++-- .../widgets/WootWriter/ReplyBottomPanel.vue | 15 ++++++++-- app/javascript/dashboard/featureFlags.js | 13 +++++++++ .../dashboard/commands/goToCommandHotKeys.js | 22 ++++++++++++++- .../settings/account/account.routes.js | 2 +- .../dashboard/settings/settings.routes.js | 2 +- .../FluentIcon/dashboard-icons.json | 1 + .../account_features_field/_form.html.erb | 1 + config/features.yml | 18 ++++++++++++ ...20221017201914_add_features_to_accounts.rb | 20 +++++++++++++ db/schema.rb | 2 +- 14 files changed, 130 insertions(+), 27 deletions(-) create mode 100644 app/javascript/dashboard/featureFlags.js create mode 100644 db/migrate/20221017201914_add_features_to_accounts.rb diff --git a/app/javascript/dashboard/components/layout/Sidebar.vue b/app/javascript/dashboard/components/layout/Sidebar.vue index 314b594d2..b919be2cd 100644 --- a/app/javascript/dashboard/components/layout/Sidebar.vue +++ b/app/javascript/dashboard/components/layout/Sidebar.vue @@ -73,14 +73,14 @@ export default { computed: { ...mapGetters({ - currentUser: 'getCurrentUser', - globalConfig: 'globalConfig/get', - isACustomBrandedInstance: 'globalConfig/isACustomBrandedInstance', - isOnChatwootCloud: 'globalConfig/isOnChatwootCloud', - inboxes: 'inboxes/getInboxes', accountId: 'getCurrentAccountId', currentRole: 'getCurrentRole', + currentUser: 'getCurrentUser', + globalConfig: 'globalConfig/get', + inboxes: 'inboxes/getInboxes', + isACustomBrandedInstance: 'globalConfig/isACustomBrandedInstance', isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', + isOnChatwootCloud: 'globalConfig/isOnChatwootCloud', labels: 'labels/getLabelsOnSidebar', teams: 'teams/getMyTeams', }), diff --git a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js index 83a0c2309..768e42ea5 100644 --- a/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js +++ b/app/javascript/dashboard/components/layout/config/sidebarItems/settings.js @@ -1,3 +1,4 @@ +import { FEATURE_FLAGS } from '../../../../featureFlags'; import { frontendURL } from '../../../../helper/URLHelper'; const settings = accountId => ({ @@ -38,12 +39,20 @@ const settings = accountId => ({ 'settings_teams_new', ], menuItems: [ + { + icon: 'briefcase', + label: 'ACCOUNT_SETTINGS', + hasSubMenu: false, + toState: frontendURL(`accounts/${accountId}/settings/general`), + toStateName: 'general_settings_index', + }, { icon: 'people', label: 'AGENTS', hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/agents/list`), toStateName: 'agent_list', + featureFlag: FEATURE_FLAGS.AGENT_MANAGEMENT, }, { icon: 'people-team', @@ -51,6 +60,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/teams/list`), toStateName: 'settings_teams_list', + featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT, }, { icon: 'mail-inbox-all', @@ -58,6 +68,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/inboxes/list`), toStateName: 'settings_inbox_list', + featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT, }, { icon: 'tag', @@ -65,6 +76,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/labels/list`), toStateName: 'labels_list', + featureFlag: FEATURE_FLAGS.LABELS, }, { icon: 'code', @@ -74,6 +86,7 @@ const settings = accountId => ({ `accounts/${accountId}/settings/custom-attributes/list` ), toStateName: 'attributes_list', + featureFlag: FEATURE_FLAGS.CUSTOM_ATTRIBUTES, }, { icon: 'automation', @@ -82,6 +95,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/automation/list`), toStateName: 'automation_list', + featureFlag: FEATURE_FLAGS.AUTOMATIONS, }, { icon: 'bot', @@ -90,7 +104,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/agent-bots`), toStateName: 'agent_bots', - featureFlagKey: 'agent_bots', + featureFlag: FEATURE_FLAGS.AGENT_BOTS, }, { icon: 'flash-settings', @@ -99,7 +113,7 @@ const settings = accountId => ({ toState: frontendURL(`accounts/${accountId}/settings/macros`), toStateName: 'macros_wrapper', beta: true, - featureFlagKey: 'macros', + featureFlag: FEATURE_FLAGS.MACROS, }, { icon: 'chat-multiple', @@ -109,6 +123,7 @@ const settings = accountId => ({ `accounts/${accountId}/settings/canned-response/list` ), toStateName: 'canned_list', + featureFlag: FEATURE_FLAGS.CANNED_RESPONSES, }, { icon: 'flash-on', @@ -116,6 +131,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/integrations`), toStateName: 'settings_integrations', + featureFlag: FEATURE_FLAGS.INTEGRATIONS, }, { icon: 'star-emphasis', @@ -123,6 +139,7 @@ const settings = accountId => ({ hasSubMenu: false, toState: frontendURL(`accounts/${accountId}/settings/applications`), toStateName: 'settings_applications', + featureFlag: FEATURE_FLAGS.INTEGRATIONS, }, { icon: 'credit-card-person', @@ -132,13 +149,6 @@ const settings = accountId => ({ toStateName: 'billing_settings_index', showOnlyOnCloud: true, }, - { - icon: 'settings', - label: 'ACCOUNT_SETTINGS', - hasSubMenu: false, - toState: frontendURL(`accounts/${accountId}/settings/general`), - toStateName: 'general_settings_index', - }, ], }); diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue index e68fcc3a4..b8aa21b30 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue @@ -20,6 +20,8 @@ import { frontendURL } from '../../../helper/URLHelper'; import SecondaryNavItem from './SecondaryNavItem.vue'; import AccountContext from './AccountContext.vue'; +import { mapGetters } from 'vuex'; +import { FEATURE_FLAGS } from '../../../featureFlags'; export default { components: { @@ -61,6 +63,10 @@ export default { }, }, computed: { + ...mapGetters({ + accountId: 'getCurrentAccountId', + isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', + }), hasSecondaryMenu() { return this.menuConfig.menuItems && this.menuConfig.menuItems.length; }, @@ -89,7 +95,7 @@ export default { icon: 'folder', label: 'INBOXES', hasSubMenu: true, - newLink: true, + newLink: this.showNewLink(FEATURE_FLAGS.INBOX_MANAGEMENT), newLinkTag: 'NEW_INBOX', key: 'inbox', toState: frontendURL(`accounts/${this.accountId}/settings/inboxes/new`), @@ -117,7 +123,7 @@ export default { icon: 'number-symbol', label: 'LABELS', hasSubMenu: true, - newLink: true, + newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT), newLinkTag: 'NEW_LABEL', key: 'label', toState: frontendURL(`accounts/${this.accountId}/settings/labels`), @@ -141,7 +147,7 @@ export default { label: 'TAGGED_WITH', hasSubMenu: true, key: 'label', - newLink: true, + newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT), newLinkTag: 'NEW_LABEL', toState: frontendURL(`accounts/${this.accountId}/settings/labels`), toStateName: 'labels_list', @@ -163,7 +169,7 @@ export default { icon: 'people-team', label: 'TEAMS', hasSubMenu: true, - newLink: true, + newLink: this.showNewLink(FEATURE_FLAGS.TEAM_MANAGEMENT), newLinkTag: 'NEW_TEAM', key: 'team', toState: frontendURL(`accounts/${this.accountId}/settings/teams/new`), @@ -238,6 +244,9 @@ export default { toggleAccountModal() { this.$emit('toggle-accounts'); }, + showNewLink(featureFlag) { + return this.isFeatureEnabledonAccount(this.accountId, featureFlag); + }, }, }; diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue index cd155bce8..8661a488f 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/SecondaryNavItem.vue @@ -123,12 +123,12 @@ export default { return !!this.menuItem.children; }, isMenuItemVisible() { - if (!this.menuItem.featureFlagKey) { + if (!this.menuItem.featureFlag) { return true; } return this.isFeatureEnabledonAccount( this.accountId, - this.menuItem.featureFlagKey + this.menuItem.featureFlag ); }, isInboxConversation() { @@ -217,7 +217,7 @@ export default { } }, showItem(item) { - return this.isAdmin && item.newLink !== undefined; + return this.isAdmin && !!item.newLink; }, onClickOpen() { this.$emit('open'); diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue index 9ace1ceb2..d26264cc2 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue @@ -110,13 +110,15 @@ import { hasPressedAltAndAKey } from 'shared/helpers/KeyboardHelpers'; import eventListenerMixins from 'shared/mixins/eventListenerMixins'; import uiSettingsMixin from 'dashboard/mixins/uiSettings'; import inboxMixin from 'shared/mixins/inboxMixin'; - +import { FEATURE_FLAGS } from 'dashboard/featureFlags'; import { ALLOWED_FILE_TYPES, ALLOWED_FILE_TYPES_FOR_TWILIO_WHATSAPP, } from 'shared/constants/messages'; import { REPLY_EDITOR_MODES } from './constants'; +import { mapGetters } from 'vuex'; + export default { name: 'ReplyBottomPanel', components: { FileUpload }, @@ -200,6 +202,10 @@ export default { }, }, computed: { + ...mapGetters({ + accountId: 'getCurrentAccountId', + isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', + }), isNote() { return this.mode === REPLY_EDITOR_MODES.NOTE; }, @@ -217,7 +223,12 @@ export default { return this.showFileUpload || this.isNote; }, showAudioRecorderButton() { - return this.showAudioRecorder; + return ( + this.isFeatureEnabledonAccount( + this.accountId, + FEATURE_FLAGS.VOICE_RECORDER + ) && this.showAudioRecorder + ); }, showAudioPlayStopButton() { return this.showAudioRecorder && this.isRecordingAudio; diff --git a/app/javascript/dashboard/featureFlags.js b/app/javascript/dashboard/featureFlags.js new file mode 100644 index 000000000..c6bc736cf --- /dev/null +++ b/app/javascript/dashboard/featureFlags.js @@ -0,0 +1,13 @@ +export const FEATURE_FLAGS = { + AGENT_BOTS: 'agent_bots', + AGENT_MANAGEMENT: 'agent_management', + AUTOMATIONS: 'automations', + CANNED_RESPONSES: 'canned_responses', + CUSTOM_ATTRIBUTES: 'custom_attributes', + INBOX_MANAGEMENT: 'inbox_management', + INTEGRATIONS: 'integrations', + LABELS: 'labels', + MACROS: 'macros', + TEAM_MANAGEMENT: 'team_management', + VOICE_RECORDER: 'voice_recorder', +}; diff --git a/app/javascript/dashboard/routes/dashboard/commands/goToCommandHotKeys.js b/app/javascript/dashboard/routes/dashboard/commands/goToCommandHotKeys.js index 9a5b09f2e..b1d17dcbb 100644 --- a/app/javascript/dashboard/routes/dashboard/commands/goToCommandHotKeys.js +++ b/app/javascript/dashboard/routes/dashboard/commands/goToCommandHotKeys.js @@ -16,6 +16,8 @@ import { ICON_CONVERSATION_REPORTS, } from './CommandBarIcons'; import { frontendURL } from '../../../helper/URLHelper'; +import { mapGetters } from 'vuex'; +import { FEATURE_FLAGS } from '../../../featureFlags'; const GO_TO_COMMANDS = [ { @@ -86,6 +88,7 @@ const GO_TO_COMMANDS = [ id: 'open_agent_settings', section: 'COMMAND_BAR.SECTIONS.SETTINGS', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_AGENTS', + featureFlag: FEATURE_FLAGS.AGENT_MANAGEMENT, icon: ICON_AGENT_REPORTS, path: accountId => `accounts/${accountId}/settings/agents/list`, role: ['administrator'], @@ -93,6 +96,7 @@ const GO_TO_COMMANDS = [ { id: 'open_team_settings', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_TEAMS', + featureFlag: FEATURE_FLAGS.TEAM_MANAGEMENT, section: 'COMMAND_BAR.SECTIONS.SETTINGS', icon: ICON_TEAM_REPORTS, path: accountId => `accounts/${accountId}/settings/teams/list`, @@ -101,6 +105,7 @@ const GO_TO_COMMANDS = [ { id: 'open_inbox_settings', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_INBOXES', + featureFlag: FEATURE_FLAGS.INBOX_MANAGEMENT, section: 'COMMAND_BAR.SECTIONS.SETTINGS', icon: ICON_INBOXES, path: accountId => `accounts/${accountId}/settings/inboxes/list`, @@ -109,6 +114,7 @@ const GO_TO_COMMANDS = [ { id: 'open_label_settings', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_LABELS', + featureFlag: FEATURE_FLAGS.LABELS, section: 'COMMAND_BAR.SECTIONS.SETTINGS', icon: ICON_LABELS, path: accountId => `accounts/${accountId}/settings/labels/list`, @@ -117,6 +123,7 @@ const GO_TO_COMMANDS = [ { id: 'open_canned_response_settings', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_CANNED_RESPONSES', + featureFlag: FEATURE_FLAGS.CANNED_RESPONSES, section: 'COMMAND_BAR.SECTIONS.SETTINGS', icon: ICON_CANNED_RESPONSE, path: accountId => `accounts/${accountId}/settings/canned-response/list`, @@ -125,6 +132,7 @@ const GO_TO_COMMANDS = [ { id: 'open_applications_settings', title: 'COMMAND_BAR.COMMANDS.GO_TO_SETTINGS_APPLICATIONS', + featureFlag: FEATURE_FLAGS.INTEGRATIONS, section: 'COMMAND_BAR.SECTIONS.SETTINGS', icon: ICON_APPS, path: accountId => `accounts/${accountId}/settings/applications`, @@ -158,8 +166,20 @@ const GO_TO_COMMANDS = [ export default { computed: { + ...mapGetters({ + accountId: 'getCurrentAccountId', + isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', + }), goToCommandHotKeys() { - let commands = GO_TO_COMMANDS; + let commands = GO_TO_COMMANDS.filter(cmd => { + if (cmd.featureFlag) { + return this.isFeatureEnabledonAccount( + this.accountId, + cmd.featureFlag + ); + } + return true; + }); if (!this.isAdmin) { commands = commands.filter(command => command.role.includes('agent')); diff --git a/app/javascript/dashboard/routes/dashboard/settings/account/account.routes.js b/app/javascript/dashboard/routes/dashboard/settings/account/account.routes.js index c2ef17129..5e3df43b4 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/account/account.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/account/account.routes.js @@ -10,7 +10,7 @@ export default { component: SettingsContent, props: { headerTitle: 'GENERAL_SETTINGS.TITLE', - icon: 'settings', + icon: 'briefcase', showNewButton: false, }, children: [ diff --git a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js index 7c8cc11fa..794451e79 100644 --- a/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js +++ b/app/javascript/dashboard/routes/dashboard/settings/settings.routes.js @@ -25,7 +25,7 @@ export default { roles: ['administrator', 'agent'], redirect: () => { if (store.getters.getCurrentRole === 'administrator') { - return frontendURL('accounts/:accountId/settings/agents'); + return frontendURL('accounts/:accountId/settings/general'); } return frontendURL('accounts/:accountId/settings/canned-response'); }, diff --git a/app/javascript/shared/components/FluentIcon/dashboard-icons.json b/app/javascript/shared/components/FluentIcon/dashboard-icons.json index 9a5eaa893..bf6f4127d 100644 --- a/app/javascript/shared/components/FluentIcon/dashboard-icons.json +++ b/app/javascript/shared/components/FluentIcon/dashboard-icons.json @@ -31,6 +31,7 @@ "book-open-globe-outline": "M3.5 5.75a.25.25 0 0 1 .25-.25H10c.69 0 1.25.56 1.25 1.25v8.959a6.49 6.49 0 0 1 1.5-2.646V6.75c0-.69.56-1.25 1.25-1.25h6.25a.25.25 0 0 1 .25.25v5.982A6.518 6.518 0 0 1 22 12.81V5.75A1.75 1.75 0 0 0 20.25 4H14c-.788 0-1.499.331-2 .863A2.742 2.742 0 0 0 10 4H3.75A1.75 1.75 0 0 0 2 5.75v12.5c0 .966.784 1.75 1.75 1.75H10c.495 0 .96-.13 1.36-.36a6.473 6.473 0 0 1-.343-1.663A1.248 1.248 0 0 1 10 18.5H3.75a.25.25 0 0 1-.25-.25V5.75ZM16.007 17c.04-1.415.248-2.669.553-3.585.171-.513.364-.893.554-1.134.195-.247.329-.281.386-.281.057 0 .192.034.386.281.19.241.383.62.554 1.134.305.916.513 2.17.553 3.585h-2.986Zm-.396-3.9c.108-.323.23-.622.368-.887A5.504 5.504 0 0 0 12.023 17h2.984c.04-1.5.26-2.866.604-3.9Zm3.778 0a6.133 6.133 0 0 0-.368-.887A5.504 5.504 0 0 1 22.978 17h-2.985c-.04-1.5-.26-2.866-.604-3.9Zm.604 4.9h2.985a5.504 5.504 0 0 1-3.957 4.787c.138-.265.26-.564.368-.886.345-1.035.564-2.4.604-3.901Zm-2.107 4.719c-.194.247-.329.281-.386.281-.057 0-.191-.034-.386-.281-.19-.241-.383-.62-.554-1.135-.305-.915-.513-2.17-.553-3.584h2.986c-.04 1.415-.248 2.669-.553 3.584-.171.514-.364.894-.554 1.135ZM12.023 18a5.504 5.504 0 0 0 3.956 4.787 6.133 6.133 0 0 1-.367-.886c-.346-1.035-.565-2.4-.605-3.901h-2.984Z", "bot-outline": "M17.753 14a2.25 2.25 0 0 1 2.25 2.25v.905a3.75 3.75 0 0 1-1.307 2.846C17.13 21.345 14.89 22 12 22c-2.89 0-5.128-.656-6.691-2a3.75 3.75 0 0 1-1.306-2.843v-.908A2.25 2.25 0 0 1 6.253 14h11.5Zm0 1.5h-11.5a.75.75 0 0 0-.75.75v.908c0 .655.286 1.278.784 1.706C7.545 19.945 9.44 20.502 12 20.502c2.56 0 4.458-.557 5.719-1.64a2.25 2.25 0 0 0 .784-1.706v-.906a.75.75 0 0 0-.75-.75ZM11.898 2.008 12 2a.75.75 0 0 1 .743.648l.007.102V3.5h3.5a2.25 2.25 0 0 1 2.25 2.25v4.505a2.25 2.25 0 0 1-2.25 2.25h-8.5a2.25 2.25 0 0 1-2.25-2.25V5.75A2.25 2.25 0 0 1 7.75 3.5h3.5v-.749a.75.75 0 0 1 .648-.743L12 2l-.102.007ZM16.25 5h-8.5a.75.75 0 0 0-.75.75v4.505c0 .414.336.75.75.75h8.5a.75.75 0 0 0 .75-.75V5.75a.75.75 0 0 0-.75-.75Zm-6.5 1.5a1.25 1.25 0 1 1 0 2.5 1.25 1.25 0 0 1 0-2.5Zm4.492 0a1.25 1.25 0 1 1 0 2.499 1.25 1.25 0 0 1 0-2.499Z", "building-bank-outline": "M13.032 2.325a1.75 1.75 0 0 0-2.064 0L3.547 7.74c-.978.713-.473 2.26.736 2.26H4.5v5.8A2.75 2.75 0 0 0 3 18.25v1.5c0 .413.336.75.75.75h16.5a.75.75 0 0 0 .75-.75v-1.5a2.75 2.75 0 0 0-1.5-2.45V10h.217c1.21 0 1.713-1.547.736-2.26l-7.421-5.416Zm-1.18 1.211a.25.25 0 0 1 .295 0L18.95 8.5H5.05l6.803-4.964ZM18 10v5.5h-2V10h2Zm-3.5 0v5.5h-1.75V10h1.75Zm-3.25 0v5.5H9.5V10h1.75Zm-5.5 7h12.5c.69 0 1.25.56 1.25 1.25V19h-15v-.75c0-.69.56-1.25 1.25-1.25ZM6 15.5V10h2v5.5H6Z", + "briefcase-outline": "M8.75 3h6.5a.75.75 0 0 1 .743.648L16 3.75V7h1.75A3.25 3.25 0 0 1 21 10.25v6.5A3.25 3.25 0 0 1 17.75 20H6.25A3.25 3.25 0 0 1 3 16.75v-6.5A3.25 3.25 0 0 1 6.25 7H8V3.75a.75.75 0 0 1 .648-.743L8.75 3h6.5-6.5Zm9 5.5H6.25a1.75 1.75 0 0 0-1.75 1.75v6.5c0 .966.784 1.75 1.75 1.75h11.5a1.75 1.75 0 0 0 1.75-1.75v-6.5a1.75 1.75 0 0 0-1.75-1.75Zm-3.25-4h-5V7h5V4.5Z", "calendar-clock-outline": [ "M21 6.25A3.25 3.25 0 0 0 17.75 3H6.25A3.25 3.25 0 0 0 3 6.25v11.5A3.25 3.25 0 0 0 6.25 21h5.772a6.471 6.471 0 0 1-.709-1.5H6.25a1.75 1.75 0 0 1-1.75-1.75V8.5h15v2.813a6.471 6.471 0 0 1 1.5.709V6.25ZM6.25 4.5h11.5c.966 0 1.75.784 1.75 1.75V7h-15v-.75c0-.966.784-1.75 1.75-1.75Z", "M23 17.5a5.5 5.5 0 1 0-11 0 5.5 5.5 0 0 0 11 0Zm-5.5 0h2a.5.5 0 0 1 0 1H17a.5.5 0 0 1-.5-.491v-3.01a.5.5 0 0 1 1 0V17.5Z" diff --git a/app/views/fields/account_features_field/_form.html.erb b/app/views/fields/account_features_field/_form.html.erb index 823a043a6..c067e81c1 100644 --- a/app/views/fields/account_features_field/_form.html.erb +++ b/app/views/fields/account_features_field/_form.html.erb @@ -4,5 +4,6 @@
<% field.data.each do |key,val| %> <%= key %>: <%= check_box "enabled_features", "feature_#{key}", { checked: val }, true, false %> +
<% end %>
diff --git a/config/features.yml b/config/features.yml index ec779cd08..77d594fcf 100644 --- a/config/features.yml +++ b/config/features.yml @@ -19,3 +19,21 @@ enabled: false - name: macros enabled: false +- name: agent_management + enabled: true +- name: team_management + enabled: true +- name: inbox_management + enabled: true +- name: labels + enabled: true +- name: custom_attributes + enabled: true +- name: automations + enabled: true +- name: canned_responses + enabled: true +- name: integrations + enabled: true +- name: voice_recorder + enabled: true diff --git a/db/migrate/20221017201914_add_features_to_accounts.rb b/db/migrate/20221017201914_add_features_to_accounts.rb new file mode 100644 index 000000000..60f47f7d3 --- /dev/null +++ b/db/migrate/20221017201914_add_features_to_accounts.rb @@ -0,0 +1,20 @@ +class AddFeaturesToAccounts < ActiveRecord::Migration[6.1] + def change + Account.find_in_batches do |account_batch| + account_batch.each do |account| + account.enable_features( + 'agent_management', + 'automations', + 'canned_responses', + 'custom_attributes', + 'inbox_management', + 'integrations', + 'labels', + 'team_management', + 'voice_recorder' + ) + account.save! + end + end + end +end diff --git a/db/schema.rb b/db/schema.rb index d719bc9f7..d989b754b 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -10,7 +10,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 2022_10_10_212946) do +ActiveRecord::Schema.define(version: 2022_10_17_201914) do # These are extensions that must be enabled in order to support this database enable_extension "pg_stat_statements" From 444809cc683b4b107569d5194440cc59c38b17a8 Mon Sep 17 00:00:00 2001 From: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Date: Tue, 18 Oct 2022 03:30:02 +0530 Subject: [PATCH 57/62] fix: Added validation for check box in the pre-chat form (#5648) --- app/javascript/widget/components/PreChat/Form.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/app/javascript/widget/components/PreChat/Form.vue b/app/javascript/widget/components/PreChat/Form.vue index 1649068c6..3da347966 100644 --- a/app/javascript/widget/components/PreChat/Form.vue +++ b/app/javascript/widget/components/PreChat/Form.vue @@ -245,6 +245,7 @@ export default { text: null, select: null, number: null, + checkbox: false, }; const validationKeys = Object.keys(validations); const validation = 'bail|required'; From 1c44e43c437ebc6dba1dab92a710c08ccf2594bd Mon Sep 17 00:00:00 2001 From: Nithin David Thomas <1277421+nithindavid@users.noreply.github.com> Date: Tue, 18 Oct 2022 04:29:18 +0530 Subject: [PATCH 58/62] fix: Fix overflow issue for category name in article list (#5658) Co-authored-by: Pranav Raj S --- .../helpcenter/components/ArticleItem.vue | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue index b602baaa8..254302074 100644 --- a/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue +++ b/app/javascript/dashboard/routes/dashboard/helpcenter/components/ArticleItem.vue @@ -4,7 +4,7 @@
-
+
{{ title }}
@@ -20,7 +20,12 @@ class="fs-small button clear link secondary" :to="getCategoryRoute(category.slug)" > - {{ category.name }} + + {{ category.name }} + @@ -155,4 +160,9 @@ td { } } } + +.category-link-content { + max-width: 16rem; + line-height: 1.5; +} From 2423def8e8c62e885d72da9eb9812e8cdc624d64 Mon Sep 17 00:00:00 2001 From: Sojan Jose Date: Mon, 17 Oct 2022 17:36:56 -0700 Subject: [PATCH 59/62] chore: Add attachments key to `message_created` webhook payload (#5659) - Add attachments key to `message_created` webhook payload --- app/listeners/webhook_listener.rb | 2 +- app/models/message.rb | 4 +++- app/models/webhook.rb | 4 ++-- spec/models/message_spec.rb | 15 +++++++++++++++ 4 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/listeners/webhook_listener.rb b/app/listeners/webhook_listener.rb index 11a86e639..81d2c6b0a 100644 --- a/app/listeners/webhook_listener.rb +++ b/app/listeners/webhook_listener.rb @@ -54,7 +54,7 @@ class WebhookListener < BaseListener private def deliver_account_webhooks(payload, inbox) - inbox.account.webhooks.account.each do |webhook| + inbox.account.webhooks.account_type.each do |webhook| next unless webhook.subscriptions.include?(payload[:event]) WebhookJob.perform_later(webhook.url, payload) diff --git a/app/models/message.rb b/app/models/message.rb index 2930786f9..a3f63dbe9 100644 --- a/app/models/message.rb +++ b/app/models/message.rb @@ -116,7 +116,7 @@ class Message < ApplicationRecord end def webhook_data - { + data = { account: account.webhook_data, additional_attributes: additional_attributes, content_attributes: content_attributes, @@ -131,6 +131,8 @@ class Message < ApplicationRecord sender: sender.try(:webhook_data), source_id: source_id } + data.merge!(attachments: attachments.map(&:push_event_data)) if attachments.present? + data end def content diff --git a/app/models/webhook.rb b/app/models/webhook.rb index fe97fe583..5b0095093 100644 --- a/app/models/webhook.rb +++ b/app/models/webhook.rb @@ -5,7 +5,7 @@ # id :bigint not null, primary key # subscriptions :jsonb # url :string -# webhook_type :integer default("account") +# webhook_type :integer default("account_type") # created_at :datetime not null # updated_at :datetime not null # account_id :integer @@ -23,7 +23,7 @@ class Webhook < ApplicationRecord validates :account_id, presence: true validates :url, uniqueness: { scope: [:account_id] }, format: URI::DEFAULT_PARSER.make_regexp(%w[http https]) validate :validate_webhook_subscriptions - enum webhook_type: { account: 0, inbox: 1 } + enum webhook_type: { account_type: 0, inbox_type: 1 } ALLOWED_WEBHOOK_EVENTS = %w[conversation_status_changed conversation_updated conversation_created message_created message_updated webwidget_triggered].freeze diff --git a/spec/models/message_spec.rb b/spec/models/message_spec.rb index 4940d704a..aeff941da 100644 --- a/spec/models/message_spec.rb +++ b/spec/models/message_spec.rb @@ -33,6 +33,21 @@ RSpec.describe Message, type: :model do end end + context 'with webhook_data' do + it 'contains the message attachment when attachment is present' do + message = create(:message) + attachment = message.attachments.new(account_id: message.account_id, file_type: :image) + attachment.file.attach(io: File.open(Rails.root.join('spec/assets/avatar.png')), filename: 'avatar.png', content_type: 'image/png') + attachment.save! + expect(message.webhook_data.key?(:attachments)).to be true + end + + it 'does not contain the message attachment when attachment is not present' do + message = create(:message) + expect(message.webhook_data.key?(:attachments)).to be false + end + end + context 'when message is created' do let(:message) { build(:message, account: create(:account)) } From e19c6d567137a9620801233854d2ade13c2d4017 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Mon, 17 Oct 2022 18:52:51 -0700 Subject: [PATCH 60/62] chore: Add editor toggle for API inbox (#5660) --- .../layout/sidebarComponents/Secondary.vue | 1 - .../widgets/WootWriter/ReplyBottomPanel.vue | 13 +++++++++++-- .../widgets/conversation/ReplyBox.vue | 17 +++++++++++++++-- .../dashboard/store/modules/inboxes.js | 4 ++-- 4 files changed, 28 insertions(+), 7 deletions(-) diff --git a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue index b8aa21b30..1d8ced445 100644 --- a/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue +++ b/app/javascript/dashboard/components/layout/sidebarComponents/Secondary.vue @@ -64,7 +64,6 @@ export default { }, computed: { ...mapGetters({ - accountId: 'getCurrentAccountId', isFeatureEnabledonAccount: 'accounts/isFeatureEnabledonAccount', }), hasSecondaryMenu() { diff --git a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue index d26264cc2..a8c26201e 100644 --- a/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue +++ b/app/javascript/dashboard/components/widgets/WootWriter/ReplyBottomPanel.vue @@ -11,7 +11,6 @@ size="small" @click="toggleEmojiPicker" /> - + { return !template.components.some( i => i.format === 'IMAGE' || i.format === 'VIDEO' From 71ca530292738e460563f57dc18bb550a6e60768 Mon Sep 17 00:00:00 2001 From: Pranav Raj S Date: Mon, 17 Oct 2022 18:59:22 -0700 Subject: [PATCH 61/62] fix: Fix typo in help center (#5661) --- app/javascript/dashboard/i18n/locale/en/helpCenter.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/javascript/dashboard/i18n/locale/en/helpCenter.json b/app/javascript/dashboard/i18n/locale/en/helpCenter.json index 84ba9b8c9..1f22ba5bd 100644 --- a/app/javascript/dashboard/i18n/locale/en/helpCenter.json +++ b/app/javascript/dashboard/i18n/locale/en/helpCenter.json @@ -307,7 +307,7 @@ "PUBLISH_ARTICLE": { "API": { "ERROR": "Error while publishing article", - "SUCCESS": "Article publishied successfully" + "SUCCESS": "Article published successfully" } }, "ARCHIVE_ARTICLE": { From 2f7a16ae16848449f30cbd9ecb2ff85d7c822371 Mon Sep 17 00:00:00 2001 From: Sojan Date: Mon, 17 Oct 2022 19:31:53 -0700 Subject: [PATCH 62/62] Bump version to 2.10.0 --- config/app.yml | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/config/app.yml b/config/app.yml index d5b65c1fc..518c981ac 100644 --- a/config/app.yml +++ b/config/app.yml @@ -1,5 +1,5 @@ shared: &shared - version: '2.9.1' + version: '2.10.0' development: <<: *shared diff --git a/package.json b/package.json index a62526801..d3476875b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@chatwoot/chatwoot", - "version": "2.9.1", + "version": "2.10.0", "license": "MIT", "scripts": { "eslint": "eslint app/**/*.{js,vue}",